]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Within Issue #143 highlight active inputs
authorsbh <sergey.belash@opencascade.com>
Thu, 2 Oct 2014 14:46:01 +0000 (18:46 +0400)
committersbh <sergey.belash@opencascade.com>
Thu, 2 Oct 2014 14:46:01 +0000 (18:46 +0400)
16 files changed:
src/Config/Config_Keywords.h
src/ModuleBase/CMakeLists.txt
src/ModuleBase/ModuleBase_ModelWidget.cpp
src/ModuleBase/ModuleBase_ModelWidget.h
src/ModuleBase/ModuleBase_Tools.cpp
src/ModuleBase/ModuleBase_Tools.h
src/ModuleBase/ModuleBase_WidgetBoolValue.cpp
src/ModuleBase/ModuleBase_WidgetChoice.cpp
src/ModuleBase/ModuleBase_WidgetDoubleValue.cpp
src/ModuleBase/ModuleBase_WidgetFactory.cpp
src/ModuleBase/ModuleBase_WidgetFeature.cpp
src/ModuleBase/ModuleBase_WidgetFileSelector.cpp
src/ModuleBase/ModuleBase_WidgetPoint2D.cpp
src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp
src/PartSet/PartSet_OperationFeatureBase.cpp
src/XGUI/XGUI_Workshop.cpp

index 8f0fda2e19da13441d7b79493c0f884ab2d82a62..87be5d39920d7ff5b619d9cdeb1b5a91c7b02982 100644 (file)
@@ -55,6 +55,7 @@ const static char* PREVIOUS_FEATURE_PARAM = "previous_feature_param";
 const static char* ANY_WDG_TOOLTIP = FEATURE_TOOLTIP;
 const static char* ANY_WDG_ICON = FEATURE_ICON;
 const static char* ANY_WDG_LABEL = "label";
+const static char* ANY_WDG_DEFAULT = "default";
 
 const static char* SOURCE_FILE = "path";
 const static char* VALIDATOR_PARAMETERS = "parameters";
@@ -65,7 +66,6 @@ const static char* INFO_WDG_TOOLTIP = FEATURE_TOOLTIP;
 const static char* DOUBLE_WDG_MIN = "min";
 const static char* DOUBLE_WDG_MAX = "max";
 const static char* DOUBLE_WDG_STEP = "step";
-const static char* DOUBLE_WDG_DEFAULT = "default";
 const static char* DOUBLE_WDG_DEFAULT_COMPUTED = "computed";
 
 //toolbox/switch properties
index 92a73fce80e60960a3b494f7c02e29c0acd98a04..884e44be91163865bc7bc6a5399511365d15bdb5 100644 (file)
@@ -3,6 +3,7 @@ SET(CMAKE_AUTOMOC ON)
 
 SET(PROJECT_HEADERS
        ModuleBase.h
+       ModuleBase_Tools.h
        ModuleBase_IModule.h
        ModuleBase_Operation.h
        ModuleBase_OperationDescription.h       
@@ -30,6 +31,7 @@ SET(PROJECT_HEADERS
 )
 
 SET(PROJECT_SOURCES
+       ModuleBase_Tools.cpp
        ModuleBase_Operation.cpp
        ModuleBase_OperationDescription.cpp
        ModuleBase_ModelWidget.cpp
index 939345b517beefd395652896b194802d34b728a9..e2b934ee6de130eff7fab5672b876f9a0daf21e6 100644 (file)
 
 #include <QEvent>
 #include <QWidget>
+#include <QGraphicsDropShadowEffect>
+#include <QColor>
+#include <QLabel>
 
-ModuleBase_ModelWidget::ModuleBase_ModelWidget(QObject* theParent, const Config_WidgetAPI* theData,
+ModuleBase_ModelWidget::ModuleBase_ModelWidget(QWidget* theParent, const Config_WidgetAPI* theData,
                                                const std::string& theParentId)
     : QObject(theParent),
       myParentId(theParentId)
@@ -42,6 +45,31 @@ void ModuleBase_ModelWidget::enableFocusProcessing()
   }
 }
 
+void ModuleBase_ModelWidget::setHighlighted(bool isHighlighted)
+{
+  QList<QWidget*> aWidgetList = getControls();
+  foreach(QWidget* aWidget, aWidgetList) {
+    QLabel* aLabel = qobject_cast<QLabel*>(aWidget);
+    // We won't set the effect to QLabels - it looks ugly
+    if(aLabel) continue;
+    if(isHighlighted) {
+      // If effect is the installed on a different widget, setGraphicsEffect() will
+      // remove the effect from the widget and install it on this widget.
+      // That's why we create a new effect for each widget
+      QGraphicsDropShadowEffect* aGlowEffect = new QGraphicsDropShadowEffect();
+      aGlowEffect->setOffset(.0);
+      aGlowEffect->setBlurRadius(10.0);
+      aGlowEffect->setColor(QColor(0, 170, 255)); // Light-blue color, #00AAFF
+      aWidget->setGraphicsEffect(aGlowEffect);
+    } else {
+      QGraphicsEffect* anEffect = aWidget->graphicsEffect();
+      if(anEffect)
+        anEffect->deleteLater();
+      aWidget->setGraphicsEffect(NULL);
+    }
+  }
+}
+
 bool ModuleBase_ModelWidget::focusTo()
 {
   QList<QWidget*> aControls = getControls();
@@ -73,7 +101,7 @@ void ModuleBase_ModelWidget::enableFocusProcessing(QWidget* theWidget)
 
 bool ModuleBase_ModelWidget::eventFilter(QObject* theObject, QEvent *theEvent)
 {
-  QWidget* aWidget = dynamic_cast<QWidget*>(theObject);
+  QWidget* aWidget = qobject_cast<QWidget*>(theObject);
   if (theEvent->type() == QEvent::MouseButtonRelease && 
       myFocusInWidgets.contains(aWidget)) {
     emit focusInWidget(this);
index 91b9738546d4e3e55c299ba48f7041c368604c44..9f2f6f4555698d9c6b0dc6de3eea83087baa749a 100644 (file)
@@ -32,21 +32,13 @@ Q_OBJECT
   /// Constructor
   /// \theParent the parent object
   /// \theData the widget configuation. The attribute of the model widget is obtained from
-  ModuleBase_ModelWidget(QObject* theParent, const Config_WidgetAPI* theData,
+  ModuleBase_ModelWidget(QWidget* theParent, const Config_WidgetAPI* theData,
                          const std::string& theParentId);
   /// Destructor
   virtual ~ModuleBase_ModelWidget()
   {
   }
 
-  /// Set the given wrapped value to the current widget
-  /// This value should be processed in the widget according to the needs
-  /// \param theValue the wrapped widget value
-  virtual bool setValue(ModuleBase_WidgetValue* theValue)
-  {
-    return false;
-  }
-
   /// Returns the state whether the attribute of the feature is initialized
   /// \param theObject a model feature to be checked
   /// \return the boolean result
@@ -60,25 +52,45 @@ Q_OBJECT
   /// valid even if they are not initialized
   bool isObligatory() { return myIsObligatory; }
 
+  /// Defines if it is supposed that the widget should interact with the viewer.
+  virtual bool isViewerSelector() { return false; }
+
+  /// Set the given wrapped value to the current widget
+  /// This value should be processed in the widget according to the needs
+  /// \param theValue the wrapped widget value
+  virtual bool setValue(ModuleBase_WidgetValue* theValue)
+  {
+    return false;
+  }
+
   /// Saves the internal parameters to the given feature
   /// \param theObject a model feature to be changed
   virtual bool storeValue() const = 0;
 
   virtual bool restoreValue() = 0;
 
-  void enableFocusProcessing();
   /// Set focus to the first control of the current widget. The focus policy of the control is checked.
   /// If the widget has the NonFocus focus policy, it is skipped.
   /// \return the state whether the widget can accept the focus
   virtual bool focusTo();
 
+  /// Returns the internal parent wiget control, that can be shown anywhere
+  /// \returns the widget
+  virtual QWidget* getControl() const = 0;
+
   /// Returns list of widget controls
   /// \return a control list
   virtual QList<QWidget*> getControls() const = 0;
 
+
   /// FocusIn events processing
   virtual bool eventFilter(QObject* theObject, QEvent *theEvent);
 
+
+  void enableFocusProcessing();
+
+  void setHighlighted(bool isHighlighted);
+
   /// Returns the attribute name
   /// \returns the string value
   std::string attributeID() const
@@ -97,14 +109,12 @@ Q_OBJECT
   {
     return myFeature;
   }
+
   void setFeature(const FeaturePtr& theFeature)
   {
     myFeature = theFeature;
   }
 
-  /// Defines if it is supposed that the widget should interact with the viewer.
-  virtual bool isViewerSelector() { return false; }
-
 signals:
   /// The signal about widget values changed
   void valuesChanged();
@@ -138,9 +148,9 @@ signals:
   std::string myParentId;    /// name of parent
   FeaturePtr myFeature;
 
-    bool myIsComputedDefault; /// Value should be computed on execute,
-                              /// like radius for circle's constraint (can not be zero)
-    bool myIsObligatory;      /// Non-obligatory widget is valid even if it is not initialized
+  bool myIsComputedDefault; /// Value should be computed on execute,
+  /// like radius for circle's constraint (can not be zero)
+  bool myIsObligatory;      /// Non-obligatory widget is valid even if it is not initialized
 
  private:
    /// Contains a list of widgets that may accept focus
index f68de8da5cba818502ee05c88496a59d239488e9..ffb17b5c2b2560c666c15fa902234819e1d5da87 100644 (file)
@@ -12,4 +12,35 @@ namespace ModuleBase_Tools {
 //******************************************************************
 
 //******************************************************************
+
+void adjustMargins(QWidget* theWidget)
+{
+  if(!theWidget)
+    return;
+  adjustMargins(theWidget->layout());
+}
+
+void adjustMargins(QLayout* theLayout)
+{
+  if(!theLayout)
+    return;
+  theLayout->setContentsMargins(5, 5, 5, 5);
+  theLayout->setSpacing(5);
+}
+
+void zeroMargins(QWidget* theWidget)
+{
+  if(!theWidget)
+    return;
+  zeroMargins(theWidget->layout());
+}
+
+void zeroMargins(QLayout* theLayout)
+{
+  if(!theLayout)
+    return;
+  theLayout->setContentsMargins(0, 0, 0, 0);
+  theLayout->setSpacing(5);
+}
+
 }
index e2a09c54624833ac3bd0d9f17aa25e7aa0fc2222..6c903d3fbd7b41d7aeba8ff97694fa2aef27cd87 100644 (file)
@@ -7,21 +7,22 @@
 
 #include "ModuleBase.h"
 
-#include <ModelAPI_Result.h>
-#include <ModelAPI_Feature.h>
+#include <QWidget>
+#include <QLayout>
 
 class GeomAPI_Shape;
 
 namespace ModuleBase_Tools {
 
-/**
- * Returns returns a shape if the result has a shape method. Otherwise returns NULL pointer
+/*
+ * Methods to adjust margins and spacings.
  */
-MODULEBASE_EXPORT boost::shared_ptr<GeomAPI_Shape> shape(ResultPtr theResult);
+MODULEBASE_EXPORT void adjustMargins(QWidget* theWidget);
+MODULEBASE_EXPORT void adjustMargins(QLayout* theLayout);
 
-MODULEBASE_EXPORT FeaturePtr feature(ObjectPtr theObject);
+MODULEBASE_EXPORT void zeroMargins(QWidget* theWidget);
+MODULEBASE_EXPORT void zeroMargins(QLayout* theLayout);
 
 }
-;
 
 #endif
index 6cd23ff9794843c679d57f36f9beda1196a8b134..cc0197d577d18d90a5876633cfdf4ce348c92262 100644 (file)
@@ -24,11 +24,11 @@ ModuleBase_WidgetBoolValue::ModuleBase_WidgetBoolValue(QWidget* theParent,
 {
   QString aText = QString::fromStdString(theData->widgetLabel());
   QString aToolTip = QString::fromStdString(theData->widgetTooltip());
-  QString aDefault = QString::fromStdString(theData->getProperty("default"));
+  bool isChecked = theData->getBooleanAttribute(ANY_WDG_DEFAULT, false);
 
   myCheckBox = new QCheckBox(aText, theParent);
   myCheckBox->setToolTip(aToolTip);
-  myCheckBox->setChecked(aDefault == "true");
+  myCheckBox->setChecked(isChecked);
 
   connect(myCheckBox, SIGNAL(toggled(bool)), this, SIGNAL(valuesChanged()));
 }
index ba5a281eda49256daa308c3571deff2a360c2da0..3a3ed74593529adbb266e78327d359a3717ec81d 100644 (file)
@@ -3,6 +3,7 @@
 // Author:      Vitaly Smetannikov
 
 #include "ModuleBase_WidgetChoice.h"
+#include <ModuleBase_Tools.h>
 
 #include <ModelAPI_AttributeInteger.h>
 #include <ModelAPI_Data.h>
@@ -20,7 +21,7 @@ ModuleBase_WidgetChoice::ModuleBase_WidgetChoice(QWidget* theParent,
 {
   myContainer = new QWidget(theParent);
   QHBoxLayout* aLayout = new QHBoxLayout(myContainer);
-  aLayout->setContentsMargins(0, 0, 0, 0);
+  ModuleBase_Tools::adjustMargins(aLayout);
 
   QString aLabelText = QString::fromStdString(theData->widgetLabel());
   QString aLabelIcon = QString::fromStdString(theData->widgetIcon());
@@ -82,4 +83,4 @@ void ModuleBase_WidgetChoice::onCurrentIndexChanged(int theIndex)
 {
   emit valuesChanged();
   emit focusOutWidget(this);
-}
\ No newline at end of file
+}
index 48620cbdc8961d6f4262be001c6853ba0d19c20b..d6d6d65664c8ab14edb97d487d63a621780fdf68 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <ModuleBase_WidgetDoubleValue.h>
 #include <ModuleBase_DoubleSpinBox.h>
+#include <ModuleBase_Tools.h>
 
 #include <ModelAPI_AttributeDouble.h>
 #include <ModelAPI_Data.h>
@@ -37,7 +38,7 @@ ModuleBase_WidgetDoubleValue::ModuleBase_WidgetDoubleValue(QWidget* theParent,
 {
   myContainer = new QWidget(theParent);
   QHBoxLayout* aControlLay = new QHBoxLayout(myContainer);
-  aControlLay->setContentsMargins(0, 0, 0, 0);
+  ModuleBase_Tools::adjustMargins(aControlLay);
 
   QString aLabelText = QString::fromStdString(theData->widgetLabel());
   QString aLabelIcon = QString::fromStdString(theData->widgetIcon());
@@ -77,7 +78,7 @@ ModuleBase_WidgetDoubleValue::ModuleBase_WidgetDoubleValue(QWidget* theParent,
     mySpinBox->setSingleStep(aStepVal);
   }
 
-  aProp = theData->getProperty(DOUBLE_WDG_DEFAULT);
+  aProp = theData->getProperty(ANY_WDG_DEFAULT);
   double aDefVal = QString::fromStdString(aProp).toDouble(&isOk);
   if (isOk) {
     mySpinBox->setValue(aDefVal);
index 00a479ad10c1ec8fb14a88cdc04c796ab1ab6463..9ce1c133fa9f9a6a4ad05c756300f0aabda1e95f 100644 (file)
@@ -22,6 +22,8 @@
 #include <ModuleBase_WidgetChoice.h>
 #include <ModuleBase_IWorkshop.h>
 #include <ModuleBase_IModule.h>
+#include <ModuleBase_Tools.h>
+
 #include <ModelAPI_Validator.h>
 
 #include <Config_Keywords.h>
@@ -62,7 +64,6 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent)
     return;
 
   QVBoxLayout* aWidgetLay = new QVBoxLayout(theParent);
-  aWidgetLay->setContentsMargins(2, 2, 2, 2);
   do {  //Iterate over each node
     std::string aWdgType = myWidgetApi->widgetType();
     //Create a widget (doublevalue, groupbox, toolbox, etc.
@@ -78,6 +79,7 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent)
       //if current widget is groupbox (container) process it's children recursively
       QString aGroupName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
       createWidget(aWidget);
+      ModuleBase_Tools::adjustMargins(aWidget);
       QGroupBox* aGrBox = qobject_cast<QGroupBox*>(aWidget);
       aGrBox->setTitle(aGroupName);
     }
@@ -88,6 +90,7 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent)
       do {
         QString aPageName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
         QWidget* aPage = new QWidget(aWidget);
+        ModuleBase_Tools::adjustMargins(aPage);
         createWidget(aPage);
         if (aWdgType == WDG_SWITCH) {
           ModuleBase_WidgetSwitch* aSwitch = qobject_cast<ModuleBase_WidgetSwitch*>(aWidget);
index 4269711c8a3d15eea287901016083d28857aadf5..fcc226b3ea4cc67660f9edd0dc78992a95c30f01 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <ModuleBase_WidgetValueFeature.h>
 #include <ModuleBase_WidgetValue.h>
+#include <ModuleBase_Tools.h>
 
 #include <Config_Keywords.h>
 #include <Config_WidgetAPI.h>
@@ -33,7 +34,7 @@ ModuleBase_WidgetFeature::ModuleBase_WidgetFeature(QWidget* theParent,
 {
   myContainer = new QWidget(theParent);
   QHBoxLayout* aControlLay = new QHBoxLayout(myContainer);
-  aControlLay->setContentsMargins(0, 0, 0, 0);
+  ModuleBase_Tools::adjustMargins(aControlLay);
 
   QString aLabelText = QString::fromStdString(theData->widgetLabel());
   myLabel = new QLabel(aLabelText, myContainer);
index a2e8186c8f2e85797ae3468b11507ab77f803405..9f16b74f6b9d20ee8869f8cdbb20146d3259a35b 100644 (file)
@@ -9,6 +9,7 @@
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Object.h>
 #include <ModuleBase_WidgetFileSelector.h>
+#include <ModuleBase_Tools.h>
 
 #include <Config_WidgetAPI.h>
 
@@ -36,7 +37,7 @@ ModuleBase_WidgetFileSelector::ModuleBase_WidgetFileSelector(QWidget* theParent,
 
   myMainWidget = new QWidget(theParent);
   QGridLayout* aMainLay = new QGridLayout(myMainWidget);
-  aMainLay->setContentsMargins(0, 0, 0, 0);
+  ModuleBase_Tools::adjustMargins(aMainLay);
   QLabel* aTitleLabel = new QLabel(myTitle, myMainWidget);
   aTitleLabel->setIndent(1);
   aMainLay->addWidget(aTitleLabel, 0, 0);
index 3271fe7230c73712831a8c049b6bff39351955f4..c6d341d002134e20b5c797013e147e080c3fb4c4 100644 (file)
@@ -5,6 +5,7 @@
 #include <ModuleBase_WidgetPoint2D.h>
 #include <ModuleBase_WidgetValueFeature.h>
 #include <ModuleBase_DoubleSpinBox.h>
+#include <ModuleBase_Tools.h>
 
 #include <Config_Keywords.h>
 #include <Config_WidgetAPI.h>
@@ -33,10 +34,12 @@ ModuleBase_WidgetPoint2D::ModuleBase_WidgetPoint2D(QWidget* theParent,
     : ModuleBase_ModelWidget(theParent, theData, theParentId)
 {
   myOptionParam = theData->getProperty(PREVIOUS_FEATURE_PARAM);
-  myGroupBox = new QGroupBox(QString::fromStdString(theData->getProperty(CONTAINER_PAGE_NAME)),
-                             theParent);
+  QString aPageName = QString::fromStdString(theData->getProperty(CONTAINER_PAGE_NAME));
+  myGroupBox = new QGroupBox(aPageName, theParent);
+  myGroupBox->setFlat(false);
+
   QGridLayout* aGroupLay = new QGridLayout(myGroupBox);
-  aGroupLay->setContentsMargins(2, 0, 2, 0);
+  ModuleBase_Tools::adjustMargins(aGroupLay);
   aGroupLay->setColumnStretch(1, 1);
   {
     QLabel* aLabel = new QLabel(myGroupBox);
index fcd287c550aa76f95be3b69a00ddccffd1374d3e..fa05bba8205e5c013c570722b1c18ea8461a74a2 100644 (file)
@@ -3,7 +3,8 @@
 // Author:      Vitaly Smetannikov
 
 #include "ModuleBase_WidgetShapeSelector.h"
-#include "ModuleBase_IWorkshop.h"
+#include <ModuleBase_IWorkshop.h>
+#include <ModuleBase_Tools.h>
 
 #include <Events_Loop.h>
 #include <ModelAPI_Events.h>
@@ -58,8 +59,8 @@ ModuleBase_WidgetShapeSelector::ModuleBase_WidgetShapeSelector(QWidget* theParen
 {
   myContainer = new QWidget(theParent);
   QHBoxLayout* aLayout = new QHBoxLayout(myContainer);
+  ModuleBase_Tools::adjustMargins(aLayout);
 
-  aLayout->setContentsMargins(0, 0, 0, 0);
   QString aLabelText = QString::fromStdString(theData->widgetLabel());
   QString aLabelIcon = QString::fromStdString(theData->widgetIcon());
   myLabel = new QLabel(aLabelText, myContainer);
index c1da278fa020868570d496073c97f06c748d4924..d722998f8419108fd5afebc8793a12a76c2ac4d0 100644 (file)
@@ -115,6 +115,13 @@ void PartSet_OperationFeatureBase::mouseReleased(QMouseEvent* theEvent, Handle(V
 
 void PartSet_OperationFeatureBase::onWidgetActivated(ModuleBase_ModelWidget* theWidget)
 {
+  if(myActiveWidget) {
+    myActiveWidget->setHighlighted(false);
+  }
+  if(theWidget) {
+    theWidget->setHighlighted(true);
+  }
+
   myActiveWidget = theWidget;
   activateByPreselection();
   if (myInitFeature && myActiveWidget) {
index 8c76c2fd11cf18d84788e79300b9b76ea9b50242..b48c1edcbda95219b413d4fe67036712aeef428f 100644 (file)
@@ -44,7 +44,8 @@
 #include <ModuleBase_Operation.h>
 #include <ModuleBase_OperationDescription.h>
 #include <ModuleBase_SelectionValidator.h>
-#include "ModuleBase_WidgetFactory.h"
+#include <ModuleBase_WidgetFactory.h>
+#include <ModuleBase_Tools.h>
 
 #include <Config_Common.h>
 #include <Config_FeatureMessage.h>
@@ -498,6 +499,7 @@ void XGUI_Workshop::onOperationStarted()
 
     myPropertyPanel->cleanContent();
     aFactory.createWidget(myPropertyPanel->contentWidget());
+    ModuleBase_Tools::zeroMargins(myPropertyPanel->contentWidget());
 
     QList<ModuleBase_ModelWidget*> aWidgets = aFactory.getModelWidgets();
     QList<ModuleBase_ModelWidget*>::const_iterator anIt = aWidgets.begin(), aLast = aWidgets.end();