Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/geom.git] / src / Material / Material_ResourceMgr.cxx
diff --git a/src/Material/Material_ResourceMgr.cxx b/src/Material/Material_ResourceMgr.cxx
new file mode 100644 (file)
index 0000000..97853f5
--- /dev/null
@@ -0,0 +1,116 @@
+// Copyright (C) 2007-2012  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.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+// File   : Material_ResourceMgr.cxx
+// Author : Margarita KARPUNINA, Open CASCADE S.A.S. (margarita.karpunina@opencascade.com)
+
+#include "Material_ResourceMgr.h"
+
+/*!
+  \class Material_ResourceMgr
+  \brief Material properties resources manager.
+
+  This class is used to manage the material properties throughout the application
+  in the similar way as QtxResourceMgr does it with application preferences.
+
+  Standard material types are stored in the global application settings files
+  (named as SalomeMaterial.xml). User-defined materials are stored in user's home
+  directory - in the file .SalomeMaterialrc.
+
+  The Material_ResourceMgr class is used by material properties dialog box
+  (GEOMToolsGUI_MaterialPropertiesDlg class).
+*/
+
+/*!
+  \brief Constructor
+*/
+Material_ResourceMgr::Material_ResourceMgr()
+  : QtxResourceMgr( "SalomeMaterial", "%1Config" )
+{
+  if ( dirList().isEmpty() && ::getenv( "GEOM_ROOT_DIR" ) )
+    setDirList( QStringList() << Qtx::addSlash( ::getenv( "GEOM_ROOT_DIR" ) ) + "share/salome/resources/geom" );
+  setCurrentFormat( "xml" );
+}
+
+/*!
+  \brief Destructor
+*/
+Material_ResourceMgr::~Material_ResourceMgr()
+{
+}
+
+/*!
+  \brief Get list of avaiable 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
+*/
+QStringList Material_ResourceMgr::materials( MaterialType theType, bool theSort )
+{
+  // store original working mode
+  WorkingMode m = workingMode();
+
+  QStringList slglobal, sluser;
+
+  // retrieve all materials : global + user
+  setWorkingMode( AllowUserValues );
+  sluser = sections();
+
+  // retrieve only global materials
+  setWorkingMode( IgnoreUserValues );
+  slglobal = sections();
+
+  // remove global materials from user list to obtain only user materials
+  QMutableListIterator<QString> it( sluser );
+  while ( it.hasNext() ) {
+    QString s = it.next();
+    if ( slglobal.contains( s ) ) it.remove();
+  }
+
+  // remove 'common' material 
+  slglobal.removeAll("[common]");
+
+  // restore original working mode
+  setWorkingMode( m );
+
+  // sort if necessary (separately global and user materials)
+  if ( theSort ) {
+    qSort( slglobal );
+    qSort( sluser );
+  }
+
+  // combine the materials to obtain result list
+  QStringList result;
+  
+  switch ( theType ) {
+  case Global:
+    result = slglobal;
+    break;
+  case User:
+    result = sluser;
+    break;
+  case All:
+    result = slglobal + sluser;
+    break;
+  default:
+    break;
+  }
+
+  return result;
+}