a0d965a6c2c450614a8750a2ee01830f73927af5
[occt.git] / src / Resource / Resource_Manager.hxx
1 // Created on: 1995-04-20
2 // Created by: Tony GEORGIADES
3 // Copyright (c) 1995-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _Resource_Manager_HeaderFile
18 #define _Resource_Manager_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <TCollection_AsciiString.hxx>
24 #include <Resource_DataMapOfAsciiStringAsciiString.hxx>
25 #include <Resource_DataMapOfAsciiStringExtendedString.hxx>
26 #include <Standard_Boolean.hxx>
27 #include <Standard_Transient.hxx>
28 #include <Standard_CString.hxx>
29 #include <Standard_Integer.hxx>
30 #include <Standard_Real.hxx>
31 #include <Standard_ExtString.hxx>
32 class Standard_TypeMismatch;
33 class Resource_NoSuchResource;
34 class Standard_OutOfRange;
35 class TCollection_AsciiString;
36
37
38 class Resource_Manager;
39 DEFINE_STANDARD_HANDLE(Resource_Manager, Standard_Transient)
40
41 //! Defines a resource structure and its management methods.
42 class Resource_Manager : public Standard_Transient
43 {
44   DEFINE_STANDARD_RTTIEXT(Resource_Manager,Standard_Transient)
45 public:
46
47   //! Create a Resource manager.
48   //! Attempts to find the two following files:
49   //! $CSF_`aName`Defaults/aName
50   //! $CSF_`aName`UserDefaults/aName
51   //! and load them respectively into a reference and a user resource structure.
52   //!
53   //! If CSF_ResourceVerbose defined, seeked files will be printed.
54   //!
55   //! FILE SYNTAX
56   //! The syntax of a resource file is a sequence of resource
57   //! lines terminated by newline characters or end of file.  The
58   //! syntax of an individual resource line is:
59   Standard_EXPORT Resource_Manager(const Standard_CString aName, const Standard_Boolean Verbose = Standard_False);
60
61   //! Create a Resource manager.
62   //! @param theName [in] description file name
63   //! @param theDefaultsDirectory  [in] default folder for looking description file
64   //! @param theUserDefaultsDirectory [in] user folder for looking description file
65   //! @param theIsVerbose [in] print verbose messages
66   Standard_EXPORT Resource_Manager (const TCollection_AsciiString& theName,
67                                     const TCollection_AsciiString& theDefaultsDirectory,
68                                     const TCollection_AsciiString& theUserDefaultsDirectory,
69                                     const Standard_Boolean theIsVerbose = Standard_False);
70   
71   //! Save the user resource structure in the specified file.
72   //! Creates the file if it does not exist.
73   Standard_EXPORT Standard_Boolean Save() const;
74   
75   //! returns True if the Resource does exist.
76   Standard_EXPORT Standard_Boolean Find (const Standard_CString aResource) const;
77
78   //! returns True if the Resource does exist.
79   Standard_EXPORT Standard_Boolean Find (const TCollection_AsciiString& theResource,
80                                          TCollection_AsciiString& theValue) const;
81
82   //! Gets the value of an integer resource according to its
83   //! instance and its type.
84   Standard_EXPORT virtual Standard_Integer Integer (const Standard_CString aResourceName) const;
85   
86   //! Gets the value of a real resource according to its instance
87   //! and its type.
88   Standard_EXPORT virtual Standard_Real Real (const Standard_CString aResourceName) const;
89   
90   //! Gets the value of a CString resource according to its instance
91   //! and its type.
92   Standard_EXPORT virtual Standard_CString Value (const Standard_CString aResourceName) const;
93   
94   //! Gets the value of an ExtString resource according to its instance
95   //! and its type.
96   Standard_EXPORT virtual Standard_ExtString ExtValue (const Standard_CString aResourceName);
97   
98   //! Sets the new value of an integer resource.
99   //! If the resource does not exist, it is created.
100   Standard_EXPORT virtual void SetResource (const Standard_CString aResourceName, const Standard_Integer aValue);
101   
102   //! Sets the new value of a real resource.
103   //! If the resource does not exist, it is created.
104   Standard_EXPORT virtual void SetResource (const Standard_CString aResourceName, const Standard_Real aValue);
105   
106   //! Sets the new value of an CString resource.
107   //! If the resource does not exist, it is created.
108   Standard_EXPORT virtual void SetResource (const Standard_CString aResourceName, const Standard_CString aValue);
109   
110   //! Sets the new value of an ExtString resource.
111   //! If the resource does not exist, it is created.
112   Standard_EXPORT virtual void SetResource (const Standard_CString aResourceName, const Standard_ExtString aValue);
113   
114   //! Gets the resource file full path by its name.
115   //! If corresponding environment variable is not set
116   //! or file doesn't exist returns empty string.
117   Standard_EXPORT static void GetResourcePath (TCollection_AsciiString& aPath, const Standard_CString aName, const Standard_Boolean isUserDefaults);
118
119 private:
120
121   Standard_EXPORT void Load (const TCollection_AsciiString& thePath,
122                              Resource_DataMapOfAsciiStringAsciiString& aMap);
123
124 private:
125
126   TCollection_AsciiString myName;
127   Resource_DataMapOfAsciiStringAsciiString myRefMap;
128   Resource_DataMapOfAsciiStringAsciiString myUserMap;
129   Resource_DataMapOfAsciiStringExtendedString myExtStrMap;
130   Standard_Boolean myVerbose;
131
132 };
133
134 #endif // _Resource_Manager_HeaderFile