]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Issue 0021247: EDF 1856 STUDY: Unification of the configuration files and directories...
authorvsr <vsr@opencascade.com>
Sun, 16 Oct 2011 12:52:35 +0000 (12:52 +0000)
committervsr <vsr@opencascade.com>
Sun, 16 Oct 2011 12:52:35 +0000 (12:52 +0000)
Part 1: Store GUI prefrences (+ style) in the ~/.config/salome directory

src/Qtx/QtxResourceMgr.cxx
src/SUIT/SUIT_ResourceMgr.cxx
src/SUIT/SUIT_ResourceMgr.h
src/SUITApp/SUITApp.cxx
src/Session/SALOME_Session_Server.cxx

index 801593c4df943e1879713bdf9b22c83612a57d34..a9656564cd7597ff71effe04ca270dfd0e1d3491 100644 (file)
@@ -635,6 +635,9 @@ bool QtxResourceMgr::IniFormat::load( const QString& fname, QMap<QString, Sectio
 */
 bool QtxResourceMgr::IniFormat::save( const QString& fname, const QMap<QString, Section>& secMap )
 {
+  if ( !Qtx::mkDir( QFileInfo( fname ).absolutePath() ) )
+    return false;
+
   QFile file( fname );
   if ( !file.open( QFile::WriteOnly ) )
     return false;
@@ -877,6 +880,9 @@ bool QtxResourceMgr::XmlFormat::save( const QString& fname, const QMap<QString,
 
 #ifndef QT_NO_DOM
 
+  if ( !Qtx::mkDir( QFileInfo( fname ).absolutePath() ) )
+    return false;
+
   QFile file( fname );
   if ( !file.open( QFile::WriteOnly ) )
     return false;
@@ -2779,7 +2785,7 @@ void QtxResourceMgr::setResource( const QString& sect, const QString& name, cons
   the configuration file from the previous versions of the application).
   
   \param appName application name
-  \param for_load boolean flag indicating that file is opened for loading or saving (not used) 
+  \param for_load boolean flag indicating that file is opened for loading or saving (not used in default implementation
   \return user configuration file name
   \sa globalFileName()
 */
@@ -2788,6 +2794,10 @@ QString QtxResourceMgr::userFileName( const QString& appName, const bool /*for_l
   QString fileName;
   QString pathName = QDir::homePath();
 
+  QString cfgAppName = QApplication::applicationName();
+  if ( !cfgAppName.isEmpty() )
+    pathName = Qtx::addSlash( Qtx::addSlash( pathName ) + QString( ".config" ) ) + cfgAppName;
+
 #ifdef WIN32
   fileName = QString( "%1.%2" ).arg( appName ).arg( currentFormat() );
 #else
index 801d744ca2f905a2b97dc392433963c300abaed1..3e93ea73452d0b95b40c686a409cff3b5e509463 100755 (executable)
@@ -116,33 +116,59 @@ QString SUIT_ResourceMgr::userFileName( const QString& appName, const bool for_l
 */
 QString SUIT_ResourceMgr::findAppropriateUserFile( const QString& fname ) const
 {
-  QDir d( QFileInfo( fname ).dir() );
-  d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
-  QStringList l = d.entryList();
   QString appr_file;
-  int id0 = userFileId( fname ), id, appr=-1;
-  if( id0<0 )
+
+  // calculate default file id from user file name
+  long id0 = userFileId( fname );
+  if ( id0 < 0 ) // can't calculate file id from user file name, no further processing
     return appr_file;
 
-  for( QStringList::const_iterator anIt = l.begin(), aLast = l.end(); anIt!=aLast; anIt++ )
-  {
-    id = userFileId( *anIt );
-    if( id<0 )
-      continue;
+  long id, appr = -1;
+
+  // get all files from the same dir where use file is (should be) situated
+  QDir d( QFileInfo( fname ).dir() );
+  if ( d.exists() ) {
+    d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
+    QStringList l = d.entryList();
+    for( QStringList::const_iterator anIt = l.begin(), aLast = l.end(); anIt!=aLast; anIt++ )
+    {
+      id = userFileId( *anIt );
+      if ( id < 0 )
+       continue;
+      if( appr < 0 || qAbs( id-id0 ) < qAbs( appr-id0 ) )
+      {
+       appr = id;
+       appr_file = d.absoluteFilePath( *anIt );
+      }
+    }
+  }
+
+  // backward compatibility: check also user's home directory (if it differs from above one)
+  QDir home = QDir::home();
+  if ( home.exists() && d.canonicalPath() != home.canonicalPath() ) {
+    home.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
+    QStringList l = home.entryList();
 
-    if( appr < 0 || abs( id-id0 ) < abs( appr-id0 ) )
+    for( QStringList::const_iterator anIt = l.begin(), aLast = l.end(); anIt!=aLast; anIt++ )
     {
-      appr = id;
-      appr_file = d.absoluteFilePath( *anIt );
+      id = userFileId( *anIt );
+      if ( id < 0 )
+       continue;
+      if( appr < 0 || qAbs( id-id0 ) < qAbs( appr-id0 ) )
+      {
+       appr = id;
+       appr_file = home.absoluteFilePath( *anIt );
+      }
     }
   }
+  
   return appr_file;
 }
 
 /*!
     Calculates integer extended version number by user file name for comparing
 */
-int SUIT_ResourceMgr::userFileId( const QString& ) const
+long SUIT_ResourceMgr::userFileId( const QString& ) const
 {
   return -1;
 }
index 74440dde595f4be3493a6e87e16a90edf93b76cc..ee85fc924fec4cee87c72b47f85ec12594ff299e 100755 (executable)
@@ -41,7 +41,7 @@ public:
 protected:
   virtual QString userFileName( const QString&, const bool = true ) const;
   virtual QString findAppropriateUserFile( const QString& ) const;
-  virtual int     userFileId( const QString& ) const;
+  virtual long    userFileId( const QString& ) const;
 
 private:
   QString         myVersion;
index c7a391d57aa87db0d2e97c67e9130a4e48e8f642..f0c7d6cd8e76004870957ad55e56918c77ba1892 100644 (file)
@@ -66,6 +66,13 @@ static QString salomeVersion()
   return GUI_VERSION_STR;
 }
 
+static QString getAppName( const QString& libName )
+{
+  QString appName = QFileInfo( libName ).baseName();
+  if ( appName.startsWith( "lib" ) ) appName = appName.mid( 3 );
+  return appName;
+}
+
 // static void MessageOutput( QtMsgType type, const char* msg )
 // {
 //   switch ( type )
@@ -166,7 +173,7 @@ int main( int argc, char* argv[] )
   bool iniFormat        = false;
   bool noSplash         = false;
   bool useLicense       = false;
-  for ( int i = 1; i < argc /*&& !noExceptHandling*/; i++ )
+  for ( int i = 1; i < argc; i++ )
   {
     if ( !strcmp( argv[i], "--noexcepthandling" ) )
       noExceptHandling = true;
@@ -174,9 +181,9 @@ int main( int argc, char* argv[] )
       iniFormat = true;
     else if ( !strcmp( argv[i], "--nosplash") )
       noSplash = true;
-        else if ( !strcmp( argv[i], "--uselicense" ) )
+    else if ( !strcmp( argv[i], "--uselicense" ) )
       useLicense = true;
-        else
+    else
       argList.append( QString( argv[i] ) );
   }
 
@@ -186,6 +193,13 @@ int main( int argc, char* argv[] )
     QApplication::addLibraryPath( QDir( qtdir ).absoluteFilePath( "plugins" ) );
   
   SUITApp_Application app( argc, argv );
+  QString cfgAppName = getAppName( argList.isEmpty() ? QString() : argList.first() );
+  // hard-coding for LightApp :( no other way to this for the moment
+  if ( cfgAppName == "LightApp" ) {
+    app.setOrganizationName( "salome" );
+    app.setApplicationName( "salome" );
+    app.setApplicationVersion( salomeVersion() );
+  }
 
   int result = -1;
 
index 91054390400fb46c3cee696c0caa6527a45f2d8d..84bf89adb840160a642e9358a4814e0cb3eebc78 100755 (executable)
@@ -174,9 +174,9 @@ protected:
     return SUIT_ResourceMgr::userFileName( myExtAppName, for_load );
   }
 
-  virtual int userFileId( const QString& _fname ) const
+  virtual long userFileId( const QString& _fname ) const
   {
-    int id = -1;
+    long id = -1;
     if ( !myExtAppName.isEmpty() ) {
       QRegExp exp( QString( "\\.%1rc\\.([a-zA-Z0-9.]+)$" ).arg( myExtAppName ) );
       QRegExp vers_exp( "^([0-9]+)([A-Za-z]?)([0-9]*)$" );