Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4UIXaw.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// $Id$
28//
29// G.Barrand
30
31//#define DEBUG
32
33#ifdef G4UI_BUILD_XAW_SESSION
34
35#include <X11/Intrinsic.h>
36#include <X11/StringDefs.h>
37#include <X11/Shell.h>
38
39#include <Xaw/Dialog.h>
40#include <Xaw/Command.h>
41
42#include "G4UIXaw.hh"
43#include "G4UImanager.hh"
44#include "G4StateManager.hh"
45#include "G4UIcommandTree.hh"
46#include "G4UIcommandStatus.hh"
47#include "G4Xt.hh"
48
49static G4bool ConvertStringToInt(const char*,int&);
50
51static G4bool exitSession = true;
52static G4bool exitPause = true;
53static G4bool exitHelp = true;
54/***************************************************************************/
55G4UIXaw::G4UIXaw (
56 int argc
57,char** argv
58)
59:fHelp(false)
60,fHelpChoice(0)
61/***************************************************************************/
62/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
63{
64 static G4bool warned = false;
65 if (!warned) {
66 warned = true;
67 G4cout <<
68 "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
69 "\n!!!!! Xaw is deprecated and will be removed in the next major release."
70 "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
71 << G4endl;
72 }
73
75 if(UI!=NULL) UI->SetSession(this);
76
77 G4Xt* interactorManager = G4Xt::getInstance (argc,argv,(char*)"Xaw");
78 Widget top = (Widget)interactorManager->GetMainInteractor();
79
80 shell = XtAppCreateShell ("G4UIXaw","G4UIXaw",topLevelShellWidgetClass,XtDisplay(top),NULL,0);
81
82 Arg args[2];
83 XtSetArg (args[0],XtNlabel,"G4 command");
84 XtSetArg (args[1],XtNvalue,""); // Needed to have a text Area.
85 dialog = XtCreateManagedWidget ("dialog",dialogWidgetClass,shell,args,2);
86
87 XawDialogAddButton (dialog,"Ok",Callback,(XtPointer)this);
88
89 XtRealizeWidget (shell);
90}
91/***************************************************************************/
92G4UIXaw::~G4UIXaw (
93)
94/***************************************************************************/
95/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
96{
97 XtDestroyWidget (shell);
99 if(UI!=NULL) UI->SetSession(NULL);
100}
101/***************************************************************************/
102G4UIsession* G4UIXaw::SessionStart (
103)
104/***************************************************************************/
105/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
106{
107 G4Xt* interactorManager = G4Xt::getInstance ();
108 Prompt ("session");
109 exitSession = false;
110 interactorManager->DisableSecondaryLoop ();
111 void* event;
112 while((event = interactorManager->GetEvent())!=NULL) {
113 interactorManager->DispatchEvent(event);
114 if(exitSession==true) break;
115 }
116 interactorManager->EnableSecondaryLoop ();
117 return this;
118}
119/***************************************************************************/
120void G4UIXaw::Prompt (
121const G4String& aPrompt
122)
123/***************************************************************************/
124/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
125{
126 Arg args[1];
127 XtSetArg (args[0],XtNlabel,aPrompt.data());
128 XtSetValues (dialog,args,1);
129}
130/***************************************************************************/
131void G4UIXaw::SessionTerminate (
132)
133/***************************************************************************/
134/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
135{
136}
137/***************************************************************************/
138void G4UIXaw::PauseSessionStart (
139const G4String& a_state
140)
141/***************************************************************************/
142/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
143{
144 if(a_state=="G4_pause> ") {
145 SecondaryLoop ("Pause, type continue to exit this state");
146 }
147
148 if(a_state=="EndOfEvent") {
149 // Picking with feed back in event data Done here !!!
150 SecondaryLoop ("End of event, type continue to exit this state");
151 }
152}
153/***************************************************************************/
154void G4UIXaw::SecondaryLoop (
155 G4String a_prompt
156)
157/***************************************************************************/
158/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
159{
160 G4Xt* interactorManager = G4Xt::getInstance ();
161 Prompt (a_prompt);
162 exitPause = false;
163 void* event;
164 while((event = interactorManager->GetEvent())!=NULL) {
165 interactorManager->DispatchEvent(event);
166 if(exitPause==true) break;
167 }
168 Prompt ("session");
169}
170/***************************************************************************/
171Widget G4UIXaw::GetDialog (
172)
173/***************************************************************************/
174/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
175{
176 return dialog;
177}
178/***************************************************************************/
179G4bool G4UIXaw::GetHelpChoice(
180 G4int& aInt
181)
182/***************************************************************************/
183/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
184{
185 fHelp = true;
186 //
187 G4Xt* interactorManager = G4Xt::getInstance ();
188 Prompt("Help");
189 exitHelp = false;
190 void* event;
191 while((event = interactorManager->GetEvent())!=NULL) {
192 interactorManager->DispatchEvent(event);
193 if(exitHelp==true) break;
194 }
195 Prompt("session");
196 //
197 if(fHelp==false) return false;
198 aInt = fHelpChoice;
199 fHelp = false;
200 return true;
201}
202/***************************************************************************/
203void G4UIXaw::ExitHelp(
204) const
205/***************************************************************************/
206/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
207{
208}
209/***************************************************************************/
210/***************************************************************************/
211/***************************************************************************/
212void G4UIXaw::Callback (
213 Widget
214,XtPointer a_tag
215,XtPointer
216)
217/***************************************************************************/
218/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
219{
220 G4UIXaw* This = (G4UIXaw*)a_tag;
221 Widget dialog = This->GetDialog();
222 char* value = XawDialogGetValueString(dialog);
223 if(value==NULL) return;
224 G4String command (value);
225
226 if(This->fHelp==true) {
227 exitHelp = true;
228 This->fHelp = ConvertStringToInt(command.data(),This->fHelpChoice);
229 } else {
230 This->ApplyShellCommand (command,exitSession,exitPause);
231 }
232
233 Arg args[1];
234 XtSetArg (args[0],XtNvalue,"");
235 XtSetValues (dialog,args,1);
236
237 //a_widget = NULL; Not used (1st argument). Comment out to avoid compiler warnings. (JA)
238 //a_data = NULL; Not used (3rd argument). Comment out to avoid compiler warnings. (JA)
239}
240//////////////////////////////////////////////////////////////////////////////
241G4bool ConvertStringToInt(
242 const char* aString
243,int& aInt
244)
245//////////////////////////////////////////////////////////////////////////////
246//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
247{
248 aInt = 0;
249 if(aString==NULL) return false;
250 char* s;
251 long value = strtol(aString,&s,10);
252 if(s==aString) return false;
253 aInt = value;
254 return true;
255}
256
257#endif
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
const char * data() const
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:51
void SetSession(G4UIsession *const value)
Definition: G4UImanager.hh:204
#define const
Definition: zconf.h:118