ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4InteractorMessenger.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4InteractorMessenger.cc
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
"
33
#include "
G4VInteractiveSession.hh
"
34
35
#include "
G4InteractorMessenger.hh
"
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
40
static
G4bool
GetValues
(
G4String
,
int
,
G4String
*);
41
42
G4InteractorMessenger::G4InteractorMessenger
(
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
135
G4InteractorMessenger::~G4InteractorMessenger
()
136
{
137
delete
addButton
;
138
delete
addIcon
;
139
delete
addMenu
;
140
delete
interactorDirectory
;
141
}
142
143
void
G4InteractorMessenger::SetNewValue
(
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
}
166
G4bool
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
geant4
tree
geant4-10.6-release
source
interfaces
common
src
G4InteractorMessenger.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:22
using
1.8.2 with
ECCE GitHub integration