X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Workshop.cpp;h=41c911529b558fc01f1ebe6032f7a178c3fe7b33;hb=998909e881f6117ac083d0f4ae607602fce7fc55;hp=4b26dd4ee8d7eab122b36123a8510c3378517f52;hpb=368eb86f8835d384a102ad84410a6c825c597a8c;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.cpp b/src/XGUI/XGUI_Workshop.cpp index 4b26dd4ee..41c911529 100644 --- a/src/XGUI/XGUI_Workshop.cpp +++ b/src/XGUI/XGUI_Workshop.cpp @@ -54,8 +54,9 @@ #include #include #include -#include +#include #include +#include #include #include @@ -95,24 +96,6 @@ //#define DEBUG_FEATURE_CREATED //#define DEBUG_FEATURE_REDISPLAY -QString objectInfo(ObjectPtr theObj) -{ - ResultPtr aRes = std::dynamic_pointer_cast(theObj); - FeaturePtr aFeature = std::dynamic_pointer_cast(theObj); - QString aFeatureStr = "feature"; - if(aRes.get()) { - aFeatureStr.append("(Result)"); - aFeature = ModelAPI_Feature::feature(aRes); - } - if (aFeature.get()) { - aFeatureStr.append(QString(": %1").arg(aFeature->getKind().c_str()).toStdString().c_str()); - if (aFeature->data().get() && aFeature->data()->isValid()) - aFeatureStr.append(QString("(name=%1)").arg(aFeature->data()->name().c_str()).toStdString().c_str()); - } - return aFeatureStr; -} - - QMap XGUI_Workshop::myIcons; @@ -541,7 +524,7 @@ void XGUI_Workshop::onFeatureRedisplayMsg(const std::shared_ptrisVisible(aObj); #ifdef DEBUG_FEATURE_REDISPLAY - //QString anObjInfo = objectInfo((aObj)); + //QString anObjInfo = ModuleBase_Tools::objectInfo((aObj)); //qDebug(QString("visible=%1 : display= %2").arg(isVisibleObject).arg(anObjInfo).toStdString().c_str()); #endif @@ -598,7 +581,7 @@ void XGUI_Workshop::onFeatureCreatedMsg(const std::shared_ptractivateObjects(aModes); + // the deactivation should be pefromed in the same place, where the mode is activated, + // e.g. activation in the current widget activation, deactivation - in the widget's deactivation + //QIntList aModes; + //myDisplayer->activateObjects(aModes); myModule->operationStopped(theOperation); } @@ -998,6 +983,12 @@ void XGUI_Workshop::onUndo(int theTimes) //****************************************************** void XGUI_Workshop::onRedo(int theTimes) { + // the viewer update should be blocked in order to avoid the features blinking. For the created + // feature a results are created, the flush of the created signal caused the viewer redisplay for + // each created result. After a redisplay signal is flushed. So, the viewer update is blocked until + // redo of all possible objects happens + bool isUpdateEnabled = myDisplayer->enableUpdateViewer(false); + objectBrowser()->treeView()->setCurrentIndex(QModelIndex()); SessionPtr aMgr = ModelAPI_Session::get(); if (aMgr->isOperation()) @@ -1006,6 +997,10 @@ void XGUI_Workshop::onRedo(int theTimes) aMgr->redo(); } updateCommandStatus(); + + // unblock the viewer update functionality and make update on purpose + myDisplayer->enableUpdateViewer(isUpdateEnabled); + myDisplayer->updateViewer(); } //****************************************************** @@ -1458,9 +1453,6 @@ These features will be deleted also. Would you like to continue?")).arg(aNames), aDoc->removeFeature(aFeature); } } - // the update signal should be emitted obligatory in order to have a redisplay - // signal and hide the removed presentations in the viewer - Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); return true; }