]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Open/Save in Salome mode
authorvsv <vitaly.smetannikov@opencascade.com>
Thu, 11 Sep 2014 12:35:31 +0000 (16:35 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Thu, 11 Sep 2014 12:35:31 +0000 (16:35 +0400)
src/NewGeom/NewGeom_DataModel.cpp
src/NewGeom/NewGeom_Module.cpp
src/NewGeom/NewGeom_Module.h
src/NewGeom/NewGeom_SalomeViewer.cpp
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_MainWindow.cpp
src/XGUI/XGUI_Workshop.h

index cfe08465507394b261954c9bce9c7ae6a7904531..3b494373ff98b1190a2c8f83ca88cf7727db2103 100644 (file)
@@ -1,6 +1,15 @@
 #include "NewGeom_DataModel.h"
 #include "NewGeom_Module.h"
 
+#include <XGUI_Workshop.h>
+
+#include <LightApp_Study.h>
+#include <CAM_Application.h>
+#include <SUIT_Tools.h>
+
+#include <QFile>
+
+
 NewGeom_DataModel::NewGeom_DataModel(NewGeom_Module* theModule)
     : LightApp_DataModel(theModule), myModule(theModule)
 {
@@ -12,11 +21,37 @@ NewGeom_DataModel::~NewGeom_DataModel()
 
 bool NewGeom_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStringList theFiles)
 {
+  LightApp_DataModel::open( thePath, theStudy, theFiles );
+  if (theFiles.size() == 0)
+    return false;
+
+  QString aFile = theFiles.first();
+
+  SessionPtr aMgr = ModelAPI_Session::get();
+  aMgr->load(qPrintable(aFile));
+  myModule->setIsOpened(true);
+  myStudyPath = aFile;
   return true;
 }
 
 bool NewGeom_DataModel::save(QStringList& theFiles)
 {
+  LightApp_DataModel::save( theFiles );
+  XGUI_Workshop* aWorkShop = myModule->workshop();
+  std::list<std::string> aFileNames;
+
+  LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( myModule->application()->activeStudy() );
+  std::string aTmpDir = aStudy->GetTmpDir(qPrintable(myStudyPath), true );
+  theFiles.append(QString(aTmpDir.c_str()));
+
+  aWorkShop->saveDocument(QString(aTmpDir.c_str()), aFileNames);
+  std::list<std::string>::iterator aIt;
+  for (aIt = aFileNames.begin(); aIt != aFileNames.end(); ++aIt) {
+    QString aName((*aIt).c_str());
+    aName.replace(QChar('\\'), QChar('/'));
+    int aN = aName.lastIndexOf('/');
+    theFiles.append(aName.right(aName.length() - aN - 1));
+  }
   return true;
 }
 
@@ -38,12 +73,13 @@ bool NewGeom_DataModel::create(CAM_Study* theStudy)
 
 bool NewGeom_DataModel::isModified() const
 {
-  return false;
+  SessionPtr aMgr = ModelAPI_Session::get();
+  return aMgr->isModified();
 }
 
 bool NewGeom_DataModel::isSaved() const
 {
-  return true;
+  return !isModified();
 }
 
 void NewGeom_DataModel::update(LightApp_DataObject* theObj, LightApp_Study* theStudy)
index a02f119989853835610bf25b378e42f023a03613..023a1ffb10f3322e5e0a8fc2e2604c6b8c5f92dc 100644 (file)
@@ -7,6 +7,7 @@
 #include <XGUI_PropertyPanel.h>
 #include <XGUI_ContextMenuMgr.h>
 #include <XGUI_Preferences.h>
+#include <XGUI_ObjectsBrowser.h>
 
 #include <LightApp_Application.h>
 #include <LightApp_SelectionMgr.h>
@@ -26,6 +27,8 @@
 
 #include <QDockWidget>
 #include <QAction>
+#include <QTimer>
+
 
 extern "C" {
 NewGeom_EXPORT CAM_Module* createModule()
@@ -64,7 +67,7 @@ private:
 //******************************************************
 NewGeom_Module::NewGeom_Module()
     : LightApp_Module("NewGeom"),
-      mySelector(0)
+      mySelector(0), myIsOpened(0)
 {
   myWorkshop = new XGUI_Workshop(this);
   myProxyViewer = new NewGeom_SalomeViewer(this);
@@ -116,6 +119,13 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy)
     myWorkshop->propertyPanel()->hide();
     QtxPopupMgr* aMgr = popupMgr();  // Create popup manager
     action(myEraseAll)->setEnabled(false);
+
+    if (myIsOpened) {
+      myWorkshop->objectBrowser()->rebuildDataTree();
+      myWorkshop->updateCommandStatus();
+      myIsOpened = false;
+      QTimer::singleShot(1000, myWorkshop, SLOT(displayAllResults()));
+    }
   }
   return isDone;
 }
index 86c32772cc2d6ad695ab1305dfd30dca3492aa5e..aad4775ca0fdb0376fc947cfb7dab3ff6316dbe1 100644 (file)
@@ -77,6 +77,8 @@ Q_OBJECT
 
   XGUI_Workshop* workshop() const { return myWorkshop; }
 
+  void setIsOpened(bool theOpened) { myIsOpened = theOpened; }
+
  public slots:
   virtual bool activateModule(SUIT_Study* theStudy);
   virtual bool deactivateModule(SUIT_Study* theStudy);
@@ -99,6 +101,8 @@ Q_OBJECT
   NewGeom_SalomeViewer* myProxyViewer;
 
   QMap<QString, QStringList> myNestedActions;
+
+  bool myIsOpened;
 };
 
 #endif
index f63b3d77c17961b0f92a879d55782c74a471f7cb..4d4a74ec9a2bc0a4bddedc99e68cb717a014370d 100644 (file)
@@ -19,7 +19,10 @@ NewGeom_SalomeViewer::NewGeom_SalomeViewer(QObject* theParent)
 //**********************************************
 Handle(AIS_InteractiveContext) NewGeom_SalomeViewer::AISContext() const
 {
-  return mySelector->viewer()->getAISContext();
+  if (mySelector && mySelector->viewer())
+    return mySelector->viewer()->getAISContext();
+  Handle(AIS_InteractiveContext) aNull;
+  return aNull;
 }
 
 //**********************************************
index 840ade6713d7b7b0bc4d782e98141fed06be057e..7f1627c28eb9f0f0c2cd3bb87ad1989d15304788 100644 (file)
@@ -69,6 +69,8 @@ void XGUI_Displayer::display(ObjectPtr theObject, boost::shared_ptr<GeomAPI_AISO
                              bool isUpdateViewer)
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
+  if (aContext.IsNull())
+    return;
 
   Handle(AIS_InteractiveObject) anAISIO = theAIS->impl<Handle(AIS_InteractiveObject)>();
   if (!anAISIO.IsNull()) {
@@ -83,6 +85,8 @@ void XGUI_Displayer::erase(ObjectPtr theObject, const bool isUpdateViewer)
     return;
 
   Handle(AIS_InteractiveContext) aContext = AISContext();
+  if (aContext.IsNull())
+    return;
   boost::shared_ptr<GeomAPI_AISObject> anObject = myResult2AISObjectMap[theObject];
   if (anObject) {
     Handle(AIS_InteractiveObject) anAIS = anObject->impl<Handle(AIS_InteractiveObject)>();
@@ -154,6 +158,8 @@ void XGUI_Displayer::redisplay(ObjectPtr theObject, bool isUpdateViewer)
   }
   if (!aAISIO.IsNull()) {
     Handle(AIS_InteractiveContext) aContext = AISContext();
+    if (aContext.IsNull())
+      return;
     aContext->Redisplay(aAISIO, isUpdateViewer);
     //if (aContext->HasOpenedContext()) {
     //  aContext->Load(aAISIO, -1, true/*allow decomposition*/);
@@ -165,6 +171,8 @@ void XGUI_Displayer::activateInLocalContext(ObjectPtr theResult, const std::list
                                             const bool isUpdateViewer)
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
+  if (aContext.IsNull())
+    return;
   // Open local context if there is no one
   if (!aContext->HasOpenedContext()) {
     aContext->ClearCurrents(false);
@@ -201,6 +209,8 @@ void XGUI_Displayer::deactivate(ObjectPtr theObject)
 {
   if (isVisible(theObject)) {
     Handle(AIS_InteractiveContext) aContext = AISContext();
+    if (aContext.IsNull())
+      return;
 
     boost::shared_ptr<GeomAPI_AISObject> anObj = myResult2AISObjectMap[theObject];
     Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
@@ -212,6 +222,8 @@ void XGUI_Displayer::activate(ObjectPtr theObject)
 {
   if (isVisible(theObject)) {
     Handle(AIS_InteractiveContext) aContext = AISContext();
+    if (aContext.IsNull())
+      return;
 
     boost::shared_ptr<GeomAPI_AISObject> anObj = myResult2AISObjectMap[theObject];
     Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
@@ -223,6 +235,8 @@ void XGUI_Displayer::stopSelection(const QList<ObjectPtr>& theResults, const boo
                                    const bool isUpdateViewer)
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
+  if (aContext.IsNull())
+    return;
 
   Handle(AIS_Shape) anAIS;
   QList<ObjectPtr>::const_iterator anIt = theResults.begin(), aLast = theResults.end();
@@ -280,8 +294,10 @@ void XGUI_Displayer::setSelected(const QList<ObjectPtr>& theResults, const bool
 }
 
 void XGUI_Displayer::eraseAll(const bool isUpdateViewer)
- {
-   Handle(AIS_InteractiveContext) ic = AISContext();
+{
+  Handle(AIS_InteractiveContext) ic = AISContext();
+  if (ic.IsNull())
+    return;
 
    ResultToAISMap::iterator aIt;
    for (aIt = myResult2AISObjectMap.begin(); aIt != myResult2AISObjectMap.end(); aIt++) {
@@ -299,6 +315,8 @@ void XGUI_Displayer::eraseAll(const bool isUpdateViewer)
 void XGUI_Displayer::eraseDeletedResults(const bool isUpdateViewer)
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
+  if (aContext.IsNull())
+    return;
 
   ResultToAISMap::const_iterator aFIt = myResult2AISObjectMap.begin(), aFLast =
       myResult2AISObjectMap.end();
index 67edcd05917fea45ef155f8563c6f2e684510254..7fc26f0bfb5f8fb38556a89734e28a7b2f32cdec 100644 (file)
@@ -257,7 +257,7 @@ void XGUI_MainWindow::updateTitle()
 {
   QString aTitle = myTitle;
   if (!myCurrentDir.isNull())
-    aTitle += ":" + myCurrentDir;
+    aTitle += " - " + myCurrentDir;
   if (myIsModified)
     aTitle += "*";
   setWindowTitle(aTitle);
index cf1c709a08b1510cf4fb219b19ea987dcba7c274..946e75c9d9ccc44ccb609f1a338a10765e2aec31 100644 (file)
@@ -202,6 +202,9 @@ signals:
 
   void activateLastPart();
 
+  /// Display all results of the current document
+  void displayAllResults();
+
  protected:
   //Event-loop processing methods:
   void addFeature(const Config_FeatureMessage*);
@@ -216,7 +219,6 @@ signals:
 
   QList<QAction*> getModuleCommands() const;
 
-  void displayAllResults();
   void displayDocumentResults(DocumentPtr theDoc);
   void displayGroupResults(DocumentPtr theDoc, std::string theGroup);