Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4InteractorMessenger.cc
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
28#include <string.h>
29#include <stdlib.h>
30
31#include "G4UIdirectory.hh"
32#include "G4UIcommand.hh"
34
36
37#define STRDUP(str) ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : (char*)NULL)
38#define STRDEL(str) {if((str)!=NULL) {free(str);str=NULL;}}
39
40static G4bool GetValues (G4String,int,G4String*);
41
43 G4VInteractiveSession* a_session
44)
45{
46 session = a_session;
47
48 G4UIparameter* parameter;
49
50 interactorDirectory = new G4UIdirectory("/gui/");
51 interactorDirectory->SetGuidance("UI interactors commands.");
52
53 // /gui/addMenu :
54 addMenu = new G4UIcommand("/gui/addMenu",this);
55 addMenu->SetGuidance("Add a menu to menu bar.");
56 parameter = new G4UIparameter("Name",'s',false);
57 parameter->SetDefaultValue("dummy");
58 addMenu->SetParameter (parameter);
59 parameter = new G4UIparameter("Label",'s',false);
60 parameter->SetDefaultValue("dummy");
61 addMenu->SetParameter (parameter);
62
63 // /gui/addButton :
64 addButton = new G4UIcommand("/gui/addButton",this);
65 addButton->SetGuidance("Add a button to menu.");
66 parameter = new G4UIparameter("Menu",'s',false);
67 parameter->SetDefaultValue("dummy");
68 addButton->SetParameter (parameter);
69 parameter = new G4UIparameter("Label",'s',false);
70 parameter->SetDefaultValue("dummy");
71 addButton->SetParameter (parameter);
72 parameter = new G4UIparameter("Command",'s',false);
73 parameter->SetDefaultValue("");
74 addButton->SetParameter (parameter);
75
76 // /gui/defaultIcons :
77 defaultIcons = new G4UIcommand("/gui/defaultIcons",this);
78 defaultIcons->SetGuidance("Set the Geant4 defaults icons in Qt driver.");
79 defaultIcons->SetGuidance("By default, Geant4 icons are enable.");
80
81 parameter = new G4UIparameter("bool",'b',true);
82 parameter->SetDefaultValue("true");
83 defaultIcons->SetParameter (parameter);
84
85 // /gui/addIcon :
86 addIcon = new G4UIcommand("/gui/addIcon",this);
87 addIcon->SetGuidance
88 ("Add a non-checkable icon to the Icon toolbar.");
89 addIcon->SetGuidance
90 ("If the Icon parameter is set to \"user_icon\", you should provide the icon file in xpm format, otherwise you have to choose one of the candidate icons");
91 addIcon->SetGuidance
92 ("A command given without parameters will display a window that will allow one to choose the parameters (if needed) for this command.");
93 addIcon->SetGuidance
94 ("E.g: /gui/addIcon \"Change background color\" user_icon /vis/viewer/set/background ../Images/background.xpm");
95 addIcon->SetGuidance
96 ("Special cases for the Icon parameter:");
97 addIcon->SetGuidance
98 (" - open: Open an open-file-selector that can run the Command with File as argument.");
99 addIcon->SetGuidance
100 (" - save: Open a save-file-selector that can run the Command with File as argument.");
101 addIcon->SetGuidance
102 (" - move/rotate/pick/zoom_in/zoom_out: Theses icons are radio-button icons that can change cursor action.");
103 addIcon->SetGuidance
104 (" - wireframe/solid/hidden_line_removal/hidden_line_and_surface_removal: These icons are radio-button icons that can change drawing style.");
105 addIcon->SetGuidance
106 (" - perspective/ortho: These icons are radio-button icons that can change projection style.");
107
108 parameter = new G4UIparameter("Label",'s',false);
109 parameter->SetDefaultValue("");
110 addIcon->SetParameter (parameter);
111
112 parameter = new G4UIparameter("Icon",'s',false);
113 parameter->SetDefaultValue("");
114 parameter->SetParameterCandidates
115 ("open save move rotate pick zoom_in zoom_out wireframe solid hidden_line_removal hidden_line_and_surface_removal perspective ortho user_icon");
116 addIcon->SetParameter (parameter);
117
118 parameter = new G4UIparameter("Command",'s',true);
119 parameter->SetDefaultValue("no_command");
120 addIcon->SetParameter (parameter);
121
122 parameter = new G4UIparameter("File",'s',true);
123 parameter->SetDefaultValue("no_file");
124 addIcon->SetParameter (parameter);
125
126 // /gui/system :
127 sys = new G4UIcommand("/gui/system",this);
128 sys->SetGuidance("Send a command to the system.");
129 parameter = new G4UIparameter("Command",'s',false);
130 parameter->SetDefaultValue("");
131 sys->SetParameter (parameter);
132
133}
134
136{
137 delete addButton;
138 delete addIcon;
139 delete addMenu;
140 delete interactorDirectory;
141}
142
144 G4UIcommand* command
145,G4String newValue
146)
147{
148 int paramn = command->GetParameterEntries();
149 G4String* params = new G4String [paramn];
150 if(GetValues(newValue,paramn,params)==true) {
151 if(command==addMenu) {
152 session->AddMenu((const char*)params[0],(const char*)params[1]);
153 } else if(command==addButton) {
154 session->AddButton((const char*)params[0],(const char*)params[1],(const char*)params[2]);
155 } else if(command==addIcon) {
156 session->AddIcon((const char*)params[0],(const char*)params[1],(const char*)params[2],(const char*)params[3]);
157 } else if(command==defaultIcons) {
158 session->DefaultIcons(command->ConvertToBool(newValue));
159 } else if(command==sys) {
160 int rc = system((const char*)params[0]);
161 if ( rc < 0 ){ }
162 }
163 }
164 delete [] params;
165}
166G4bool GetValues (
167 G4String newValue
168,int paramn
169,G4String* params
170)
171{
172 char* value = STRDUP(newValue.data());
173 if(value==NULL) return false;
174 char* tok = strtok(value," ");
175 for( int i=0; i<paramn;i++ ) {
176 if(tok==NULL) {
177 STRDEL(value);
178 return false;
179 }
180 G4String token = tok;
181 if( token(0)=='"' ) {
182 while( token(token.length()-1) != '"' ) {
183 tok = strtok(NULL," ");
184 if( (tok==NULL) || (*tok=='\0')) {
185 STRDEL(value);
186 return false;
187 }
188 token += " ";
189 token += tok;
190 }
191 token = (G4String)token.strip(G4String::both,'"');
192 }
193 if( token.isNull() ) {
194 STRDEL(value);
195 return false;
196 } else {
197 params[i] = token;
198 }
199 tok = strtok(NULL," ");
200 }
201 STRDEL(value);
202 return true;
203}
204
205
#define STRDUP(str)
#define STRDEL(str)
bool G4bool
Definition: G4Types.hh:86
void SetNewValue(G4UIcommand *command, G4String newValue)
G4InteractorMessenger(G4VInteractiveSession *session)
G4bool isNull() const
G4String strip(G4int strip_Type=trailing, char c=' ')
const char * data() const
std::size_t GetParameterEntries() const
Definition: G4UIcommand.hh:138
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:146
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:156
static G4bool ConvertToBool(const char *st)
Definition: G4UIcommand.cc:530
void SetDefaultValue(const char *theDefaultValue)
void SetParameterCandidates(const char *theString)
virtual void DefaultIcons(bool)
virtual void AddMenu(const char *, const char *)
virtual void AddIcon(const char *, const char *, const char *, const char *)
virtual void AddButton(const char *, const char *, const char *)