Geant4 9.6.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/addIcon :
77 addIcon = new G4UIcommand("/gui/addIcon",this);
78 addIcon->SetGuidance
79 ("Add a non-checkable icon to the Icon toolbar.");
80 addIcon->SetGuidance
81 ("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");
82 addIcon->SetGuidance
83 ("A command given without parameters will display a window that will allow one to choose the parameters (if needed) for this command.");
84 addIcon->SetGuidance
85 ("E.g: /gui/addIcon \"Change background color\" user_icon /vis/viewer/set/background ../Images/background.xpm");
86 addIcon->SetGuidance
87 ("Special cases for the Icon parameter:");
88 addIcon->SetGuidance
89 (" - open: Open an open-file-selector that can run the Command with File as argument.");
90 addIcon->SetGuidance
91 (" - save: Open a save-file-selector that can run the Command with File as argument.");
92 addIcon->SetGuidance
93 (" - move/rotate/pick/zoom_in/zoom_out: Theses icons are radio-button icons that can change cursor action.");
94 addIcon->SetGuidance
95 (" - wireframe/solid/hidden_line_removal/hidden_line_and_surface_removal: These icons are radio-button icons that can change drawing style.");
96 addIcon->SetGuidance
97 (" - perspective/ortho: These icons are radio-button icons that can change projection style.");
98
99 parameter = new G4UIparameter("Label",'s',false);
100 parameter->SetDefaultValue("");
101 addIcon->SetParameter (parameter);
102
103 parameter = new G4UIparameter("Icon",'s',false);
104 parameter->SetDefaultValue("");
105 parameter->SetParameterCandidates
106 ("open save move rotate pick zoom_in zoom_out wireframe solid hidden_line_removal hidden_line_and_surface_removal perspective ortho user_icon");
107 addIcon->SetParameter (parameter);
108
109 parameter = new G4UIparameter("Command",'s',true);
110 parameter->SetDefaultValue("no_command");
111 addIcon->SetParameter (parameter);
112
113 parameter = new G4UIparameter("File",'s',true);
114 parameter->SetDefaultValue("no_file");
115 addIcon->SetParameter (parameter);
116
117 // /gui/system :
118 sys = new G4UIcommand("/gui/system",this);
119 sys->SetGuidance("Send a command to the system.");
120 parameter = new G4UIparameter("Command",'s',false);
121 parameter->SetDefaultValue("");
122 sys->SetParameter (parameter);
123
124}
125
127{
128 delete addButton;
129 delete addIcon;
130 delete addMenu;
131 delete interactorDirectory;
132}
133
135 G4UIcommand* command
136,G4String newValue
137)
138{
139 int paramn = command->GetParameterEntries();
140 G4String* params = new G4String [paramn];
141 if(GetValues(newValue,paramn,params)==true) {
142 if(command==addMenu) {
143 session->AddMenu((const char*)params[0],(const char*)params[1]);
144 } else if(command==addButton) {
145 session->AddButton((const char*)params[0],(const char*)params[1],(const char*)params[2]);
146 } else if(command==addIcon) {
147 session->AddIcon((const char*)params[0],(const char*)params[1],(const char*)params[2],(const char*)params[3]);
148 } else if(command==sys) {
149 system((const char*)params[0]);
150 }
151 }
152 delete [] params;
153}
154G4bool GetValues (
155 G4String newValue
156,int paramn
157,G4String* params
158)
159{
160 char* value = STRDUP(newValue.data());
161 if(value==NULL) return false;
162 char* tok = strtok(value," ");
163 for( int i=0; i<paramn;i++ ) {
164 if(tok==NULL) {
165 STRDEL(value);
166 return false;
167 }
168 G4String token = tok;
169 if( token(0)=='"' ) {
170 while( token(token.length()-1) != '"' ) {
171 tok = strtok(NULL," ");
172 if( (tok==NULL) || (*tok=='\0')) {
173 STRDEL(value);
174 return false;
175 }
176 token += " ";
177 token += tok;
178 }
179 token = (G4String)token.strip(G4String::both,'"');
180 }
181 if( token.isNull() ) {
182 STRDEL(value);
183 return false;
184 } else {
185 params[i] = token;
186 }
187 tok = strtok(NULL," ");
188 }
189 STRDEL(value);
190 return true;
191}
192
193
#define STRDUP(str)
#define STRDEL(str)
bool G4bool
Definition: G4Types.hh:67
void SetNewValue(G4UIcommand *command, G4String newValue)
G4InteractorMessenger(G4VInteractiveSession *session)
G4bool isNull() const
G4String strip(G4int strip_Type=trailing, char c=' ')
const char * data() const
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:147
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:156
G4int GetParameterEntries() const
Definition: G4UIcommand.hh:138
void SetDefaultValue(const char *theDefaultValue)
void SetParameterCandidates(const char *theString)
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 *)