+ aCmd->setEnabled(false);
+ }
+ }
+ myActionsMgr->update();
+}
+
+//******************************************************
+QDockWidget* XGUI_Workshop::createObjectBrowser(QWidget* theParent)
+{
+ QDockWidget* aObjDock = new QDockWidget(theParent);
+ aObjDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ aObjDock->setWindowTitle(tr("Object browser"));
+ myObjectBrowser = new XGUI_ObjectsBrowser(aObjDock);
+ connect(myObjectBrowser, SIGNAL(activePartChanged(FeaturePtr)), this, SLOT(changeCurrentDocument(FeaturePtr)));
+ aObjDock->setWidget(myObjectBrowser);
+
+ myContextMenuMgr->connectObjectBrowser();
+ return aObjDock;
+}
+
+//******************************************************
+/*
+ * Creates dock widgets, places them in corresponding area
+ * and tabifies if necessary.
+ */
+void XGUI_Workshop::createDockWidgets()
+{
+ QMainWindow* aDesktop = isSalomeMode()? salomeConnector()->desktop() :
+ myMainWindow;
+ QDockWidget* aObjDock = createObjectBrowser(aDesktop);
+ aDesktop->addDockWidget(Qt::LeftDockWidgetArea, aObjDock);
+ myPropertyPanel = new XGUI_PropertyPanel(aDesktop);
+ aDesktop->addDockWidget(Qt::LeftDockWidgetArea, myPropertyPanel);
+ hidePropertyPanel(); //<! Invisible by default
+ hideObjectBrowser();
+ aDesktop->tabifyDockWidget(aObjDock, myPropertyPanel);
+
+ QPushButton* aOkBtn = myPropertyPanel->findChild<QPushButton*>(XGUI::PROP_PANEL_OK);
+ connect(aOkBtn, SIGNAL(clicked()), myOperationMgr, SLOT(onCommitOperation()));
+ QPushButton* aCancelBtn = myPropertyPanel->findChild<QPushButton*>(XGUI::PROP_PANEL_CANCEL);
+ connect(aCancelBtn, SIGNAL(clicked()), myOperationMgr, SLOT(onAbortOperation()));
+}
+
+//******************************************************
+void XGUI_Workshop::showPropertyPanel()
+{
+ QAction* aViewAct = myPropertyPanel->toggleViewAction();
+ //<! Restore ability to close panel from the window's menu
+ aViewAct->setEnabled(true);
+ myPropertyPanel->show();
+ myPropertyPanel->raise();
+}
+
+//******************************************************
+void XGUI_Workshop::hidePropertyPanel()
+{
+ QAction* aViewAct = myPropertyPanel->toggleViewAction();
+ //<! Do not allow to show empty property panel
+ aViewAct->setEnabled(false);
+ myPropertyPanel->hide();
+}
+
+//******************************************************
+void XGUI_Workshop::showObjectBrowser()
+{
+ myObjectBrowser->parentWidget()->show();
+}
+
+//******************************************************
+void XGUI_Workshop::hideObjectBrowser()
+{
+ myObjectBrowser->parentWidget()->hide();
+}
+
+//******************************************************
+void XGUI_Workshop::onFeatureTriggered()
+{
+ QAction* aCmd = dynamic_cast<QAction*>(sender());
+ if (aCmd) {
+ QString aId = salomeConnector()->commandId(aCmd);
+ if (!aId.isNull())
+ myPartSetModule->launchOperation(aId);
+ }
+}
+
+//******************************************************
+void XGUI_Workshop::changeCurrentDocument(FeaturePtr thePart)
+{
+ PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+ if (thePart) {
+ boost::shared_ptr<ModelAPI_AttributeDocRef> aDocRef = thePart->data()->docRef("PartDocument");
+ if (aDocRef)
+ aMgr->setCurrentDocument(aDocRef->value());
+ } else {
+ aMgr->setCurrentDocument(aMgr->rootDocument());
+ }
+}
+
+//******************************************************
+void XGUI_Workshop::salomeViewerSelectionChanged()
+{
+ emit salomeViewerSelection();
+}
+
+
+//**************************************************************
+XGUI_SalomeViewer* XGUI_Workshop::salomeViewer() const
+{
+ return mySalomeConnector->viewer();
+}
+
+//**************************************************************
+void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
+{
+ QFeatureList aFeatures = mySelector->selectedFeatures();
+ if ((theId == "ACTIVATE_PART_CMD") && (aFeatures.size() > 0))
+ activatePart(aFeatures.first());
+ else if (theId == "DEACTIVATE_PART_CMD")
+ activatePart(FeaturePtr());
+ else if (theId == "DELETE_CMD")
+ deleteFeatures(aFeatures);
+}
+
+//**************************************************************
+void XGUI_Workshop::activatePart(FeaturePtr theFeature)
+{
+ changeCurrentDocument(theFeature);
+ myObjectBrowser->activatePart(theFeature);
+}
+
+//**************************************************************
+void XGUI_Workshop::activateLastPart()
+{
+ PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+ DocumentPtr aDoc = aMgr->rootDocument();
+ FeaturePtr aLastPart = aDoc->feature(PARTS_GROUP, aDoc->size(PARTS_GROUP) - 1, true);
+ activatePart(aLastPart);
+}
+
+//**************************************************************
+void XGUI_Workshop::deleteFeatures(QFeatureList theList)
+{
+ QMainWindow* aDesktop = isSalomeMode()? salomeConnector()->desktop() : myMainWindow;
+ QMessageBox::StandardButton aRes = QMessageBox::warning(aDesktop, tr("Delete features"),
+ tr("Seleted features will be deleted. Continue?"),
+ QMessageBox::No | QMessageBox::Yes, QMessageBox::No);
+ if (aRes == QMessageBox::Yes) {
+ PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+ aMgr->rootDocument()->startOperation();
+ foreach (FeaturePtr aFeature, theList) {
+ if (aFeature->getKind() == "Part") {
+ DocumentPtr aDoc = aFeature->data()->docRef("PartDocument")->value();
+ if (aDoc == aMgr->currentDocument()) {
+ aDoc->close();
+ }
+ } //else
+ //aDoc = aFeature->document();
+ aMgr->rootDocument()->removeFeature(aFeature);