X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Workshop.cpp;h=a8d23dd5212af78cc510beffafac2f6a03ed8269;hb=66d6a0e9ffd402b9252c0c367b6e9d8dd8d9c636;hp=27eee74701d21f716bc7f1b6a43ba4059287590f;hpb=3244e0f3d7e585ccfc3c37c56fbf5d6826055448;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.cpp b/src/XGUI/XGUI_Workshop.cpp index 27eee7470..a8d23dd52 100644 --- a/src/XGUI/XGUI_Workshop.cpp +++ b/src/XGUI/XGUI_Workshop.cpp @@ -30,12 +30,14 @@ #include #include #include -#include +#include +#include #include #include #include +#include #include #include @@ -135,6 +137,7 @@ void XGUI_Workshop::startApplication() aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_CREATED)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_DELETED)); + aLoop->registerListener(this, Events_Loop::eventByName("LongOperation")); registerValidators(); activateModule(); @@ -223,8 +226,7 @@ XGUI_Workbench* XGUI_Workshop::addWorkbench(const QString& theName) void XGUI_Workshop::processEvent(const Events_Message* theMessage) { //A message to start feature creation received. - static Events_ID aFeatureLoadedId = Events_Loop::loop()->eventByName(EVENT_FEATURE_LOADED); - if (theMessage->eventID() == aFeatureLoadedId) { + if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_FEATURE_LOADED)) { const Config_FeatureMessage* aFeatureMsg = dynamic_cast(theMessage); if(!aFeatureMsg->isInternal()) { addFeature(aFeatureMsg); @@ -262,6 +264,15 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage) return; } + if (theMessage->eventID() == Events_LongOp::eventID()) { + if (Events_LongOp::isPerformed()) + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + //QTimer::singleShot(10, this, SLOT(onStartWaiting())); + else + QApplication::restoreOverrideCursor(); + return; + } + //An operation passed by message. Start it, process and commit. if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OPERATION_LAUNCHED)) { const Config_PointerMessage* aPartSetMsg = dynamic_cast(theMessage); @@ -284,6 +295,14 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage) } } +//****************************************************** +void XGUI_Workshop::onStartWaiting() +{ + if (Events_LongOp::isPerformed()) { + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + } +} + //****************************************************** void XGUI_Workshop::onFeatureUpdatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg) { @@ -309,11 +328,19 @@ void XGUI_Workshop::onFeatureRedisplayMsg(const ModelAPI_ObjectUpdatedMessage* t std::set::const_iterator aIt; for (aIt = aObjects.begin(); aIt != aObjects.end(); ++aIt) { ObjectPtr aObj = (*aIt); - if (!aObj->data() ) + if (!aObj->data() || !aObj->data()->isValid()) myDisplayer->erase(aObj, false); else { if (myDisplayer->isVisible(aObj)) // TODO VSV: Correction sketch drawing myDisplayer->display(aObj, false); // In order to update presentation + else { + if(myOperationMgr->hasOperation()) { + ModuleBase_Operation* aOperation = myOperationMgr->currentOperation(); + if (aOperation->hasObject(aObj)) { // Display only current operation results + myDisplayer->display(aObj, false); + } + } + } } } myDisplayer->updateViewer(); @@ -560,8 +587,9 @@ void XGUI_Workshop::onOpen() } QApplication::setOverrideCursor(Qt::WaitCursor); aDoc->load(myCurrentDir.toLatin1().constData()); - updateCommandStatus(); myObjectBrowser->rebuildDataTree(); + displayAllResults(); + updateCommandStatus(); QApplication::restoreOverrideCursor(); } @@ -988,6 +1016,8 @@ void XGUI_Workshop::updateCommandsOnViewSelection() PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); XGUI_Selection* aSelection = mySelector->selection(); + if (aSelection->getSelected().size() == 0) + return; QList aActions = getModuleCommands(); foreach(QAction* aAction, aActions) { @@ -1010,7 +1040,36 @@ void XGUI_Workshop::registerValidators() const PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); - aFactory->registerValidator("ModuleBase_ResulPointValidator", new ModuleBase_ResulPointValidator); - aFactory->registerValidator("ModuleBase_ResulLineValidator", new ModuleBase_ResulLineValidator); - aFactory->registerValidator("ModuleBase_ResulArcValidator", new ModuleBase_ResulArcValidator); + aFactory->registerValidator("ModuleBase_ResultPointValidator", new ModuleBase_ResultPointValidator); + aFactory->registerValidator("ModuleBase_ResultLineValidator", new ModuleBase_ResultLineValidator); + aFactory->registerValidator("ModuleBase_ResultArcValidator", new ModuleBase_ResultArcValidator); +} + + +//************************************************************** +void XGUI_Workshop::displayAllResults() +{ + PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); + DocumentPtr aRootDoc = aMgr->rootDocument(); + displayDocumentResults(aRootDoc); + for (int i = 0; i < aRootDoc->size(ModelAPI_ResultPart::group()); i++) { + ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), i); + ResultPartPtr aPart = boost::dynamic_pointer_cast(aObject); + displayDocumentResults(aPart->partDoc()); + } + myDisplayer->updateViewer(); +} + +//************************************************************** +void XGUI_Workshop::displayDocumentResults(DocumentPtr theDoc) +{ + displayGroupResults(theDoc, ModelAPI_ResultConstruction::group()); + displayGroupResults(theDoc, ModelAPI_ResultBody::group()); } + +//************************************************************** +void XGUI_Workshop::displayGroupResults(DocumentPtr theDoc, std::string theGroup) +{ + for (int i = 0; i < theDoc->size(theGroup); i++) + myDisplayer->display(theDoc->object(theGroup, i), false); +} \ No newline at end of file