+
+//******************************************************
+void XGUI_Workshop::updateCommandStatus()
+{
+ if (isSalomeMode()) // TODO: update commands in SALOME
+ return;
+ XGUI_MainMenu* aMenuBar = myMainWindow->menuObject();
+
+ QList<XGUI_Command*> aCommands = aMenuBar->features();
+ QList<XGUI_Command*>::const_iterator aIt;
+
+ boost::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
+ if (aMgr->hasRootDocument()) {
+ XGUI_Command* aUndoCmd;
+ XGUI_Command* aRedoCmd;
+ for (aIt = aCommands.constBegin(); aIt != aCommands.constEnd(); ++aIt) {
+ if ((*aIt)->id() == "UNDO_CMD")
+ aUndoCmd = (*aIt);
+ else if ((*aIt)->id() == "REDO_CMD")
+ aRedoCmd = (*aIt);
+ else // Enable all commands
+ (*aIt)->enable();
+ }
+ boost::shared_ptr<ModelAPI_Document> aDoc = aMgr->rootDocument();
+ aUndoCmd->setEnabled(aDoc->canUndo());
+ aRedoCmd->setEnabled(aDoc->canRedo());
+ } else {
+ for (aIt = aCommands.constBegin(); aIt != aCommands.constEnd(); ++aIt) {
+ if ((*aIt)->id() == "NEW_CMD")
+ (*aIt)->enable();
+ else if ((*aIt)->id() == "EXIT_CMD")
+ (*aIt)->enable();
+ else
+ (*aIt)->disable();
+ }
+ }
+}
+
+//******************************************************
+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);
+ aObjDock->setWidget(myObjectBrowser);
+ 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);
+}
+
+//******************************************************
+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()
+{
+ QFeatureList aFeatures = objectBrowser()->selectedFeatures();
+
+ // Set current document
+ if (aFeatures.size() > 0) {
+ FeaturePtr aFeature = aFeatures.first();
+
+ boost::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
+ boost::shared_ptr<ModelAPI_AttributeDocRef> aDocRef = aFeature->data()->docRef("PartDocument");
+ if (aDocRef)
+ aMgr->setCurrentDocument(aDocRef->value());
+ }
+}
+
+//******************************************************
+void XGUI_Workshop::salomeViewerSelectionChanged()
+{
+ emit salomeViewerSelection();
+}
+
+
+//**************************************************************
+XGUI_SalomeViewer* XGUI_Workshop::salomeViewer() const
+{
+ return mySalomeConnector->viewer();
+}