(#869) Datastructures for right y-axis

This commit is contained in:
Magne Sjaastad 2016-10-10 15:52:18 +02:00
parent 8ae75b5f27
commit 3f97640e7a
10 changed files with 211 additions and 19 deletions

View File

@ -10,6 +10,7 @@ ${CEE_CURRENT_LIST_DIR}RicNewSummaryPlotFeature.h
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFeature.h
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFilterFeature.h
${CEE_CURRENT_LIST_DIR}RicViewZoomAllFeature.h
${CEE_CURRENT_LIST_DIR}RicSummaryCurveSwitchAxisFeature.h
)
set (SOURCE_GROUP_SOURCE_FILES
@ -17,6 +18,7 @@ ${CEE_CURRENT_LIST_DIR}RicNewSummaryPlotFeature.cpp
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFeature.cpp
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFilterFeature.cpp
${CEE_CURRENT_LIST_DIR}RicViewZoomAllFeature.cpp
${CEE_CURRENT_LIST_DIR}RicSummaryCurveSwitchAxisFeature.cpp
)
list(APPEND CODE_HEADER_FILES

View File

@ -0,0 +1,108 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2016- Statoil 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 <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicSummaryCurveSwitchAxisFeature.h"
#include "RimSummaryCurve.h"
#include "RimSummaryCurveFilter.h"
#include "RimSummaryPlot.h"
#include "cafSelectionManager.h"
#include <QAction>
CAF_CMD_SOURCE_INIT(RicSummaryCurveSwitchAxisFeature, "RicSummaryCurveSwitchAxisFeature");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicSummaryCurveSwitchAxisFeature::isCommandEnabled()
{
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSummaryCurveSwitchAxisFeature::onActionTriggered(bool isChecked)
{
RimSummaryCurve* summaryCurve = RicSummaryCurveSwitchAxisFeature::selectedSummaryCurve();
RimSummaryCurveFilter* summaryCurveFilter = RicSummaryCurveSwitchAxisFeature::selectedSummaryCurveFilter();
if (summaryCurve)
{
RimDefines::PlotAxis plotAxis = summaryCurve->associatedPlotAxis();
if (plotAxis == RimDefines::PLOT_AXIS_LEFT)
{
summaryCurve->setPlotAxis(RimDefines::PLOT_AXIS_RIGHT);
}
else
{
summaryCurve->setPlotAxis(RimDefines::PLOT_AXIS_LEFT);
}
summaryCurve->updateQwtPlotAxis();
RimSummaryPlot* plot = nullptr;
summaryCurve->firstAncestorOrThisOfType(plot);
if (plot) plot->updateLeftAndRightYAxis();
}
else if (summaryCurveFilter)
{
RimDefines::PlotAxis plotAxis = summaryCurveFilter->associatedPlotAxis();
if (plotAxis == RimDefines::PLOT_AXIS_LEFT)
{
summaryCurveFilter->setPlotAxis(RimDefines::PLOT_AXIS_RIGHT);
}
else
{
summaryCurveFilter->setPlotAxis(RimDefines::PLOT_AXIS_LEFT);
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSummaryCurveSwitchAxisFeature::setupActionLook(QAction* actionToSetup)
{
actionToSetup->setText("Switch Plot Axis");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCurve* RicSummaryCurveSwitchAxisFeature::selectedSummaryCurve()
{
std::vector<RimSummaryCurve*> selection;
caf::SelectionManager::instance()->objectsByType(&selection);
return selection.size() > 0 ? selection[0] : nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCurveFilter* RicSummaryCurveSwitchAxisFeature::selectedSummaryCurveFilter()
{
std::vector<RimSummaryCurveFilter*> selection;
caf::SelectionManager::instance()->objectsByType(&selection);
return selection.size() > 0 ? selection[0] : nullptr;
}

View File

@ -0,0 +1,41 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2016- Statoil 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 <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "cafCmdFeature.h"
class RimSummaryCurve;
class RimSummaryCurveFilter;
//==================================================================================================
///
//==================================================================================================
class RicSummaryCurveSwitchAxisFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;
protected:
// Overrides
virtual bool isCommandEnabled() override;
virtual void onActionTriggered( bool isChecked ) override;
virtual void setupActionLook( QAction* actionToSetup ) override;
private:
static RimSummaryCurve* selectedSummaryCurve();
static RimSummaryCurveFilter* selectedSummaryCurveFilter();
};

View File

@ -280,6 +280,7 @@ QStringList RimContextCommandBuilder::commandsFromSelection()
{
commandIds << "RicNewSummaryCurveFilterFeature";
commandIds << "RicNewSummaryCurveFeature";
commandIds << "RicSummaryCurveSwitchAxisFeature";
commandIds << "Separator";
commandIds << "RicDeleteItemFeature";
}
@ -287,6 +288,7 @@ QStringList RimContextCommandBuilder::commandsFromSelection()
{
commandIds << "RicNewSummaryCurveFilterFeature";
commandIds << "RicNewSummaryCurveFeature";
commandIds << "RicSummaryCurveSwitchAxisFeature";
commandIds << "Separator";
commandIds << "RicDeleteItemFeature";
}

View File

@ -253,15 +253,7 @@ void RimSummaryCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedF
}
else if (changedField == &m_plotAxis)
{
for (RimSummaryCurve* curve : m_curves)
{
curve->setPlotAxis(m_plotAxis());
curve->updateQwtPlotAxis();
RimSummaryPlot* plot = nullptr;
firstAncestorOrThisOfType(plot);
plot->updateLeftAndRightYAxis();
}
updatePlotAxisForCurves();
}
}
@ -385,6 +377,22 @@ void RimSummaryCurveFilter::defineEditorAttribute(const caf::PdmFieldHandle* fie
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCurveFilter::updatePlotAxisForCurves()
{
for (RimSummaryCurve* curve : m_curves)
{
curve->setPlotAxis(m_plotAxis());
curve->updateQwtPlotAxis();
RimSummaryPlot* plot = nullptr;
firstAncestorOrThisOfType(plot);
plot->updateLeftAndRightYAxis();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -515,6 +523,25 @@ RimDefines::PlotAxis RimSummaryCurveFilter::associatedPlotAxis() const
return m_plotAxis();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCurveFilter::setPlotAxis(RimDefines::PlotAxis plotAxis)
{
m_plotAxis = plotAxis;
updateConnectedEditors();
for (RimSummaryCurve* curve : m_curves)
{
curve->setPlotAxis(m_plotAxis());
curve->updateQwtPlotAxis();
RimSummaryPlot* plot = nullptr;
firstAncestorOrThisOfType(plot);
plot->updateLeftAndRightYAxis();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -72,6 +72,7 @@ public:
void updateCaseNameHasChanged();
RimDefines::PlotAxis associatedPlotAxis() const;
void setPlotAxis(RimDefines::PlotAxis plotAxis);
private:
void syncCurvesFromUiSelection();
@ -90,7 +91,9 @@ private:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly);
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute) override;
void updatePlotAxisForCurves();
private:
QPointer<QwtPlot> m_parentQwtPlot;
// Fields
@ -117,6 +120,5 @@ private:
caf::PdmField< AppearanceTypeAppEnum > m_wellAppearanceType;
caf::PdmField< AppearanceTypeAppEnum > m_groupAppearanceType;
caf::PdmField< AppearanceTypeAppEnum > m_regionAppearanceType;
};

View File

@ -145,8 +145,10 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
{
m_qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new ScientificScaleDraw());
}
}
/*
{
if (m_axisProperties->isLogarithmicScaleEnabled)
{
@ -155,6 +157,8 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
{
m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLogScaleEngine);
}
m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 5);
}
else
{
@ -163,9 +167,15 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
{
m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLinearScaleEngine);
}
m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 3);
}
}
*/
m_qwtPlot->setAxisScale(m_axisProperties->axis(), m_axisProperties->visibleRangeMin, m_axisProperties->visibleRangeMax);
/*
{
if (m_axisProperties->isAutoScaleEnabled)
{
@ -181,6 +191,7 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
m_qwtPlot->setAxisScale(m_axisProperties->axis(), m_axisProperties->visibleRangeMin, m_axisProperties->visibleRangeMax);
}
}
*/
}
//--------------------------------------------------------------------------------------------------
@ -244,7 +255,7 @@ void RimSummaryCurvesCalculator::computeYRange(double* min, double* max) const
maxValue = RimDefines::maximumDefaultValuePlot();
}
if (m_axisProperties->isAutoScaleEnabled && m_axisProperties->isLogarithmicScaleEnabled)
if (m_axisProperties->isLogarithmicScaleEnabled)
{
// For logarithmic auto scaling, compute positive curve value closest to zero and use
// this value as the plot visible minimum

View File

@ -227,6 +227,10 @@ void RimSummaryPlot::setZoomWindow(const QRectF& zoomWindow)
window.push_back(zoomWindow.height());
m_visibleWindow = window;
m_leftYAxisProperties->visibleRangeMax = zoomWindow.bottom();
m_leftYAxisProperties->visibleRangeMin = zoomWindow.top();
m_leftYAxisProperties->updateConnectedEditors();
}
}

View File

@ -51,13 +51,13 @@ RimSummaryYAxisProperties::RimSummaryYAxisProperties()
CAF_PDM_InitFieldNoDefault(&customTitle, "CustomTitle", "Title", "", "", "");
CAF_PDM_InitField(&fontSize, "FontSize", 11, "Font Size", "", "", "");
CAF_PDM_InitField(&isAutoScaleEnabled, "AutoScale", true, "Auto Scale", "", "", "");
CAF_PDM_InitField(&visibleRangeMin, "VisibleRangeMin", RimDefines::minimumDefaultValuePlot(), "Min", "", "", "");
CAF_PDM_InitField(&visibleRangeMax, "VisibleRangeMax", RimDefines::maximumDefaultValuePlot(), "Max", "", "", "");
CAF_PDM_InitField(&visibleRangeMin, "VisibleRangeMin", RimDefines::minimumDefaultValuePlot(), "Min", "", "", "");
CAF_PDM_InitFieldNoDefault(&numberFormat, "NumberFormat", "Number Format", "", "", "");
CAF_PDM_InitField(&isLogarithmicScaleEnabled, "LogarithmicScale", false, "Logarithmic Scale", "", "", "");
isLogarithmicScaleEnabled.uiCapability()->setUiHidden(true);
updateOptionSensitivity();
}
@ -119,8 +119,7 @@ QwtPlot::Axis RimSummaryYAxisProperties::axis() const
//--------------------------------------------------------------------------------------------------
void RimSummaryYAxisProperties::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
if (changedField == &isAutoTitle ||
changedField == &isAutoScaleEnabled)
if (changedField == &isAutoTitle)
{
updateOptionSensitivity();
}
@ -136,9 +135,6 @@ void RimSummaryYAxisProperties::fieldChangedByUi(const caf::PdmFieldHandle* chan
void RimSummaryYAxisProperties::updateOptionSensitivity()
{
customTitle.uiCapability()->setUiReadOnly(isAutoTitle);
visibleRangeMin.uiCapability()->setUiReadOnly(isAutoScaleEnabled);
visibleRangeMax.uiCapability()->setUiReadOnly(isAutoScaleEnabled);
}
//--------------------------------------------------------------------------------------------------

View File

@ -54,7 +54,6 @@ public:
caf::PdmField<QString> customTitle;
caf::PdmField<int> fontSize;
caf::PdmField<bool> isAutoScaleEnabled;
caf::PdmField<double> visibleRangeMin;
caf::PdmField<double> visibleRangeMax;