#include "XGUI_QtEvents.h"
#ifndef HAVE_SALOME
-#include <AppElements_Workbench.h>
-#include <AppElements_Command.h>
-#include <AppElements_MainMenu.h>
#include <AppElements_MainWindow.h>
-#include <AppElements_MenuGroupPanel.h>
-#include <AppElements_Button.h>
#endif
#include <ModuleBase_IModule.h>
#include <Config_PointerMessage.h>
#include <Config_SelectionFilterMessage.h>
#include <Config_Keywords.h>
+#include <Events_InfoMessage.h>
#include <QApplication>
#include <QMainWindow>
//#define DEBUG_RESULT_COMPSOLID
#ifdef DEBUG_FEATURE_REDISPLAY
-const std::string DebugFeatureKind = "Extrusion";
+const std::string DebugFeatureKind = "";//"Extrusion";
#endif
XGUI_WorkshopListener::XGUI_WorkshopListener(ModuleBase_IWorkshop* theWorkshop)
{
//Initialize event listening
Events_Loop* aLoop = Events_Loop::loop();
- aLoop->registerListener(this, Events_Error::errorID()); //!< Listening application errors.
- aLoop->registerListener(this, Events_Loop::eventByName(Config_FeatureMessage::GUI_EVENT()));
+ //aLoop->registerListener(this, Events_Error::errorID()); //!< Listening application errors.
+ aLoop->registerListener(this, Events_InfoMessage::errorID()); //!< Listening application errors.
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OPERATION_LAUNCHED));
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_CREATED));
aLoop->registerListener(this, Events_LongOp::eventID());
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_PLUGIN_LOADED));
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_SELFILTER_LOADED));
- aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_ERROR_CHANGED));
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED));
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED));
+ aLoop->registerListener(this, Events_Loop::eventByName(EVENT_EMPTY_AIS_PRESENTATION));
}
//******************************************************
return;
}
- //A message to start feature creation received.
- if (theMessage->eventID() == Events_Loop::loop()->eventByName(Config_FeatureMessage::GUI_EVENT())) {
- std::shared_ptr<Config_FeatureMessage> aFeatureMsg =
- std::dynamic_pointer_cast<Config_FeatureMessage>(theMessage);
- if (!aFeatureMsg->isInternal()) {
- addFeature(aFeatureMsg);
- }
- }
// Process creation of Part
- else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED)) {
+ if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED)) {
std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
onFeatureCreatedMsg(aUpdMsg);
std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
onFeatureRedisplayMsg(aUpdMsg);
+ } else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_EMPTY_AIS_PRESENTATION)) {
+ std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
+ std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
+ onFeatureEmptyPresentationMsg(aUpdMsg);
}
//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.
// the viewer's update context is unblocked, the viewer's update works
XGUI_Displayer* aDisplayer = workshop()->displayer();
aDisplayer->enableUpdateViewer(true);
- } else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_OBJECT_ERROR_CHANGED)) {
- std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
- std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
- std::set<ObjectPtr> anObjects = aUpdMsg->objects();
-
- ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
- (workshop()->operationMgr()->currentOperation());
- bool aFeatureChanged = false;
- if(aFOperation ) {
- FeaturePtr aFeature = aFOperation->feature();
- if (aFeature.get()) {
- std::set<ObjectPtr>::const_iterator aIt;
- for (aIt = anObjects.begin(); aIt != anObjects.end() && !aFeatureChanged; ++aIt) {
- aFeatureChanged = ModelAPI_Feature::feature(*aIt) == aFeature;
- }
- }
- if (aFeatureChanged)
- workshop()->operationMgr()->onValidateOperation();
- }
} else {
//Show error dialog if error message received.
- std::shared_ptr<Events_Error> anAppError = std::dynamic_pointer_cast<Events_Error>(theMessage);
- if (anAppError) {
- emit errorOccurred(QString::fromLatin1(anAppError->description()));
+ std::shared_ptr<Events_InfoMessage> anIngfoMsg = std::dynamic_pointer_cast<Events_InfoMessage>(theMessage);
+ if (anIngfoMsg) {
+ emit errorOccurred(anIngfoMsg);
}
return;
}
FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
if (aFeature.get()) {
std::string aKind = aFeature->getKind();
- if (aKind == DebugFeatureKind) {
+ if (aKind == DebugFeatureKind || DebugFeatureKind.empty()) {
qDebug(QString("visible=%1, hide=%2 : display= %2").arg(aDisplayer->isVisible(aObj))
.arg(aHide).arg(anObjInfo).toStdString().c_str());
}
bool isCustomized = customizeCurrentObject(anObjects, aRedisplayed);
if (aRedisplayed || isCustomized) {
+ Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_EMPTY_AIS_PRESENTATION));
+
//VSV FitAll updated viewer by it self
if (aFirstVisualizedBody)
myWorkshop->viewer()->fitAll();
aDisplayer->updateViewer();
}
}
+
//******************************************************
void XGUI_WorkshopListener::onFeatureCreatedMsg(const std::shared_ptr<ModelAPI_ObjectUpdatedMessage>& theMsg)
{
//if (myObjectBrowser)
// myObjectBrowser->processEvent(theMsg);
if (aDisplayed) {
+ Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_EMPTY_AIS_PRESENTATION));
//VSV FitAll updated viewer by it self
if (aFirstVisualizedBody)
myWorkshop->viewer()->fitAll();
//}
}
-bool XGUI_WorkshopListener::event(QEvent * theEvent)
+//******************************************************
+void XGUI_WorkshopListener::onFeatureEmptyPresentationMsg(
+ const std::shared_ptr<ModelAPI_ObjectUpdatedMessage>& theMsg)
{
- PostponeMessageQtEvent* aPostponedEv = dynamic_cast<PostponeMessageQtEvent*>(theEvent);
- if (aPostponedEv) {
- std::shared_ptr<Events_Message> aEventPtr = aPostponedEv->postponedMessage();
- processEvent(aEventPtr);
- return true;
+ std::set<ObjectPtr> anObjects = theMsg->objects();
+ std::set<ObjectPtr>::const_iterator aIt;
+#ifdef DEBUG_FEATURE_CREATED
+ QStringList anInfo;
+ for (aIt = anObjects.begin(); aIt != anObjects.end(); ++aIt) {
+ anInfo.append(ModuleBase_Tools::objectInfo((*aIt)));
}
- return false;
-}
-
-void XGUI_WorkshopListener::addFeature(const std::shared_ptr<Config_FeatureMessage>& theMessage)
-{
- if (!theMessage) {
-#ifdef _DEBUG
- qDebug() << "XGUI_WorkshopListener::addFeature: NULL message.";
+ QString anInfoStr = anInfo.join(";\t");
+ qDebug(QString("onFeatureEmptyPresentationMsg: %1, %2").arg(anObjects.size()).arg(anInfoStr).toStdString().c_str());
#endif
- return;
- }
- ActionInfo aFeatureInfo;
- aFeatureInfo.initFrom(theMessage);
XGUI_Workshop* aWorkshop = workshop();
+ XGUI_Displayer* aDisplayer = aWorkshop->displayer();
- QString aWchName = QString::fromStdString(theMessage->workbenchId());
- QStringList aNestedFeatures =
- QString::fromStdString(theMessage->nestedFeatures()).split(" ", QString::SkipEmptyParts);
- QString aDocKind = QString::fromStdString(theMessage->documentKind());
- QList<QAction*> aNestedActList;
- bool isColumnButton = !aNestedFeatures.isEmpty();
- if (isColumnButton) {
- QString aNestedActions = QString::fromStdString(theMessage->actionsWhenNested());
- XGUI_OperationMgr* anOperationMgr = aWorkshop->operationMgr();
- XGUI_ActionsMgr* anActionsMgr = aWorkshop->actionsMgr();
- if (aNestedActions.contains(FEATURE_WHEN_NESTED_ACCEPT)) {
- QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll, NULL);
- connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(commitAllOperations()));
- aNestedActList << anAction;
- }
- if (aNestedActions.contains(FEATURE_WHEN_NESTED_ABORT)) {
- QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AbortAll, NULL);
- connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(abortAllOperations()));
- aNestedActList << anAction;
- }
+ bool aRedisplayed = false;
+ for (aIt = anObjects.begin(); aIt != anObjects.end(); ++aIt) {
+ ObjectPtr anObject = *aIt;
+ aRedisplayed = aDisplayer->erase(anObject, false) || aRedisplayed;
}
-#ifdef HAVE_SALOME
- XGUI_SalomeConnector* aSalomeConnector = aWorkshop->salomeConnector();
- QAction* aAction;
- if (isColumnButton) {
- aAction = aSalomeConnector->addFeatureOfNested(aWchName, aFeatureInfo, aNestedActList);
- } else {
- //Issue #650: in the SALOME mode the tooltip should be same as text
- aFeatureInfo.toolTip = aFeatureInfo.text;
- aAction = aSalomeConnector->addFeature(aWchName, aFeatureInfo);
- }
- aSalomeConnector->setNestedActions(aFeatureInfo.id, aNestedFeatures);
- aSalomeConnector->setDocumentKind(aFeatureInfo.id, aDocKind);
-
- aWorkshop->actionsMgr()->addCommand(aAction);
- aWorkshop->module()->actionCreated(aAction);
-#else
- //Find or create Workbench
- AppElements_MainMenu* aMenuBar = aWorkshop->mainWindow()->menuObject();
- AppElements_Workbench* aPage = aMenuBar->findWorkbench(aWchName);
- if (!aPage) {
- aPage = aWorkshop->addWorkbench(aWchName);
- }
- //Find or create Group
- QString aGroupName = QString::fromStdString(theMessage->groupId());
- AppElements_MenuGroupPanel* aGroup = aPage->findGroup(aGroupName);
- if (!aGroup) {
- aGroup = aPage->addGroup(aGroupName);
- }
- // Check if hotkey sequence is already defined:
- XGUI_ActionsMgr* anActionsMgr = aWorkshop->actionsMgr();
- QKeySequence aHotKey = anActionsMgr->registerShortcut(aFeatureInfo.shortcut);
- if(aHotKey != aFeatureInfo.shortcut) {
- aFeatureInfo.shortcut = aHotKey;
- }
- // Create feature...
- AppElements_Command* aCommand = aGroup->addFeature(aFeatureInfo,
- aDocKind,
- aNestedFeatures,
- theMessage->isAutoPreview());
- // Enrich created button with accept/abort buttons if necessary
- AppElements_Button* aButton = aCommand->button();
- if (aButton->isColumnButton()) {
- aButton->setAdditionalButtons(aNestedActList);
- }
- aWorkshop->actionsMgr()->addCommand(aCommand);
- aWorkshop->module()->actionCreated(aCommand);
-#endif
+ if (aRedisplayed)
+ aDisplayer->updateViewer();
}
+bool XGUI_WorkshopListener::event(QEvent * theEvent)
+{
+ PostponeMessageQtEvent* aPostponedEv = dynamic_cast<PostponeMessageQtEvent*>(theEvent);
+ if (aPostponedEv) {
+ std::shared_ptr<Events_Message> aEventPtr = aPostponedEv->postponedMessage();
+ processEvent(aEventPtr);
+ return true;
+ }
+ return false;
+}
//**************************************************************
bool XGUI_WorkshopListener::displayObject(ObjectPtr theObj, bool& theFirstVisualizedBody)
// e.g. extrusion is hidden(h=0) but sketch is chosen
if (theForceRedisplay || theObjects.find(aCurrentFeature) != theObjects.end()) {
aCustomized = myWorkshop->module()->customizeObject(aCurrentFeature,
- ModuleBase_IModule::CustomizeArguments, false);
+ ModuleBase_IModule::CustomizeArguments, false) || aCustomized;
aCustomized = myWorkshop->module()->customizeObject(aCurrentFeature,
- ModuleBase_IModule::CustomizeResults, false);
+ ModuleBase_IModule::CustomizeResults, false) || aCustomized;
aCustomized = myWorkshop->module()->customizeObject(aCurrentFeature,
- ModuleBase_IModule::CustomizeHighlightedObjects, false);
+ ModuleBase_IModule::CustomizeHighlightedObjects, false) || aCustomized;
}
}
return aCustomized;