Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4UIWin32.hh
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// 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 <map>
81#include <vector>
82
83#include "G4VBasicShell.hh"
85
86#include "G4Win32.hh"
87#include <CommCtrl.h>
88
90
92{
93 public:
94
95 G4UIWin32();
96 ~G4UIWin32() override;
97
98 // To enter interactive Win32 loop ; waiting/executing command,...
99 G4UIsession* SessionStart() override;
100
101 // To add a pulldown menu in the menu bar.
102 // First argument is the name of the menu.
103 // Second argument is the label of the cascade button.
104 // Ex : AddMenu("my_menu","My menu")
105 void AddMenu(const char*, const char*) override;
106
107 // To add a push button in a pulldown menu.
108 // First argument is the name of the menu.
109 // Second argument is the label of the button.
110 // Third argument is the Geant4 command executed when the button is fired.
111 // Ex : AddButton("my_menu","Run","/run/beamOn 1");
112 void AddButton(const char*, const char*, const char*) override;
113
114 void Prompt(const G4String&);
115 void SessionTerminate();
116 void PauseSessionStart(const G4String&) override;
117
118 G4int ReceiveG4cout(const G4String&) override;
119 G4int ReceiveG4cerr(const G4String&) override;
120
122 //void TextAppendString(char*);
123
124 private:
125
126 void SecondaryLoop(const G4String&);
127 G4bool GetHelpChoice(G4int&) override;
128 void ExitHelp() const override;
129
130 G4bool CreateComponents(HWND);
131 G4bool ResizeComponents(HWND);
132 void ProcessTabKey();
133 void ProcessEscKey();
134 void ProcessEnterKey();
135 void ProcessUpKey();
136 void ProcessDownKey();
137
138 G4bool ProcessDefaultCommands(G4int);
139 static G4String GetToolTips(G4int);
140 G4String GetHelpTreeToolTips(HTREEITEM);
141
142 static G4String ConvertNewLines(G4String);
143
144 void HelpTreeDoubleClick(HTREEITEM);
145
146 G4bool SaveLogFile(LPCTSTR);
147 void AddText(LPSTR);
148
149 void DoOpenMacro(HWND);
150 void DoSaveViewer(HWND);
151 void DoSaveLog(HWND);
152
153 G4bool InitHelpTreeItems();
154 HTREEITEM AddItemToHelpTree(LPTSTR, HTREEITEM = TVI_ROOT);
155 static G4String GetShortCommandPath(G4String);
156 LPSTR GetItemPath(HTREEITEM);
157
158 void CreateHelpTree(HTREEITEM, G4UIcommandTree*);
159
160 private:
161
162 HWND fHWndMainWindow;
163 HWND fHWndEditor;
164 HWND fHWndToolBar;
165 HWND fHWndComboBox;
166 HWND fHWndComboEditor;
167 HWND fHWndHelpTree;
168 HWND fHWndStatus;
169
170 G4VInteractorManager* interactorManager;
171 HMENU menuBar;
172 std::map<G4int, G4String, std::less<G4int> > commands;
173
174 static LRESULT CALLBACK MainWindowProc(HWND, UINT, WPARAM, LPARAM);
175 // New wndproc for the combo box
176 static LRESULT CALLBACK ComboEditorWindowProc(HWND, UINT, WPARAM, LPARAM);
177
178 G4bool fHelp;
179 G4int fHelpChoice;
180 std::vector<G4String> fHistory;
181 G4int fHistoryPos;
182};
183
184#endif
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4int ReceiveG4cout(const G4String &) override
Definition: G4UIWin32.cc:273
G4UIsession * SessionStart() override
Definition: G4UIWin32.cc:205
~G4UIWin32() override
Definition: G4UIWin32.cc:177
void AddMenu(const char *, const char *) override
Definition: G4UIWin32.cc:331
void PauseSessionStart(const G4String &) override
Definition: G4UIWin32.cc:241
G4String GetCommand(G4int)
Definition: G4UIWin32.cc:360
void AddButton(const char *, const char *, const char *) override
Definition: G4UIWin32.cc:344
G4int ReceiveG4cerr(const G4String &) override
Definition: G4UIWin32.cc:287
void Prompt(const G4String &)
Definition: G4UIWin32.cc:229
void SessionTerminate()
Definition: G4UIWin32.cc:235