Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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"
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 
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  system((const char*)params[0]);
161  }
162  }
163  delete [] params;
164 }
166  G4String newValue
167 ,int paramn
168 ,G4String* params
169 )
170 {
171  char* value = STRDUP(newValue.data());
172  if(value==NULL) return false;
173  char* tok = strtok(value," ");
174  for( int i=0; i<paramn;i++ ) {
175  if(tok==NULL) {
176  STRDEL(value);
177  return false;
178  }
179  G4String token = tok;
180  if( token(0)=='"' ) {
181  while( token(token.length()-1) != '"' ) {
182  tok = strtok(NULL," ");
183  if( (tok==NULL) || (*tok=='\0')) {
184  STRDEL(value);
185  return false;
186  }
187  token += " ";
188  token += tok;
189  }
190  token = (G4String)token.strip(G4String::both,'"');
191  }
192  if( token.isNull() ) {
193  STRDEL(value);
194  return false;
195  } else {
196  params[i] = token;
197  }
198  tok = strtok(NULL," ");
199  }
200  STRDEL(value);
201  return true;
202 }
203 
204 
virtual void DefaultIcons(bool)
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:152
G4String strip(G4int strip_Type=trailing, char c=' ')
void SetParameterCandidates(const char *theString)
void SetDefaultValue(const char *theDefaultValue)
virtual void AddMenu(const char *, const char *)
const XML_Char int const XML_Char * value
Definition: expat.h:331
static G4bool ConvertToBool(const char *st)
Definition: G4UIcommand.cc:437
bool G4bool
Definition: G4Types.hh:79
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:161
G4InteractorMessenger(G4VInteractiveSession *session)
const char * data() const
#define STRDUP(str)
virtual void AddButton(const char *, const char *, const char *)
static G4bool GetValues(G4String, int, G4String *)
void SetNewValue(G4UIcommand *command, G4String newValue)
#define STRDEL(str)
G4int GetParameterEntries() const
Definition: G4UIcommand.hh:143
virtual void AddIcon(const char *, const char *, const char *, const char *)
G4bool isNull() const