]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Imrove multi-selector control to provide items multi-selection. Activate/deactivate...
authornds <nds@opencascade.com>
Fri, 15 Jan 2016 18:33:33 +0000 (21:33 +0300)
committerdbv <dbv@opencascade.com>
Tue, 16 Feb 2016 14:03:06 +0000 (17:03 +0300)
When the widget is deactivated, selected items should not be visualized in the viewer in half-highlighted color.

src/ModuleBase/ModuleBase_IModule.h
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.h
src/ModuleBase/ModuleBase_WidgetSelector.h
src/PartSet/PartSet_CustomPrs.cpp
src/PartSet/PartSet_CustomPrs.h
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h

index 94b2ff98c822708cd91fb90aacbf90f41c7d6e20..d80620a4895a15befa1605d1c770b1b7b465600d 100755 (executable)
@@ -160,15 +160,28 @@ class MODULEBASE_EXPORT ModuleBase_IModule : public QObject
   /// \param theModes a list of modes\r
   virtual void activeSelectionModes(QIntList& theModes) {}\r
 \r
-  /** Update the object presentable properties such as color, lines width and other\r
-  * If the object is result with the color attribute value set, it is used,\r
-  * otherwise the customize is applyed to the object's feature if it is a custom prs\r
-  * \param theObject an object instance\r
-  * \param theFlag a flag of level of customization, which means that only part of sub-elements\r
-  * should be updated(e.g. only highlighted elements)\r
-  * \param theUpdateViewer the parameter whether the viewer should be update immediately\r
-  * \returns true if the object is modified\r
-  */\r
+  /// Activate custom presentation for the object. Default realization is empty.\r
+  /// \param theObject an object instance\r
+  /// \param theFlag a flag of level of customization, which means that only part of sub-elements\r
+  /// \param theUpdateViewer the parameter whether the viewer should be update immediately\r
+  virtual void activateCustomPrs(const FeaturePtr& theFeature,\r
+                                 const ModuleBase_CustomizeFlag& theFlag,\r
+                                 const bool theUpdateViewer) {}\r
+\r
+  /// Deactivate custom presentation for the object. Default realization is empty.\r
+  /// \param theFlag a flag of level of customization, which means that only part of sub-elements\r
+  /// \param theUpdateViewer the parameter whether the viewer should be update immediately\r
+  virtual void deactivateCustomPrs(const ModuleBase_CustomizeFlag& theFlag,\r
+                                   const bool theUpdateViewer) {}\r
+\r
+  /// Update the object presentable properties such as color, lines width and other\r
+  /// If the object is result with the color attribute value set, it is used,\r
+  /// otherwise the customize is applyed to the object's feature if it is a custom prs\r
+  /// \param theObject an object instance\r
+  /// \param theFlag a flag of level of customization, which means that only part of sub-elements\r
+  /// should be updated(e.g. only highlighted elements)\r
+  /// \param theUpdateViewer the parameter whether the viewer should be update immediately\r
+  /// \returns true if the object is modified\r
   virtual bool customizeObject(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag,\r
                                const bool theUpdateViewer);\r
 \r
index 38bc5c9c8fdd2b3f81e151a2f9218caa612c4962..03d584fc76dc8018bf3b6750c85ca4ce148bfc17 100755 (executable)
@@ -160,6 +160,23 @@ ModuleBase_WidgetMultiSelector::~ModuleBase_WidgetMultiSelector()
 {
 }
 
+//********************************************************************
+void ModuleBase_WidgetMultiSelector::activateCustom()
+{
+  ModuleBase_WidgetSelector::activateCustom();
+
+  myWorkshop->module()->activateCustomPrs(myFeature,
+                            ModuleBase_IModule::CustomizeHighlightedObjects, true);
+}
+
+//********************************************************************
+void ModuleBase_WidgetMultiSelector::deactivate()
+{
+  ModuleBase_WidgetSelector::deactivate();
+
+  myWorkshop->module()->deactivateCustomPrs(ModuleBase_IModule::CustomizeHighlightedObjects, true);
+}
+
 //********************************************************************
 bool ModuleBase_WidgetMultiSelector::storeValueCustom() const
 {
index 591d842ad91156746ed3d07174e9a8891e69eb08..7156e051789862a0df0d16e916005aa0ccc65be2 100755 (executable)
@@ -65,6 +65,9 @@ class MODULEBASE_EXPORT ModuleBase_WidgetMultiSelector : public ModuleBase_Widge
   /// \return a control list
   virtual QList<QWidget*> getControls() const;
 
+  /// The methiod called when widget is deactivated
+  virtual void deactivate();
+
   /// Set the given wrapped value to the current widget
   /// This value should be processed in the widget according to the needs
   /// \param theValues the wrapped selection values
@@ -99,6 +102,9 @@ protected slots:
   void onListSelection();
 
 protected:
+  /// The methiod called when widget is activated
+  virtual void activateCustom();
+
   /// Saves the internal parameters to the given feature
   /// \return True in success
   virtual bool storeValueCustom() const;
index cb7d76e42ab1ada09ee8def3cacde5cd607ecadc..63404f66fd61bcb1c1da71f34ff15260e56b18ba 100755 (executable)
@@ -87,7 +87,7 @@ Q_OBJECT
   /// \return true if it is succeed
   virtual void setObject(ObjectPtr theSelectedObject, GeomShapePtr theShape) = 0;
 
-   /// The methiod called when widget is activated
+  /// The methiod called when widget is activated
   virtual void activateCustom();
 
   /// Returns true if selected shape corresponds to requested shape types.
index 54298f76d26bac7ab30faf396e433f216f7c93b8..373ee633236663184bfd3b7f31767520d51939a6 100755 (executable)
 //#define DO_NOT_VISUALIZE_CUSTOM_PRESENTATION
 
 PartSet_CustomPrs::PartSet_CustomPrs(ModuleBase_IWorkshop* theWorkshop)
-  : myWorkshop(theWorkshop), myIsActive(false), myFeature(FeaturePtr())
+  : myWorkshop(theWorkshop), myFeature(FeaturePtr())
 {
   initPresentation(ModuleBase_IModule::CustomizeArguments);
   initPresentation(ModuleBase_IModule::CustomizeResults);
   initPresentation(ModuleBase_IModule::CustomizeHighlightedObjects);
+
+  myIsActive[ModuleBase_IModule::CustomizeArguments] = false;
+  myIsActive[ModuleBase_IModule::CustomizeResults] = false;
+  myIsActive[ModuleBase_IModule::CustomizeHighlightedObjects] = false;
 }
 
-bool PartSet_CustomPrs::isActive()
+bool PartSet_CustomPrs::isActive(const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag)
 {
-  return myIsActive;
+  return myIsActive[theFlag];
 }
 
-bool PartSet_CustomPrs::activate(const FeaturePtr& theFeature, const bool theUpdateViewer)
+bool PartSet_CustomPrs::activate(const FeaturePtr& theFeature,
+                                 const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag,
+                                 const bool theUpdateViewer)
 {
 #ifdef DO_NOT_VISUALIZE_CUSTOM_PRESENTATION
   return false;
 #endif
 
-  myIsActive = true;
+  myIsActive[theFlag] = true;
   myFeature = theFeature;
 
   bool isModified = false;
@@ -56,9 +62,10 @@ bool PartSet_CustomPrs::activate(const FeaturePtr& theFeature, const bool theUpd
   return isModified;
 }
 
-bool PartSet_CustomPrs::deactivate(const bool theUpdateViewer)
+bool PartSet_CustomPrs::deactivate(const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag,
+                                   const bool theUpdateViewer)
 {
-  myIsActive = false;
+  myIsActive[theFlag] = false;
   bool isModified = false;
 
   erasePresentation(ModuleBase_IModule::CustomizeArguments, theUpdateViewer);
index 8a27f041c5dba2908e666480a6e1ef3104995561..da5c247732bac633cb78f7fb553a6a7bb51f4a0c 100755 (executable)
@@ -45,18 +45,24 @@ public:
   PARTSET_EXPORT virtual ~PartSet_CustomPrs() {};
 
   /// Returns true if the presentation is active
-  bool isActive();
+  /// \param theFlag an object AIS presentation type
+  bool isActive(const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag);
 
   /// Initializes the operation presentation by the parameter object and display the presentation
   /// \param theObject an operation feature source to fill the presentation
+  /// \param theFlag an object AIS presentation type
   /// \param theUpdateViewer the parameter whether the viewer should be update immediatelly
   /// \returns true if the presentation is displayed
-  bool activate(const FeaturePtr& theObject, const bool theUpdateViewer);
+  bool activate(const FeaturePtr& theObject,
+                const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag,
+                const bool theUpdateViewer);
 
   /// Initializes the operation presentation by empty object and erase the presentation
   /// \param theUpdateViewer the parameter whether the viewer should be update immediatelly
+  /// \param theFlag an object AIS presentation type
   /// \returns true if the presentation has been displayed and now it is erased
-  bool deactivate(const bool theUpdateViewer);
+  bool deactivate(const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag,
+                  const bool theUpdateViewer);
 
   /// If the presentation is active[displayed], the shapes of the presentation is recomputed
   /// and the presentation is redisplayed.
@@ -112,11 +118,12 @@ private:
   Quantity_Color getShapeColor(const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag);
 
 private:
-  bool myIsActive; /// State whether the presentation is activated/deactivated
   FeaturePtr myFeature; /// Reference to a feature object
   ModuleBase_IWorkshop* myWorkshop; /// current workshop
   /// map of presentation type to AIS object
   QMap<ModuleBase_IModule::ModuleBase_CustomizeFlag, AISObjectPtr> myPresentations;
+  /// State whether the presentation is activated/deactivated
+  QMap<ModuleBase_IModule::ModuleBase_CustomizeFlag, bool> myIsActive;
 };
 
 #endif
index ea2740d626dfcfffe7ab44dd75f3e7fc9d8cf172..35613280488db8da7792cba3637c4eb3dbc95e6e 100755 (executable)
@@ -269,8 +269,10 @@ void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation)
   }
 
   ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(theOperation);
-  if (aFOperation)
-    myCustomPrs->activate(aFOperation->feature(), true);
+  if (aFOperation) {
+    myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, true);
+    myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, true);
+  }
 }
 
 void PartSet_Module::operationResumed(ModuleBase_Operation* theOperation)
@@ -278,13 +280,16 @@ void PartSet_Module::operationResumed(ModuleBase_Operation* theOperation)
   ModuleBase_IModule::operationResumed(theOperation);
 
   ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(theOperation);
-  if (aFOperation)
-    myCustomPrs->activate(aFOperation->feature(), true);
+  if (aFOperation) {
+    myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, true);
+    myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, true);
+  }
 }
 
 void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation)
 {
-  bool isModified = myCustomPrs->deactivate(false);
+  bool isModified = myCustomPrs->deactivate(ModuleBase_IModule::CustomizeArguments, false) ||
+                    myCustomPrs->deactivate(ModuleBase_IModule::CustomizeResults, false);
 
   if (PartSet_SketcherMgr::isNestedSketchOperation(theOperation)) {
     mySketchMgr->stopNestedSketch(theOperation);
@@ -750,11 +755,23 @@ void PartSet_Module::onViewTransformed(int theTrsfType)
     aDisplayer->updateViewer();
 }
 
+void PartSet_Module::activateCustomPrs(const FeaturePtr& theFeature, const ModuleBase_CustomizeFlag& theFlag,
+                                       const bool theUpdateViewer)
+{
+  myCustomPrs->activate(theFeature, theFlag, theUpdateViewer);
+}
+
+void PartSet_Module::deactivateCustomPrs(const ModuleBase_CustomizeFlag& theFlag,
+                                         const bool theUpdateViewer)
+{
+  myCustomPrs->deactivate(theFlag, theUpdateViewer);
+}
+
 bool PartSet_Module::customizeObject(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag,
                                      const bool theUpdateViewer)
 {
   bool isRedisplayed = false;
-  if (myCustomPrs->isActive())
+  if (myCustomPrs->isActive(theFlag))
     isRedisplayed = myCustomPrs->redisplay(theObject, theFlag, theUpdateViewer);
 
   return isRedisplayed;
index 7135b7c9ba1695e8ede67ef25c6a5528afd99ead..36424180e362642a4866f70766d9be64808db8d5 100755 (executable)
@@ -181,15 +181,28 @@ public:
   /// \param theFeature a feature
   void setCustomized(const FeaturePtr& theFeature);
 
-  /** Update the object presentable properties such as color, lines width and other
-  * If the object is result with the color attribute value set, it is used,
-  * otherwise the customize is applyed to the object's feature if it is a custom prs
-  * \param theObject an object instance
-  * \param theFlag a flag of level of customization, which means that only part of sub-elements
-  * should be updated(e.g. only highlighted elements)
-  * \param theUpdateViewer the parameter whether the viewer should be update immediatelly
-  * \returns true if the object is modified
-  */
+  /// Activate custom presentation for the object
+  /// \param theFeature a feature instance
+  /// \param theFlag a flag of level of customization, which means that only part of sub-elements
+  /// \param theUpdateViewer the parameter whether the viewer should be update immediately
+  virtual void activateCustomPrs(const FeaturePtr& theFeature,
+                                 const ModuleBase_CustomizeFlag& theFlag,
+                                 const bool theUpdateViewer);
+
+  /// Deactivate custom presentation for the object
+  /// \param theFlag a flag of level of customization, which means that only part of sub-elements
+  /// \param theUpdateViewer the parameter whether the viewer should be update immediately
+  virtual void deactivateCustomPrs(const ModuleBase_CustomizeFlag& theFlag,
+                                   const bool theUpdateViewer);
+
+  /// Update the object presentable properties such as color, lines width and other
+  /// If the object is result with the color attribute value set, it is used,
+  /// otherwise the customize is applyed to the object's feature if it is a custom prs
+  /// \param theObject an object instance
+  /// \param theFlag a flag of level of customization, which means that only part of sub-elements
+  /// should be updated(e.g. only highlighted elements)
+  /// \param theUpdateViewer the parameter whether the viewer should be update immediatelly
+  /// \returns true if the object is modified
   virtual bool customizeObject(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag,
                                const bool theUpdateViewer);