#include <XGUI_MainWindow.h>
#include <XGUI_Displayer.h>
+#include <XGUI_Viewer.h>
+#include <XGUI_Workshop.h>
+#include <XGUI_OperationMgr.h>
#include <Config_PointerMessage.h>
#include <Config_ModuleReader.h>
#include <Config_WidgetReader.h>
-#include <Event_Loop.h>
-#include <Event_Message.h>
+#include <Events_Loop.h>
+#include <Events_Message.h>
#include <QObject>
#include <QString>
PartSet_Module::PartSet_Module(XGUI_Workshop* theWshop)
{
myWorkshop = theWshop;
+ XGUI_OperationMgr* anOperationMgr = myWorkshop->operationMgr();
+
+ connect(anOperationMgr, SIGNAL(operationStarted()), this, SLOT(onOperationStarted()));
+ connect(anOperationMgr, SIGNAL(operationStopped(ModuleBase_Operation*)),
+ this, SLOT(onOperationStopped(ModuleBase_Operation*)));
}
PartSet_Module::~PartSet_Module()
} else {
aPartSetOp = new ModuleBase_PropPanelOperation(aCmdId, this);
}
- PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(aPartSetOp);
- if (aPreviewOp) {
- connect(aPreviewOp, SIGNAL(visualizePreview()), this, SLOT(onVisualizePreview()));
- }
aPartSetOp->setXmlRepresentation(QString::fromStdString(aXmlCfg));
aPartSetOp->setDescription(QString::fromStdString(aDescription));
//TODO(sbh): Implement static method to extract event id [SEID]
- static Event_ID aModuleEvent = Event_Loop::eventByName("PartSetModuleEvent");
+ static Events_ID aModuleEvent = Events_Loop::eventByName("PartSetModuleEvent");
Config_PointerMessage aMessage(aModuleEvent, this);
aMessage.setPointer(aPartSetOp);
- Event_Loop::loop()->send(aMessage);
+ Events_Loop::loop()->send(aMessage);
}
-void PartSet_Module::onVisualizePreview()
+void PartSet_Module::onOperationStarted()
{
- ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
+ ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
+
+ PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+ if (aPreviewOp) {
+ connect(myWorkshop->mainWindow()->viewer(), SIGNAL(selectionChanged()),
+ aPreviewOp, SLOT(onViewSelectionChanged()));
+ visualizePreview(true);
+ }
+}
+
+void PartSet_Module::onOperationStopped(ModuleBase_Operation* theOperation)
+{
+ ModuleBase_PropPanelOperation* anOperation = dynamic_cast<ModuleBase_PropPanelOperation*>(theOperation);
+ if (!anOperation)
+ return;
+
+ PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+ if (aPreviewOp) {
+ disconnect(myWorkshop->mainWindow()->viewer(), SIGNAL(selectionChanged()),
+ aPreviewOp, SLOT(onViewSelectionChanged()));
+ visualizePreview(false);
+ }
+}
+
+void PartSet_Module::visualizePreview(bool isDisplay)
+{
+ ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
if (!anOperation)
return;
if (!aPreviewOp)
return;
- myWorkshop->displayer()->Display(anOperation->feature(), aPreviewOp->preview());
+ if (isDisplay) {
+ myWorkshop->displayer()->LocalSelection(anOperation->feature(), aPreviewOp->preview(),
+ aPreviewOp->getSelectionMode());
+ }
+ else {
+ myWorkshop->displayer()->GlobalSelection(false);
+ myWorkshop->displayer()->Erase(anOperation->feature(), aPreviewOp->preview());
+ }
}