Salome HOME
Possibility to load proprietary plugins on startup and check the license validity
[modules/shaper.git] / src / ModuleBase / ModuleBase_ParamSpinBox.h
index 591d0cfd970658fa981a8ffc0f6a47ad69d3c117..8298d1e1cf3b7e66aff0514d0c47ee6a5f97c86e 100644 (file)
@@ -1,18 +1,39 @@
+// Copyright (C) 2014-2021  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
 
 #ifndef ModuleBase_ParamSpinBox_H
 #define ModuleBase_ParamSpinBox_H
 
 #include "ModuleBase.h"
 
-#include <ModuleBase_DoubleSpinBox.h>
-
+#include <QAbstractSpinBox>
 #include <QValidator>
+#include <QLineEdit>
+
+class QStringListModel;
+class QCompleter;
 
 /**
 * \ingroup GUI
 * An extension of a double spin box which let to use parameters and expressions for value definition
 */
-class MODULEBASE_EXPORT ModuleBase_ParamSpinBox : public ModuleBase_DoubleSpinBox
+class MODULEBASE_EXPORT ModuleBase_ParamSpinBox : public QAbstractSpinBox
 {
   Q_OBJECT
 
@@ -29,20 +50,28 @@ public:
    \param theParent a parent object
    \param thePrecision a precision of values display
    */
-  explicit ModuleBase_ParamSpinBox( QWidget* theParent = 0, int thePrecision = -12 );
+  ModuleBase_ParamSpinBox( QWidget* theParent = 0, int thePrecision = 12 );
+
+  /// Set list of completion strings
+  void setCompletionList(QStringList&);
+
   virtual ~ModuleBase_ParamSpinBox();
 
   virtual void stepBy(int);
 
-  virtual double valueFromText(const QString&) const;
-  virtual QString textFromValue (double value) const;
+//  virtual double valueFromText(const QString&) const;
+//  virtual QString textFromValue (double value) const;
 
   virtual QValidator::State validate(QString&, int&) const;
 
   virtual void setValue(double);
 
+  double value() const;
+
   virtual void setText(const QString&);
 
+  QString text() const { return lineEdit()->text(); }
+
   /// Set a flag about accepted variable
   void setAcceptVariables(const bool);
 
@@ -52,36 +81,88 @@ public:
   /// Returns True if the input value contains variable
   bool hasVariable() const;
 
- protected:
+  double minimum() const { return myMinimum; }
+  double maximum() const { return myMaximum; }
+
+  void setMinimum(double theMin) { myMinimum = theMin; myValidator->setBottom(theMin); }
+  void setMaximum(double theMax) { myMaximum = theMax; myValidator->setTop(theMax); }
+
+  int decimals() const { return myValidator->decimals(); }
+  void setDecimals(int thePrecision) { myValidator->setDecimals(thePrecision); }
+
+  double singleStep() const { return mySingleStep; }
+  void setSingleStep(double theStep) { mySingleStep = theStep; }
+
+  void setValueEnabled(bool theEnable);
+
+protected:
+  /*!
+  \brief This function is called when the spinbox receives key release event.
+  */
+  virtual void keyReleaseEvent(QKeyEvent *event);
+
+  virtual bool eventFilter(QObject* theObj, QEvent* theEvent);
+
+  /// The virtual function is reimplemented in order to avoid extra increasing of value by StepBy
+  /// method
+  virtual void timerEvent(QTimerEvent* /*event*/) {}
+
+  virtual StepEnabled stepEnabled() const { return StepUpEnabled | StepDownEnabled; }
+
    /// Returns True if the given text contains variable
    /// \param theText a text string
   bool hasVariable(const QString& theText) const;
 
-  /// Returns state of the control
-  State isValid(const QString&, double&) const;
+//  /// Returns state of the control
+//  State isValid(const QString&, double&) const;
+//
+//  /// Returns True if the given value is within min and max of the control
+//  bool checkRange(const double) const;
+//
+//  /// Finds a variable by its name. Returns true in success
+//  /// \param theName a name of variable
+//  /// \param outValue an output value of the variable
+//  bool findVariable(const QString& theName, double& outValue) const;
+
+signals:
+  void textChanged(const QString&);
+
+// protected:
+//  virtual void showEvent(QShowEvent*);
+//
+// protected slots:
+//   /// A slot called on text change
+//  void onTextChanged(const QString&);
+//
+// private:
+//  void connectSignalsAndSlots();
+
+private slots:
+  void insertCompletion(const QString&);
 
-  /// Returns True if the given value is within min and max of the control
-  bool checkRange(const double) const;
+  void onTextChanged(const QString&);
 
-  /// Finds a variable by its name. Returns true in success
-  /// \param theName a name of variable
-  /// \param outValue an output value of the variable
-  bool findVariable(const QString& theName, double& outValue) const;
+private:
+  QString getPrefix(int& theStart, int& theEnd) const;
+  void showCompletion(bool checkPrefix);
 
- protected:
-  virtual void showEvent(QShowEvent*);
+  bool myIsEquation;
+  bool myAcceptVariables;
 
- protected slots:
-   /// A slot called on text change
-  void onTextChanged(const QString&);
+  QStringListModel* myCompleterModel;
+  QCompleter* myCompleter;
 
- private:
-  void connectSignalsAndSlots();
+  double myMinimum;
+  double myMaximum;
 
- private:
-  QString myTextValue;
+  int myCompletePos;
 
-  bool myAcceptVariables;
+  double mySingleStep;
+
+  /// Cashed color of active base palette
+  QColor myEnabledBaseColor;
+
+  QDoubleValidator* myValidator;
 };
 
 #endif