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", "", "", "" );
// 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 ||
field == &loadAndShowSoil || field == &useShaders || field == &showHud || field == &m_appendClassNameToUiText ||
field == &m_appendFieldKeywordToToolTipText || field == &m_showTestToolbar ||
field == &m_includeFractureDebugInfoFile || field == &showLasCurveWithoutTvdWarning ||
field == &holoLensDisableCertificateVerification || field == &m_showProjectChangedDialog ||
field == &m_searchPlotTemplateFoldersRecursively || field == &showLegendBackground )
field == &loadAndShowSoil || field == &useShaders || field == &showHud ||
field == &m_appendClassNameToUiText || field == &m_appendFieldKeywordToToolTipText ||
field == &m_showTestToolbar || field == &m_includeFractureDebugInfoFile ||
field == &showLasCurveWithoutTvdWarning || field == &holoLensDisableCertificateVerification ||
field == &m_showProjectChangedDialog || field == &m_searchPlotTemplateFoldersRecursively ||
field == &showLegendBackground || field == &m_showSummaryTimeAsLongString )
{
caf::PdmUiCheckBoxEditorAttribute* myAttr = dynamic_cast<caf::PdmUiCheckBoxEditorAttribute*>( attribute );
if ( myAttr )
@ -447,6 +457,7 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
uiOrdering.add( &defaultSummaryHistoryCurveStyle );
uiOrdering.add( &m_dateFormat );
uiOrdering.add( &m_timeFormat );
uiOrdering.add( &m_showSummaryTimeAsLongString );
caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Plot Templates" );
group->add( &m_plotTemplateFolders );
@ -762,6 +773,14 @@ void RiaPreferences::setDefaultPlotTemplatePath( const QString& templatePath )
m_defaultPlotTemplate = templatePath;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaPreferences::showSummaryTimeAsLongString() const
{
return m_showSummaryTimeAsLongString;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

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

View File

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

View File

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

View File

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

View File

@ -132,7 +132,7 @@ void prepareCaseCurvesForExport( DateTimePeriod period,
void appendToExportDataForCase( QString& out,
const std::vector<time_t>& timeSteps,
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 );
//--------------------------------------------------------------------------------------------------
@ -306,7 +306,7 @@ QWidget* RimSummaryPlot::viewWidget()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod ) const
QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod, bool showTimeAsLongString ) const
{
QString out;
RiaTimeHistoryCurveResampler resampler;
@ -325,7 +325,7 @@ QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod
populateTimeHistoryCurvesData( m_gridTimeHistoryCurves.childObjects(), &timeHistoryCurvesData );
// Export observed data
appendToExportData( out, {summaryCurvesObsData} );
appendToExportData( out, {summaryCurvesObsData}, showTimeAsLongString );
std::vector<CurvesData> exportData( 2 );
@ -339,7 +339,7 @@ QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod
prepareCaseCurvesForExport( resamplingPeriod, ResampleAlgorithm::PERIOD_END, timeHistoryCurvesData, &exportData[1] );
// Export resampled summary and time history data
appendToExportData( out, exportData );
appendToExportData( out, exportData, showTimeAsLongString );
}
// Pasted observed data
@ -347,7 +347,7 @@ QString RimSummaryPlot::asciiDataForPlotExport( DateTimePeriod resamplingPeriod
CurvesData asciiCurvesData;
populateAsciiDataCurvesData( m_asciiDataCurves.childObjects(), &asciiCurvesData );
appendToExportData( out, {asciiCurvesData} );
appendToExportData( out, {asciiCurvesData}, showTimeAsLongString );
}
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 );
@ -2320,8 +2320,63 @@ void appendToExportData( QString& out, const std::vector<CurvesData>& curvesData
for ( auto timeStep : allTimeSteps )
{
QString tt = QDateTime::fromTime_t( timeStep ).toUTC().toString( "yyyy-MM-dd hh:mm:ss " );
out += QDateTime::fromTime_t( timeStep ).toUTC().toString( "yyyy-MM-dd hh:mm:ss " );
QDateTime timseStepUtc = QDateTime::fromTime_t( timeStep ).toUTC();
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
{

View File

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