Skip to content

Commit 01ee943

Browse files
author
Magne Sjaastad
committed
Improved integer slider editor
Use sliders for cell range filter
1 parent 03fc06e commit 01ee943

File tree

4 files changed

+125
-29
lines changed

4 files changed

+125
-29
lines changed

ApplicationCode/ProjectDataModel/RimCellRangeFilter.cpp

+65-12
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
#include "RimReservoirView.h"
2424
#include "RigReservoir.h"
2525

26+
#include "cafPdmUiSliderEditor.h"
27+
2628

2729
CAF_PDM_SOURCE_INIT(RimCellRangeFilter, "CellRangeFilter");
2830

@@ -35,13 +37,24 @@ RimCellRangeFilter::RimCellRangeFilter()
3537
CAF_PDM_InitObject("Cell Range Filter", ":/CellFilter_Range.png", "", "");
3638

3739
CAF_PDM_InitField(&startIndexI, "StartIndexI", 1, "Start index I", "", "","");
40+
startIndexI.setUiEditorTypeName(caf::PdmUiSliderEditor::uiEditorTypeName());
41+
3842
CAF_PDM_InitField(&cellCountI, "CellCountI", 1, "Cell Count I", "", "","");
43+
cellCountI.setUiEditorTypeName(caf::PdmUiSliderEditor::uiEditorTypeName());
44+
3945
CAF_PDM_InitField(&startIndexJ, "StartIndexJ", 1, "Start index J", "", "","");
46+
startIndexJ.setUiEditorTypeName(caf::PdmUiSliderEditor::uiEditorTypeName());
47+
4048
CAF_PDM_InitField(&cellCountJ, "CellCountJ", 1, "Cell Count J", "", "","");
49+
cellCountJ.setUiEditorTypeName(caf::PdmUiSliderEditor::uiEditorTypeName());
50+
4151
CAF_PDM_InitField(&startIndexK, "StartIndexK", 1, "Start index K", "", "","");
52+
startIndexK.setUiEditorTypeName(caf::PdmUiSliderEditor::uiEditorTypeName());
53+
4254
CAF_PDM_InitField(&cellCountK, "CellCountK", 1, "Cell Count K", "", "","");
55+
cellCountK.setUiEditorTypeName(caf::PdmUiSliderEditor::uiEditorTypeName());
56+
4357
updateIconState();
44-
4558
}
4659

4760
//--------------------------------------------------------------------------------------------------
@@ -118,22 +131,11 @@ void RimCellRangeFilter::setDefaultValues()
118131
max.z() = max.z() + 1;
119132

120133
startIndexI = min.x();
121-
startIndexI.setUiName(QString("I Start (%1)").arg(min.x()));
122-
123134
startIndexJ = min.y();
124-
startIndexJ.setUiName(QString("J Start (%1)").arg(min.y()));
125-
126135
startIndexK = min.z();
127-
startIndexK.setUiName(QString("K Start (%1)").arg(min.z()));
128-
129136
cellCountI = max.x() - min.x() + 1;
130-
cellCountI.setUiName(QString(" Width (%1)").arg(max.x() - min.x() + 1));
131-
132137
cellCountJ = max.y() - min.y() + 1;
133-
cellCountJ.setUiName(QString(" Width (%1)").arg(max.y() - min.y() + 1));
134-
135138
cellCountK = max.z() - min.z() + 1;
136-
cellCountK.setUiName(QString(" Width (%1)").arg(max.z() - min.z() + 1));
137139
}
138140
}
139141

@@ -145,3 +147,54 @@ RimCellRangeFilterCollection* RimCellRangeFilter::parentContainer()
145147
return m_parentContainer;
146148
}
147149

150+
//--------------------------------------------------------------------------------------------------
151+
///
152+
//--------------------------------------------------------------------------------------------------
153+
void RimCellRangeFilter::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute)
154+
{
155+
caf::PdmUiSliderEditorAttribute* myAttr = static_cast<caf::PdmUiSliderEditorAttribute*>(attribute);
156+
if (!myAttr || !m_parentContainer)
157+
{
158+
return;
159+
}
160+
161+
RigMainGrid* mainGrid = m_parentContainer->mainGrid();
162+
if (mainGrid)
163+
{
164+
cvf::Vec3st min, max;
165+
mainGrid->activeCellsBoundingBox(min, max);
166+
167+
// Adjust to Eclipse indexing
168+
min.x() = min.x() + 1;
169+
min.y() = min.y() + 1;
170+
min.z() = min.z() + 1;
171+
172+
max.x() = max.x() + 1;
173+
max.y() = max.y() + 1;
174+
max.z() = max.z() + 1;
175+
176+
startIndexI.setUiName(QString("I Start (%1)").arg(min.x()));
177+
startIndexJ.setUiName(QString("J Start (%1)").arg(min.y()));
178+
startIndexK.setUiName(QString("K Start (%1)").arg(min.z()));
179+
cellCountI.setUiName(QString(" Width (%1)").arg(max.x() - min.x() + 1));
180+
cellCountJ.setUiName(QString(" Width (%1)").arg(max.y() - min.y() + 1));
181+
cellCountK.setUiName(QString(" Width (%1)").arg(max.z() - min.z() + 1));
182+
183+
if (field == &startIndexI || field == &cellCountI)
184+
{
185+
myAttr->m_minimum = 1;
186+
myAttr->m_maximum = mainGrid->cellCountI();
187+
}
188+
else if (field == &startIndexJ || field == &cellCountJ)
189+
{
190+
myAttr->m_minimum = 1;
191+
myAttr->m_maximum = mainGrid->cellCountJ();
192+
}
193+
else if (field == &startIndexK || field == &cellCountK)
194+
{
195+
myAttr->m_minimum = 1;
196+
myAttr->m_maximum = mainGrid->cellCountK();
197+
}
198+
}
199+
}
200+

ApplicationCode/ProjectDataModel/RimCellRangeFilter.h

+3
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ class RimCellRangeFilter : public RimCellFilter
5959

6060
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
6161

62+
protected:
63+
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
64+
6265
private:
6366
RimCellRangeFilterCollection* m_parentContainer;
6467
};

cafUserInterface/cafPdmUiSliderEditor.cpp

+52-16
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,33 @@ void PdmUiSliderEditor::configureAndUpdateUi(const QString& uiConfigName)
4646
{
4747
assert(!m_lineEdit.isNull());
4848

49-
m_groupBox->setTitle(field()->uiName(uiConfigName));
49+
QIcon ic = field()->uiIcon(uiConfigName);
50+
if (!ic.isNull())
51+
{
52+
m_label->setPixmap(ic.pixmap(ic.actualSize(QSize(64, 64))));
53+
}
54+
else
55+
{
56+
m_label->setText(field()->uiName(uiConfigName));
57+
}
58+
59+
m_label->setVisible(!field()->isUiHidden(uiConfigName));
60+
m_label->setEnabled(!field()->isUiReadOnly(uiConfigName));
5061

5162
m_lineEdit->setEnabled(!field()->isUiReadOnly(uiConfigName));
5263
m_slider->setEnabled(!field()->isUiReadOnly(uiConfigName));
5364

5465
field()->ownerObject()->editorAttribute(field(), uiConfigName, &m_attributes);
66+
m_lineEdit->setValidator(new QIntValidator(m_attributes.m_minimum, m_attributes.m_maximum, this));
67+
68+
{
69+
m_slider->blockSignals(true);
70+
m_slider->setRange(m_attributes.m_minimum, m_attributes.m_maximum);
71+
m_slider->blockSignals(false);
72+
}
5573

56-
m_lineEdit->setText(field()->uiValue().toString());
74+
QString textValue = field()->uiValue().toString();
75+
m_lineEdit->setText(textValue);
5776
updateSliderPosition();
5877
}
5978

@@ -62,25 +81,32 @@ void PdmUiSliderEditor::configureAndUpdateUi(const QString& uiConfigName)
6281
//--------------------------------------------------------------------------------------------------
6382
QWidget* PdmUiSliderEditor::createEditorWidget(QWidget * parent)
6483
{
65-
m_groupBox = new QGroupBox(parent);
84+
QWidget* containerWidget = new QWidget(parent);
6685

67-
QVBoxLayout* layout = new QVBoxLayout(parent);
68-
m_groupBox->setLayout(layout);
86+
QHBoxLayout* layout = new QHBoxLayout();
87+
layout->setMargin(0);
88+
containerWidget->setLayout(layout);
6989

70-
m_lineEdit = new QLineEdit(m_groupBox);
71-
m_lineEdit->setValidator(new QIntValidator(m_attributes.m_minimum, m_attributes.m_maximum, m_groupBox));
90+
m_lineEdit = new QLineEdit(containerWidget);
91+
m_lineEdit->setMaximumWidth(30);
7292
connect(m_lineEdit, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished()));
7393

74-
m_slider = new QSlider(Qt::Horizontal, m_groupBox);
75-
m_slider->setRange(m_attributes.m_minimum, m_attributes.m_maximum);
76-
94+
m_slider = new QSlider(Qt::Horizontal, containerWidget);
7795
layout->addWidget(m_lineEdit);
7896
layout->addWidget(m_slider);
7997

80-
8198
connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(slotSliderValueChanged(int)));
8299

83-
return m_groupBox;
100+
return containerWidget;
101+
}
102+
103+
//--------------------------------------------------------------------------------------------------
104+
///
105+
//--------------------------------------------------------------------------------------------------
106+
QWidget* PdmUiSliderEditor::createLabelWidget(QWidget * parent)
107+
{
108+
m_label = new QLabel(parent);
109+
return m_label;
84110
}
85111

86112

@@ -91,10 +117,7 @@ void PdmUiSliderEditor::slotEditingFinished()
91117
{
92118
updateSliderPosition();
93119

94-
QString textValue = m_lineEdit->text();
95-
QVariant v;
96-
v = textValue;
97-
this->setValueToField(v);
120+
writeValueToField();
98121
}
99122

100123
//--------------------------------------------------------------------------------------------------
@@ -103,6 +126,8 @@ void PdmUiSliderEditor::slotEditingFinished()
103126
void PdmUiSliderEditor::slotSliderValueChanged(int position)
104127
{
105128
m_lineEdit->setText(QString::number(position));
129+
130+
writeValueToField();
106131
}
107132

108133
//--------------------------------------------------------------------------------------------------
@@ -121,5 +146,16 @@ void PdmUiSliderEditor::updateSliderPosition()
121146
}
122147
}
123148

149+
//--------------------------------------------------------------------------------------------------
150+
///
151+
//--------------------------------------------------------------------------------------------------
152+
void PdmUiSliderEditor::writeValueToField()
153+
{
154+
QString textValue = m_lineEdit->text();
155+
QVariant v;
156+
v = textValue;
157+
this->setValueToField(v);
158+
}
159+
124160

125161
} // end namespace caf

cafUserInterface/cafPdmUiSliderEditor.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919

2020
#pragma once
2121
#include "cafPdmUiFieldEditorHandle.h"
22+
2223
#include <QString>
24+
#include <QLabel>
2325
#include <QWidget>
2426
#include <QPointer>
2527
#include <QLineEdit>
@@ -60,18 +62,20 @@ class PdmUiSliderEditor : public PdmUiFieldEditorHandle
6062
protected:
6163
virtual void configureAndUpdateUi(const QString& uiConfigName);
6264
virtual QWidget* createEditorWidget(QWidget * parent);
65+
virtual QWidget* createLabelWidget(QWidget * parent);
6366

6467
protected slots:
6568
void slotEditingFinished();
6669
void slotSliderValueChanged(int position);
6770

6871
private:
6972
void updateSliderPosition();
73+
void writeValueToField();
7074

7175
private:
72-
QPointer<QGroupBox> m_groupBox;
7376
QPointer<QLineEdit> m_lineEdit;
7477
QPointer<QSlider> m_slider;
78+
QPointer<QLabel> m_label;
7579

7680
PdmUiSliderEditorAttribute m_attributes;
7781
};

0 commit comments

Comments
 (0)