]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
1. Correction for perfomance problem by Apply button state update: do not listen...
authornds <nds@opencascade.com>
Thu, 14 Apr 2016 13:27:01 +0000 (16:27 +0300)
committernds <nds@opencascade.com>
Thu, 14 Apr 2016 13:27:01 +0000 (16:27 +0300)
2. Layout correction for Extrusion's multi-selector height(regression)
3. Issue #1343 correction to do not show preview planes if there is a visualized sketch

47 files changed:
src/ModuleBase/ModuleBase_ModelWidget.cpp
src/ModuleBase/ModuleBase_ModelWidget.h
src/ModuleBase/ModuleBase_OperationFeature.cpp
src/ModuleBase/ModuleBase_PagedContainer.cpp
src/ModuleBase/ModuleBase_PagedContainer.h
src/ModuleBase/ModuleBase_Tools.cpp
src/ModuleBase/ModuleBase_Tools.h
src/ModuleBase/ModuleBase_WidgetBoolValue.cpp
src/ModuleBase/ModuleBase_WidgetBoolValue.h
src/ModuleBase/ModuleBase_WidgetCheckGroupBox.cpp
src/ModuleBase/ModuleBase_WidgetCheckGroupBox.h
src/ModuleBase/ModuleBase_WidgetChoice.cpp
src/ModuleBase/ModuleBase_WidgetChoice.h
src/ModuleBase/ModuleBase_WidgetDoubleValue.cpp
src/ModuleBase/ModuleBase_WidgetDoubleValue.h
src/ModuleBase/ModuleBase_WidgetExprEditor.cpp
src/ModuleBase/ModuleBase_WidgetExprEditor.h
src/ModuleBase/ModuleBase_WidgetFileSelector.cpp
src/ModuleBase/ModuleBase_WidgetFileSelector.h
src/ModuleBase/ModuleBase_WidgetIntValue.cpp
src/ModuleBase/ModuleBase_WidgetIntValue.h
src/ModuleBase/ModuleBase_WidgetLabel.h
src/ModuleBase/ModuleBase_WidgetLineEdit.cpp
src/ModuleBase/ModuleBase_WidgetLineEdit.h
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.h
src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp
src/ModuleBase/ModuleBase_WidgetShapeSelector.h
src/PartSet/PartSet_PreviewPlanes.cpp
src/PartSet/PartSet_PreviewPlanes.h
src/PartSet/PartSet_SketcherMgr.cpp
src/PartSet/PartSet_SketcherReetntrantMgr.cpp
src/PartSet/PartSet_Tools.cpp
src/PartSet/PartSet_WidgetFileSelector.cpp
src/PartSet/PartSet_WidgetFileSelector.h
src/PartSet/PartSet_WidgetPoint2d.cpp
src/PartSet/PartSet_WidgetPoint2d.h
src/PartSet/PartSet_WidgetSketchCreator.cpp
src/PartSet/PartSet_WidgetSketchCreator.h
src/PartSet/PartSet_WidgetSketchLabel.h
src/SamplePanelPlugin/SamplePanelPlugin_ModelWidget.cpp
src/SamplePanelPlugin/SamplePanelPlugin_ModelWidget.h
src/XGUI/XGUI_ErrorMgr.cpp
src/XGUI/XGUI_PropertyPanel.cpp
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h
src/XGUI/XGUI_WorkshopListener.cpp

index dc56812fc3bc3da50f36fa2dd1fc2cb4f1fa4eb3..b1d5b5a461865730ccdedd057c0edcee06c1a9bd 100644 (file)
@@ -285,13 +285,10 @@ bool ModuleBase_ModelWidget::restoreValue()
   return isDone;
 }
 
-void ModuleBase_ModelWidget::updateObject(ObjectPtr theObj)
+void ModuleBase_ModelWidget::updateObject(ObjectPtr theObject)
 {
-  blockUpdateViewer(true);
-
-  Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
-
-  blockUpdateViewer(false);
+  ModuleBase_Tools::flushUpdated(theObject);
+  emit objectUpdated();
 }
 
 void ModuleBase_ModelWidget::moveObject(ObjectPtr theObj)
@@ -360,23 +357,3 @@ void ModuleBase_ModelWidget::onWidgetValuesModified()
 {
   setValueState(ModifiedInPP);
 }
-
-//**************************************************************
-void ModuleBase_ModelWidget::blockUpdateViewer(const bool theValue)
-{
-  // the viewer update should be blocked in order to avoid the temporary feature content
-  // when the solver processes the feature, the redisplay message can be flushed
-  // what caused the display in the viewer preliminary states of object
-  // e.g. fillet feature, angle value change
-  std::shared_ptr<Events_Message> aMsg;
-  if (theValue) {
-    aMsg = std::shared_ptr<Events_Message>(
-        new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED)));
-  }
-  else {
-    // the viewer update should be unblocked
-    aMsg = std::shared_ptr<Events_Message>(
-        new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED)));
-  }
-  Events_Loop::loop()->send(aMsg);
-}
index 2075a16dee145981c8b13b56695c504b2f7b9ce7..def9a3fcb8ae65df33dbac398610d45de9ef0497 100644 (file)
@@ -196,16 +196,12 @@ Q_OBJECT
 
   /// Sends Update and Redisplay for the given object
   /// \param theObj is updating object
-  static void updateObject(ObjectPtr theObj);
+  void updateObject(ObjectPtr theObj);
 
   /// Sends Move event for the given object
   /// \param theObj is object for moving
   static void moveObject(ObjectPtr theObj);
 
-  /// Sends a message about block/unblock viewer updating
-  /// \param theValue a boolean value
-  static void blockUpdateViewer(const bool theValue);
-
 signals:
   /// The signal about widget values are to be changed
   void beforeValuesChanged();
@@ -241,6 +237,9 @@ signals:
   /// The signal about value state modification
   void valueStateChanged(int theState);
 
+  /// The signal is emitted after flush of updates singal for the widget
+  void objectUpdated();
+
 protected:
   /// Sets default value of widget. Normally, widget should fetch this value
   /// from the xml. However, some widgets derived widgets could define it
@@ -269,7 +268,7 @@ protected:
 
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const = 0;
+  virtual bool storeValueCustom() = 0;
 
   /// Restore value from attribute data to the widget's control
   virtual bool restoreValueCustom() = 0;
index f6838a0494f216f1ca46cdda78d7145e2c9ae429..2508ac0c198030e91bc9ae864a2daae3f51ea2e7 100755 (executable)
@@ -172,8 +172,10 @@ FeaturePtr ModuleBase_OperationFeature::createFeature(const bool theFlushMessage
      }*/
   }
 
-  if (theFlushMessage)
+  if (theFlushMessage) {
     Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED));
+    Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
+  }
   return myFeature;
 }
 
@@ -381,7 +383,7 @@ ModuleBase_ModelWidget* ModuleBase_OperationFeature::activateByPreselection(
       // in order to redisplay object in the viewer, the update/redisplay signals should be flushed
       // it is better to perform it not in setSelection of each widget, but do it here,
       // after the preselection is processed
-      ModuleBase_ModelWidget::updateObject(myFeature);
+      ModuleBase_Tools::flushUpdated(myFeature);
     }
   }
   clearPreselection();
index 4da74e21274d5c76c1e5b3fa4db9674794de9f6b..d069b57f604a783df4b4960bf4a91e1dff638657 100644 (file)
@@ -93,7 +93,7 @@ void ModuleBase_PagedContainer::activateCustom()
   focusTo();
 }
 
-bool ModuleBase_PagedContainer::storeValueCustom() const
+bool ModuleBase_PagedContainer::storeValueCustom()
 {
   // A rare case when plugin was not loaded.
   if(!myFeature)
index aee2e5c75b24090aa18384a3eafd343ac6cdb064..4522a8a8ee18675686277b79a22376fb5a369a25 100644 (file)
@@ -60,7 +60,7 @@ class MODULEBASE_EXPORT ModuleBase_PagedContainer : public ModuleBase_ModelWidge
   virtual void activateCustom();
 
   /// Redefinition of virtual function
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   /// Redefinition of virtual function
   virtual bool restoreValueCustom();
index 56d7d2dbfa14dab00070f3d5ab25d20ba8e7a7af..baaea0da067c4fdaf64501194818160af6f1a555 100755 (executable)
@@ -19,6 +19,7 @@
 #include <ModelAPI_AttributeSelectionList.h>
 #include <ModelAPI_AttributeRefList.h>
 #include <ModelAPI_AttributeRefAttrList.h>
+#include <Events_Loop.h>
 
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Result.h>
@@ -26,6 +27,7 @@
 #include <ModelAPI_ResultParameter.h>
 #include <ModelAPI_Tools.h>
 #include <ModelAPI_Session.h>
+#include <ModelAPI_Events.h>
 
 #include <TopoDS_Iterator.hxx>
 
@@ -513,6 +515,34 @@ GeomShapePtr getShape(const AttributePtr& theAttribute, ModuleBase_IWorkshop* th
   return aShape;
 }
 
+void flushUpdated(ObjectPtr theObject)
+{
+  blockUpdateViewer(true);
+
+  Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
+
+  blockUpdateViewer(false);
+}
+
+void blockUpdateViewer(const bool theValue)
+{
+  // the viewer update should be blocked in order to avoid the temporary feature content
+  // when the solver processes the feature, the redisplay message can be flushed
+  // what caused the display in the viewer preliminary states of object
+  // e.g. fillet feature, angle value change
+  std::shared_ptr<Events_Message> aMsg;
+  if (theValue) {
+    aMsg = std::shared_ptr<Events_Message>(
+        new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED)));
+  }
+  else {
+    // the viewer update should be unblocked
+    aMsg = std::shared_ptr<Events_Message>(
+        new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED)));
+  }
+  Events_Loop::loop()->send(aMsg);
+}
+
 } // namespace ModuleBase_Tools
 
 
index 1c29e7a991ea0fcdc77ae60fbb3982f4ca6896a9..6101364200a1494b6aba5e21ad80a8fd5ff90ff1 100755 (executable)
@@ -199,6 +199,14 @@ MODULEBASE_EXPORT void setObject(const AttributePtr& theAttribute, const ObjectP
 MODULEBASE_EXPORT std::shared_ptr<GeomAPI_Shape> getShape(const AttributePtr& theAttribute,
                                                           ModuleBase_IWorkshop* theWorkshop);
 
+/// Flush updated signal for the object. The viewer update is blocked in the process
+/// \param theObject parameter of the signal
+MODULEBASE_EXPORT void flushUpdated(ObjectPtr theObject);
+
+/// Sends a message about block/unblock viewer updating
+/// \param theValue a boolean value
+MODULEBASE_EXPORT void blockUpdateViewer(const bool theValue);
+
 }
 
 #endif
index 074b832c0560f3927609b4084b5284b4b6b83b91..b0ff0d2a10343f2a15d929598b7824557acb5f62 100644 (file)
@@ -44,7 +44,7 @@ ModuleBase_WidgetBoolValue::~ModuleBase_WidgetBoolValue()
 {
 }
 
-bool ModuleBase_WidgetBoolValue::storeValueCustom() const
+bool ModuleBase_WidgetBoolValue::storeValueCustom()
 {
   DataPtr aData = myFeature->data();
   std::shared_ptr<ModelAPI_AttributeBoolean> aBool = aData->boolean(attributeID());
index c3764bdcce79dd1b734e0bda89f0da9f452c621b..237460ec7fc38390a528b7fb942bdf717dae70ca 100644 (file)
@@ -38,7 +38,7 @@ Q_OBJECT
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   virtual bool restoreValueCustom();
 
index cee0ff9872170b0ddfcf00076a1dfc57b8dbc1ed..11626948590b3661591766cb89230a94f2fb7638 100755 (executable)
@@ -103,7 +103,7 @@ QLayout* ModuleBase_WidgetCheckGroupBox::pageLayout()
   return myMainLayout;
 }
 
-bool ModuleBase_WidgetCheckGroupBox::storeValueCustom() const
+bool ModuleBase_WidgetCheckGroupBox::storeValueCustom()
 {
   DataPtr aData = myFeature->data();
   std::shared_ptr<ModelAPI_AttributeBoolean> aBool = aData->boolean(attributeID());
index dcb7012ce8a3fd6e28eda2bae92632d9f5b4dded..d9d9f533c3905d5fb58cfa0ed7492055f3fa38c7 100755 (executable)
@@ -62,7 +62,7 @@ protected:
   /// Methods to be redefined from ModuleBase_ModelWidget: start
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
   /// Restore value from attribute data to the widget's control
   virtual bool restoreValueCustom();
   /// Methods to be redefined from ModuleBase_ModelWidget: end
index f8b4ff5167d9c56c51f524fbf5e51c53e2c9560b..e35f3c2128ca4cd19e6c6b2f65a10f8632e14335 100644 (file)
@@ -104,7 +104,7 @@ ModuleBase_WidgetChoice::~ModuleBase_WidgetChoice()
 {
 }
   
-bool ModuleBase_WidgetChoice::storeValueCustom() const
+bool ModuleBase_WidgetChoice::storeValueCustom()
 {
   DataPtr aData = myFeature->data();
   std::shared_ptr<ModelAPI_AttributeInteger> aIntAttr = aData->integer(attributeID());
index e0f90d7203fbe9135913cb29cf6914dcf3a6123c..e5c66a9cc0327f0c7d6ab2c7ca3f5f16434cee38 100644 (file)
@@ -65,7 +65,7 @@ signals:
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   virtual bool restoreValueCustom();
 
index fa4e22c18af5f9f90f58b7054304c164dce5fa78..5bbf1844712b1eab73972be19f1c9c89d8489d5a 100644 (file)
@@ -126,7 +126,7 @@ bool ModuleBase_WidgetDoubleValue::resetCustom()
   return aDone;
 }
 
-bool ModuleBase_WidgetDoubleValue::storeValueCustom() const
+bool ModuleBase_WidgetDoubleValue::storeValueCustom()
 {
   DataPtr aData = myFeature->data();
   AttributeDoublePtr aReal = aData->real(attributeID());
index e77b17cc35636d48fedc49f137d8e53307bbfdc6..de2a9acef60451751a8bbddc69c306d480ed367c 100644 (file)
@@ -56,7 +56,7 @@ Q_OBJECT
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   //! Read value of corresponded attribute from data model to the input control
   // \return True in success
index a47d9e367ea73a77969deb2437c123cc466c4b2b..ed22ac55f76d1a41cc0e30a1c8bb15c4acb7ddcf 100644 (file)
@@ -248,7 +248,7 @@ void ModuleBase_WidgetExprEditor::initializeValueByActivate()
 {
 }
 
-bool ModuleBase_WidgetExprEditor::storeValueCustom() const
+bool ModuleBase_WidgetExprEditor::storeValueCustom()
 {
   // A rare case when plugin was not loaded. 
   if(!myFeature)
index b3a63174b52bbf3b45fca6bf4afa559bda976e80..ef04f238603f630a194ba093bfc0486e43590934 100644 (file)
@@ -126,7 +126,7 @@ protected:
 
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   /// Redefinition of virtual method
   virtual bool restoreValueCustom();
index f3238f222744a1468ebe337d9aad48fc8b7fb791..4c7573061d7f12ef4d7ba3bce02d2d6ee826978d 100644 (file)
@@ -65,7 +65,7 @@ ModuleBase_WidgetFileSelector::~ModuleBase_WidgetFileSelector()
 {
 }
 
-bool ModuleBase_WidgetFileSelector::storeValueCustom() const
+bool ModuleBase_WidgetFileSelector::storeValueCustom()
 {
   // A rare case when plugin was not loaded. 
   if (!myFeature)
index 4d6c3b1d5e2e89b3defaa5f7afc17f130c23e4c6..2f6612413951aabad827ffcb0c8e4be4c285c170 100644 (file)
@@ -64,7 +64,7 @@ class MODULEBASE_EXPORT ModuleBase_WidgetFileSelector : public ModuleBase_ModelW
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   virtual bool restoreValueCustom();
 
index 95074f73ad39fe25609561faceca390f64fe6a03..996e16fb5d022346957cf324bc5725b9d635b095 100644 (file)
@@ -110,7 +110,7 @@ bool ModuleBase_WidgetIntValue::resetCustom()
   return aDone;
 }
 
-bool ModuleBase_WidgetIntValue::storeValueCustom() const
+bool ModuleBase_WidgetIntValue::storeValueCustom()
 {
   DataPtr aData = myFeature->data();
   AttributeIntegerPtr anAttribute = aData->integer(attributeID());
index d88b4d156314aaa60b05cf1eb5eb14cddc7d655e..d873304de055bebf9f37de8b1fe4a2a48b9dba7d 100644 (file)
@@ -48,7 +48,7 @@ Q_OBJECT
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   //! Read value of corresponded attribute from data model to the input control
   // \return True in success
index 97454bf6f771c737fbd266395db9cb5ff77fa627..d2ab2d647b1a9f30bf07f7f4dd05d31be28976ce 100644 (file)
@@ -44,7 +44,7 @@ Q_OBJECT
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const
+  virtual bool storeValueCustom()
   {
     return true;
   }
index 5b2929c4f1047a83d835e61d35fec2487f4ee951..54223e6d26c0082e5ffaa975afad732a02b34de1 100644 (file)
@@ -105,7 +105,7 @@ ModuleBase_WidgetLineEdit::~ModuleBase_WidgetLineEdit()
 {
 }
 
-bool ModuleBase_WidgetLineEdit::storeValueCustom() const
+bool ModuleBase_WidgetLineEdit::storeValueCustom()
 {
   // A rare case when plugin was not loaded. 
   if(!myFeature)
index 3b8070af83b7926c0171f3ad1810d2e79b8a6c49..a977963c02f18d37f73c1a561e5721a6c3937ba1 100644 (file)
@@ -47,7 +47,7 @@ class MODULEBASE_EXPORT ModuleBase_WidgetLineEdit : public ModuleBase_ModelWidge
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   /// Redefinition of virtual method
   virtual bool restoreValueCustom();
index 6e47e28923caf8f6bc9dd2c665d685d3bddc7d75..57852847b4e8ade7e78ce1de95ae7deaec843eb8 100755 (executable)
@@ -179,7 +179,7 @@ void ModuleBase_WidgetMultiSelector::deactivate()
 }
 
 //********************************************************************
-bool ModuleBase_WidgetMultiSelector::storeValueCustom() const
+bool ModuleBase_WidgetMultiSelector::storeValueCustom()
 {
   // the value is stored on the selection changed signal processing 
   // A rare case when plugin was not loaded. 
index ee15240eddb5c033c2d59421d58b76c04b216c26..6a0c9e37cf170fa26aa43d2769fe1379154460b1 100755 (executable)
@@ -105,7 +105,7 @@ protected:
 
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   virtual bool restoreValueCustom();
 
index 39387667a44beff6f08e46718020cd7cec8a53e9..c59fdceafd44dc588bacf8bf8274cd06f5d756ac 100644 (file)
@@ -101,7 +101,7 @@ ModuleBase_WidgetShapeSelector::~ModuleBase_WidgetShapeSelector()
 }
 
 //********************************************************************
-bool ModuleBase_WidgetShapeSelector::storeValueCustom() const
+bool ModuleBase_WidgetShapeSelector::storeValueCustom()
 {
   // the value is stored on the selection changed signal processing 
   return true;
index e7154df8ef467895701acf69c0f274a3de0fe54f..193819d8d41bcb777e4df4038e90cc95dff6606e 100644 (file)
@@ -84,7 +84,7 @@ Q_OBJECT
  protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   virtual bool restoreValueCustom();
 
index f7735336a7cdc168121d8e34193a8aa5915a1c29..424deec9d0356aeeed7f034cc0d266b4f86ae6cf 100755 (executable)
@@ -42,6 +42,25 @@ bool PartSet_PreviewPlanes::hasVisualizedBodies(ModuleBase_IWorkshop* theWorksho
   return aBodyIsVisualized;
 }
 
+bool PartSet_PreviewPlanes::hasVisualizedSketch(ModuleBase_IWorkshop* theWorkshop)
+{
+  bool aSketchIsVisualized = false;
+
+  XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(theWorkshop);
+  XGUI_Displayer* aDisp = aWorkshop->displayer();
+  QObjectPtrList aDisplayed = aDisp->displayedObjects();
+  foreach (ObjectPtr anObj, aDisplayed) {
+    ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(anObj);
+    if (aResult.get() != NULL) {
+      FeaturePtr aFeature = ModelAPI_Feature::feature(aResult);
+      aSketchIsVisualized = aFeature.get() && aFeature->getKind() == SketchPlugin_Sketch::ID();
+      if (aSketchIsVisualized)
+        break;
+    }
+  }
+  return aSketchIsVisualized;
+}
+
 void PartSet_PreviewPlanes::erasePreviewPlanes(ModuleBase_IWorkshop* theWorkshop)
 {
   if (myPreviewDisplayed) {
index d64f10fbf372c5042acafb368ba1b61611ea306d..ac94dc350731dabda12a95f5c536435304abec71 100755 (executable)
@@ -38,6 +38,11 @@ public:
   /// \return boolean value
   static bool hasVisualizedBodies(ModuleBase_IWorkshop* theWorkshop);
 
+  /// Returns true if there is at least one Sketch visualized in the viewer
+  /// \param theWorkshop the application workshop
+  /// \return boolean value
+  static bool hasVisualizedSketch(ModuleBase_IWorkshop* theWorkshop);
+
   /// Returns if the preview was displayed
   /// \param theWorkshop the application workshop
   /// \return boolean value
index 22c4b653a1c586ccf11b1a317a6da2db49a12372..be2d63ec498a65dbb7d865696ba1823332e79bd0 100755 (executable)
@@ -247,9 +247,6 @@ void PartSet_SketcherMgr::onLeaveViewPort()
 {
   myIsMouseOverViewProcessed = false;
   myIsMouseOverWindow = false;
-  // it is important to validate operation here only if sketch entity create operation is active
-  // because at this operation we reacts to the mouse leave/enter view port
-  //operationMgr()->onValidateOperation();
 
   #ifdef DEBUG_DO_NOT_BY_ENTER
   return;
@@ -270,6 +267,8 @@ void PartSet_SketcherMgr::onLeaveViewPort()
   if (myIsPopupMenuActive)
     return;
 
+  // it is important to validate operation here only if sketch entity create operation is active
+  // because at this operation we reacts to the mouse leave/enter view port
   operationMgr()->onValidateOperation();
 
   // 2. if the mouse IS NOT over window, reset the active widget value and hide the presentation
index 943e488a0da4bab9d2ccba0a7f753d9eba2c8b19..cc5f7602aa78a45708a57cda6975a04ac168cdfb 100755 (executable)
@@ -205,7 +205,7 @@ bool PartSet_SketcherReetntrantMgr::processMouseReleased(ModuleBase_IViewWindow*
       // in activate() the value of the point is initialized and it can be displayed
       // but the default value is [0, 0]. So, we block update viewer contentent until
       // onMouseRelease happens, which correct the point position
-      ModuleBase_ModelWidget::blockUpdateViewer(true);
+      ModuleBase_Tools::blockUpdateViewer(true);
 
       restartOperation();
       aProcessed = true;
@@ -219,7 +219,7 @@ bool PartSet_SketcherReetntrantMgr::processMouseReleased(ModuleBase_IViewWindow*
         aPoint2DWdg->onMouseRelease(theWnd, theEvent);
       }
       // unblock viewer update
-      ModuleBase_ModelWidget::blockUpdateViewer(false);
+      ModuleBase_Tools::blockUpdateViewer(false);
     }
   }
 
@@ -552,7 +552,7 @@ bool PartSet_SketcherReetntrantMgr::copyReetntrantAttributes(const FeaturePtr& t
     AttributeStringPtr aSourceFeatureTypeAttr = theSourceFeature->data()->string(aTypeAttributeId);
     AttributeStringPtr aNewFeatureTypeAttr = theNewFeature->data()->string(aTypeAttributeId);
     aNewFeatureTypeAttr->setValue(aSourceFeatureTypeAttr->value());
-    ModuleBase_ModelWidget::updateObject(theNewFeature);
+    ModuleBase_Tools::flushUpdated(theNewFeature);
     aChanged = true;
   }
   return aChanged;
index 188a41f9ae80361ce4b74dd83ad2f9463da2fae0..a08190d7b5c7caef2afd22b425a72c5ba6f2c0b3 100755 (executable)
@@ -53,6 +53,7 @@
 
 #include <ModuleBase_IWorkshop.h>
 #include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_Tools.h>
 
 #include <V3d_View.hxx>
 #include <gp_Pln.hxx>
@@ -304,7 +305,7 @@ std::shared_ptr<GeomDataAPI_Point2D> PartSet_Tools::findFirstEqualPointInArgumen
 
   // may be feature is not updated yet, execute is not performed and references features
   // are not created. Case: rectangle macro feature
-  ModuleBase_ModelWidget::updateObject(theFeature);
+  ModuleBase_Tools::flushUpdated(theFeature);
 
   std::list<AttributePtr> anAttributes = theFeature->data()->attributes(
                                           ModelAPI_AttributeRefList::typeId());
index b493c2a86fd569d8a18866885b085df023a91c4e..f8c46f4082fb2bc275a5891ef9ec2787c3d78d64 100644 (file)
@@ -34,7 +34,7 @@ bool PartSet_WidgetFileSelector::restoreValueCustom()
   return ModuleBase_WidgetFileSelector::restoreValueCustom();
 }
 
-bool PartSet_WidgetFileSelector::storeValueCustom() const
+bool PartSet_WidgetFileSelector::storeValueCustom()
 {
   // A rare case when plugin was not loaded.
   if (!myFeature)
index 632cb0571e3f3876ce21a94db109f4b7e4f35537..adda54eacb4d899d99bec952225389785c7e9dc8 100644 (file)
@@ -37,7 +37,7 @@ public:
 
 protected:
   /// Reimplemented from ModuleBase_WidgetFileSelector::storeValueCustom()
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   /// Reimplemented from ModuleBase_WidgetFileSelector::restoreValue()
   virtual bool restoreValueCustom();
index 1563bad48275b235b70426fcce1ff90e488f2d41..29b8cf03d4f4b677b9687c81defbe436884fda12 100644 (file)
@@ -263,7 +263,7 @@ bool PartSet_WidgetPoint2D::setPoint(double theX, double theY)
   return true;
 }
 
-bool PartSet_WidgetPoint2D::storeValueCustom() const
+bool PartSet_WidgetPoint2D::storeValueCustom()
 {
   std::shared_ptr<ModelAPI_Data> aData = myFeature->data();
   if (!aData) // can be on abort of sketcher element
index b04dfc776f7cf185e7f11d7c259052c40196fed7..3c0f8c3604bb265a7558a22285ffd84332ecb218 100755 (executable)
@@ -118,7 +118,7 @@ public slots:
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   /// Restore value from attribute data to the widget's control
   virtual bool restoreValueCustom();
index ade61b33434f21edda95113fedde058b49ce0eb5..76c2e720efeb454bd4ff8e513208817f1e251e65 100644 (file)
@@ -99,7 +99,7 @@ bool PartSet_WidgetSketchCreator::restoreValueCustom()
   return true;
 }
 
-bool PartSet_WidgetSketchCreator::storeValueCustom() const
+bool PartSet_WidgetSketchCreator::storeValueCustom()
 {
   return true;
 }
@@ -195,7 +195,8 @@ void PartSet_WidgetSketchCreator::setVisibleSelectionControl(const bool theSelec
 
   if (theSelectionControl) {
     bool aBodyIsVisualized = myPreviewPlanes->hasVisualizedBodies(myWorkshop);
-    if (!aBodyIsVisualized) {
+    bool aSketchIsVisualized = myPreviewPlanes->hasVisualizedSketch(myWorkshop);
+    if (!aBodyIsVisualized && !aSketchIsVisualized) {
       // We have to select a plane before any operation
       myPreviewPlanes->showPreviewPlanes(myWorkshop);
     }
index 22d58f750a1f7a5344cf86b70b10e8078011e7c3..57ba50ecaf5507ac377d891ce416b1c353bf854c 100644 (file)
@@ -81,7 +81,7 @@ protected:
 
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   virtual bool restoreValueCustom();
 
index 30efc49ec353e0f177d660dc41f78b4277d0f884..dc391906ffd3bd6c42f54cedf3dfd0f1efd430a6 100644 (file)
@@ -108,7 +108,7 @@ protected:
 
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const
+  virtual bool storeValueCustom()
   {
     return true;
   }
index a5cf68391460e25c7831e89599e690fad3646352..4f6530e20f8856b997a356a210299d835994a9a4 100755 (executable)
@@ -48,7 +48,7 @@ QList<QWidget*> SamplePanelPlugin_ModelWidget::getControls() const
   return aControls;
 }
 
-bool SamplePanelPlugin_ModelWidget::storeValueCustom() const
+bool SamplePanelPlugin_ModelWidget::storeValueCustom()
 {
   AttributePtr anAttribute = myFeature->attribute(SamplePanelPlugin_Feature::VALUE_ID());
   AttributeIntegerPtr aValueAttribute =
index dfee20d53e6e1b4e40d7fa351326fb9c89793715..e69fc19089866f471fb0b27f63a84f4733ef8fd1 100755 (executable)
@@ -36,7 +36,7 @@ public:
 protected:
   /// Saves the internal parameters to the given feature
   /// \return True in success
-  virtual bool storeValueCustom() const;
+  virtual bool storeValueCustom();
 
   /// Restore value from attribute data to the widget's control
   virtual bool restoreValueCustom();
index e360e99716aeefaf3e0de208b83d3a9556f7bfe2..c9505229abbb00a4eeccf1a6556a3865185d4c22 100644 (file)
@@ -17,6 +17,9 @@
 #include <ModuleBase_ModelWidget.h>
 #include <ModuleBase_OperationFeature.h>
 
+#include <ModuleBase_Tools.h>
+#include <QDebug>
+
 #include <ModelAPI_Attribute.h>
 #include <ModelAPI_Session.h>
 #include <ModelAPI_Validator.h>
@@ -32,6 +35,7 @@
 
 const QString INVALID_VALUE = "invalid_action";
 
+//#define DEBUG_ERROR_STATE
 
 XGUI_ErrorMgr::XGUI_ErrorMgr(QObject* theParent, ModuleBase_IWorkshop* theWorkshop)
   : ModuleBase_IErrorMgr(theParent),
@@ -78,6 +82,15 @@ void XGUI_ErrorMgr::updateActions(const FeaturePtr& theFeature)
     }
     updateActionState(anOkAction, anError);
     updateToolTip(anActiveWidget, aWidgetError);
+
+#ifdef DEBUG_ERROR_STATE
+    QString anInfo = ModuleBase_Tools::objectInfo(theFeature);
+
+    QString aResultInfo = QString("valid = %1, anError = %2, aWidgetError = %3")
+                          .arg(anError.isEmpty()).arg(anError).arg(aWidgetError);
+    qDebug(QString("XGUI_ErrorMgr::updateActions for %1, result: %2").arg(anInfo)
+                  .arg(aResultInfo).toStdString().c_str());
+#endif
   }
 }
 
index c1b78937e34eeac2f4cf5cfb9a3599cb2d225561..c2c31868351e988817ef03bcfa9a5a7bdf5bea81 100755 (executable)
@@ -81,7 +81,7 @@ XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent, XGUI_OperationMgr* th
 
   myPanelPage = new ModuleBase_PageWidget(aContent);
   myPanelPage->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-  aMainLayout->addWidget(myPanelPage, aPanelRow++, kPanelColumn);
+  aMainLayout->addWidget(myPanelPage, aPanelRow, kPanelColumn);
 
   // spit to make the preview button on the bottom of the panel
   aMainLayout->setRowStretch(aPanelRow++, 1);
index bf87ecc313677933d0d0dd9aa277d00c7664255c..0e20e9ab1a5e5a50d75a1bd94307520a5d57d88e 100755 (executable)
@@ -535,10 +535,12 @@ void XGUI_Workshop::connectToPropertyPanel(const bool isToConnect)
        if (isToConnect) {
         connect(aWidget, SIGNAL(valueStateChanged(int)), this, SLOT(onWidgetStateChanged(int)));
         connect(aWidget, SIGNAL(valuesChanged()), this, SLOT(onValuesChanged()));
-      }
+        connect(aWidget, SIGNAL(objectUpdated()), this, SLOT(onWidgetObjectUpdated()));
+       }
       else {
         disconnect(aWidget, SIGNAL(valueStateChanged(int)), this, SLOT(onWidgetStateChanged(int)));
         disconnect(aWidget, SIGNAL(valuesChanged()), this, SLOT(onValuesChanged()));
+        disconnect(aWidget, SIGNAL(objectUpdated()), this, SLOT(onWidgetObjectUpdated()));
       }
     }
   }
@@ -929,6 +931,11 @@ void XGUI_Workshop::onValuesChanged()
   }
 }
 
+void XGUI_Workshop::onWidgetObjectUpdated()
+{
+  operationMgr()->onValidateOperation();
+}
+
 ModuleBase_IModule* XGUI_Workshop::loadModule(const QString& theModule)
 {
   QString libName = QString::fromStdString(library(theModule.toStdString()));
index edf22c262b2130362ce5034dc673a4397269464a..0c09e08736a166c631d83119facf27d5a5243485 100755 (executable)
@@ -341,6 +341,9 @@ signals:
   /// differs in the new state of paged container
   void onValuesChanged();
 
+  /// Listens the corresponded signal of model widget and updates Apply button state by feature
+  void onWidgetObjectUpdated();
+
   /// Show property panel
   void showPropertyPanel();
 
index e4d13e93b7e2fd1fdca47abea431acaff7516706..afdbe6e8eeb107d69dc959192dd65ad06963979d 100755 (executable)
@@ -90,7 +90,6 @@ void XGUI_WorkshopListener::initializeEventListening()
   aLoop->registerListener(this, Events_LongOp::eventID());
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_PLUGIN_LOADED));
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_SELFILTER_LOADED));
-  aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_ERROR_CHANGED));
 
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED));
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED));
@@ -180,25 +179,6 @@ void XGUI_WorkshopListener::processEvent(const std::shared_ptr<Events_Message>&
     // the viewer's update context is unblocked, the viewer's update works
     XGUI_Displayer* aDisplayer = workshop()->displayer();
     aDisplayer->enableUpdateViewer(true);
-  } else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_OBJECT_ERROR_CHANGED)) {
-    std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
-        std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
-    std::set<ObjectPtr> anObjects = aUpdMsg->objects();
-
-    ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
-                                              (workshop()->operationMgr()->currentOperation());
-    bool aFeatureChanged = false;
-    if(aFOperation ) {
-      FeaturePtr aFeature = aFOperation->feature();
-      if (aFeature.get()) {
-        std::set<ObjectPtr>::const_iterator aIt;
-        for (aIt = anObjects.begin(); aIt != anObjects.end() && !aFeatureChanged; ++aIt) {
-          aFeatureChanged = ModelAPI_Feature::feature(*aIt) == aFeature;
-        }
-      }
-      if (aFeatureChanged)
-        workshop()->operationMgr()->onValidateOperation();
-    }
   } else {
     //Show error dialog if error message received.
     std::shared_ptr<Events_Error> anAppError = std::dynamic_pointer_cast<Events_Error>(theMessage);