+ aCmd->setEnabled(false);
+ }
+ }
+}
+
+//******************************************************
+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)
+{
+ if (theId == "ACTIVATE_PART_CMD")
+ activatePart(true);
+ else if (theId == "DEACTIVATE_PART_CMD")
+ activatePart(false);
+
+}
+
+//**************************************************************
+void XGUI_Workshop::activatePart(bool toActivate)
+{
+ if (toActivate) {
+ QFeatureList aFeatures = mySelector->selectedFeatures();
+ if (aFeatures.size() > 0) {
+ changeCurrentDocument(aFeatures.first());
+ myObjectBrowser->activateCurrentPart(true);