Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/interfaces/implementation/include/G4UIWin32.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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