Geant4 Cross Reference |
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 // G.Barrand 29 30 #ifndef G4VINTERACTORMANAGER_HH 31 #define G4VINTERACTORMANAGER_HH 32 33 #include "globals.hh" 34 35 #include <vector> 36 37 using G4Interactor = void*; 38 using G4DispatchFunction = G4bool (*)(void*); 39 using G4SecondaryLoopAction = void (*)(); 40 41 // Class description : 42 // 43 // G4VInteractorManager : a base class to isolate common things 44 // to various GUI "toolkits" like WIndows, Xt. 45 // The word "interactor" is for "piece of user interface" or 46 // "widget" (which means nothing). Then a GUI "toolkit" could be 47 // defined as a manager of interactors. 48 // 49 // Class description - end : 50 51 class G4VInteractorManager 52 { 53 public: 54 G4VInteractorManager(); 55 virtual ~G4VInteractorManager(); 56 void SetArguments(int, char**); 57 char** GetArguments(int*); 58 void SetMainInteractor(G4Interactor); 59 G4Interactor GetMainInteractor(); 60 void AddDispatcher(G4DispatchFunction); 61 void RemoveDispatcher(G4DispatchFunction); 62 void AddSecondaryLoopPreAction(G4SecondaryLoopAction); 63 void AddSecondaryLoopPostAction(G4SecondaryLoopAction); 64 void AddShell(G4Interactor); 65 void RemoveShell(G4Interactor); 66 void EnableSecondaryLoop(); 67 void DisableSecondaryLoop(); 68 void SecondaryLoopPreActions(); 69 void SecondaryLoopPostActions(); 70 void RequireExitSecondaryLoop(int); 71 void DispatchEvent(void*); 72 virtual void SecondaryLoop(); 73 int GetExitSecondaryLoopCode(); 74 void PutStringInResourceDatabase(char*); 75 virtual G4bool Inited() = 0; 76 virtual void* GetEvent() = 0; 77 virtual void FlushAndWaitExecution() = 0; 78 void SetParentInteractor(G4Interactor); 79 G4Interactor GetParentInteractor(); 80 void SetCreatedInteractor(G4Interactor); 81 G4Interactor GetCreatedInteractor(); 82 void SetCreationString(char*); 83 char* GetCreationString(); 84 85 private: 86 int argc; 87 char** argv; 88 G4Interactor mainInteractor; 89 std::vector<G4DispatchFunction> dispatchers; 90 std::vector<G4SecondaryLoopAction> preActions; 91 std::vector<G4SecondaryLoopAction> postActions; 92 std::vector<G4Interactor> shells; 93 G4bool secondaryLoopEnabled; 94 G4bool alreadyInSecondaryLoop; 95 int exitSecondaryLoop; 96 G4Interactor parentInteractor; 97 G4Interactor createdInteractor; 98 char* creationString; 99 }; 100 101 #define OGL_EXIT_CODE 1 102 #define OIV_EXIT_CODE 2 103 #define XO_EXIT_CODE 3 104 105 #endif 106