]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Singleton module defined
authorvsv <vsv@opencascade.com>
Mon, 21 Sep 2009 08:10:53 +0000 (08:10 +0000)
committervsv <vsv@opencascade.com>
Mon, 21 Sep 2009 08:10:53 +0000 (08:10 +0000)
src/CAM/CAM_Application.cxx
src/CAM/CAM_Application.h
src/LightApp/LightApp_Application.cxx

index b731d4c5770f956cf009adc0afc1a21ea4fa331e..c4b3e72d56719cd686d5cf1c51e6f2296b39385d 100755 (executable)
@@ -146,7 +146,7 @@ void CAM_Application::modules( CAM_Application::ModuleList& out ) const
   out.clear();
 
   for ( QList<CAM_Module*>::const_iterator it = myModules.begin(); 
-       it != myModules.end(); ++it )
+        it != myModules.end(); ++it ) 
     out.append( *it );
 }
 
@@ -166,14 +166,14 @@ void CAM_Application::modules( QStringList& lst, const bool loaded ) const
   if ( loaded )
   {
     for ( QList<CAM_Module*>::const_iterator it = myModules.begin(); 
-         it != myModules.end(); ++it )
-      lst.append( (*it)->moduleName() );
+          it != myModules.end(); ++it )
+        lst.append( (*it)->moduleName() );
   }
   else
   {
     for ( ModuleInfoList::const_iterator it = myInfoList.begin(); 
-         it != myInfoList.end(); ++it )
-      lst.append( (*it).title );
+          it != myInfoList.end(); ++it ) 
+        lst.append( (*it).title );
   }
 }
 
@@ -224,6 +224,29 @@ void CAM_Application::addModule( CAM_Module* mod )
   moduleAdded( mod );
 }
 
+/*!
+  \brief returns true if module is accessible for the current application.
+  If module is a singleton and current session has more then one application
+  then this module can't be accessible in this one.
+ */
+bool CAM_Application::isModuleAccessible(const QString& theModName) const
+{
+  for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end(); ++it )
+  {
+    if ((*it).name == theModName) {
+        return isModuleAccessible(it);
+    }
+  }
+  return true;
+}
+bool CAM_Application::isModuleAccessible(const ModuleInfoList::const_iterator& theIt) const
+{
+  int aAppsNb = SUIT_Session::session()->applications().size();
+  if ((*theIt).isSingleton && (aAppsNb > 1))
+    return false;
+  return true;
+}
+
 /*!
   \brief Load modules from the modules information list.
   
@@ -233,15 +256,18 @@ void CAM_Application::loadModules()
 {
   for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end(); ++it )
   {
+    if (!isModuleAccessible((*it).name)) {
+      continue;
+    }
     CAM_Module* mod = loadModule( (*it).title );
     if ( mod )
       addModule( mod );
     else {
       QString wrn = tr( "Can not load module %1" ).arg( (*it).title );
       if ( desktop() && desktop()->isVisible() )
-       SUIT_MessageBox::critical( desktop(), tr( "Loading modules" ), wrn );
+        SUIT_MessageBox::critical( desktop(), tr( "Loading modules" ), wrn );
       else
-       qWarning( qPrintable( wrn ) ); 
+        qWarning( qPrintable( wrn ) ); 
     }
   }
 }
@@ -634,11 +660,14 @@ void CAM_Application::readModuleList()
     else
       modLibrary = modName;
 
+    bool aIsSingleton = resMgr->booleanValue(*it, "singleton", false);
+
     ModuleInfo inf;
     inf.name = modName;
     inf.title = modTitle;
     inf.internal = modLibrary;
     inf.icon = modIcon;
+    inf.isSingleton = aIsSingleton;
     myInfoList.append( inf );
   }
 
index 5ce540555e89d284dc6224aba22761ad166cac3f..d745d501bec8e131d348f8a12719d6ea5fee4aef 100755 (executable)
@@ -69,6 +69,8 @@ public:
 
   virtual void        createEmptyStudy();
 
+  virtual bool        isModuleAccessible(const QString&) const;
+
 protected:
   virtual SUIT_Study* createNewStudy();
   virtual void        updateCommandsStatus();
@@ -82,11 +84,12 @@ protected:
   QString             moduleLibrary( const QString&, const bool = true ) const;
 
 private:
-  void                readModuleList();
+  typedef struct { QString name, title, internal, icon; bool isSingleton; } ModuleInfo;
+  typedef QList<ModuleInfo> ModuleInfoList;
 
 private:
-  typedef struct { QString name, title, internal, icon; } ModuleInfo;
-  typedef QList<ModuleInfo> ModuleInfoList;
+  void                readModuleList();
+  bool                isModuleAccessible(const ModuleInfoList::const_iterator&) const;
 
 private:
   CAM_Module*         myModule;        //!< active module
index 1c4e5c28a4a626ec940452960ec0eb1a94e0b4bc..9af3c4b082c0eb3b1b023d0ad7c6b5e1a236ba60 100644 (file)
@@ -496,61 +496,65 @@ void LightApp_Application::createActions()
   static QtxMRUAction* mru = new QtxMRUAction( tr( "TOT_DESK_MRU" ), tr( "MEN_DESK_MRU" ), 0 );
   connect( mru, SIGNAL( activated( const QString& ) ), this, SLOT( onMRUActivated( const QString& ) ) );
   registerAction( MRUId, mru );
-
+  
   // default icon for neutral point ('SALOME' module)
   QPixmap defIcon = resMgr->loadPixmap( "LightApp", tr( "APP_DEFAULT_ICO" ), false );
   if ( defIcon.isNull() )
     defIcon = QPixmap( imageEmptyIcon );
-
+  
   //! default icon for any module
   QPixmap modIcon = resMgr->loadPixmap( "LightApp", tr( "APP_MODULE_ICO" ), false );
   if ( modIcon.isNull() )
     modIcon = QPixmap( imageEmptyIcon );
-
+  
   QStringList modList;
   modules( modList, false );
-
+  
   if ( modList.count() > 1 )
-  {
-    LightApp_ModuleAction* moduleAction =
-      new LightApp_ModuleAction( tr( "APP_NAME" ), defIcon, desk );
-
-    QMap<QString, QString> iconMap;
-    moduleIconNames( iconMap );
-
-    const int iconSize = 20;
-
-    QStringList::Iterator it;
-    for ( it = modList.begin(); it != modList.end(); ++it )
     {
-      if ( !isLibExists( *it ) )
-        continue;
-
-      QString iconName;
-      if ( iconMap.contains( *it ) )
-        iconName = iconMap[*it];
-
-      QString modName = moduleName( *it );
-
-      QPixmap icon = resMgr->loadPixmap( modName, iconName, false );
-      if ( icon.isNull() )
-      {
-       icon = modIcon;
-       INFOS ( "****************************************************************" << std::endl
-            << "*    Icon for " << (*it).toLatin1().constData() << " not found. Using the default one." << std::endl
-            << "****************************************************************" << std::endl );
-      }
-
-      icon = Qtx::scaleIcon( icon, iconSize );
-
-      moduleAction->insertModule( *it, icon );
+      LightApp_ModuleAction* moduleAction =
+        new LightApp_ModuleAction( tr( "APP_NAME" ), defIcon, desk );
+      
+      QMap<QString, QString> iconMap;
+      moduleIconNames( iconMap );
+      
+      const int iconSize = 20;
+      
+      QStringList::Iterator it;
+      for ( it = modList.begin(); it != modList.end(); ++it )
+        {
+          if ( !isLibExists( *it ) )
+            continue;
+          QString modName = moduleName( *it );
+
+          if (!isModuleAccessible(modName))
+            continue;
+
+          QString iconName;
+          if ( iconMap.contains( *it ) )
+            iconName = iconMap[*it];      
+          
+          QPixmap icon = resMgr->loadPixmap( modName, iconName, false );
+          if ( icon.isNull() )
+            {
+              icon = modIcon;
+              INFOS ( "****************************************************************" << std::endl
+                      << "*    Icon for " << (*it).toLatin1().constData() 
+                      << " not found. Using the default one." << std::endl
+                      << "****************************************************************" << std::endl );
+            }
+          
+          icon = Qtx::scaleIcon( icon, iconSize );
+          
+          moduleAction->insertModule( *it, icon );
+        }
+      
+      
+      connect( moduleAction, SIGNAL( moduleActivated( const QString& ) ), 
+               this, SLOT( onModuleActivation( const QString& ) ) );
+      registerAction( ModulesListId, moduleAction );
     }
 
-
-    connect( moduleAction, SIGNAL( moduleActivated( const QString& ) ), this, SLOT( onModuleActivation( const QString& ) ) );
-    registerAction( ModulesListId, moduleAction );
-  }
-
   // New window
   int windowMenu = createMenu( tr( "MEN_DESK_WINDOW" ), -1, MenuWindowId, 100 );
   int newWinMenu = createMenu( tr( "MEN_DESK_NEWWINDOW" ), windowMenu, -1, 0 );