X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_WorkshopListener.cpp;h=4f8d3c09c8b398875849778538fbb057a7c1c3af;hb=4de8d53fef7532b6843d79c970f55ad46f98da62;hp=34b87d99a97e4603d1f51e05ce7e9634158eb341;hpb=766ce5d72bbae841d6c042befdf95e7d945039e1;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_WorkshopListener.cpp b/src/XGUI/XGUI_WorkshopListener.cpp index 34b87d99a..4f8d3c09c 100644 --- a/src/XGUI/XGUI_WorkshopListener.cpp +++ b/src/XGUI/XGUI_WorkshopListener.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2021 CEA/DEN, EDF R&D +// Copyright (C) 2014-2024 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -50,10 +50,8 @@ #include #include -#ifdef HAVE_SALOME #include #include -#endif #include "XGUI_ActionsMgr.h" #include "XGUI_Displayer.h" @@ -77,6 +75,10 @@ #include #endif +#ifdef WIN32 +#pragma warning(disable : 4189) // for declaration of unused variables (MAYBE_UNUSED) +#endif + //#define DEBUG_FEATURE_CREATED //#define DEBUG_FEATURE_REDISPLAY //#define DEBUG_FEATURE_UPDATED @@ -119,6 +121,7 @@ void XGUI_WorkshopListener::initializeEventListening() aLoop->registerListener(this, Events_Loop::eventByName("AbortOperation")); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_AUTOMATIC_RECOMPUTATION_ENABLE)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_AUTOMATIC_RECOMPUTATION_DISABLE)); + aLoop->registerListener(this, ModelAPI_ObjectRenamedMessage::eventId()); } //****************************************************** @@ -191,10 +194,14 @@ void XGUI_WorkshopListener::processEvent(const std::shared_ptr& if (aWidgetSelector) workshop()->selector()->setSelected(aWidgetSelector->getAttributeSelection()); } - } else if (theMessage->eventID() == Events_Loop::eventByName("FinishOperation")/* || - theMessage->eventID() == Events_Loop::eventByName("AbortOperation")*/) - workshop()->facesPanel()->reset(false); // do not flush redisplay, it is flushed after event - + } + else if (theMessage->eventID() == Events_Loop::eventByName("FinishOperation")/* || + theMessage->eventID() == Events_Loop::eventByName("AbortOperation")*/) + { + XGUI_FacesPanel* aFacesPanel = workshop()->facesPanel(); + if (aFacesPanel) + aFacesPanel->reset(false); // do not flush redisplay, it is flushed after event + } //Update property panel on corresponding message. If there is no current operation (no //property panel), or received message has different feature to the current - do nothing. else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) { @@ -214,11 +221,16 @@ void XGUI_WorkshopListener::processEvent(const std::shared_ptr& // the viewer's update context is unblocked, the viewer's update works XGUI_Displayer* aDisplayer = workshop()->displayer(); aDisplayer->enableUpdateViewer(true); - } else if ((theMessage->eventID() == + } + else if ((theMessage->eventID() == Events_Loop::eventByName(EVENT_AUTOMATIC_RECOMPUTATION_ENABLE)) || (theMessage->eventID() == Events_Loop::eventByName(EVENT_AUTOMATIC_RECOMPUTATION_DISABLE))) { myWorkshop->updateAutoComputeState(); + } + else if (theMessage->eventID() == ModelAPI_ObjectRenamedMessage::eventId()) { + myWorkshop->updateGroupsText(); + myWorkshop->displayer()->updateViewer(); } else { //Show error dialog if error message received. std::shared_ptr anIngfoMsg = @@ -397,9 +409,13 @@ void XGUI_WorkshopListener:: void XGUI_WorkshopListener:: onFeatureCreatedMsg(const std::shared_ptr& theMsg) { - SUIT_Application * app = SUIT_Session::session()->activeApplication(); - - QVariant aVar = app->property("IsLoadedScript"); + bool isLoadedScript = false; + SUIT_Session* aSession = SUIT_Session::session(); + if (aSession) + { + QVariant aVar = aSession->activeApplication()->property("IsLoadedScript"); + isLoadedScript = !aVar.isNull() && aVar.toBool(); + } std::set anObjects = theMsg->objects(); std::set::const_iterator aIt; @@ -415,32 +431,31 @@ void XGUI_WorkshopListener:: //bool aHasPart = false; bool aDisplayed = false; - if (aVar.isNull() || !aVar.toBool()) { - for (aIt = anObjects.begin(); aIt != anObjects.end(); ++aIt) { - ObjectPtr anObject = *aIt; + for (aIt = anObjects.begin(); aIt != anObjects.end(); ++aIt) { + ObjectPtr anObject = *aIt; #ifdef DEBUG_RESULT_COMPSOLID - ResultPtr aRes = std::dynamic_pointer_cast(anObject); - if (aRes.get()) { - ResultCompSolidPtr aCompSolidRes = std::dynamic_pointer_cast(aRes); - if (aCompSolidRes.get()) { - qDebug(QString("COMPSOLID, numberOfSubs = %1") - .arg(aCompSolidRes->numberOfSubs()).toStdString().c_str()); - } - if (ModelAPI_Tools::compSolidOwner(aRes)) - qDebug("COMPSOLID sub-object"); + ResultPtr aRes = std::dynamic_pointer_cast(anObject); + if (aRes.get()) { + ResultCompSolidPtr aCompSolidRes = + std::dynamic_pointer_cast(aRes); + if (aCompSolidRes.get()) { + qDebug(QString("COMPSOLID, numberOfSubs = %1") + .arg(aCompSolidRes->numberOfSubs()).toStdString().c_str()); } + if (ModelAPI_Tools::compSolidOwner(aRes)) + qDebug("COMPSOLID sub-object"); + } #endif - ResultBodyPtr aRes = std::dynamic_pointer_cast(anObject); - - if (aRes.get() && aRes->numberOfSubs() > 0) - for (int anIndex = 0; anIndex < aRes->numberOfSubs(); ++anIndex) - setDisplayed(aRes->subResult(anIndex), aDisplayed); - else - setDisplayed(anObject, aDisplayed); - } + ResultBodyPtr aRes = std::dynamic_pointer_cast(anObject); + if (aRes.get() && aRes->numberOfSubs() > 0) + for (int anIndex = 0; anIndex < aRes->numberOfSubs(); ++anIndex) + setDisplayed(aRes->subResult(anIndex), isLoadedScript, aDisplayed); + else + setDisplayed(anObject, isLoadedScript, aDisplayed); } + MAYBE_UNUSED bool isCustomized = customizeFeature(anObjects, aDisplayed); //if (myObjectBrowser) @@ -555,8 +570,13 @@ XGUI_Workshop* XGUI_WorkshopListener::workshop() const } -void XGUI_WorkshopListener::setDisplayed(ObjectPtr theObject, bool& theDisplayed) +void XGUI_WorkshopListener::setDisplayed( + ObjectPtr theObject, const bool theIsLoadedScript, bool& theDisplayed) { + if (theIsLoadedScript) { + theObject->setDisplayed(theDisplayed); + return; + } // the validity of the data should be checked here in order to avoid display of the objects, // which were created, then deleted, but flush for the creation event happens after that // we should not display disabled objects