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 // G4UIWin32 27 // 28 // Class description : 29 // 30 // G4UIWin32 is a class to handle a Windows interactive session. 31 // It is the Windows version of G4UIterminal. 32 // 33 // A command box is at disposal for entering/recalling Geant4 commands. 34 // A menubar could be customized through the AddMenu, AddButton methods. 35 // Note that there are corresponding Geant4 commands to add a 36 // menu in the menubar and add buttons in a menu. 37 // Ex : 38 // /gui/addMenu test Test 39 // /gui/addButton test Init /run/initialize 40 // /gui/addButton test "Set gun" "/control/execute gun.g4m" 41 // /gui/addButton test "Run one event" "/run/beamOn 1" 42 // 43 // Command completion, by typing "tab" key, is available on the 44 // command line. 45 46 // Original author: G.Barrand, 1998 47 // Revised: O.Pena-Rodriguez, March 2021 48 // ------------------------------------------------------------------- 49 #ifndef G4UIWin32_h 50 #define G4UIWin32_h 51 52 #define ID_EXIT_APP 40001 53 #define ID_OPEN_MACRO 40002 54 #define ID_SAVE_VIEWER_STATE 40003 55 #define ID_RUN_BEAMON 40004 56 #define ID_RUN_CMD 40005 57 #define ID_VIEW_SOLID 40006 58 #define ID_VIEW_WIREFRAME 40007 59 #define ID_PROJ_ORTHOGRAPHIC 40008 60 #define ID_PROJ_PERSPECTIVE 40009 61 #define ID_ZOOM_IN 40010 62 #define ID_ZOOM_OUT 40011 63 #define ID_ORIENTATION_XY 40012 64 #define ID_ORIENTATION_XZ 40013 65 #define ID_ORIENTATION_YZ 40014 66 #define ID_ORIENTATION_OBLIQUE 40015 67 #define ID_HELP_ABOUT 40016 68 #define ID_LOG_CLEAN 40017 69 #define ID_LOG_SAVE 40018 70 71 #define NUM_BUTTONS 12 72 #define MAX_HISTORY_ITEMS 10 73 74 #define IDC_MAIN_EDIT 101 75 #define IDC_MAIN_TOOL 102 76 #define IDC_MAIN_TREE_VIEW 104 77 #define IDC_MAIN_COMBO 105 78 #define IDC_MAIN_STATUS 106 79 80 #include "G4VBasicShell.hh" 81 #include "G4VInteractiveSession.hh" 82 #include "G4Win32.hh" 83 84 #include <CommCtrl.h> 85 86 #include <map> 87 #include <vector> 88 89 class G4VInteractorManager; 90 91 class G4UIWin32 : public G4VBasicShell, public G4VInteractiveSession 92 { 93 public: 94 G4UIWin32(); 95 ~G4UIWin32() override; 96 97 // To enter interactive Win32 loop ; waiting/executing command,... 98 G4UIsession* SessionStart() override; 99 100 // To add a pulldown menu in the menu bar. 101 // First argument is the name of the menu. 102 // Second argument is the label of the cascade button. 103 // Ex : AddMenu("my_menu","My menu") 104 void AddMenu(const char*, const char*) override; 105 106 // To add a push button in a pulldown menu. 107 // First argument is the name of the menu. 108 // Second argument is the label of the button. 109 // Third argument is the Geant4 command executed when the button is fired. 110 // Ex : AddButton("my_menu","Run","/run/beamOn 1"); 111 void AddButton(const char*, const char*, const char*) override; 112 113 void Prompt(const G4String&); 114 void SessionTerminate(); 115 void PauseSessionStart(const G4String&) override; 116 117 G4int ReceiveG4debug(const G4String&) override; 118 G4int ReceiveG4cout(const G4String&) override; 119 G4int ReceiveG4cerr(const G4String&) override; 120 121 G4String GetCommand(G4int); 122 // void TextAppendString(char*); 123 124 private: 125 void SecondaryLoop(const G4String&); 126 G4bool GetHelpChoice(G4int&) override; 127 void ExitHelp() const override; 128 129 G4bool CreateComponents(HWND); 130 G4bool ResizeComponents(HWND); 131 void ProcessTabKey(); 132 void ProcessEscKey(); 133 void ProcessEnterKey(); 134 void ProcessUpKey(); 135 void ProcessDownKey(); 136 137 G4bool ProcessDefaultCommands(G4int); 138 static G4String GetToolTips(G4int); 139 G4String GetHelpTreeToolTips(HTREEITEM); 140 141 static G4String ConvertNewLines(const G4String&); 142 143 void HelpTreeDoubleClick(HTREEITEM); 144 145 G4bool SaveLogFile(LPCTSTR); 146 void AddText(LPSTR); 147 148 void DoOpenMacro(HWND); 149 void DoSaveViewer(HWND); 150 void DoSaveLog(HWND); 151 152 G4bool InitHelpTreeItems(); 153 HTREEITEM AddItemToHelpTree(LPTSTR, HTREEITEM = TVI_ROOT); 154 static G4String GetShortCommandPath(const G4String&); 155 LPSTR GetItemPath(HTREEITEM); 156 157 void CreateHelpTree(HTREEITEM, G4UIcommandTree*); 158 159 private: 160 HWND fHWndMainWindow; 161 HWND fHWndEditor; 162 HWND fHWndToolBar; 163 HWND fHWndComboBox; 164 HWND fHWndComboEditor; 165 HWND fHWndHelpTree; 166 HWND fHWndStatus; 167 168 G4VInteractorManager* interactorManager; 169 HMENU menuBar; 170 std::map<G4int, G4String, std::less<G4int>> commands; 171 172 static LRESULT CALLBACK MainWindowProc(HWND, UINT, WPARAM, LPARAM); 173 // New wndproc for the combo box 174 static LRESULT CALLBACK ComboEditorWindowProc(HWND, UINT, WPARAM, LPARAM); 175 176 G4bool fHelp; 177 G4int fHelpChoice; 178 std::vector<G4String> fHistory; 179 G4int fHistoryPos; 180 }; 181 182 #endif 183