mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
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:
commit
f114a37b3c
@ -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;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -44,5 +44,6 @@ protected:
|
||||
private:
|
||||
static bool exportAsciiForSummaryPlot( const QString& fileName,
|
||||
const RimSummaryPlot* selectedSummaryPlots,
|
||||
DateTimePeriod resamplingPeriod );
|
||||
DateTimePeriod resamplingPeriod,
|
||||
bool showTimeAsLongString );
|
||||
};
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user