-// 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
#include <ModuleBase_Tools.h>
#include <ModuleBase_WidgetSelector.h>
-#ifdef HAVE_SALOME
#include <SUIT_Application.h>
#include <SUIT_Session.h>
-#endif
#include "XGUI_ActionsMgr.h"
#include "XGUI_Displayer.h"
#include <iostream>
#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
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());
}
//******************************************************
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)) {
// 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<Events_InfoMessage> anIngfoMsg =
void XGUI_WorkshopListener::
onFeatureCreatedMsg(const std::shared_ptr<ModelAPI_ObjectUpdatedMessage>& 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<ObjectPtr> anObjects = theMsg->objects();
std::set<ObjectPtr>::const_iterator aIt;
//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<ModelAPI_Result>(anObject);
- if (aRes.get()) {
- ResultCompSolidPtr aCompSolidRes = std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(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<ModelAPI_Result>(anObject);
+ if (aRes.get()) {
+ ResultCompSolidPtr aCompSolidRes =
+ std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(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<ModelAPI_ResultBody>(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<ModelAPI_ResultBody>(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)
}
-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