mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4216 Support saving curve appearance
This commit is contained in:
@@ -97,17 +97,20 @@ RimGridCrossPlotCurveSet::RimGridCrossPlotCurveSet()
|
|||||||
m_xAxisProperty.uiCapability()->setUiHidden(true);
|
m_xAxisProperty.uiCapability()->setUiHidden(true);
|
||||||
m_xAxisProperty.uiCapability()->setUiTreeChildrenHidden(true);
|
m_xAxisProperty.uiCapability()->setUiTreeChildrenHidden(true);
|
||||||
m_xAxisProperty->setLabelsOnTop(true);
|
m_xAxisProperty->setLabelsOnTop(true);
|
||||||
|
m_xAxisProperty->setTernaryEnabled(false);
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_yAxisProperty, "YAxisProperty", "Y-Axis Property", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_yAxisProperty, "YAxisProperty", "Y-Axis Property", "", "", "");
|
||||||
m_yAxisProperty = new RimEclipseResultDefinition;
|
m_yAxisProperty = new RimEclipseResultDefinition;
|
||||||
m_yAxisProperty.uiCapability()->setUiHidden(true);
|
m_yAxisProperty.uiCapability()->setUiHidden(true);
|
||||||
m_yAxisProperty.uiCapability()->setUiTreeChildrenHidden(true);
|
m_yAxisProperty.uiCapability()->setUiTreeChildrenHidden(true);
|
||||||
m_yAxisProperty->setLabelsOnTop(true);
|
m_yAxisProperty->setLabelsOnTop(true);
|
||||||
|
m_yAxisProperty->setTernaryEnabled(false);
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_groupingProperty, "GroupingProperty", "Data Grouping Property", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_groupingProperty, "GroupingProperty", "Data Grouping Property", "", "", "");
|
||||||
m_groupingProperty = new RimEclipseCellColors;
|
m_groupingProperty = new RimEclipseCellColors;
|
||||||
m_groupingProperty.uiCapability()->setUiHidden(true);
|
m_groupingProperty.uiCapability()->setUiHidden(true);
|
||||||
m_groupingProperty->legendConfig()->setMappingMode(RimRegularLegendConfig::CATEGORY_INTEGER);
|
m_groupingProperty->legendConfig()->setMappingMode(RimRegularLegendConfig::CATEGORY_INTEGER);
|
||||||
|
m_groupingProperty->setTernaryEnabled(false);
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_nameConfig, "NameConfig", "Name", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_nameConfig, "NameConfig", "Name", "", "", "");
|
||||||
m_nameConfig = new RimGridCrossPlotCurveSetNameConfig(this);
|
m_nameConfig = new RimGridCrossPlotCurveSetNameConfig(this);
|
||||||
@@ -402,9 +405,6 @@ void RimGridCrossPlotCurveSet::onLoadDataAndUpdate(bool updateParentPlot)
|
|||||||
{
|
{
|
||||||
updateDataSetName();
|
updateDataSetName();
|
||||||
|
|
||||||
detachAllCurves();
|
|
||||||
m_crossPlotCurves.deleteAllChildObjects();
|
|
||||||
|
|
||||||
if (m_case() == nullptr)
|
if (m_case() == nullptr)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -439,7 +439,22 @@ void RimGridCrossPlotCurveSet::onLoadDataAndUpdate(bool updateParentPlot)
|
|||||||
{
|
{
|
||||||
filterInvalidCurveValues(&result);
|
filterInvalidCurveValues(&result);
|
||||||
}
|
}
|
||||||
createCurves(result);
|
|
||||||
|
assignCurveDataGroups(result);
|
||||||
|
|
||||||
|
if (m_crossPlotCurves.size() != m_groupedResults.size())
|
||||||
|
{
|
||||||
|
destroyCurves();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_crossPlotCurves.empty())
|
||||||
|
{
|
||||||
|
createCurves(result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fillCurveDataInExistingCurves(result);
|
||||||
|
}
|
||||||
|
|
||||||
if (updateParentPlot)
|
if (updateParentPlot)
|
||||||
{
|
{
|
||||||
@@ -450,28 +465,11 @@ void RimGridCrossPlotCurveSet::onLoadDataAndUpdate(bool updateParentPlot)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimGridCrossPlotCurveSet::createCurves(const RigEclipseCrossPlotResult& result)
|
void RimGridCrossPlotCurveSet::assignCurveDataGroups(const RigEclipseCrossPlotResult& result)
|
||||||
{
|
{
|
||||||
m_groupedResults.clear();
|
m_groupedResults.clear();
|
||||||
if (!groupingEnabled())
|
if (!groupingEnabled())
|
||||||
{
|
{
|
||||||
RimGridCrossPlotCurve* curve = new RimGridCrossPlotCurve();
|
|
||||||
if (m_useCustomColor)
|
|
||||||
{
|
|
||||||
curve->setColor(m_customColor());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const caf::ColorTable& colors = RiaColorTables::contrastCategoryPaletteColors();
|
|
||||||
int colorIndex = indexInPlot();
|
|
||||||
curve->setColor(colors.cycledColor3f(colorIndex));
|
|
||||||
}
|
|
||||||
curve->setSymbolEdgeColor(curve->color());
|
|
||||||
curve->setGroupingInformation(indexInPlot(), 0);
|
|
||||||
curve->setSamples(result.xValues, result.yValues);
|
|
||||||
curve->setCurveAutoAppearance();
|
|
||||||
curve->updateUiIconFromPlotSymbol();
|
|
||||||
m_crossPlotCurves.push_back(curve);
|
|
||||||
m_groupedResults[0] = result;
|
m_groupedResults[0] = result;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -509,6 +507,42 @@ void RimGridCrossPlotCurveSet::createCurves(const RigEclipseCrossPlotResult& res
|
|||||||
if (!result.groupValuesDiscrete.empty())
|
if (!result.groupValuesDiscrete.empty())
|
||||||
m_groupedResults[categoryNum].groupValuesDiscrete.push_back(result.groupValuesDiscrete[i]);
|
m_groupedResults[categoryNum].groupValuesDiscrete.push_back(result.groupValuesDiscrete[i]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimGridCrossPlotCurveSet::createCurves(const RigEclipseCrossPlotResult& result)
|
||||||
|
{
|
||||||
|
if (!groupingEnabled())
|
||||||
|
{
|
||||||
|
RimGridCrossPlotCurve* curve = new RimGridCrossPlotCurve();
|
||||||
|
if (m_useCustomColor)
|
||||||
|
{
|
||||||
|
curve->setColor(m_customColor());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const caf::ColorTable& colors = RiaColorTables::contrastCategoryPaletteColors();
|
||||||
|
int colorIndex = indexInPlot();
|
||||||
|
curve->setColor(colors.cycledColor3f(colorIndex));
|
||||||
|
}
|
||||||
|
curve->setSymbolEdgeColor(curve->color());
|
||||||
|
curve->setGroupingInformation(indexInPlot(), 0);
|
||||||
|
curve->setSamples(result.xValues, result.yValues);
|
||||||
|
curve->setCurveAutoAppearance();
|
||||||
|
curve->updateUiIconFromPlotSymbol();
|
||||||
|
m_crossPlotCurves.push_back(curve);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::vector<double> tickValues;
|
||||||
|
|
||||||
|
if (!groupingByCategoryResult())
|
||||||
|
{
|
||||||
|
legendConfig()->scalarMapper()->majorTickValues(&tickValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto it = m_groupedResults.rbegin(); it != m_groupedResults.rend(); ++it)
|
for (auto it = m_groupedResults.rbegin(); it != m_groupedResults.rend(); ++it)
|
||||||
@@ -534,6 +568,42 @@ void RimGridCrossPlotCurveSet::createCurves(const RigEclipseCrossPlotResult& res
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimGridCrossPlotCurveSet::fillCurveDataInExistingCurves(const RigEclipseCrossPlotResult& result)
|
||||||
|
{
|
||||||
|
if (!groupingEnabled())
|
||||||
|
{
|
||||||
|
CVF_ASSERT(m_crossPlotCurves.size() == 1u);
|
||||||
|
RimGridCrossPlotCurve* curve = m_crossPlotCurves[0];
|
||||||
|
curve->setSamples(result.xValues, result.yValues);
|
||||||
|
curve->updateCurveAppearance();
|
||||||
|
curve->updateUiIconFromPlotSymbol();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto curveIt = m_crossPlotCurves.begin();
|
||||||
|
auto groupIt = m_groupedResults.begin();
|
||||||
|
for (; curveIt != m_crossPlotCurves.end() && groupIt != m_groupedResults.end(); ++curveIt, ++groupIt)
|
||||||
|
{
|
||||||
|
RimGridCrossPlotCurve* curve = *curveIt;
|
||||||
|
curve->setSamples(groupIt->second.xValues, groupIt->second.yValues);
|
||||||
|
curve->updateCurveAppearance();
|
||||||
|
curve->updateUiIconFromPlotSymbol();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimGridCrossPlotCurveSet::destroyCurves()
|
||||||
|
{
|
||||||
|
detachAllCurves();
|
||||||
|
m_crossPlotCurves.deleteAllChildObjects();
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -680,6 +750,7 @@ void RimGridCrossPlotCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* chang
|
|||||||
m_yAxisProperty->updateConnectedEditors();
|
m_yAxisProperty->updateConnectedEditors();
|
||||||
m_groupingProperty->updateConnectedEditors();
|
m_groupingProperty->updateConnectedEditors();
|
||||||
|
|
||||||
|
destroyCurves();
|
||||||
loadDataAndUpdate(true);
|
loadDataAndUpdate(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -690,6 +761,7 @@ void RimGridCrossPlotCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* chang
|
|||||||
m_grouping = NO_GROUPING;
|
m_grouping = NO_GROUPING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
destroyCurves();
|
||||||
loadDataAndUpdate(true);
|
loadDataAndUpdate(true);
|
||||||
}
|
}
|
||||||
else if (changedField == &m_grouping)
|
else if (changedField == &m_grouping)
|
||||||
@@ -710,11 +782,13 @@ void RimGridCrossPlotCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* chang
|
|||||||
legendConfig()->setMappingMode(RimRegularLegendConfig::LINEAR_DISCRETE);
|
legendConfig()->setMappingMode(RimRegularLegendConfig::LINEAR_DISCRETE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
destroyCurves();
|
||||||
loadDataAndUpdate(true);
|
loadDataAndUpdate(true);
|
||||||
}
|
}
|
||||||
else if (changedField == &m_cellFilterView)
|
else if (changedField == &m_cellFilterView)
|
||||||
{
|
{
|
||||||
m_groupingProperty->setReservoirView(dynamic_cast<RimEclipseView*>(m_cellFilterView()));
|
m_groupingProperty->setReservoirView(dynamic_cast<RimEclipseView*>(m_cellFilterView()));
|
||||||
|
|
||||||
loadDataAndUpdate(true);
|
loadDataAndUpdate(true);
|
||||||
}
|
}
|
||||||
else if (changedField == &m_isChecked)
|
else if (changedField == &m_isChecked)
|
||||||
|
|||||||
@@ -129,12 +129,15 @@ public:
|
|||||||
void configureForPressureSaturationCurves(RimEclipseResultCase* eclipseResultCase, const QString& dynamicResultName);
|
void configureForPressureSaturationCurves(RimEclipseResultCase* eclipseResultCase, const QString& dynamicResultName);
|
||||||
void addCellFilter(RimPlotCellFilter* cellFilter);
|
void addCellFilter(RimPlotCellFilter* cellFilter);
|
||||||
void setCustomColor(const cvf::Color3f color);
|
void setCustomColor(const cvf::Color3f color);
|
||||||
|
void destroyCurves();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initAfterRead() override;
|
void initAfterRead() override;
|
||||||
void onLoadDataAndUpdate(bool updateParentPlot);
|
void onLoadDataAndUpdate(bool updateParentPlot);
|
||||||
|
|
||||||
|
void assignCurveDataGroups(const RigEclipseCrossPlotResult& result);
|
||||||
void createCurves(const RigEclipseCrossPlotResult& result);
|
void createCurves(const RigEclipseCrossPlotResult& result);
|
||||||
|
void fillCurveDataInExistingCurves(const RigEclipseCrossPlotResult& result);
|
||||||
QString createGroupName(size_t curveIndex) const;
|
QString createGroupName(size_t curveIndex) const;
|
||||||
|
|
||||||
std::map<int, cvf::UByteArray> calculateCellVisibility(RimEclipseCase* eclipseCase) const;
|
std::map<int, cvf::UByteArray> calculateCellVisibility(RimEclipseCase* eclipseCase) const;
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ RimEclipseContourMapView::RimEclipseContourMapView()
|
|||||||
m_contourMapProjectionPartMgr = new RivContourMapProjectionPartMgr(contourMapProjection(), this);
|
m_contourMapProjectionPartMgr = new RivContourMapProjectionPartMgr(contourMapProjection(), this);
|
||||||
|
|
||||||
((RiuViewerToViewInterface*)this)->setCameraPosition(sm_defaultViewMatrix);
|
((RiuViewerToViewInterface*)this)->setCameraPosition(sm_defaultViewMatrix);
|
||||||
|
|
||||||
|
cellResult()->setTernaryEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition");
|
|||||||
RimEclipseResultDefinition::RimEclipseResultDefinition()
|
RimEclipseResultDefinition::RimEclipseResultDefinition()
|
||||||
: m_diffResultOptionsEnabled(false)
|
: m_diffResultOptionsEnabled(false)
|
||||||
, m_labelsOnTop(false)
|
, m_labelsOnTop(false)
|
||||||
|
, m_ternaryEnabled(true)
|
||||||
{
|
{
|
||||||
CAF_PDM_InitObject("Result Definition", "", "", "");
|
CAF_PDM_InitObject("Result Definition", "", "", "");
|
||||||
|
|
||||||
@@ -491,11 +492,12 @@ void RimEclipseResultDefinition::loadDataAndUpdate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RimGridCrossPlot* crossPlot = nullptr;
|
RimGridCrossPlotCurveSet* crossPlotCurveSet = nullptr;
|
||||||
this->firstAncestorOrThisOfType(crossPlot);
|
this->firstAncestorOrThisOfType(crossPlotCurveSet);
|
||||||
if (crossPlot)
|
if (crossPlotCurveSet)
|
||||||
{
|
{
|
||||||
crossPlot->loadDataAndUpdate();
|
crossPlotCurveSet->destroyCurves();
|
||||||
|
crossPlotCurveSet->loadDataAndUpdate(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
RimPlotCurve* curve = nullptr;
|
RimPlotCurve* curve = nullptr;
|
||||||
@@ -646,7 +648,8 @@ QList<caf::PdmOptionItemInfo> RimEclipseResultDefinition::calculateValueOptions(
|
|||||||
options = calcOptionsForVariableUiFieldStandard(m_resultTypeUiField(),
|
options = calcOptionsForVariableUiFieldStandard(m_resultTypeUiField(),
|
||||||
this->currentGridCellResults(),
|
this->currentGridCellResults(),
|
||||||
showDerivedResultsFirstInVariableUiField(),
|
showDerivedResultsFirstInVariableUiField(),
|
||||||
addPerCellFaceOptionsForVariableUiField());
|
addPerCellFaceOptionsForVariableUiField(),
|
||||||
|
m_ternaryEnabled);
|
||||||
}
|
}
|
||||||
else if (fieldNeedingOptions == &m_differenceCase)
|
else if (fieldNeedingOptions == &m_differenceCase)
|
||||||
{
|
{
|
||||||
@@ -1460,7 +1463,8 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
RimEclipseResultDefinition::calcOptionsForVariableUiFieldStandard(RiaDefines::ResultCatType resultCatType,
|
RimEclipseResultDefinition::calcOptionsForVariableUiFieldStandard(RiaDefines::ResultCatType resultCatType,
|
||||||
const RigCaseCellResultsData* results,
|
const RigCaseCellResultsData* results,
|
||||||
bool showDerivedResultsFirst,
|
bool showDerivedResultsFirst,
|
||||||
bool addPerCellFaceOptionItems)
|
bool addPerCellFaceOptionItems,
|
||||||
|
bool ternaryEnabled)
|
||||||
{
|
{
|
||||||
CVF_ASSERT(resultCatType != RiaDefines::FLOW_DIAGNOSTICS && resultCatType != RiaDefines::INJECTION_FLOODING);
|
CVF_ASSERT(resultCatType != RiaDefines::FLOW_DIAGNOSTICS && resultCatType != RiaDefines::INJECTION_FLOODING);
|
||||||
|
|
||||||
@@ -1498,20 +1502,23 @@ RimEclipseResultDefinition::calcOptionsForVariableUiFieldStandard(RiaDefines::Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ternary Result
|
// Ternary Result
|
||||||
bool hasAtLeastOneTernaryComponent = false;
|
if (ternaryEnabled)
|
||||||
if (cellCenterResultNames.contains("SOIL"))
|
|
||||||
hasAtLeastOneTernaryComponent = true;
|
|
||||||
else if (cellCenterResultNames.contains("SGAS"))
|
|
||||||
hasAtLeastOneTernaryComponent = true;
|
|
||||||
else if (cellCenterResultNames.contains("SWAT"))
|
|
||||||
hasAtLeastOneTernaryComponent = true;
|
|
||||||
|
|
||||||
if (resultCatType == RiaDefines::DYNAMIC_NATIVE && hasAtLeastOneTernaryComponent)
|
|
||||||
{
|
{
|
||||||
optionList.push_front(
|
bool hasAtLeastOneTernaryComponent = false;
|
||||||
caf::PdmOptionItemInfo(RiaDefines::ternarySaturationResultName(), RiaDefines::ternarySaturationResultName()));
|
if (cellCenterResultNames.contains("SOIL"))
|
||||||
}
|
hasAtLeastOneTernaryComponent = true;
|
||||||
|
else if (cellCenterResultNames.contains("SGAS"))
|
||||||
|
hasAtLeastOneTernaryComponent = true;
|
||||||
|
else if (cellCenterResultNames.contains("SWAT"))
|
||||||
|
hasAtLeastOneTernaryComponent = true;
|
||||||
|
|
||||||
|
if (resultCatType == RiaDefines::DYNAMIC_NATIVE && hasAtLeastOneTernaryComponent)
|
||||||
|
{
|
||||||
|
optionList.push_front(
|
||||||
|
caf::PdmOptionItemInfo(RiaDefines::ternarySaturationResultName(),
|
||||||
|
RiaDefines::ternarySaturationResultName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (addPerCellFaceOptionItems)
|
if (addPerCellFaceOptionItems)
|
||||||
{
|
{
|
||||||
for (QString s : cellFaceResultNames)
|
for (QString s : cellFaceResultNames)
|
||||||
@@ -1535,6 +1542,14 @@ RimEclipseResultDefinition::calcOptionsForVariableUiFieldStandard(RiaDefines::Re
|
|||||||
return QList<caf::PdmOptionItemInfo>();
|
return QList<caf::PdmOptionItemInfo>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimEclipseResultDefinition::setTernaryEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
m_ternaryEnabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -129,8 +129,10 @@ public:
|
|||||||
static QList<caf::PdmOptionItemInfo> calcOptionsForVariableUiFieldStandard(RiaDefines::ResultCatType resultCatType,
|
static QList<caf::PdmOptionItemInfo> calcOptionsForVariableUiFieldStandard(RiaDefines::ResultCatType resultCatType,
|
||||||
const RigCaseCellResultsData* results,
|
const RigCaseCellResultsData* results,
|
||||||
bool showDerivedResultsFirst = false,
|
bool showDerivedResultsFirst = false,
|
||||||
bool addPerCellFaceOptionItems = false);
|
bool addPerCellFaceOptionItems = false,
|
||||||
|
bool enableTernary = false);
|
||||||
|
|
||||||
|
void setTernaryEnabled(bool enabled);
|
||||||
protected:
|
protected:
|
||||||
virtual void updateLegendCategorySettings() {};
|
virtual void updateLegendCategorySettings() {};
|
||||||
|
|
||||||
@@ -220,9 +222,10 @@ private:
|
|||||||
bool addPerCellFaceOptionsForVariableUiField() const;
|
bool addPerCellFaceOptionsForVariableUiField() const;
|
||||||
|
|
||||||
void ensureProcessingOfObsoleteFields();
|
void ensureProcessingOfObsoleteFields();
|
||||||
|
bool isTernaryEnabled() const;
|
||||||
private:
|
private:
|
||||||
bool m_diffResultOptionsEnabled;
|
bool m_diffResultOptionsEnabled;
|
||||||
bool m_labelsOnTop;
|
bool m_labelsOnTop;
|
||||||
|
bool m_ternaryEnabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user