X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_ParamSpinBox.cpp;h=9916aec514e9e907f594822ea431d064321fc2ce;hb=811681738727583c29043cd55903fb71cec19038;hp=4569e2b8fe351e47b8e1ece1465cceefe6d62e4e;hpb=17715b8aeca077903884e929d495c81370e655dc;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_ParamSpinBox.cpp b/src/ModuleBase/ModuleBase_ParamSpinBox.cpp index 4569e2b8f..9916aec51 100644 --- a/src/ModuleBase/ModuleBase_ParamSpinBox.cpp +++ b/src/ModuleBase/ModuleBase_ParamSpinBox.cpp @@ -11,30 +11,47 @@ #include #include #include +#include + +#include +#include +#include #include #include -/*! - \class ModuleBase_ParamSpinBox - */ - -/*! - \brief Constructor. - - Constructs a spin box with 0.0 as minimum value and 99.99 as maximum value, - a step value of 1.0 and a precision of 2 decimal places. - The value is initially set to 0.00. +//#define DEBUG_COMPLETE_WITH_PARAMETERS - \param parent parent object - */ ModuleBase_ParamSpinBox::ModuleBase_ParamSpinBox(QWidget* theParent, int thePrecision) : ModuleBase_DoubleSpinBox(theParent, thePrecision), myAcceptVariables(true) { +#ifdef DEBUG_COMPLETE_WITH_PARAMETERS + myCompleter = new QCompleter(this); + myCompleter->setWidget(this); + myCompleter->setCompletionMode(QCompleter::PopupCompletion); + + myCompleterModel = new QStringListModel(this); + myCompleter->setModel(myCompleterModel); + // Use sorted model to accelerate completion (QCompleter will use binary search) + myCompleter->setModelSorting(QCompleter::CaseInsensitivelySortedModel); + myCompleter->setCaseSensitivity(Qt::CaseInsensitive); + + lineEdit()->setCompleter(myCompleter); +#endif + connectSignalsAndSlots(); } +void ModuleBase_ParamSpinBox::setCompletionList(QStringList& theList) +{ +#ifdef DEBUG_COMPLETE_WITH_PARAMETERS + theList.sort(); + theList.removeDuplicates(); + myCompleterModel->setStringList(theList); +#endif +} + /*! \brief Destructor. */ @@ -53,7 +70,7 @@ ModuleBase_ParamSpinBox::~ModuleBase_ParamSpinBox() */ void ModuleBase_ParamSpinBox::stepBy(int steps) { - if (hasVariable()) + if ((!myTextValue.isEmpty()) && hasVariable()) return; ModuleBase_DoubleSpinBox::stepBy(steps); @@ -68,32 +85,23 @@ void ModuleBase_ParamSpinBox::connectSignalsAndSlots() this, SLOT(onTextChanged(const QString&))); } -/*! - \brief This function is called when value is changed. - */ void ModuleBase_ParamSpinBox::onTextChanged(const QString& text) { myTextValue = text; } -/*! - \brief Interpret text entered by the user as a value. - \param text text entered by the user - \return mapped value - \sa textFromValue() - */ double ModuleBase_ParamSpinBox::valueFromText(const QString& theText) const { - if (!hasVariable(theText)) { + if (!hasVariable(theText)) return ModuleBase_DoubleSpinBox::valueFromText(theText); - } - // small hack: return length of the string to iniiate valuesChanged signal - return theText.length(); + + // small hack: return hash of the string to initiate valuesChanged signal + return qHash(theText); } QString ModuleBase_ParamSpinBox::textFromValue (double theValue) const { - if (hasVariable(myTextValue)){ + if ((!myTextValue.isEmpty()) && hasVariable(myTextValue)){ return myTextValue; } return ModuleBase_DoubleSpinBox::textFromValue(theValue); @@ -121,12 +129,16 @@ QValidator::State ModuleBase_ParamSpinBox::validate(QString& str, int& pos) cons /*! \brief This function is used to set a current value for this spinbox. \param value current value + + The new value is ignored if the spinbox has a variable. */ void ModuleBase_ParamSpinBox::setValue(const double value) { - ModuleBase_DoubleSpinBox::setValue(value); + if (hasVariable()) + return; myTextValue = ModuleBase_DoubleSpinBox::textFromValue(value); + ModuleBase_DoubleSpinBox::setValue(value); } /*! @@ -135,6 +147,7 @@ void ModuleBase_ParamSpinBox::setValue(const double value) */ void ModuleBase_ParamSpinBox::setText(const QString& value) { + myTextValue = value; lineEdit()->setText(value); } @@ -165,21 +178,31 @@ bool ModuleBase_ParamSpinBox::hasVariable() const bool ModuleBase_ParamSpinBox::hasVariable(const QString& theText) const { - QString aDigitPattern = QString("[-+]?[0-9]*[%1]?[0-9]+([eE][-+]?[0-9]+)?"); - - bool aHasDigit = false; - { - QRegExp varNameMask(aDigitPattern.arg(".")); - aHasDigit = varNameMask.exactMatch(theText); - } - if (!aHasDigit) - { - QRegExp varNameMask(aDigitPattern.arg(",")); - aHasDigit = varNameMask.exactMatch(theText); - } - - return !aHasDigit; - + //const QString aDigitPattern = QString("[-+]?[0-9]*[%1]?[0-9]*([eE][-+]?[0-9]+)?"); + + //bool aHasDigit = false; + //{ + // QRegExp varNameMask(aDigitPattern.arg(".")); + // aHasDigit = varNameMask.exactMatch(theText); + //} + //if (!aHasDigit) + //{ + // QRegExp varNameMask(aDigitPattern.arg(",")); + // aHasDigit = varNameMask.exactMatch(theText); + //} + bool isDouble = false; + QLocale::c().toDouble(theText, &isDouble); + +// theText.toDouble(&isDouble); +// if (isDouble) { +// QLocale aLoc; // create default locale +// QChar aDecPnt = aLoc.decimalPoint(); +// if (aDecPnt == '.') +// isDouble = theText.contains(aDecPnt) || (!theText.contains(',')); +// else if (aDecPnt == ',') +// isDouble = theText.contains(aDecPnt) || (!theText.contains('.')); +// } + return !isDouble; } /*! @@ -220,11 +243,11 @@ bool ModuleBase_ParamSpinBox::findVariable(const QString& theName, double& outValue) const { ResultParameterPtr aParam; - return ModelAPI_Tools::findVariable(theName.toStdString(), outValue, aParam); + return ModelAPI_Tools::findVariable(FeaturePtr(), theName.toStdString(), outValue, aParam); } /*! - \brief This function is called when the spinbox recieves key press event. + \brief This function is called when the spinbox receives key press event. */ //void ModuleBase_ParamSpinBox::keyPressEvent(QKeyEvent* e) //{ @@ -236,12 +259,12 @@ bool ModuleBase_ParamSpinBox::findVariable(const QString& theName, //} /*! - \brief This function is called when the spinbox recieves show event. + \brief This function is called when the spinbox receives show event. */ void ModuleBase_ParamSpinBox::showEvent(QShowEvent* theEvent) { ModuleBase_DoubleSpinBox::showEvent(theEvent); - if (hasVariable(myTextValue)) { + if ((!myTextValue.isEmpty()) && hasVariable(myTextValue)) { setText(myTextValue); } }