{
for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end(); ++it )
{
- if ( !isModuleAccessible( (*it).title ) ) {
- continue;
- }
CAM_Module* mod = loadModule( (*it).title );
if ( mod )
addModule( mod );
return 0;
}
- if ( !isModuleAccessible( modName ) ) {
- qWarning( qPrintable( tr( "Module \"%1\" cannot be loaded in this application." ).arg( modName ) ) );
- return 0;
- }
-
QString libName = moduleLibrary( modName );
if ( libName.isEmpty() )
{
*/
bool CAM_Application::activateOperation( const QString& modName, int actionId )
{
- if (isModuleAccessible(modName)) {
- CAM_Module* mod = loadModule(modName, false);
- if (mod) {
- addModule(mod);
- return mod->activateOperation(actionId);
- }
+ CAM_Module* mod = loadModule(modName, false);
+ if (mod) {
+ addModule(mod);
+ return mod->activateOperation(actionId);
}
return false;
}
*/
bool CAM_Application::activateOperation( const QString& modName, const QString& actionId )
{
- if (isModuleAccessible(modName)) {
- CAM_Module* mod = loadModule(modName, false);
- if (mod) {
- addModule(mod);
- return mod->activateOperation(actionId);
- }
+ CAM_Module* mod = loadModule(modName, false);
+ if (mod) {
+ addModule(mod);
+ return mod->activateOperation(actionId);
}
return false;
}
const QString& actionId,
const QString& pluginName )
{
- if (isModuleAccessible(modName)) {
- CAM_Module* mod = loadModule(modName, false);
- if (mod) {
- addModule(mod);
- return mod->activateOperation(actionId, pluginName);
- }
+ CAM_Module* mod = loadModule(modName, false);
+ if (mod) {
+ addModule(mod);
+ return mod->activateOperation(actionId, pluginName);
}
return false;
}
return res;
}
-/*!
- \brief Returns \c true if module is accessible for the current application.
- Singleton module can be loaded only in one application object. In other application
- objects this module will be unavailable.
- \param title module title (user name)
- \return \c true if module is accessible (can be loaded) or \c false otherwise
- */
-bool CAM_Application::isModuleAccessible( const QString& title )
-{
- bool found = false;
- bool blocked = false;
- bool statusOK = false;
-
- QStringList somewhereLoaded;
- QList<SUIT_Application*> apps = SUIT_Session::session()->applications();
- foreach( SUIT_Application* app, apps ) {
- CAM_Application* camApp = dynamic_cast<CAM_Application*>( app );
- if ( !camApp ) continue;
- QStringList loaded;
- camApp->modules( loaded, true );
- foreach( QString lm, loaded ) {
- if ( !somewhereLoaded.contains( lm ) ) somewhereLoaded << lm;
- }
- }
-
- for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end() && !found; ++it )
- {
- found = (*it).title == title;
- blocked = (*it).isSingleton && somewhereLoaded.contains((*it).title);
- statusOK = (*it).status == stReady;
- }
- return found && statusOK && !blocked;
-}
-
/*!
\brief Get module library name by its title (user name).
\param title module title (user name)
else
modLibrary = modName;
- bool aIsSingleton = resMgr->booleanValue( *it, "singleton", false );
bool hasGui = resMgr->booleanValue( *it, "gui", true );
QString version = resMgr->stringValue( *it, "version", QString() );
inf.status = hasGui ? stUnknown : stNoGui;
if ( hasGui ) inf.library = modLibrary;
inf.icon = modIcon;
- inf.isSingleton = aIsSingleton;
inf.version = version;
myInfoList.append( inf );
}
static QString moduleTitle( const QString& );
static QString moduleIcon( const QString& );
static QString moduleLibrary( const QString&, const bool = true );
- static bool isModuleAccessible( const QString& );
virtual void createEmptyStudy();
enum { stUnknown = 0, stNoGui, stInaccessible, stReady };
typedef struct {
QString name, title, icon, library, version;
- bool isSingleton;
int status;
} ModuleInfo;
typedef QList<ModuleInfo> ModuleInfoList;
QStringList::Iterator it;
for ( it = modList.begin(); it != modList.end(); ++it )
{
- if ( !isModuleAccessible( *it ) )
- continue;
-
QString modName = moduleName( *it );
QString iconName;
if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ),
SUIT_MessageBox::Yes | SUIT_MessageBox::No,
SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes )
-
- showPreferences( tr( "PREF_APP" ) );
+ {
+ QStringList path;
+ path << tr( "PREF_CATEGORY_SALOME" ) << tr( "PREF_TAB_GENERAL" )
+ << tr( "PREF_GROUP_EXT_BROWSER" ) << tr( "PREF_APP" );
+ showPreferences( path );
+ }
}
}
else
}
/*!Private SLOT. On preferences.*/
-void LightApp_Application::showPreferences( const QString& itemText )
+void LightApp_Application::showPreferences( const QString& path )
+{
+ showPreferences( QStringList() << path );
+}
+
+void LightApp_Application::showPreferences( const QStringList& path )
{
QApplication::setOverrideCursor( Qt::WaitCursor );
if ( !prefDlg )
return;
- preferences()->activateItem( itemText );
+ preferences()->activateItem( path );
if ( ( prefDlg->exec() == QDialog::Accepted || prefDlg->isSaved() ) && resourceMgr() )
{
if ( !app )
continue;
- QStringList modNameList;
- app->modules( modNameList, false );
+ // all modules available in current session
+ QStringList names;
+ app->modules( names, false );
- QMap<QString, QString> iconMap;
- app->moduleIconNames( iconMap );
+ // icons of modules
+ QMap<QString, QString> icons;
+ app->moduleIconNames( icons );
- for ( QStringList::const_iterator it = modNameList.begin(); it != modNameList.end(); ++it )
+ // step 1: iterate through list of all available modules
+ // and add empty preferences page
+ for ( QStringList::const_iterator it = names.begin(); it != names.end(); ++it )
{
- if ( !app->isModuleAccessible( *it ) || _prefs_->hasModule( *it ) )
- continue;
-
- int modId = _prefs_->addPreference( *it );
- if ( iconMap.contains( *it ) )
- _prefs_->setItemIcon( modId, Qtx::scaleIcon( resMgr->loadPixmap( moduleName( *it ), iconMap[*it], false ), 20 ) );
+ if ( !_prefs_->hasModule( *it ) ) // prevent possible duplications
+ {
+ int modId = _prefs_->addPreference( *it ); // add empty page
+ if ( icons.contains( *it ) ) // set icon
+ _prefs_->setItemIcon( modId, Qtx::scaleIcon( resMgr->loadPixmap( moduleName( *it ),
+ icons[*it], false ), 20 ) );
+ }
}
- ModuleList modList;
- app->modules( modList );
- QListIterator<CAM_Module*> itr( modList );
+ // step 2: iterate through list of all loaded modules
+ // and initialize their preferences
+ ModuleList loadedModules;
+ app->modules( loadedModules );
+ QListIterator<CAM_Module*> itr( loadedModules );
while ( itr.hasNext() )
{
- LightApp_Module* mod = 0;
+ LightApp_Module* module = 0;
+ CAM_Module* m = itr.next();
+ if ( m->inherits( "LightApp_Module" ) )
+ module = (LightApp_Module*)m;
- CAM_Module* anItem = itr.next();
- if ( anItem->inherits( "LightApp_Module" ) )
- mod = (LightApp_Module*)anItem;
-
- if ( mod && !_prefs_->hasModule( mod->moduleName() ) )
+ if ( module && !_prefs_->hasModule( module->moduleName() ) )
{
- _prefs_->addPreference( mod->moduleName() );
- mod->createPreferences();
- that->emptyPreferences( mod->moduleName() );
+ _prefs_->addPreference( module->moduleName() ); // add page (for sure, had to be done at step 1)
+ module->createPreferences(); // initialize preferences
+ that->emptyPreferences( module->moduleName() ); // show dummy page if module does not export any preferences
}
}
}
- _prefs_->setItemProperty( "info", tr( "PREFERENCES_NOT_LOADED" ) );
+ _prefs_->setItemProperty( "info", tr( "PREFERENCES_NOT_LOADED" ) ); // dummy page for modules which are not loaded yet
return myPrefs;
}
void LightApp_Application::updateModuleActions()
{
QString modName;
- if ( activeModule() ) {
+ if ( activeModule() )
modName = activeModule()->moduleName();
- if ( !isModuleAccessible( modName ) ) {
- QList<SUIT_Application*> apps = SUIT_Session::session()->applications();
- foreach( SUIT_Application* app, apps ) {
- LightApp_Application* lapp = dynamic_cast<LightApp_Application*>( app );
- if ( lapp && lapp != this )
- lapp->removeModuleAction( modName );
- }
- }
- }
LightApp_ModuleAction* moduleAction =
qobject_cast<LightApp_ModuleAction*>( action( ModulesListId ) );
d ? *d : "",
SUIT_MessageBox::Yes | SUIT_MessageBox::No,
SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes )
- showPreferences( tr( "PREF_APP" ) );
+ {
+ QStringList path;
+ path << tr( "PREF_CATEGORY_SALOME" ) << tr( "PREF_TAB_GENERAL" )
+ << tr( "PREF_GROUP_EXT_BROWSER" ) << tr( "PREF_APP" );
+ showPreferences( path );
+ }
if( d )
delete d;
return true;
virtual bool openAction( const int, const QString& );
void showPreferences( const QString& = QString() );
+ void showPreferences( const QStringList& );
private:
void emptyPreferences( const QString& );
return res;
}
-void LightApp_Preferences::activateItem( const QString& mod ) const
+void LightApp_Preferences::activateItem( const QString& path )
{
- QtxPreferenceItem* item = findItem( mod, true );
-
- if ( !item )
- return;
+ activateItem( QStringList() << path );
+}
- item->ensureVisible();
- item->activate();
+void LightApp_Preferences::activateItem( const QStringList& path )
+{
+ QtxPreferenceItem* item = root();
+ foreach( QString label, path )
+ {
+ if ( !item )
+ break;
+ item = item->findItem( label, false );
+ }
+ if ( item )
+ {
+ item->ensureVisible();
+ item->activate();
+ }
}
/*!Do nothing.*/
#include <SUIT_PreferenceMgr.h>
#include <QMap>
+#include <QStringList>
class QtxResourceMgr;
bool hasModule( const QString& ) const;
- void activateItem( const QString& ) const;
+ void activateItem( const QString& );
+ void activateItem( const QStringList& );
protected:
void changedResources( const ResourceMap& );
const SUIT_PreferenceMgr::PrefItemType type,
const QString& sect, const QString& param )
{
- QtxPreferenceItem* parent = pId == -1 ? this : findItem( pId, true );
+ QtxPreferenceItem* parent = 0;
+ if ( pId == -1 )
+ {
+ if ( !myRoot )
+ myRoot = new QtxPagePrefListItem( QString( "root" ), this );
+ parent = myRoot;
+ }
+ else
+ {
+ parent = findItem( pId, true );
+ }
if ( !parent )
return -1;
- QtxPreferenceItem* item = parent->findItem( title, true );
+ QtxPreferenceItem* item = parent->findItem( title, false );
if ( item && item->depth() < 5 )
return item->id();
- if ( pId == -1 )
- {
- if ( !myRoot )
- myRoot = new QtxPagePrefListItem( QString( "root" ), this );
- parent = myRoot;
- }
-
switch( type )
{
case Auto:
if ( myRoot )
myRoot->setOption( name, val );
}
+
+QtxPreferenceItem* SUIT_PreferenceMgr::root() const
+{
+ return myRoot;
+}
protected:
virtual QVariant optionValue( const QString& ) const;
virtual void setOptionValue( const QString&, const QVariant& );
+ QtxPreferenceItem* root() const;
private:
QtxPreferenceItem* myRoot;