25 #define ROUND(x) (((x) > 0) ? int((x) + 0.5) : int((x)-0.5)) 26 #define ROUND_SHORT(x) (((x) > 0) ? short((x) + 0.5) : short((x)-0.5)) 28 class QmitkNumberPropertySlider::Impl
34 void adjustFactors(
short,
bool);
43 void PropertyChanged()
override;
44 void PropertyRemoved()
override;
60 std::unique_ptr<Editor> m_PropEditor;
62 short m_DecimalPlaces;
63 double m_FactorPropertyToSlider;
64 double m_FactorSliderToDisplay;
67 bool m_SelfChangeLock;
75 QmitkNumberPropertySlider::Impl::Editor::Editor(
mitk::IntProperty *property, Impl *impl)
96 if (property ==
nullptr)
98 d->m_PropEditor.reset();
99 this->setEnabled(
false);
103 d->m_PropEditor.reset(
new Impl::Editor(property, d.get()));
104 d->m_PropEditor->PropertyChanged();
105 this->setEnabled(
true);
111 if (property ==
nullptr)
113 d->m_PropEditor.reset();
114 this->setEnabled(
false);
118 d->m_PropEditor.reset(
new Impl::Editor(property, d.get()));
119 d->m_PropEditor->PropertyChanged();
120 this->setEnabled(
true);
126 if (property ==
nullptr)
128 d->m_PropEditor.reset();
129 this->setEnabled(
false);
133 d->m_PropEditor.reset(
new Impl::Editor(property, d.get()));
134 d->m_PropEditor->PropertyChanged();
135 this->setEnabled(
true);
140 : m_DecimalPlaces(0),
141 m_FactorPropertyToSlider(1.0),
142 m_FactorSliderToDisplay(1.0),
143 m_ShowPercents(
false),
144 m_SelfChangeLock(
false),
151 connect(
this, SIGNAL(valueChanged(
int)),
this, SLOT(
onValueChanged(
int)));
152 this->setEnabled(
false);
155 void QmitkNumberPropertySlider::Impl::adjustFactors(
short newDecimalPlaces,
bool newShowPercents)
160 m_DecimalPlaces = newDecimalPlaces;
161 m_ShowPercents = newShowPercents;
163 m_FactorPropertyToSlider = pow(10.0, m_DecimalPlaces);
164 m_FactorSliderToDisplay = 1.0 / m_FactorPropertyToSlider;
167 m_FactorPropertyToSlider *= 100.0;
169 q->setMinimum(oldMin);
170 q->setMaximum(oldMax);
175 return d->m_DecimalPlaces;
180 if (d->m_PropEditor.get() ==
nullptr)
183 switch (d->m_PropEditor->m_DataType)
188 d->adjustFactors(places, d->m_ShowPercents);
199 return d->m_ShowPercents;
204 if (showPercent == d->m_ShowPercents)
207 if (d->m_PropEditor.get() ==
nullptr)
210 switch (d->m_PropEditor->m_DataType)
215 d->adjustFactors(d->m_DecimalPlaces, showPercent);
229 return ROUND(QSlider::minimum() / d->m_FactorPropertyToSlider);
234 QSlider::setMinimum(
ROUND(value * d->m_FactorPropertyToSlider));
239 return ROUND(QSlider::maximum() / d->m_FactorPropertyToSlider);
244 QSlider::setMaximum(
ROUND(value * d->m_FactorPropertyToSlider));
249 return static_cast<double>((QSlider::value()) / d->m_FactorPropertyToSlider);
254 QSlider::setValue(
ROUND(value * d->m_FactorPropertyToSlider));
259 if (d->m_PropEditor.get() ==
nullptr)
262 if (d->m_SelfChangeLock)
273 d->m_PropEditor->BeginModifyProperty();
275 double newValue(value / d->m_FactorPropertyToSlider);
277 switch (d->m_PropEditor->m_DataType)
281 d->m_PropEditor->m_IntProperty->SetValue(
ROUND(newValue));
286 d->m_PropEditor->m_FloatProperty->SetValue(newValue);
291 d->m_PropEditor->m_DoubleProperty->SetValue(newValue);
297 d->m_PropEditor->EndModifyProperty();
300 void QmitkNumberPropertySlider::Impl::Editor::PropertyChanged()
302 m_Impl->DisplayNumber();
306 void QmitkNumberPropertySlider::Impl::Editor::PropertyRemoved()
308 this->m_Property =
nullptr;
311 void QmitkNumberPropertySlider::Impl::DisplayNumber()
313 if (m_PropEditor.get() ==
nullptr)
316 m_SelfChangeLock =
true;
317 switch (m_PropEditor->m_DataType)
321 int i = m_PropEditor->m_IntProperty->GetValue();
327 float f = m_PropEditor->m_FloatProperty->GetValue();
333 double d = m_PropEditor->m_DoubleProperty->GetValue();
340 m_SelfChangeLock =
false;
void setDoubleValue(double)
bool getShowPercent() const
double doubleValue() const
void SetProperty(mitk::IntProperty *property)
QmitkNumberPropertySlider(QWidget *parent=nullptr)
static RenderingManager * GetInstance()
void BeginModifyProperty()
void setShowPercent(bool)
void setDecimalPlaces(short)
~QmitkNumberPropertySlider() override
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)
short getDecimalPlaces() const