1 #include "ModuleBase_ParamIntSpinBox.h"
3 #include <ModelAPI_Session.h>
4 #include <ModelAPI_Document.h>
5 #include <ModelAPI_ResultParameter.h>
6 #include <ModelAPI_AttributeDouble.h>
7 #include <ModelAPI_Tools.h>
14 #include <QApplication>
20 ModuleBase_ParamIntSpinBox::ModuleBase_ParamIntSpinBox(QWidget* theParent)
21 : ModuleBase_IntSpinBox(theParent),
22 myAcceptVariables(true)
24 connectSignalsAndSlots();
30 ModuleBase_ParamIntSpinBox::~ModuleBase_ParamIntSpinBox()
35 \brief Perform \a steps increment/decrement steps.
37 Re-implemented to handle cases when Notebook variable
38 name is specified by the user as the widget text.
39 Otherwise, simply calls the base implementation.
41 \param steps number of increment/decrement steps
43 void ModuleBase_ParamIntSpinBox::stepBy(int steps)
45 if ((!myTextValue.isEmpty()) && hasVariable())
48 ModuleBase_IntSpinBox::stepBy(steps);
52 \brief Connect signals and slots.
54 void ModuleBase_ParamIntSpinBox::connectSignalsAndSlots()
56 connect(this, SIGNAL(valueChanged(const QString&)),
57 this, SLOT(onTextChanged(const QString&)));
60 void ModuleBase_ParamIntSpinBox::onTextChanged(const QString& text)
65 int ModuleBase_ParamIntSpinBox::valueFromText(const QString& theText) const
67 if (!hasVariable(theText))
68 return ModuleBase_IntSpinBox::valueFromText(theText);
70 // small hack: return hash of the string to initiate valuesChanged signal
71 return qHash(theText);
74 QString ModuleBase_ParamIntSpinBox::textFromValue(int theValue) const
76 if ((!myTextValue.isEmpty()) && hasVariable(myTextValue)){
79 return ModuleBase_IntSpinBox::textFromValue(theValue);
83 \brief This function is used to determine whether input is valid.
84 \param str currently entered value
85 \param pos cursor position in the string
86 \return validating operation result
88 QValidator::State ModuleBase_ParamIntSpinBox::validate(QString& str, int& pos) const
90 // Trying to interpret the current input text as a numeric value
91 if (!hasVariable(str))
92 return ModuleBase_IntSpinBox::validate(str, pos);
94 QValidator::State res = QValidator::Invalid;
95 if (isAcceptVariables()) {
96 res = QValidator::Acceptable;
102 \brief This function is used to set a current value for this spinbox.
103 \param value current value
105 The new value is ignored if the spinbox has a variable.
107 void ModuleBase_ParamIntSpinBox::setValue(int value)
112 myTextValue = ModuleBase_IntSpinBox::textFromValue(value);
113 ModuleBase_IntSpinBox::setValue(value);
117 \brief This function is used to set a text for this spinbox.
118 \param value current value
120 void ModuleBase_ParamIntSpinBox::setText(const QString& value)
123 lineEdit()->setText(value);
127 \brief Enables or disables variable names in the spin box.
128 By default, variable names are enabled.
129 \param flag If true, variable names are enabled.
131 void ModuleBase_ParamIntSpinBox::setAcceptVariables(const bool flag)
133 myAcceptVariables = flag;
137 \brief Returns true if the spin box accepts variable names.
139 bool ModuleBase_ParamIntSpinBox::isAcceptVariables() const
141 return myAcceptVariables;
144 bool ModuleBase_ParamIntSpinBox::hasVariable() const
146 if (myTextValue.isEmpty())
148 return hasVariable(myTextValue);
151 bool ModuleBase_ParamIntSpinBox::hasVariable(const QString& theText) const
154 QLocale::c().toInt(theText, &ok);
159 \brief This function is used to determine whether input is valid.
160 \return validating operation result
162 ModuleBase_ParamIntSpinBox::State ModuleBase_ParamIntSpinBox::isValid(
163 const QString& theText, double& theValue) const
165 if (hasVariable() && !findVariable(theText, theValue)) {
167 theValue = locale().toInt(theText, &ok);
172 if (!checkRange(theValue)) {
180 \brief This function is used to check that string value lies within predefined range.
183 bool ModuleBase_ParamIntSpinBox::checkRange(const double theValue) const
185 return theValue >= minimum() && theValue <= maximum();
189 \brief This function is used to determine whether input is a variable name and to get its value.
190 \return status of search operation
192 bool ModuleBase_ParamIntSpinBox::findVariable(const QString& theName,
193 double& outValue) const
195 ResultParameterPtr aParam;
196 return ModelAPI_Tools::findVariable(theName.toStdString(), outValue, aParam);
200 \brief This function is called when the spinbox receives show event.
202 void ModuleBase_ParamIntSpinBox::showEvent(QShowEvent* theEvent)
204 ModuleBase_IntSpinBox::showEvent(theEvent);
205 if ((!myTextValue.isEmpty()) && hasVariable(myTextValue)) {
206 setText(myTextValue);