Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4UIcommand 27 // 28 // Class description: 29 // 30 // This G4UIcommand is the "concrete" base cla 31 // used by Geant4 (G)UI. The user can use this 32 // arguments of a command are not suitable wit 33 // classes. 34 // Some methods defined in this base class are 35 36 // Author: Makoto Asai (SLAC), 1998 37 // ------------------------------------------- 38 #ifndef G4UIcommand_hh 39 #define G4UIcommand_hh 1 40 41 #include "G4ApplicationState.hh" 42 #include "G4ThreeVector.hh" 43 #include "G4UIparameter.hh" 44 #include "globals.hh" 45 46 #include <vector> 47 48 class G4UImessenger; 49 50 class G4UIcommand 51 { 52 public: 53 // Dummy default constructor 54 G4UIcommand() = default; 55 56 // Constructor. The command string with fu 57 // and the pointer to the messenger must b 58 // If tBB is set to false, this command wo 59 // This tBB parameter could be changed wit 60 // except for G4UIdirectory 61 G4UIcommand(const char* theCommandPath, G4 62 63 virtual ~G4UIcommand(); 64 65 G4bool operator==(const G4UIcommand& right 66 G4bool operator!=(const G4UIcommand& right 67 68 virtual G4int DoIt(const G4String& paramet 69 70 G4String GetCurrentValue(); 71 72 // These methods define the states where t 73 // Once one of these commands is invoked, 74 // be denied when Geant4 is NOT in the ass 75 void AvailableForStates(G4ApplicationState 76 void AvailableForStates(G4ApplicationState 77 void AvailableForStates(G4ApplicationState 78 void AvailableForStates(G4ApplicationState 79 G4ApplicationState 80 void AvailableForStates(G4ApplicationState 81 G4ApplicationState 82 83 G4bool IsAvailable(); 84 85 virtual void List(); 86 87 // Static methods for conversion from valu 88 // These methods are to be used by GetCurr 89 // of concrete messengers 90 static G4String ConvertToString(G4bool boo 91 static G4String ConvertToString(G4int intV 92 static G4String ConvertToString(G4long lon 93 static G4String ConvertToString(G4double d 94 static G4String ConvertToString(G4double d 95 static G4String ConvertToString(const G4Th 96 static G4String ConvertToString(const G4Th 97 98 // Static methods for conversion from a st 99 // type. These methods are to be used dire 100 // of concrete messengers, or GetNewXXXVal 101 // this G4UIcommand class 102 static G4bool ConvertToBool(const char* st 103 static G4int ConvertToInt(const char* st); 104 static G4long ConvertToLongInt(const char* 105 static G4double ConvertToDouble(const char 106 static G4double ConvertToDimensionedDouble 107 static G4ThreeVector ConvertTo3Vector(cons 108 static G4ThreeVector ConvertToDimensioned3 109 110 // Static methods for unit and its categor 111 static G4double ValueOf(const char* unitNa 112 static G4String CategoryOf(const char* uni 113 static G4String UnitsList(const char* unit 114 115 // Defines the range the command parameter 116 // The variable name(s) appear in the rang 117 // as the name(s) of the parameter(s). 118 // All the C++ syntax of relational operat 119 // range expression 120 inline void SetRange(const char* rs) { ran 121 122 inline const G4String& GetRange() const { 123 inline std::size_t GetGuidanceEntries() co 124 inline const G4String& GetGuidanceLine(G4i 125 inline const G4String& GetCommandPath() co 126 inline const G4String& GetCommandName() co 127 inline std::size_t GetParameterEntries() c 128 inline G4UIparameter* GetParameter(G4int i 129 inline std::vector<G4ApplicationState>* Ge 130 inline G4UImessenger* GetMessenger() const 131 132 // Defines a parameter. This method is use 133 // classes but the user can directly use t 134 // a command, without using the derived cl 135 // of the parameters is the order of invok 136 inline void SetParameter(G4UIparameter* co 137 { 138 parameter.push_back(newParameter); 139 } 140 141 // Adds a guidance line. Unlimited times o 142 // allowed. The given lines of guidance wi 143 // The first line of the guidance will be 144 // command, i.e. one line list of the comm 145 inline void SetGuidance(const char* aGuida 146 147 inline const G4String GetTitle() const 148 { 149 return (commandGuidance.empty()) ? G4Str 150 } 151 152 inline void SetToBeBroadcasted(G4bool val) 153 inline G4bool ToBeBroadcasted() const { re 154 inline void SetToBeFlushed(G4bool val) { t 155 inline G4bool ToBeFlushed() const { return 156 inline void SetWorkerThreadOnly(G4bool val 157 inline G4bool IsWorkerThreadOnly() const { 158 159 inline void CommandFailed(G4int errCode, G 160 { 161 commandFailureCode = errCode; 162 failureDescription = ed.str(); 163 } 164 inline void CommandFailed(G4ExceptionDescr 165 { 166 commandFailureCode = 1; 167 failureDescription = ed.str(); 168 } 169 inline G4int IfCommandFailed() { return co 170 inline const G4String& GetFailureDescripti 171 inline void ResetFailure() 172 { 173 commandFailureCode = 0; 174 failureDescription = ""; 175 } 176 177 public: 178 enum CommandType 179 { 180 BaseClassCmd, 181 WithoutParameterCmd, 182 WithABoolCmd, 183 WithAnIntegerCmd, 184 WithALongIntCmd, 185 WithADoubleCmd, 186 WithADoubleAndUnitCmd, 187 With3VectorCmd, 188 With3VectorAndUnitCmd, 189 WithAStringCmd, 190 CmdDirectory = -1 191 }; 192 193 inline CommandType GetCommandType() const 194 void SetCommandType(CommandType); 195 196 inline void SetDefaultSortFlag(G4bool val) 197 198 protected: 199 G4int CheckNewValue(const char* newValue); 200 201 G4bool toBeBroadcasted = false; 202 G4bool toBeFlushed = false; 203 G4bool workerThreadOnly = false; 204 205 G4int commandFailureCode = 0; 206 G4String failureDescription = ""; 207 208 G4bool ifSort = false; 209 210 private: 211 void G4UIcommandCommonConstructorCode(cons 212 213 private: 214 CommandType commandType = BaseClassCmd; 215 G4UImessenger* messenger = nullptr; 216 G4String commandPath; 217 G4String commandName; 218 G4String rangeExpression; 219 std::vector<G4UIparameter*> parameter; 220 std::vector<G4String> commandGuidance; 221 std::vector<G4ApplicationState> availabelS 222 }; 223 224 #endif 225