///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2020- Equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include "RiaDefines.h" #include "RiaNumberFormat.h" #include "RigHistogramData.h" #include "RimPlotWindow.h" #include "RiuQtChartView.h" #include "cafAppEnum.h" #include "cafPdmField.h" #include "cafPdmFieldCvfColor.h" #include "cvfColor3.h" #include //================================================================================================== /// /// //================================================================================================== class RimStatisticsPlot : public RimPlotWindow { CAF_PDM_HEADER_INIT; public: enum class HistogramFrequencyType { ABSOLUTE_FREQUENCY, RELATIVE_FREQUENCY, RELATIVE_FREQUENCY_PERCENT }; enum class GraphType { BAR_GRAPH, LINE_GRAPH }; RimStatisticsPlot(); ~RimStatisticsPlot() override; QWidget* viewWidget() override; QWidget* createPlotWidget( QWidget* mainWindowParent = nullptr ); QString description() const override; void zoomAll() override; int axisTitleFontSize() const; int axisValueFontSize() const; protected: QImage snapshotWindowContent() override; QWidget* createViewWidget( QWidget* mainWindowParent ) override; void deleteViewWidget() override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void uiOrderingForHistogram( QString uiConfigName, caf::PdmUiOrdering& uiOrdering, bool showHistogramBins ); void uiOrderingForLegendsAndFonts( QString uiConfigName, caf::PdmUiOrdering& uiOrdering, bool showLegendPosition = false ); void onLoadDataAndUpdate() override; void updatePlots(); caf::PdmFieldHandle* userDescriptionField() override; virtual bool hasStatisticsData() const = 0; virtual RigHistogramData createStatisticsData() const = 0; virtual QString createAutoName() const = 0; virtual QString createXAxisTitle() const = 0; virtual QString createYAxisTitle() const; void performAutoNameUpdate(); private: void cleanupBeforeClose(); void onPlotAdditionOrRemoval(); void doRenderWindowContent( QPaintDevice* paintDevice ) override; void doUpdateLayout() override; protected: QPointer m_viewer; caf::PdmField m_plotWindowTitle; caf::PdmField m_numHistogramBins; caf::PdmField m_histogramBarColor; caf::PdmField m_histogramGapWidth; caf::PdmField> m_histogramFrequencyType; caf::PdmField m_precision; caf::PdmField> m_tickNumberFormat; caf::PdmField> m_graphType; caf::PdmField m_axisValueFontSize; caf::PdmField m_axisTitleFontSize; };