Salome HOME
Fix for '#18490 GEOM build fail with master branch' issue.
[modules/geom.git] / src / Material / Material_ResourceMgr.cxx
index eef31d76d03871cae756dfb78a64f739dc685057..a9cf25b4c592b91668ee7b66def96b2a59011918 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -22,6 +22,7 @@
 
 #include "Material_ResourceMgr.h"
 
+#include <QFileInfo>
 #include <QFileSystemWatcher>
 #include <QThread>
 
@@ -100,10 +101,10 @@ Material_ResourceMgr* Material_ResourceMgr::resourceMgr()
 }
 
 /*!
-  \brief Get list of avaiable materials
+  \brief Get list of available materials
   \param theType material type
   \param theSort if \c true (default), returns a list of materials sorted by name
-  \return list of avaiable materials names
+  \return list of available materials names
 */
 QStringList Material_ResourceMgr::materials( MaterialType theType, bool theSort )
 {
@@ -140,6 +141,11 @@ QStringList Material_ResourceMgr::materials( MaterialType theType, bool theSort
     qSort( slglobal );
     qSort( sluser );
   }
+  // special processing for default material (to make it first in the list)
+  if ( slglobal.contains( "[ Default ]" ) ) {
+    slglobal.removeAll( "[ Default ]" );
+    slglobal.prepend( "[ Default ]" );
+  }
 
   // combine the materials to obtain result list
   QStringList result;
@@ -170,7 +176,10 @@ void Material_ResourceMgr::watchUserFile( bool on )
   if ( on ) {
     if ( !myWatcher ) {
       myWatcher = new QFileSystemWatcher( this );
-      myWatcher->addPath( userFileName( appName() ) );
+      QFileInfo ufile = userFileName( appName() );
+      if ( ufile.exists() ) {
+        myWatcher->addPath( ufile.filePath() );
+      }
       connect( myWatcher, SIGNAL( fileChanged( QString ) ), this, SLOT( update() ) );
     }
   }
@@ -182,6 +191,25 @@ void Material_ResourceMgr::watchUserFile( bool on )
   }
 }
 
+/*!
+  \brief This function is called after user configuration file is saved.
+  \internal
+*/
+void Material_ResourceMgr::saved()
+{
+  if ( resourceMgr() != this ) {
+    resourceMgr()->saved();
+  }
+  else if ( myWatcher ) {
+    QStringList files = myWatcher->files();
+    QFileInfo ufile = userFileName( appName() );
+    if ( ufile.exists() && !files.contains( ufile.filePath() ) ) {
+      myWatcher->addPath( ufile.filePath() );
+      update();
+    }
+  }
+}
+
 /*!
   \brief Update user database slot
   \internal