#endif
#include <ModuleBase_IModule.h>
+#include <ModuleBase_Events.h>
#include <ModelAPI_Object.h>
#include <ModelAPI_Events.h>
#include <ModelAPI_Tools.h>
#include <Events_Loop.h>
-#include <Events_Error.h>
#include <Events_LongOp.h>
#include <ModuleBase_IWorkshop.h>
#include <ModuleBase_Tools.h>
#include <ModuleBase_IViewer.h>
#include <ModuleBase_FilterFactory.h>
+#include <ModuleBase_WidgetSelector.h>
#include <Config_FeatureMessage.h>
#include <Config_PointerMessage.h>
#include <Config_SelectionFilterMessage.h>
#include <Config_Keywords.h>
+#include <Events_InfoMessage.h>
#include <QApplication>
#include <QMainWindow>
{
//Initialize event listening
Events_Loop* aLoop = Events_Loop::loop();
- aLoop->registerListener(this, Events_Error::errorID()); //!< Listening application errors.
- aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OPERATION_LAUNCHED));
+ aLoop->registerListener(this, Events_InfoMessage::errorID()); //!< Listening application errors.
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
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_UPDATE_VIEWER_BLOCKED));
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED));
+ aLoop->registerListener(this, Events_Loop::eventByName(EVENT_EMPTY_AIS_PRESENTATION));
+ aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_BY_WIDGET_SELECTION));
}
//******************************************************
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);
+ } else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_UPDATE_BY_WIDGET_SELECTION)) {
+ ModuleBase_ModelWidget* aWidget = workshop()->propertyPanel()->activeWidget();
+ if (aWidget) {
+ ModuleBase_WidgetSelector* aWidgetSelector = dynamic_cast<ModuleBase_WidgetSelector*>(aWidget);
+ if (aWidgetSelector)
+ myWorkshop->setSelected(aWidgetSelector->getAttributeSelection());
+ }
}
+
//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)) {
QApplication::restoreOverrideCursor();
}
}
- //An operation passed by message. Start it, process and commit.
- else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OPERATION_LAUNCHED)) {
- std::shared_ptr<Config_PointerMessage> aPartSetMsg =
- std::dynamic_pointer_cast<Config_PointerMessage>(theMessage);
- //myPropertyPanel->cleanContent();
- ModuleBase_Operation* anOperation = (ModuleBase_Operation*) aPartSetMsg->pointer();
- XGUI_OperationMgr* anOperationMgr = workshop()->operationMgr();
-
- if (anOperationMgr->startOperation(anOperation)) {
- ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(anOperation);
- if (aFOperation) {
- workshop()->propertyPanel()->updateContentWidget(aFOperation->feature());
- workshop()->propertyPanel()->createContentPanel(aFOperation->feature());
- }
- if (!anOperation->getDescription()->hasXmlRepresentation()) {
- if (anOperation->commit())
- workshop()->updateCommandStatus();
- }
- }
- }
else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_SELFILTER_LOADED)) {
std::shared_ptr<Config_SelectionFilterMessage> aMsg =
std::dynamic_pointer_cast<Config_SelectionFilterMessage>(theMessage);
aDisplayer->enableUpdateViewer(true);
} 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;
}
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();
//}
}
+//******************************************************
+void XGUI_WorkshopListener::onFeatureEmptyPresentationMsg(
+ const std::shared_ptr<ModelAPI_ObjectUpdatedMessage>& theMsg)
+{
+ 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)));
+ }
+ QString anInfoStr = anInfo.join(";\t");
+ qDebug(QString("onFeatureEmptyPresentationMsg: %1, %2").arg(anObjects.size()).arg(anInfoStr).toStdString().c_str());
+#endif
+
+ XGUI_Workshop* aWorkshop = workshop();
+ XGUI_Displayer* aDisplayer = aWorkshop->displayer();
+
+ bool aRedisplayed = false;
+ for (aIt = anObjects.begin(); aIt != anObjects.end(); ++aIt) {
+ ObjectPtr anObject = *aIt;
+ aRedisplayed = aDisplayer->erase(anObject, false) || aRedisplayed;
+ }
+
+ if (aRedisplayed)
+ aDisplayer->updateViewer();
+}
+
bool XGUI_WorkshopListener::event(QEvent * theEvent)
{
PostponeMessageQtEvent* aPostponedEv = dynamic_cast<PostponeMessageQtEvent*>(theEvent);
// 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;