66a4a80100fc28c78e3ed752921357e9ac16dbd0
[occt.git] / src / MoniTool / MoniTool_Profile.hxx
1 // Created on: 1998-12-14
2 // Created by: Christian CAILLET
3 // Copyright (c) 1998-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 _MoniTool_Profile_HeaderFile
18 #define _MoniTool_Profile_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <TCollection_AsciiString.hxx>
24 #include <MMgt_TShared.hxx>
25 #include <Standard_CString.hxx>
26 #include <TColStd_HSequenceOfAsciiString.hxx>
27 #include <Standard_Boolean.hxx>
28 class Dico_DictionaryOfTransient;
29 class MoniTool_Option;
30 class TCollection_AsciiString;
31 class Standard_Transient;
32
33
34 class MoniTool_Profile;
35 DEFINE_STANDARD_HANDLE(MoniTool_Profile, MMgt_TShared)
36
37 //! A Profile gives access to a set of options :
38 //! - it defines and gives access to options, by names specific
39 //! to this Profile, defaulted to basic names of the Options
40 //! - it records one or more Configurations, each of one is
41 //! identified by a name, and commands for each option a switch
42 //! value
43 //! - a Configuration may be partial, i.e. concern only a subset
44 //! of the complete list of options
45 //! - Values are accessed through a Current Configuration, which
46 //! name is fixed as ".", which can cumulate several
47 //! configurations (especially when they are partial)
48 //!
49 //! It may also bring a "fast" access to values, which has been
50 //! formerly computed from current configuration or another given
51 //! one. But its up-to-date status regarding existing
52 //! configurations is not checked : it may be recomputed or
53 //! cleared at any time. If not set, the current configuration
54 //! is then taken
55 class MoniTool_Profile : public MMgt_TShared
56 {
57
58 public:
59
60   
61   //! Creates an empty Profile, with an empty Current Configuration
62   //! (named ".")
63   Standard_EXPORT MoniTool_Profile();
64   
65   //! Adds an Option, with a Name, by default takes the Name of the
66   //! Option
67   Standard_EXPORT void AddOption (const Handle(MoniTool_Option)& option, const Standard_CString name = "");
68   
69   //! Returns an Option from its Name. Null Handle if unknown
70   Standard_EXPORT Handle(MoniTool_Option) Option (const Standard_CString name) const;
71   
72   //! Returns the list of Option Names
73   Standard_EXPORT Handle(TColStd_HSequenceOfAsciiString) OptionList() const;
74   
75   //! Returns the list of Option Names which are defined on a
76   //! TypedValue/Static, i.e. for Basic Type
77   Standard_EXPORT Handle(TColStd_HSequenceOfAsciiString) TypedValueList() const;
78   
79   //! Adds a new Configuration, yet empty, then filled by AddSwitch
80   //! If <confname> already existed, it is replaced from scratch
81   //! While AddConf creates new Conf only if it does not yet exist
82   //!
83   //! Remark : the Current Configuration "." may not be changed
84   Standard_EXPORT void NewConf (const Standard_CString confname);
85   
86   //! Adds a new Configuration, yet empty, then filled by AddSwitch
87   //! If <confname> already existed, it is kept as it is
88   //! While NewConf restrts from scratch anyway
89   //!
90   //! Remark : the Current Configuration "." may not be changed
91   Standard_EXPORT void AddConf (const Standard_CString confname);
92   
93   //! Tells if <confname> is known as a Configuration
94   Standard_EXPORT Standard_Boolean HasConf (const Standard_CString confname) const;
95   
96   //! Returns the list of Configuration Names, including Current "."
97   Standard_EXPORT Handle(TColStd_HSequenceOfAsciiString) ConfList() const;
98   
99   //! Clears a configuration (does not remove it)
100   //! A cleared configuration has no effect, it can be reloaded
101   Standard_EXPORT Standard_Boolean ClearConf (const Standard_CString confname);
102   
103   //! Adds the definitions from the configuration <otherconf> to
104   //! those of <confname>
105   //! Returns True if done, False if confname or otherconf are unknown
106   Standard_EXPORT Standard_Boolean AddFromOtherConf (const Standard_CString confname, const Standard_CString otherconf);
107   
108   //! Sets the definitions of a configuration from the actual state
109   //! (current configuration plus current state of options for those
110   //! which are not recorded in current conf)
111   Standard_EXPORT Standard_Boolean SetFromCurrent (const Standard_CString confname);
112   
113   //! Adds to the Configuration <confname>, for the option <optname>
114   //! the command to switch it to <casename>
115   //! If <casename> is not given, records the actual current
116   //! CaseName of this Option
117   //! Returns True if done, False if <confname> or <optname> is
118   //! unknown, or <casename> not allowed for <optname>
119   Standard_EXPORT Standard_Boolean AddSwitch (const Standard_CString confname, const Standard_CString optname, const Standard_CString casename = "");
120   
121   //! Removes from the Configuration <confname>, the switch for the
122   //! option <optname>. Hence, it will consider the basic default
123   //! switch for this option
124   //! Returns True if done or switch was not recorded, False if
125   //! <confname> or <optname> is unknown
126   Standard_EXPORT Standard_Boolean RemoveSwitch (const Standard_CString confname, const Standard_CString optname);
127   
128   //! Returns the list of switches properly concerned by a config :
129   //! two lists in parallel, <optlist> lists the names of options
130   //! and for each one, <caselist> gives the case for this config
131   Standard_EXPORT void SwitchList (const Standard_CString confname, Handle(TColStd_HSequenceOfAsciiString)& optlist, Handle(TColStd_HSequenceOfAsciiString)& caselist) const;
132   
133   //! Copies (Cumulates) the definition of <confname> to current
134   //! Records the current name as the last current setting
135   //!
136   //! Returns True if done, False (and does nothing> if <confname>
137   //! is not recorded as a Configuration
138   //! If no SetCurrent has been called, the last added one is taken
139   //!
140   //! Remark : SetCurrent is for the Profile : the individual
141   //! options are not switched themselves, they are only queried
142   //! To switch the options themselves, see below RecordCurrent
143   //!
144   //! Remark : for Options which are listed in the Profile but not
145   //! in the current Configuration, their current switch is taken
146   Standard_EXPORT Standard_Boolean SetCurrent (const Standard_CString confname);
147   
148   //! Records the switches of current configuration in the options
149   //! themselves
150   Standard_EXPORT void RecordCurrent();
151   
152   //! Returns the name of last current configuration
153   Standard_EXPORT const TCollection_AsciiString& Current() const;
154   
155   //! Returns the selected case name of option <optname> in current
156   //! configuration
157   //! Empty String if <optname> unknown
158   //!
159   //! If <proper> is False (D), if <optname> is not recorded in the
160   //! current configuration, the own current name of the option
161   //! itself is taken
162   //! Else, an empty string is returned
163   Standard_EXPORT TCollection_AsciiString CaseName (const Standard_CString optname, const Standard_Boolean proper = Standard_False) const;
164   
165   //! Returns the Value of the switch selected for option <optname>
166   //! in current configuration
167   //! Null Handle if <optname> unknown
168   //! To be down-casted as needed before use
169   Standard_EXPORT Handle(Standard_Transient) CaseValue (const Standard_CString optname) const;
170   
171   //! Returns the Value of the switch selected for option <optname>
172   //! in current configuration
173   //! Returns True if done, False + Null Handle if <optname> unknown
174   //! This way of returning a Transient, bound with the Type Control
175   //! avoids DownCast and ensures the value is directly usable
176   Standard_EXPORT Standard_Boolean Value (const Standard_CString optname, Handle(Standard_Transient)& val) const;
177   
178   //! For the Options which are defined with a TypedValue/Static,
179   //! takes the value defined in current configuration, and sets
180   //! the TypedValue with it
181   //!
182   //! If <proper> is False (D), takes the current value, whatever
183   //! it is properly recorded in current configuration or not
184   //! If <proper> is True, sets the value only if it is properly
185   //! recorded in the current configuration
186   //!
187   //! By default, considers all the Options with a TypedValue
188   //! If <name> is given, considers the Options of which the name
189   //! begins by <name>
190   Standard_EXPORT void SetTypedValues (const Standard_Boolean proper = Standard_False, const Standard_CString name = "") const;
191   
192   //! Recomputes fast access from the definition of a configuration
193   //! By default, the current one
194   //! Else, a configuration identified by its name
195   Standard_EXPORT void SetFast (const Standard_CString confname = "");
196   
197   //! Clears definitions of fast access
198   Standard_EXPORT void ClearFast();
199   
200   //! Gets the value corresponding to Option <optname>, as fast
201   //! If not defined as fast, check "normal" access by calling Value
202   //! Returns True if OK (either Fast or normal), False if not found
203   //! (if not found, <val> is returned Null Handle)
204   Standard_EXPORT Standard_Boolean FastValue (const Standard_CString optname, Handle(Standard_Transient)& val) const;
205
206
207
208
209   DEFINE_STANDARD_RTTIEXT(MoniTool_Profile,MMgt_TShared)
210
211 protected:
212
213
214
215
216 private:
217
218   
219   //! Internal
220   Standard_EXPORT Handle(Dico_DictionaryOfTransient) Conf (const Standard_CString confname) const;
221
222   Handle(Dico_DictionaryOfTransient) theopts;
223   Handle(Dico_DictionaryOfTransient) theconfs;
224   TCollection_AsciiString thecurname;
225   Handle(Dico_DictionaryOfTransient) thecurconf;
226   Handle(Dico_DictionaryOfTransient) thefastval;
227
228
229 };
230
231
232
233
234
235
236
237 #endif // _MoniTool_Profile_HeaderFile