]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
1. Correction for perfomance problem by Apply button state update: do not flush updat...
authornds <nds@opencascade.com>
Thu, 14 Apr 2016 14:47:52 +0000 (17:47 +0300)
committernds <nds@opencascade.com>
Thu, 14 Apr 2016 14:47:52 +0000 (17:47 +0300)
src/ModuleBase/ModuleBase_ModelWidget.cpp
src/ModuleBase/ModuleBase_ModelWidget.h
src/XGUI/XGUI_Workshop.cpp

index b1d5b5a461865730ccdedd057c0edcee06c1a9bd..cf67219928e96d3c8113dece3d4b4e8c584ddead 100644 (file)
@@ -32,6 +32,7 @@ ModuleBase_ModelWidget::ModuleBase_ModelWidget(QWidget* theParent,
       myIsEditing(false),
       myState(Stored),
       myIsValueStateBlocked(false),
+      myFlushUpdateBlocked(false),
       myWidgetValidator(0)
 {
   myIsInternal = theData->getBooleanAttribute(ATTR_INTERNAL, false);
@@ -138,11 +139,16 @@ void ModuleBase_ModelWidget::setHighlighted(bool isHighlighted)
   }
 }
 
-void ModuleBase_ModelWidget::setFeature(const FeaturePtr& theFeature, const bool theToStoreValue)
+void ModuleBase_ModelWidget::setFeature(const FeaturePtr& theFeature, const bool theToStoreValue,
+                                        const bool isUpdateFlushed)
 {
+  /// it is possible to give this flag as parameter in storeValue/storeCustomValue
+  /// after debug, it may be corrected
+  myFlushUpdateBlocked = !isUpdateFlushed;
   myFeature = theFeature;
   if (theToStoreValue)
     storeValue();
+  myFlushUpdateBlocked = false;
 }
 
 bool ModuleBase_ModelWidget::focusTo()
@@ -287,8 +293,10 @@ bool ModuleBase_ModelWidget::restoreValue()
 
 void ModuleBase_ModelWidget::updateObject(ObjectPtr theObject)
 {
-  ModuleBase_Tools::flushUpdated(theObject);
-  emit objectUpdated();
+  if (!myFlushUpdateBlocked) {
+    ModuleBase_Tools::flushUpdated(theObject);
+    emit objectUpdated();
+  }
 }
 
 void ModuleBase_ModelWidget::moveObject(ObjectPtr theObj)
index def9a3fcb8ae65df33dbac398610d45de9ef0497..6face1021aa63407a48ea59e124b4014f97e5a25 100644 (file)
@@ -180,7 +180,9 @@ Q_OBJECT
   /// Set feature which is processing by active operation
   /// \param theFeature a feature object
   /// \param theToStoreValue a value about necessity to store the widget value to the feature
-  void setFeature(const FeaturePtr& theFeature, const bool theToStoreValue = false);
+  /// \param isUpdateFlushed a flag if update should be flushed on store value
+  void setFeature(const FeaturePtr& theFeature, const bool theToStoreValue = false,
+                  const bool isUpdateFlushed = true);
 
   /// Editing mode depends on mode of current operation. This value is defined by it.
   virtual void setEditingMode(bool isEditing) { myIsEditing = isEditing; }
@@ -320,6 +322,8 @@ private:
   bool myUseReset;
   /// blocked flag of modification of the value state
   bool myIsValueStateBlocked;
+  /// do not flush updated signal
+  bool myFlushUpdateBlocked;
 };
 
 #endif
index 0e20e9ab1a5e5a50d75a1bd94307520a5d57d88e..1b601779cb90bd5dfe71f1dad10881a8fae953e2 100755 (executable)
@@ -485,13 +485,16 @@ void XGUI_Workshop::setPropertyPanel(ModuleBase_Operation* theOperation)
       return;
     }
   }
+  // for performance purpose, flush should be done after all controls are filled
+  bool isUpdateFlushed = false;
   foreach (ModuleBase_ModelWidget* aWidget, aWidgets) {
     bool isStoreValue = !aFOperation->isEditOperation() &&
                         !aWidget->getDefaultValue().empty() &&
                         !aWidget->isComputedDefault();
-    aWidget->setFeature(aFeature, isStoreValue);
+    aWidget->setFeature(aFeature, isStoreValue, isUpdateFlushed);
     aWidget->enableFocusProcessing();
   }
+  ModuleBase_Tools::flushUpdated(aFeature);
 
   // update visible state of Preview button
 #ifdef HAVE_SALOME