38 #define NewString(str) \
39 ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : NULL)
47 ,secondaryLoopEnabled(
TRUE)
48 ,alreadyInSecondaryLoop(
FALSE)
50 ,parentInteractor(NULL)
51 ,createdInteractor(NULL)
64 for(
G4int argi=0;argi<argc;argi++) {
65 if(argv[argi]!=NULL)
free(argv[argi]);
75 secondaryLoopEnabled =
TRUE;
76 alreadyInSecondaryLoop =
FALSE;
77 exitSecondaryLoop = 0;
89 for(
G4int argi=0;argi<argc;argi++) {
90 if(argv[argi]!=NULL)
free(argv[argi]);
98 argv = (
char**)malloc(a_argc *
sizeof(
char*));
101 for(
G4int argi=0;argi<a_argc;argi++) {
102 argv[argi] = (
char*)
NewString (a_argv[argi]);
114 if(a_argc!=NULL) *a_argc = argc;
124 mainInteractor = a_main;
132 return mainInteractor;
140 secondaryLoopEnabled =
TRUE;
148 secondaryLoopEnabled =
FALSE;
157 if(a_dispatcher==NULL)
return;
158 if(std::find(dispatchers.begin(),dispatchers.end(),a_dispatcher)!=dispatchers.end())
return;
159 dispatchers.push_back(a_dispatcher);
168 std::vector<G4DispatchFunction>::iterator it;
169 for (it = dispatchers.begin(); it != dispatchers.end(); it++) {
170 if (*it == a_dispatcher) {
171 dispatchers.erase(it);
183 G4int dispatchern = dispatchers.size();
185 for(
G4int count=0;count<dispatchern;count++) {
186 func = dispatchers[count];
188 if(func(a_event)==
true)
return;
199 if(a_preAction==NULL)
return;
200 if(std::find(preActions.begin(),preActions.end(),a_preAction)!=preActions.end())
return;
201 preActions.push_back(a_preAction);
209 G4int preActionn = preActions.size();
210 for(
G4int count=0;count<preActionn;count++) {
211 if(preActions[count]!=NULL) preActions[count]();
221 if(a_postAction==NULL)
return;
222 if(std::find(postActions.begin(),postActions.end(),a_postAction)!=postActions.end())
return;
223 postActions.push_back(a_postAction);
231 G4int postActionn = postActions.size();
232 for(
G4int count=0;count<postActionn;count++) {
233 if(postActions[count]!=NULL) postActions[count]();
244 if(secondaryLoopEnabled==
FALSE)
return;
246 if (alreadyInSecondaryLoop==
FALSE) {
247 G4cout <<
"------------------------------------------" <<
G4endl;
248 G4cout <<
"You have entered a viewer secondary X event loop." <<
G4endl;
249 G4cout <<
"Quit it with an 'Escape' viewer button" <<
G4endl;
250 alreadyInSecondaryLoop =
TRUE;
251 exitSecondaryLoop = 0;
257 if(event==NULL)
break;
259 if(exitSecondaryLoop!=0)
break;
272 if(secondaryLoopEnabled==
FALSE)
return;
273 if(a_code==0) a_code = 1;
274 exitSecondaryLoop = a_code;
275 alreadyInSecondaryLoop =
FALSE;
285 return exitSecondaryLoop;
294 if(a_shell==NULL)
return;
295 if(std::find(shells.begin(),shells.end(),a_shell)!=shells.end())
return;
296 shells.push_back(a_shell);
305 std::vector<G4Interactor>::iterator it;
306 for (it = shells.begin(); it != shells.end(); it++) {
307 if (*it == a_shell) {
320 parentInteractor = a_interactor;
328 return parentInteractor;
337 createdInteractor = a_interactor;
345 return createdInteractor;
354 creationString = a_string;
362 return creationString;
void RemoveShell(G4Interactor)
void(* G4SecondaryLoopAction)()
char * GetCreationString()
void SecondaryLoopPostActions()
void DisableSecondaryLoop()
G4Interactor GetMainInteractor()
void SetCreationString(char *)
void AddShell(G4Interactor)
int GetExitSecondaryLoopCode()
virtual G4bool Inited()=0
char ** GetArguments(int *)
virtual ~G4VInteractorManager()
void SetMainInteractor(G4Interactor)
void AddSecondaryLoopPostAction(G4SecondaryLoopAction)
G4bool(* G4DispatchFunction)(void *)
void SetCreatedInteractor(G4Interactor)
G4GLOB_DLL std::ostream G4cout
void SetParentInteractor(G4Interactor)
virtual void * GetEvent()=0
void SetArguments(int, char **)
void AddSecondaryLoopPreAction(G4SecondaryLoopAction)
void AddDispatcher(G4DispatchFunction)
void EnableSecondaryLoop()
G4Interactor GetParentInteractor()
void RemoveDispatcher(G4DispatchFunction)
void SecondaryLoopPreActions()
void RequireExitSecondaryLoop(int)
G4Interactor GetCreatedInteractor()
void DispatchEvent(void *)