]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/XGUI/XGUI_Workshop.cpp
Salome HOME
#2027 Sketcher Trim feature - highlight should be cleared when the mouse is moved...
[modules/shaper.git] / src / XGUI / XGUI_Workshop.cpp
index 0cfa51c9acaa68c4f28de734d3d6ccc0cbc7a5d3..baa7594cb21d38702667a093818af4ab721a140b 100755 (executable)
@@ -58,7 +58,6 @@
 #include <Events_InfoMessage.h>
 #include <Events_LongOp.h>
 
-#include <ModuleBase_FilterFactory.h>
 #include <ModuleBase_IModule.h>
 #include <ModuleBase_IViewer.h>
 #include <ModuleBase_Operation.h>
 #include <Config_ModuleReader.h>
 #include <Config_PointerMessage.h>
 #include <Config_PropManager.h>
-#include <Config_SelectionFilterMessage.h>
 #include <Config_DataModelReader.h>
 #include <Config_Translator.h>
 
 #include <SUIT_ResourceMgr.h>
 
+#include <AIS_Trihedron.hxx>
+#ifdef BEFORE_TRIHEDRON_PATCH
+#include <AIS_Point.hxx>
+#include <AIS_Axis.hxx>
+#endif
+
 #include <QApplication>
 #include <QFileDialog>
 #include <QMessageBox>
 
 #include <iterator>
 
-#ifdef VINSPECTOR
-#include <VInspectorAPI_PluginMgr.h>
-#include <VInspectorAPI_Communicator.h>
-static bool VInspector_FirstCall = true;
-#endif
-
-#ifdef DFBROWSER
+#ifdef TINSPECTOR
 #include <CDF_Session.hxx>
-#include <DFBrowserAPI_Communicator.hxx>
-static bool DFBrowser_FirstCall = true;
+#include <CDF_Application.hxx>
+#include <TInspector_Communicator.hxx>
+#include <VInspector_CallBack.hxx>
+static TInspector_Communicator* MyTCommunicator;
+static Handle(VInspector_CallBack) MyVCallBack;
+
 #endif
 
 #ifdef _DEBUG
@@ -334,6 +336,24 @@ void XGUI_Workshop::deactivateModule()
   XGUI_Displayer* aDisplayer = displayer();
   QObjectPtrList aDisplayed = aDisplayer->displayedObjects();
   aDisplayer->deactivateObjects(aDisplayed, true);
+  Handle(AIS_InteractiveContext) aContext = viewer()->AISContext();
+  Handle(AIS_Trihedron) aTrihedron = Handle(AIS_Trihedron)::DownCast(aDisplayer->getTrihedron());
+  /// deactivate trihedron in selection modes
+  TColStd_ListOfInteger aTColModes;
+  aContext->ActivatedModes(aTrihedron, aTColModes);
+  TColStd_ListIteratorOfListOfInteger itr( aTColModes );
+  for (; itr.More(); itr.Next() ) {
+    Standard_Integer aMode = itr.Value();
+    aContext->Deactivate(aTrihedron, aMode);
+  }
+#ifdef BEFORE_TRIHEDRON_PATCH
+  /// Trihedron problem: objects stayed in the viewer, should be removed manually
+  /// otherwise in SALOME happens crash by HideAll in the viewer
+  aContext->Remove(aTrihedron->Position(), true);
+  aContext->Remove(aTrihedron->Axis(), true);
+  aContext->Remove(aTrihedron->XAxis(), true);
+  aContext->Remove(aTrihedron->YAxis(), true);
+#endif
 
   myOperationMgr->deactivate();
 }
@@ -792,6 +812,7 @@ void XGUI_Workshop::openDirectory(const QString& theDirectory)
   }
 
   QApplication::setOverrideCursor(Qt::WaitCursor);
+  module()->closeDocument();
   SessionPtr aSession = ModelAPI_Session::get();
   aSession->closeAll();
   aSession->load(myCurrentDir.toLatin1().constData());
@@ -905,9 +926,7 @@ bool XGUI_Workshop::onSaveAs()
   QFileDialog dialog(desktop());
   dialog.setWindowTitle(tr("Select directory to save files..."));
   dialog.setFileMode(QFileDialog::Directory);
-  // PORTING_TO_SALOME_8
-  dialog.selectNameFilter(tr("Directories (*)"));
-  //dialog.setFilter(tr("Directories (*)");
+  dialog.setFilter(QDir::AllDirs);
   dialog.setOptions(QFileDialog::HideNameFilterDetails | QFileDialog::ShowDirsOnly);
   dialog.setViewMode(QFileDialog::Detail);
 
@@ -1317,12 +1336,16 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
   else if (theId == "SHOW_CMD") {
     showObjects(aObjects, true);
     mySelector->updateSelectionBy(ModuleBase_ISelection::Browser);
+    updateCommandStatus();
   }
-  else if (theId == "HIDE_CMD")
+  else if (theId == "HIDE_CMD") {
     showObjects(aObjects, false);
+    updateCommandStatus();
+  }
   else if (theId == "SHOW_ONLY_CMD") {
     showOnlyObjects(aObjects);
     mySelector->updateSelectionBy(ModuleBase_ISelection::Browser);
+    updateCommandStatus();
   }
   else if (theId == "SHADING_CMD")
     setDisplayMode(aObjects, XGUI_Displayer::Shading);
@@ -1335,6 +1358,7 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
         aObj->setDisplayed(false);
     }
     Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
+    updateCommandStatus();
   } else if (theId == "SELECT_VERTEX_CMD") {
     setViewerSelectionMode(TopAbs_VERTEX);
   } else if (theId == "SELECT_EDGE_CMD") {
@@ -1351,30 +1375,35 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
   } else if (theId == "SHOW_FEATURE_CMD") {
     highlightFeature(aObjects);
   }
-#ifdef VINSPECTOR
-  else if (theId == "VINSPECTOR_VIEW") {
-    if (VInspector_FirstCall) {
-      VInspectorAPI_Communicator* aCommunicator = VInspectorAPI_PluginMgr::activateVInspector(
-                                        "VInspector.dll", viewer()->AISContext());
-      displayer()->setCallBack(aCommunicator->getCallBack());
-      #ifndef HAVE_SALOME
-      AppElements_Viewer* aViewer = mainWindow()->viewer();
-      if (aViewer)
-        aViewer->setCallBack(aCommunicator->getCallBack());
-      #endif
-      VInspector_FirstCall = false;
-    }
-  }
-#endif
-#ifdef DFBROWSER
-  else if (theId == "DFBROWSER_VIEW") {
-    if (DFBrowser_FirstCall) {
-      Handle(CDF_Application) anApplication = CDF_Session::CurrentSession()->CurrentApplication();
-
-      DFBrowserAPI_Communicator* aCommunicator =
-                     DFBrowserAPI_Communicator::loadPluginLibrary("DFBrowser.dll");
-      aCommunicator->setApplication(anApplication);
-      DFBrowser_FirstCall = false;
+#ifdef TINSPECTOR
+  else if (theId == "TINSPECTOR_VIEW") {
+    Handle(CDF_Application) anApplication = CDF_Session::CurrentSession()->CurrentApplication();
+    if (!anApplication.IsNull())
+    {
+      if (!MyTCommunicator)
+      {
+        MyTCommunicator = new TInspector_Communicator();
+
+        NCollection_List<Handle(Standard_Transient)> aParameters;
+        aParameters.Append(anApplication);
+        Handle(AIS_InteractiveContext) aContext = viewer()->AISContext();
+        if (!aContext.IsNull())
+          aParameters.Append(aContext);
+
+        MyVCallBack = new VInspector_CallBack();
+        myDisplayer->setCallBack(MyVCallBack);
+        #ifndef HAVE_SALOME
+        AppElements_Viewer* aViewer = mainWindow()->viewer();
+        if (aViewer)
+          aViewer->setCallBack(MyVCallBack);
+        #endif
+        aParameters.Append(MyVCallBack);
+
+        MyTCommunicator->init(aParameters);
+        MyTCommunicator->Activate("TKVInspector"); // to have filled callback by model
+        MyTCommunicator->Activate("TKDFBrowser");
+      }
+      MyTCommunicator->setVisible(true);
     }
   }
 #endif
@@ -1979,17 +2008,7 @@ for (int i = 0; i < aDoc->size(aGroupName); i++) { \
 void XGUI_Workshop::showObjects(const QObjectPtrList& theList, bool isVisible)
 {
   foreach (ObjectPtr aObj, theList) {
-    /*
-    ResultPartPtr aPartRes = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
-    if (aPartRes) {
-      DocumentPtr aDoc = aPartRes->partDoc();
-      SET_DISPLAY_GROUP(ModelAPI_ResultBody::group(), isVisible)
-      SET_DISPLAY_GROUP(ModelAPI_ResultConstruction::group(), isVisible)
-      SET_DISPLAY_GROUP(ModelAPI_ResultGroup::group(), isVisible)
-    } else {
-    */
-      aObj->setDisplayed(isVisible);
-    //}
+    aObj->setDisplayed(isVisible);
   }
   Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
 }
@@ -2006,20 +2025,9 @@ void XGUI_Workshop::showOnlyObjects(const QObjectPtrList& theList)
 
   // Show only objects from the list
   foreach (ObjectPtr aObj, theList) {
-    /*
-    ResultPartPtr aPartRes = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
-    if (aPartRes) {
-      DocumentPtr aDoc = aPartRes->partDoc();
-      SET_DISPLAY_GROUP(ModelAPI_ResultBody::group(), true)
-      SET_DISPLAY_GROUP(ModelAPI_ResultConstruction::group(), true)
-      SET_DISPLAY_GROUP(ModelAPI_ResultGroup::group(), true)
-    } else {
-    */
-      aObj->setDisplayed(true);
-    //}
+    aObj->setDisplayed(true);
   }
   Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
-
 }
 
 
@@ -2074,7 +2082,7 @@ void XGUI_Workshop::closeDocument()
     anOperation->abort();
     anOperation = operationMgr()->currentOperation();
   }
-  myDisplayer->closeLocalContexts();
+  //myDisplayer->closeLocalContexts();
   myDisplayer->eraseAll();
   objectBrowser()->clearContent();