Merge pull request #4897 from OPM/summary-data-show-short-text-labels

#4876 Resampeled Plot Data: Show time short text labels when possible
This commit is contained in:
Magne Sjaastad 2019-10-20 08:44:27 +02:00 committed by GitHub
commit f114a37b3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 111 additions and 21 deletions

View File

@ -315,6 +315,15 @@ RiaPreferences::RiaPreferences( void )
CAF_PDM_InitFieldNoDefault( &m_defaultPlotTemplate, "defaultPlotTemplate", "Default Plot Template", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_defaultPlotTemplate, "defaultPlotTemplate", "Default Plot Template", "", "", "" );
// m_plotTemplateFolders.uiCapability()->setUiEditorTypeName( caf::PdmUiFilePathEditor::uiEditorTypeName() ); // m_plotTemplateFolders.uiCapability()->setUiEditorTypeName( caf::PdmUiFilePathEditor::uiEditorTypeName() );
CAF_PDM_InitField( &m_showSummaryTimeAsLongString,
"showSummaryTimeAsLongString",
false,
"Show resample time text as long time text (2010-11-21 23:15:00)",
"",
"",
"" );
m_showSummaryTimeAsLongString.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -355,11 +364,12 @@ void RiaPreferences::defineEditorAttribute( const caf::PdmFieldHandle* field,
} }
if ( field == &octaveShowHeaderInfoWhenExecutingScripts || field == &autocomputeDepthRelatedProperties || if ( field == &octaveShowHeaderInfoWhenExecutingScripts || field == &autocomputeDepthRelatedProperties ||
field == &loadAndShowSoil || field == &useShaders || field == &showHud || field == &m_appendClassNameToUiText || field == &loadAndShowSoil || field == &useShaders || field == &showHud ||
field == &m_appendFieldKeywordToToolTipText || field == &m_showTestToolbar || field == &m_appendClassNameToUiText || field == &m_appendFieldKeywordToToolTipText ||
field == &m_includeFractureDebugInfoFile || field == &showLasCurveWithoutTvdWarning || field == &m_showTestToolbar || field == &m_includeFractureDebugInfoFile ||
field == &holoLensDisableCertificateVerification || field == &m_showProjectChangedDialog || field == &showLasCurveWithoutTvdWarning || field == &holoLensDisableCertificateVerification ||
field == &m_searchPlotTemplateFoldersRecursively || field == &showLegendBackground ) field == &m_showProjectChangedDialog || field == &m_searchPlotTemplateFoldersRecursively ||
field == &showLegendBackground || field == &m_showSummaryTimeAsLongString )
{ {
caf::PdmUiCheckBoxEditorAttribute* myAttr = dynamic_cast<caf::PdmUiCheckBoxEditorAttribute*>( attribute ); caf::PdmUiCheckBoxEditorAttribute* myAttr = dynamic_cast<caf::PdmUiCheckBoxEditorAttribute*>( attribute );
if ( myAttr ) if ( myAttr )
@ -447,6 +457,7 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
uiOrdering.add( &defaultSummaryHistoryCurveStyle ); uiOrdering.add( &defaultSummaryHistoryCurveStyle );
uiOrdering.add( &m_dateFormat ); uiOrdering.add( &m_dateFormat );
uiOrdering.add( &m_timeFormat ); uiOrdering.add( &m_timeFormat );
uiOrdering.add( &m_showSummaryTimeAsLongString );
caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Plot Templates" ); caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Plot Templates" );
group->add( &m_plotTemplateFolders ); group->add( &m_plotTemplateFolders );
@ -762,6 +773,14 @@ void RiaPreferences::setDefaultPlotTemplatePath( const QString& templatePath )
m_defaultPlotTemplate = templatePath; m_defaultPlotTemplate = templatePath;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaPreferences::showSummaryTimeAsLongString() const
{
return m_showSummaryTimeAsLongString;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -84,6 +84,7 @@ public:
void appendPlotTemplateFolders( const QString& folder ); void appendPlotTemplateFolders( const QString& folder );
QString defaultPlotTemplateAbsolutePath() const; QString defaultPlotTemplateAbsolutePath() const;
void setDefaultPlotTemplatePath( const QString& templatePath ); void setDefaultPlotTemplatePath( const QString& templatePath );
bool showSummaryTimeAsLongString() const;
std::map<RiaDefines::FontSettingType, RiaFontCache::FontSize> defaultFontSizes() const; std::map<RiaDefines::FontSettingType, RiaFontCache::FontSize> defaultFontSizes() const;
@ -168,6 +169,7 @@ private:
caf::PdmField<QString> m_holoLensExportFolder; caf::PdmField<QString> m_holoLensExportFolder;
caf::PdmField<QString> m_dateFormat; caf::PdmField<QString> m_dateFormat;
caf::PdmField<QString> m_timeFormat; caf::PdmField<QString> m_timeFormat;
caf::PdmField<bool> m_showSummaryTimeAsLongString;
caf::PdmField<QString> m_plotTemplateFolders; caf::PdmField<QString> m_plotTemplateFolders;
caf::PdmField<bool> m_searchPlotTemplateFoldersRecursively; caf::PdmField<bool> m_searchPlotTemplateFoldersRecursively;

View File

@ -20,6 +20,7 @@
#include "RiaFeatureCommandContext.h" #include "RiaFeatureCommandContext.h"
#include "RiaGuiApplication.h" #include "RiaGuiApplication.h"
#include "RiaPreferences.h"
#include "RimGridCrossPlot.h" #include "RimGridCrossPlot.h"
#include "RimGridCrossPlotCurve.h" #include "RimGridCrossPlotCurve.h"
@ -84,11 +85,13 @@ public:
if ( m_summaryPlot->containsResamplableCurves() ) if ( m_summaryPlot->containsResamplableCurves() )
{ {
return m_summaryPlot->asciiDataForPlotExport( timePeriod ); RiaPreferences* prefs = RiaApplication::instance()->preferences();
return m_summaryPlot->asciiDataForPlotExport( timePeriod, prefs->showSummaryTimeAsLongString() );
} }
else else
{ {
return m_summaryPlot->asciiDataForPlotExport(); return m_summaryPlot->asciiDataForPlotExport( DateTimePeriod::NONE, true );
} }
} }

View File

@ -20,6 +20,7 @@
#include "RiaApplication.h" #include "RiaApplication.h"
#include "RiaLogging.h" #include "RiaLogging.h"
#include "RiaPreferences.h"
#include "RicResampleDialog.h" #include "RicResampleDialog.h"
@ -60,6 +61,8 @@ void RicAsciiExportSummaryPlotFeature::onActionTriggered( bool isChecked )
caf::SelectionManager::instance()->objectsByType( &selectedSummaryPlots ); caf::SelectionManager::instance()->objectsByType( &selectedSummaryPlots );
QString defaultDir = defaultExportDir(); QString defaultDir = defaultExportDir();
RiaPreferences* prefs = RiaApplication::instance()->preferences();
// Ask user about resampling // Ask user about resampling
auto result = RicResampleDialog::openDialog(); auto result = RicResampleDialog::openDialog();
if ( !result.ok ) return; if ( !result.ok ) return;
@ -73,7 +76,10 @@ void RicAsciiExportSummaryPlotFeature::onActionTriggered( bool isChecked )
caf::ProgressInfo pi( selectedSummaryPlots.size(), QString( "Exporting plot data to ASCII" ) ); caf::ProgressInfo pi( selectedSummaryPlots.size(), QString( "Exporting plot data to ASCII" ) );
size_t progress = 0; size_t progress = 0;
RicAsciiExportSummaryPlotFeature::exportAsciiForSummaryPlot( fileName, summaryPlot, result.period ); RicAsciiExportSummaryPlotFeature::exportAsciiForSummaryPlot( fileName,
summaryPlot,
result.period,
prefs->showSummaryTimeAsLongString() );
progress++; progress++;
pi.setProgress( progress ); pi.setProgress( progress );
@ -98,7 +104,10 @@ void RicAsciiExportSummaryPlotFeature::onActionTriggered( bool isChecked )
for ( RimSummaryPlot* summaryPlot : selectedSummaryPlots ) for ( RimSummaryPlot* summaryPlot : selectedSummaryPlots )
{ {
QString fileName = saveDir + "/" + caf::Utils::makeValidFileBasename( summaryPlot->description() ) + ".ascii"; QString fileName = saveDir + "/" + caf::Utils::makeValidFileBasename( summaryPlot->description() ) + ".ascii";
RicAsciiExportSummaryPlotFeature::exportAsciiForSummaryPlot( fileName, summaryPlot, result.period ); RicAsciiExportSummaryPlotFeature::exportAsciiForSummaryPlot( fileName,
summaryPlot,
result.period,
prefs->showSummaryTimeAsLongString() );
progress++; progress++;
pi.setProgress( progress ); pi.setProgress( progress );
} }
@ -163,10 +172,11 @@ bool RicAsciiExportSummaryPlotFeature::exportTextToFile( const QString& fileName
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RicAsciiExportSummaryPlotFeature::exportAsciiForSummaryPlot( const QString& fileName, bool RicAsciiExportSummaryPlotFeature::exportAsciiForSummaryPlot( const QString& fileName,
const RimSummaryPlot* summaryPlot, const RimSummaryPlot* summaryPlot,
DateTimePeriod resamplingPeriod ) DateTimePeriod resamplingPeriod,
bool showTimeAsLongString )
{ {
QString text = summaryPlot->description(); QString text = summaryPlot->description();
text.append( summaryPlot->asciiDataForPlotExport( resamplingPeriod ) ); text.append( summaryPlot->asciiDataForPlotExport( resamplingPeriod, showTimeAsLongString ) );
text.append( "\n\n" ); text.append( "\n\n" );
return exportTextToFile( fileName, text ); return exportTextToFile( fileName, text );

View File

@ -44,5 +44,6 @@ protected:
private: private:
static bool exportAsciiForSummaryPlot( const QString& fileName, static bool exportAsciiForSummaryPlot( const QString& fileName,
const RimSummaryPlot* selectedSummaryPlots, const RimSummaryPlot* selectedSummaryPlots,
DateTimePeriod resamplingPeriod ); DateTimePeriod resamplingPeriod,
bool showTimeAsLongString );
}; };

View File

@ -132,7 +132,7 @@ void prepareCaseCurvesForExport( DateTimePeriod period,
void appendToExportDataForCase( QString& out, void appendToExportDataForCase( QString& out,
const std::vector<time_t>& timeSteps, const std::vector<time_t>& timeSteps,
const std::vector<CurveData>& curveData ); const std::vector<CurveData>& curveData );
void appendToExportData( QString& out, const std::vector<CurvesData>& curvesData ); void appendToExportData( QString& out, const std::vector<CurvesData>& curvesData, bool showTimeAsLongString );
CurvesData concatCurvesData( const std::vector<CurvesData>& curvesData ); CurvesData concatCurvesData( const std::vector<CurvesData>& curvesData );
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -306,7 +306,7 @@ QWidget* RimSummaryPlot::viewWidget()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod ) const QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod, bool showTimeAsLongString ) const
{ {
QString out; QString out;
RiaTimeHistoryCurveResampler resampler; RiaTimeHistoryCurveResampler resampler;
@ -325,7 +325,7 @@ QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod
populateTimeHistoryCurvesData( m_gridTimeHistoryCurves.childObjects(), &timeHistoryCurvesData ); populateTimeHistoryCurvesData( m_gridTimeHistoryCurves.childObjects(), &timeHistoryCurvesData );
// Export observed data // Export observed data
appendToExportData( out, {summaryCurvesObsData} ); appendToExportData( out, {summaryCurvesObsData}, showTimeAsLongString );
std::vector<CurvesData> exportData( 2 ); std::vector<CurvesData> exportData( 2 );
@ -339,7 +339,7 @@ QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod
prepareCaseCurvesForExport( resamplingPeriod, ResampleAlgorithm::PERIOD_END, timeHistoryCurvesData, &exportData[1] ); prepareCaseCurvesForExport( resamplingPeriod, ResampleAlgorithm::PERIOD_END, timeHistoryCurvesData, &exportData[1] );
// Export resampled summary and time history data // Export resampled summary and time history data
appendToExportData( out, exportData ); appendToExportData( out, exportData, showTimeAsLongString );
} }
// Pasted observed data // Pasted observed data
@ -347,7 +347,7 @@ QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod
CurvesData asciiCurvesData; CurvesData asciiCurvesData;
populateAsciiDataCurvesData( m_asciiDataCurves.childObjects(), &asciiCurvesData ); populateAsciiDataCurvesData( m_asciiDataCurves.childObjects(), &asciiCurvesData );
appendToExportData( out, {asciiCurvesData} ); appendToExportData( out, {asciiCurvesData}, showTimeAsLongString );
} }
return out; return out;
@ -2281,7 +2281,7 @@ void appendToExportDataForCase( QString& out, const std::vector<time_t>& timeSte
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void appendToExportData( QString& out, const std::vector<CurvesData>& curvesData ) void appendToExportData( QString& out, const std::vector<CurvesData>& curvesData, bool showTimeAsLongString )
{ {
CurvesData data = concatCurvesData( curvesData ); CurvesData data = concatCurvesData( curvesData );
@ -2320,8 +2320,63 @@ void appendToExportData( QString& out, const std::vector<CurvesData>& curvesData
for ( auto timeStep : allTimeSteps ) for ( auto timeStep : allTimeSteps )
{ {
QString tt = QDateTime::fromTime_t( timeStep ).toUTC().toString( "yyyy-MM-dd hh:mm:ss " ); QDateTime timseStepUtc = QDateTime::fromTime_t( timeStep ).toUTC();
out += QDateTime::fromTime_t( timeStep ).toUTC().toString( "yyyy-MM-dd hh:mm:ss " ); QString timeText;
if ( showTimeAsLongString )
{
timeText = timseStepUtc.toString( "yyyy-MM-dd hh:mm:ss " );
}
else
{
// Subtract one day to make sure the period is reported using the previous period as label
QDateTime oneDayEarlier = timseStepUtc.addDays( -1 );
QChar zeroChar( 48 );
switch ( data.resamplePeriod )
{
default:
// Fall through to NONE
case DateTimePeriod::NONE:
timeText = timseStepUtc.toString( "yyyy-MM-dd hh:mm:ss " );
break;
case DateTimePeriod::DAY:
timeText = oneDayEarlier.toString( "yyyy-MM-dd " );
break;
case DateTimePeriod::WEEK:
{
timeText = oneDayEarlier.toString( "yyyy" );
int weekNumber = oneDayEarlier.date().weekNumber();
timeText += QString( "-W%1" ).arg( weekNumber, 2, 10, zeroChar );
break;
}
case DateTimePeriod::MONTH:
timeText = oneDayEarlier.toString( "yyyy-MM" );
break;
case DateTimePeriod::QUARTER:
{
int quarterNumber = oneDayEarlier.date().month() / 3;
timeText = oneDayEarlier.toString( "yyyy" );
timeText += QString( "-Q%1" ).arg( quarterNumber );
break;
}
case DateTimePeriod::HALFYEAR:
{
int halfYearNumber = oneDayEarlier.date().month() / 6;
timeText = oneDayEarlier.toString( "yyyy" );
timeText += QString( "-H%1" ).arg( halfYearNumber );
break;
}
case DateTimePeriod::YEAR:
timeText = oneDayEarlier.toString( "yyyy" );
break;
case DateTimePeriod::DECADE:
timeText = oneDayEarlier.toString( "yyyy" );
break;
}
}
out += timeText;
for ( size_t i = 0; i < data.caseNames.size(); i++ ) // cases for ( size_t i = 0; i < data.caseNames.size(); i++ ) // cases
{ {

View File

@ -115,7 +115,7 @@ public:
QWidget* viewWidget() override; QWidget* viewWidget() override;
QString asciiDataForPlotExport( DateTimePeriod resamplingPeriod = DateTimePeriod::NONE ) const; QString asciiDataForPlotExport( DateTimePeriod resamplingPeriod, bool showTimeAsLongString ) const;
std::vector<RimSummaryCurve*> summaryAndEnsembleCurves() const; std::vector<RimSummaryCurve*> summaryAndEnsembleCurves() const;
std::set<RiaSummaryCurveDefinition> summaryAndEnsembleCurveDefinitions() const; std::set<RiaSummaryCurveDefinition> summaryAndEnsembleCurveDefinitions() const;