Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4UImanager.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // $Id$
28 //
29 
30 #ifndef G4UImanager_h
31 #define G4UImanager_h 1
32 
33 #include "globals.hh"
34 
35 #include <vector>
36 #include <fstream>
37 #include "G4VStateDependent.hh"
38 #include "G4UIcommandStatus.hh"
39 class G4UIcommandTree;
40 class G4UIcommand;
41 class G4UIsession;
43 class G4UnitsMessenger;
44 class G4UIaliasList;
45 
46 // class description:
47 //
48 // This is a singlton class which controls the command manipulation
49 // and the user interface(s). The constructor of this class MUST NOT
50 // invoked by the user.
51 //
52 
54 {
55  public: // with description
56  static G4UImanager * GetUIpointer();
57  // A static method to get the pointer to the only existing object
58  // of this class.
59 
60  protected:
61  G4UImanager();
62  public:
63  ~G4UImanager();
64  private:
66  const G4UImanager & operator=(const G4UImanager &right);
67  G4int operator==(const G4UImanager &right) const;
68  G4int operator!=(const G4UImanager &right) const;
69 
70  public: // with description
71  G4String GetCurrentValues(const char * aCommand);
72  // This method returns a string which represents the current value(s)
73  // of the parameter(s) of the specified command. Null string will be
74  // returned if the given command is not defined or the command does
75  // not support the GetCurrentValues() method.
76  void AddNewCommand(G4UIcommand * newCommand);
77  // This method register a new command.
78  void RemoveCommand(G4UIcommand * aCommand);
79  // This command remove the registered command. After invokation of this
80  // command, that particular command cannot be applied.
81  void ExecuteMacroFile(const char * fileName);
82  // A macro file defined by the argument will be read by G4UIbatch object.
83  void Loop(const char * macroFile,const char * variableName,
84  G4double initialValue,G4double finalValue,G4double stepSize=1.0);
85  // Execute a macro file more than once with a loop counter.
86  void Foreach(const char * macroFile,const char * variableName,
87  const char * candidates);
88  // Execute a macro file more than once with an aliased variable which takes
89  // a value in the candidate list.
90  G4int ApplyCommand(const char * aCommand);
91  G4int ApplyCommand(const G4String& aCommand);
92  // A command (and parameter(s)) given
93  // by the method's argument will be applied. Zero will be returned in
94  // case the command is successfully executed. Positive non-zero value
95  // will be returned if the command couldn't be executed. The meaning of
96  // this non-zero value is the following.
97  // The returned number : xyy
98  // x00 : G4CommandStatus.hh enumeration
99  // yy : the problematic parameter (first found)
100  void StoreHistory(const char* fileName = "G4history.macro");
101  void StoreHistory(G4bool historySwitch,
102  const char* fileName = "G4history.macro");
103  // The executed commands will be stored in the defined file. If
104  // "historySwitch" is false, saving will be suspended.
105  void ListCommands(const char* direc);
106  // All commands registored under the given directory will be listed to
107  // G4cout.
108  void SetAlias(const char * aliasLine);
109  // Define an alias. The first word of "aliasLine" string is the
110  // alias name and the remaining word(s) is(are) string value
111  // to be aliased.
112  void RemoveAlias(const char * aliasName);
113  // Remove the defined alias.
114  void ListAlias();
115  // Print all aliases.
116  G4String SolveAlias(const char* aCmd);
117  // Convert a command string which contains alias(es).
118  void CreateHTML(const char* dir = "/");
119  // Generate HTML files for defined UI commands
120 
121 
122  public:
123  void LoopS(const char* valueList);
124  void ForeachS(const char* valueList);
125  // These methods are used by G4UIcontrolMessenger to use Loop() and Foreach() methods.
126  virtual G4bool Notify(G4ApplicationState requestedState);
127  // This method is exclusively invoked by G4StateManager and the user
128  // must not use this method.
129 
130  private:
131  void PauseSession(const char* msg);
132  void CreateMessenger();
133  G4UIcommandTree* FindDirectory(const char* dirName);
134 
135  //public:
136  // following three methods will be removed quite soon.
137  // void Interact();
138  // void Interact(const char * promptCharacters);
139 
140  private:
141  static G4UImanager * fUImanager;
142  static G4bool fUImanagerHasBeenKilled;
143  G4UIcommandTree * treeTop;
144  G4UIsession * session;
145  G4UIsession * g4UIWindow;
146  G4UIcontrolMessenger * UImessenger;
147  G4UnitsMessenger * UnitsMessenger;
148  G4String savedParameters;
149  G4UIcommand * savedCommand;
150  G4int verboseLevel;
151  std::ofstream historyFile;
152  G4bool saveHistory;
153  std::vector<G4String> histVec;
154  G4UIaliasList* aliasList;
155  G4int maxHistSize;
156  G4bool pauseAtBeginOfEvent;
157  G4bool pauseAtEndOfEvent;
158  G4String searchPath;
159  std::vector<G4String> searchDirs;
160 
161  public: // with description
162  G4String GetCurrentStringValue(const char * aCommand,
163  G4int parameterNumber=1, G4bool reGet=true);
164  G4int GetCurrentIntValue(const char * aCommand,
165  G4int parameterNumber=1, G4bool reGet=true);
166  G4double GetCurrentDoubleValue(const char * aCommand,
167  G4int parameterNumber=1, G4bool reGet=true);
168  G4String GetCurrentStringValue(const char * aCommand,
169  const char * aParameterName, G4bool reGet=true);
170  G4int GetCurrentIntValue(const char * aCommand,
171  const char * aParameterName, G4bool reGet=true);
172  G4double GetCurrentDoubleValue(const char * aCommand,
173  const char * aParameterName, G4bool reGet=true);
174  // These six methods returns the current value of a parameter of the
175  // given command. For the first three methods, the ordering number of
176  // the parameter (1 is the first parameter) can be given, whereas,
177  // other three methods can give the parameter name.
178  // If "reGet" is true, actual request of returning the current value
179  // will be sent to the corresponding messenger, while, if it is false,
180  // the value stored in G4Umanager will be used. The later case is valid
181  // for the sequential invokation for the same command.
182 
184  { pauseAtBeginOfEvent = vl; }
186  { return pauseAtBeginOfEvent; }
187  inline void SetPauseAtEndOfEvent(G4bool vl)
188  { pauseAtEndOfEvent = vl; }
190  { return pauseAtEndOfEvent; }
191  // If the boolean flags are true, Pause() method of G4StateManager is invoked
192  // at the very begining (before generating a G4Event object) or at the end of
193  // each event. So that, in case a (G)UI session is defined, the user can interact.
194 
195 
196  public:
197  inline G4UIcommandTree * GetTree() const
198  { return treeTop; }
199  inline G4UIsession * GetSession() const
200  { return session; }
201  inline G4UIsession * GetG4UIWindow() const
202  { return g4UIWindow; }
203  public: // with description
204  inline void SetSession(G4UIsession *const value)
205  { session = value; }
206  inline void SetG4UIWindow(G4UIsession *const value)
207  { g4UIWindow = value; }
208  // This method defines the active (G)UI session.
209  void SetCoutDestination(G4UIsession *const value);
210  // This method defines the destination of G4cout/G4cerr stream.
211  // For usual cases, this method will be invoked by a concrete
212  // (G)UI session class object and thus the user needs not to invoke
213  // this method by him(her)self.
214 
215  public:
216  inline void SetVerboseLevel(G4int val)
217  { verboseLevel = val; }
218  inline G4int GetVerboseLevel() const
219  { return verboseLevel; }
220  inline G4int GetNumberOfHistory() const
221  { return histVec.size(); }
223  {
224  G4String st;
225  if(i>=0 && i<G4int(histVec.size()))
226  { st = histVec[i]; }
227  return st;
228  }
229  inline void SetMaxHistSize(G4int mx)
230  { maxHistSize = mx; }
231  inline G4int GetMaxHistSize() const
232  { return maxHistSize; }
233 
234  inline void SetMacroSearchPath(const G4String& path)
235  { searchPath = path; }
236  inline const G4String& GetMacroSearchPath() const
237  { return searchPath; }
238  void ParseMacroSearchPath();
239  G4String FindMacroPath(const G4String& fname) const;
240 
241  // Old methods kept for backward compatibility
242  // inline G4UIcommandTree * GetTree() const
243  // { return treeTop; };
244  // inline G4UIsession * GetSession() const
245  // { return session; };
246  // inline void SetSession(G4UIsession *const value)
247  // { session = value; };
248 
249 };
250 
251 #endif