]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Implementation of the 20937: EDF 1399 GEOM: extend the properties of GEOM object.
authorrnv <rnv@opencascade.com>
Tue, 1 Feb 2011 06:33:42 +0000 (06:33 +0000)
committerrnv <rnv@opencascade.com>
Tue, 1 Feb 2011 06:33:42 +0000 (06:33 +0000)
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Study.cxx
src/LightApp/LightApp_Study.h
src/STD/STD_Application.cxx
src/STD/STD_Application.h
src/SUIT/SUIT_Application.h
src/SUIT/SUIT_ViewManager.cxx
src/SUIT/SUIT_ViewManager.h

index 7da67202cccdbe0d9b5146d2ee6e222ac88e8edb..2ba5cf62d3fb8556ea9700555d96914c4629cda3 100644 (file)
@@ -3127,6 +3127,10 @@ void LightApp_Application::removeViewManager( SUIT_ViewManager* vm )
 {
   disconnect( vm, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ),
            this, SLOT( onCloseView( SUIT_ViewManager* ) ) );
+  LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>(activeStudy());
+  if (aStudy )
+    aStudy->removeViewMgr(vm->getGlobalId());
+  
   STD_Application::removeViewManager( vm );
   delete vm;
 }
index aa1d15e84f06911e0cf33e432e79b42747ececd3..fd344206cb02c9637f7ec5df5aa4a0cba5e742dc 100644 (file)
@@ -33,7 +33,6 @@
 #include "SUIT_DataObjectIterator.h"
 
 #include <set>
-#include <QString>
 
 /*!
   Constructor.
@@ -492,3 +491,154 @@ QString LightApp_Study::getVisualComponentName() const
   return "Interface Applicative";
 }
 
+
+
+
+
+/*!
+  Set a visual property of the object
+  \param theViewId - Id of the viewer namager
+  \param theEntry - Entry of the object
+  \param thePropName - the name of the visual property
+  \param theValue - the value of the visual property
+*/
+void LightApp_Study::setObjectProperty(int theViewId, QString theEntry, QString thePropName, QVariant theValue) {
+  
+  //Try to find viewer manager in the map
+  ViewMgrMap::Iterator v_it = myViewMgrMap.find(theViewId);
+  if(v_it == myViewMgrMap.end()) {
+
+    //1) Create property map
+    PropMap aPropMap;
+    aPropMap.insert(thePropName, theValue);
+    
+    //2) Create object map
+    ObjMap anObjMap;
+    anObjMap.insert(theEntry,aPropMap);
+
+    //3) Insert in the view manager map
+    myViewMgrMap.insert(theViewId, anObjMap);
+    
+  } else {
+    ObjMap& anObjMap = v_it.value();
+    ObjMap::Iterator o_it = anObjMap.find(theEntry);
+    if(o_it == anObjMap.end()) {
+      //1) Create property map
+      PropMap aPropMap;
+      aPropMap.insert(thePropName, theValue);
+      
+      //2) Insert in the object map
+      anObjMap.insert(theEntry, aPropMap);
+    } else {
+      PropMap& aPropMap = o_it.value();
+      aPropMap.insert(thePropName, theValue);
+    }
+  }
+}
+
+/*!
+  Get a visual property of the object identified by theViewMgrId, theEntry and thePropName.
+  \param theViewMgrId - Id of the viewer manager.
+  \param theEntry - Entry of the object.
+  \param thePropName - the name of the visual property.
+  \param theDefValue - the default value of the visual property.
+  \return value of the visual propetry. If value is't found then return theDefValue.
+*/
+QVariant LightApp_Study::getObjectProperty(int theViewMgrId, QString theEntry, QString thePropName, QVariant theDefValue) const {
+  QVariant& aResult = theDefValue;
+  ViewMgrMap::ConstIterator v_it = myViewMgrMap.find(theViewMgrId);
+  if(v_it != myViewMgrMap.end()){
+    const ObjMap& anOnjectMap = v_it.value();
+    ObjMap::ConstIterator o_it = anOnjectMap.find(theEntry);
+    if(o_it != anOnjectMap.end()) {
+      const PropMap& aPropMap = o_it.value();
+      PropMap::ConstIterator p_it = aPropMap.find(thePropName);
+      if(p_it != aPropMap.end()) {
+       aResult = p_it.value();
+      }
+    }
+  }
+  return aResult;
+}
+
+/*!
+  Remove view manager with all objects.
+  \param theViewMgrId - Id of the viewer manager.
+*/
+void LightApp_Study::removeViewMgr( int theViewMgrId ) { 
+  myViewMgrMap.remove(theViewMgrId);
+}
+
+
+/*!
+  Get a map of the properties of the object identified by theViewMgrId and theEntry.
+  \param theViewMgrId - Id of the viewer manager.
+  \param theEntry - Entry of the object.
+  \return a map of the properties of the object.
+*/
+const PropMap& LightApp_Study::getObjectPropMap(int theViewMgrId, QString theEntry) {
+  ViewMgrMap::Iterator v_it = myViewMgrMap.find(theViewMgrId);
+  if(v_it != myViewMgrMap.end()){
+    ObjMap& anOnjectMap = v_it.value();
+    ObjMap::Iterator o_it = anOnjectMap.find(theEntry);
+    if(o_it != anOnjectMap.end()) {
+      return o_it.value();
+    } else {
+      PropMap aPropMap;
+      anOnjectMap.insert(theEntry, aPropMap);
+      return anOnjectMap.find(theEntry).value();
+    }
+  } else {
+    PropMap aPropMap;
+    ObjMap anObjMap;
+    anObjMap.insert(theEntry,aPropMap);
+    myViewMgrMap.insert(theViewMgrId, anObjMap);
+    return anObjMap.find(theEntry).value();
+  }
+}
+
+/*!
+  Set a map of the properties of the object identified by theViewMgrId and theEntry.
+  \param theViewMgrId - Id of the viewer manager.
+  \param theEntry - Entry of the object.
+*/
+void LightApp_Study::setObjectPropMap(int theViewMgrId, QString theEntry, PropMap thePropMap) {
+  //Try to find viewer manager in the map
+  ViewMgrMap::Iterator v_it = myViewMgrMap.find(theViewMgrId);
+  if(v_it == myViewMgrMap.end()) {
+    
+    //1) Create object map
+    ObjMap anObjMap;
+    anObjMap.insert(theEntry,thePropMap);
+
+    //3) Insert in the view manager map
+    myViewMgrMap.insert(theViewMgrId, anObjMap);
+  } else {
+    ObjMap& anObjMap = v_it.value();
+    anObjMap.insert(theEntry,thePropMap);
+  }
+}
+
+/*!
+   Remove object's properties from all view managers.
+  \param theEntry - Entry of the object.
+*/
+void LightApp_Study::removeObjectFromAll( QString theEntry ) {
+  ViewMgrMap::Iterator v_it = myViewMgrMap.begin();
+  for( ;v_it != myViewMgrMap.end(); v_it++ ) {
+    v_it.value().remove(theEntry);
+  }
+}
+/*!
+  Get all objects and it's properties from view manager identified by theViewMgrId.
+  \param theEntry - Entry of the object.
+*/
+const ObjMap& LightApp_Study::getObjectMap ( int theViewMgrId ) {
+  ViewMgrMap::Iterator v_it = myViewMgrMap.find(theViewMgrId);
+  if( v_it == myViewMgrMap.end() ) {
+    ObjMap anObjMap;
+    myViewMgrMap.insert(theViewMgrId , anObjMap);
+    return myViewMgrMap.find(theViewMgrId).value();
+  }
+  return v_it.value();
+}
index dae0c721a2d34b559b727e07a3c3fc11d9753cc5..32a5cddbdbf95a1849a498cacc3454ff722a4208 100644 (file)
 #include "string"
 #include "vector"
 
+#include <QMap>
+#include <QVariant>
+
 class SUIT_Study;
 class SUIT_Application;
 class CAM_DataModel;
 
+//Map to store visual property of the object.
+//Key:   Name of the visual property of the object.
+//Value: value of the visual property.
+typedef QMap<QString, QVariant> PropMap;
+
+//Map to store objects with it's visual properties.
+//Key:   Entry of the object.
+//Value: Map of the visual properties of the object.
+typedef QMap<QString, PropMap> ObjMap;
+
+//Map to store view managers and all objects which displayed in views of the view managers.
+//Key:   Id of the viewer.
+//Value: Map of the objects with it's visual properties.
+typedef QMap<int, ObjMap> ViewMgrMap;
+
+
 /*!
   Custom study, using for open/close of documents HDF format.
   Data of each module can be saved to different files, those 
@@ -73,6 +92,17 @@ public:
 
   virtual QString     getVisualComponentName() const;
 
+  virtual void              setObjectProperty  ( int theViewMgrId, QString theEntry, QString thePropName, QVariant theValue );
+  virtual QVariant          getObjectProperty  ( int theViewMgrId, QString theEntry, QString thePropName, QVariant theDefValue ) const;
+  virtual void              removeViewMgr      ( int theViewMgrId );
+  virtual void              setObjectPropMap   ( int theViewMgrId, QString theEntry, PropMap thePropMap );
+  virtual const PropMap&    getObjectPropMap   ( int theViewMgrId, QString theEntry ) ;
+  virtual void              removeObjectFromAll( QString theEntry );
+  virtual const ObjMap&     getObjectMap       ( int theViewMgrId );
+  virtual const ViewMgrMap& getViewMgrMap      ( int theViewMgrId ) { return myViewMgrMap; };
+
+
+
 protected:
   virtual void        saveModuleData ( QString theModuleName, QStringList theListOfFiles );
   virtual void        openModuleData ( QString theModuleName, QStringList& theListOfFiles );
@@ -97,6 +127,7 @@ signals:
 
 private:
   LightApp_Driver*    myDriver;
+  ViewMgrMap          myViewMgrMap;
 
   friend class LightApp_Application;
 };
index 9006a49ff3648de8dd6d75b05606425115cf4700..47d0fde743344d9d9bc6f2683bb46ad478519620 100755 (executable)
@@ -983,3 +983,12 @@ void STD_Application::studySaved( SUIT_Study* )
   updateDesktopTitle();
   updateCommandsStatus();
 }
+
+/*!
+  Return index of the view ma
+*/
+int STD_Application::viewManagerId( const SUIT_ViewManager* theManager) const
+{
+  return myViewMgrs.indexOf(const_cast<SUIT_ViewManager*>(theManager));
+}
+
index a8e5dea3333da566399185121d5905e0d3c6e223..286246ca76de7fe3a14f5f22aa762e8e858a3339 100755 (executable)
@@ -86,6 +86,7 @@ public:
   ViewManagerList       viewManagers() const;
   void                  viewManagers( ViewManagerList& ) const;
   void                  viewManagers( const QString&, ViewManagerList& ) const;
+  virtual int           viewManagerId (const SUIT_ViewManager* ) const;
 
   virtual QString       getFileFilter() const { return QString(); }
   virtual QString       getFileName( bool open, const QString& initial, const QString& filters,
index 3773977fc21bac50c2d74a0d53126d262199e5bf..86c1d5a80a4584ab49b781ff17c6895f03dbae86 100755 (executable)
@@ -35,7 +35,7 @@ class QAction;
 class QWidget;
 
 class SUIT_Desktop;
-class SUIT_ViewModel;
+class SUIT_ViewManager;
 class SUIT_ResourceMgr;
 class SUIT_ShortcutMgr;
 class SUIT_Study;
@@ -110,6 +110,9 @@ public:
   //! Invokes application-specific "Select Directory" dialog and returns the selected directory name.
   virtual QString getDirectory( const QString& initial, const QString& caption, QWidget* parent ) = 0;
 
+
+  virtual int     viewManagerId ( const SUIT_ViewManager* ) const = 0;
+
 signals:
   void                  applicationClosed( SUIT_Application* );
   void                  activated( SUIT_Application* );
index 1e55aecef99c4849abfa6fe2a640b1e73897c159..0ab6a11afab2f1e080367130a24afe5ac74ebd5e 100755 (executable)
@@ -26,6 +26,7 @@
 #include "SUIT_ViewModel.h"
 #include "SUIT_ViewWindow.h"
 #include "SUIT_Study.h"
+#include "SUIT_Session.h"
 
 #include <QMap>
 #include <QRegExp>
@@ -84,6 +85,16 @@ int SUIT_ViewManager::useNewId( const QString& type )
   return id;
 }
 
+
+int SUIT_ViewManager::getGlobalId() const {
+  int id = -1;
+  SUIT_Application* app = SUIT_Session::session()->activeApplication();
+  if(app) {
+    id = app->viewManagerId(this);
+  }
+  return id;
+}
+
 void SUIT_ViewManager::setTitle( const QString& theTitle )
 {
   if ( myTitle == theTitle )
index 07c8ca8bf5bc1bcf1aa662ec1daf817229f07276..7846fcdcf2e0f850eb43cd0cb0cb5bc9ca686d2a 100755 (executable)
@@ -83,6 +83,8 @@ public:
 
   int              getId() const;
 
+  int              getGlobalId() const;
+
 public slots:
   void             createView();
   void             closeAllViews();