GGS(GenericGEANT4Simulation)Software  2.7.0
 All Data Structures Namespaces Files Functions Variables Typedefs Macros
AddControlTab.cpp
1 /*
2  * AddControlTab.h
3  *
4  * Created on: 16 Mar 2017
5  * Author: Valerio Formato
6  */
7 
8 /*
9  * This function creates the graphical interfaces (buttons and so on)
10  */
11 
12 #include "TEveBrowser.h"
13 #include "TEveScene.h"
14 #include "TEveTrans.h"
15 #include "TGeoBBox.h"
16 #include "TGeoNode.h"
17 #include "TSystem.h"
18 
19 #include "utils/GGSSmartLog.h"
20 
21 #include "application/Application.h"
22 #include "application/gui/HitOptionFrame.h"
23 #include "application/gui/MainWindow.h"
24 
25 const char *filetypes[] = {"ROOT files", "*.root", "Text files", "*.[tT][xX][tT]", 0, 0};
26 
27 void MainWindow::AddControlTab() {
28  static const std::string routineName("MainWindow::AddControlTab");
29 
30  EDApplication *thisApp = (EDApplication *)gApplication;
31 
32  TEveBrowser *browser = gEve->GetBrowser();
33  browser->StartEmbedding(TRootBrowser::kLeft);
34 
35  _frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
36  _frmMain->SetWindowName("XX GUI");
37  _frmMain->SetCleanup(kDeepCleanup);
38 
39  TString icondir(TString::Format("%s/icons/", gSystem->Getenv("ROOTSYS")));
40  _frmMainVertical = new TGVerticalFrame(_frmMain);
41 
42  //============================================================================
43  // Controls for ROOT file loading
44  TGGroupFrame *fileGroup = new TGGroupFrame(_frmMainVertical, "File", kVerticalFrame);
45  {
46  TGHorizontalFrame *fileLoadFrame = new TGHorizontalFrame(fileGroup);
47  {
48  TGPictureButton *b = 0;
49 
50  _fileField = new TGTextEntry(fileLoadFrame, (const char *)"");
51  _fileField->Connect("TextChanged(char*)", "EDApplication", thisApp, "SetFileToBeLoaded(char*)");
52  fileLoadFrame->AddFrame(_fileField, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX));
53 
54  b = new TGPictureButton(fileLoadFrame, gClient->GetPicture(icondir + "open.xpm"));
55  fileLoadFrame->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
56  b->Connect("Clicked()", "MainWindow", this, "SpawnFileDialog()");
57  }
58  fileGroup->AddFrame(fileLoadFrame, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
59 
60  TGHorizontalFrame *fileButtonsFrame = new TGHorizontalFrame(fileGroup);
61  {
62  TGTextButton *t = 0;
63 
64  t = new TGTextButton(fileButtonsFrame, "Open File");
65  fileButtonsFrame->AddFrame(t, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
66  t->Connect("Clicked()", "EDApplication", thisApp, "LoadRootFile()");
67  }
68  fileGroup->AddFrame(fileButtonsFrame,
69  new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
70  }
71  _frmMainVertical->AddFrame(fileGroup,
72  new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
73  //============================================================================
74 
75  icondir = TString::Format("%s/img/resized/", _SRCDIR_);
76  //============================================================================
77  // controls for event scrolling/selection
78  TGGroupFrame *evtGroup = new TGGroupFrame(_frmMainVertical, "Event", kVerticalFrame);
79  {
80  _evNumbersFrame = new TGHorizontalFrame(evtGroup);
81  {
82  _evField = new TGNumberEntryField(_evNumbersFrame);
83  _evField->SetWidth(50);
84  _evField->SetFormat(TGNumberFormat::kNESInteger, TGNumberFormat::kNEAPositive);
85  _evNumbersFrame->AddFrame(_evField, new TGLayoutHints(kLHintsCenterY | kLHintsLeft));
86  _evField->Connect("TextChanged(char*)", "EDApplication", thisApp, "SetEventToBeLoaded(char*)");
87 
88  _evFileText = new TGLabel(_evNumbersFrame, Form(" of %i", (int)thisApp->GetFileManager()->GetEntries()));
89  _evNumbersFrame->AddFrame(_evFileText, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 0, 0, 0));
90  }
91  evtGroup->AddFrame(_evNumbersFrame,
92  new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
93 
94  TGHorizontalFrame *evButtonsFrame = new TGHorizontalFrame(evtGroup);
95  {
96  TGPictureButton *b = 0;
97  TGTextButton *t = 0;
98 
99  COUT(DEBUG) << icondir + "left.gif" << ENDL;
100  b = new TGPictureButton(evButtonsFrame, gClient->GetPicture(icondir + "left.gif"));
101  evButtonsFrame->AddFrame(b, new TGLayoutHints(kLHintsLeft));
102  b->Connect("Clicked()", "EDApplication", thisApp, "PrevEvent()");
103 
104  t = new TGTextButton(evButtonsFrame, "&Refresh");
105  evButtonsFrame->AddFrame(t, new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY));
106  t->Connect("Clicked()", "EDApplication", thisApp, "LoadEvent()");
107 
108  COUT(DEBUG) << icondir + "right.gif" << ENDL;
109  b = new TGPictureButton(evButtonsFrame, gClient->GetPicture(icondir + "right.gif"));
110  evButtonsFrame->AddFrame(b, new TGLayoutHints(kLHintsLeft));
111  b->Connect("Clicked()", "EDApplication", thisApp, "NextEvent()");
112  }
113  evtGroup->AddFrame(evButtonsFrame, new TGLayoutHints(kLHintsExpandX | kLHintsCenterX | kLHintsCenterY, 5, 5, 0, 0));
114  evButtonsFrame->DrawBorder();
115  }
116  _frmMainVertical->AddFrame(evtGroup, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
117 
118  _progressBar = new TGHProgressBar(_frmMainVertical, TGProgressBar::kFancy, 300);
119  _progressBar->SetRange(0, (int)thisApp->GetFileManager()->GetEntries());
120  _progressBar->SetBarColor("lightblue");
121  _progressBar->ShowPosition();
122  _frmMainVertical->AddFrame(_progressBar, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5, 5, 5, 10));
123  //============================================================================
124 
125  _frmMain->AddFrame(_frmMainVertical, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
126 
127  _frmMain->MapSubwindows();
128  _frmMain->Resize();
129  _frmMain->MapWindow();
130 
131  browser->StopEmbedding();
132  browser->SetTabTitle("Event Control", 0);
133 }
134 
135 void MainWindow::AddHitControls() {
136  static const std::string routineName("MainWindow::AddHitControls");
137 
138  EDApplication *thisApp = (EDApplication *)gApplication;
139 
140  //============================================================================
141  // controls for rendering hits
142  TGGroupFrame *hitGroup = new TGGroupFrame(_frmMainVertical, "Hits", kVerticalFrame);
143  {
144  // Programmatically create buttons for the various hits
145  for (TString det : thisApp->GetFileManager()->GetDetList()) {
146  TGCheckButton *hitHbutton = new TGCheckButton(hitGroup, Form("%s hits", det.Data()));
147  hitHbutton->SetOn();
148  hitHbutton->Connect("Clicked()", "EDApplication", thisApp, Form("SetDisplayDetector(=\"%s\")", det.Data()));
149  hitGroup->AddFrame(hitHbutton, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
150  }
151 
152  TGCheckButton *partHbutton = new TGCheckButton(hitGroup, "Particle hits");
153  partHbutton->SetOn(0);
154  partHbutton->Connect("Toggled(Bool_t)", "EDApplication", thisApp, "SetDisplayPartHits(Bool_t)");
155  hitGroup->AddFrame(partHbutton, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
156  }
157  _frmMainVertical->AddFrame(hitGroup, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
158  //============================================================================
159 
160  _frmMainVertical->Layout();
161  _frmMainVertical->MapSubwindows();
162  _frmMainVertical->Resize(_frmMainVertical->GetDefaultSize());
163  _frmMain->Layout();
164  _frmMain->MapSubwindows();
165 }
166 
167 void MainWindow::AddHitOptions() {
168 
169  static const std::string routineName("MainWindow::AddHitOptions");
170 
171  EDApplication *thisApp = (EDApplication *)gApplication;
172 
173  TEveBrowser *browser = gEve->GetBrowser();
174  browser->StartEmbedding(TRootBrowser::kLeft);
175 
176  TGMainFrame *thisFrmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
177  thisFrmMain->SetWindowName("XX GUI");
178  thisFrmMain->SetCleanup(kDeepCleanup);
179  TGVerticalFrame *thisFrmMainVertical = new TGVerticalFrame(thisFrmMain);
180 
181  //============================================================================
182  // controls for hits display
183  {
184  // Programmatically create controls for the various hits
185  for (TString det : thisApp->GetFileManager()->GetDetList()) {
186 
187  HitOptionFrame *grFrame = new HitOptionFrame(det.Data(), thisFrmMainVertical);
188  // TGGroupFrame* grFrame = new TGGroupFrame(thisFrmMainVertical, Form("%s hits", det.Data()), kVerticalFrame );
189  // {
190  // TGComboBox* cmbox = new TGComboBox(grFrame);
191  // cmbox->AddEntry("Soreta", 0);
192  // cmbox->Resize(150, 20);
193  // grFrame->AddFrame(cmbox, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY|kLHintsExpandX));
194  //
195  // TGHorizontalFrame* thrFrame = new TGHorizontalFrame(grFrame);
196  // {
197  // TGLabel* thrLabel = new TGLabel(thrFrame, "Threshold:");
198  // thrFrame->AddFrame(thrLabel, new TGLayoutHints(kLHintsLeft|kLHintsCenterY));
199  //
200  // TGNumberEntry* thrField = new TGNumberEntry(thrFrame, 0.001);
201  // thrField->SetWidth(80);
202  // thrField->SetFormat(TGNumberFormat::kNESReal, TGNumberFormat::kNEANonNegative);
203  // thrFrame->AddFrame(thrField, new TGLayoutHints(kLHintsLeft|kLHintsCenterY, 5, 5, 0, 0));
204  //
205  // TGLabel* unitLabel = new TGLabel(thrFrame, "GeV");
206  // thrFrame->AddFrame(unitLabel, new TGLayoutHints(kLHintsLeft|kLHintsCenterY));
207  // }
208  // grFrame->AddFrame(thrFrame, new TGLayoutHints(kLHintsExpandX|kLHintsCenterX|kLHintsCenterY, 5, 5, 5, 5));
209  //
210  // TGHorizontalFrame* colFrame = new TGHorizontalFrame(grFrame);
211  // {
212  // TGLabel* colLabel = new TGLabel(colFrame, "Color:");
213  // colFrame->AddFrame(colLabel, new TGLayoutHints(kLHintsLeft|kLHintsCenterY));
214  //
215  // TGColorSelect* colPick = new TGColorSelect(colFrame);
216  // colFrame->AddFrame(colPick, new TGLayoutHints(kLHintsLeft|kLHintsCenterY));
217  //
218  // }
219  // grFrame->AddFrame(colFrame, new TGLayoutHints(kLHintsExpandX|kLHintsCenterX|kLHintsCenterY, 5, 5, 5, 5));
220  // }
221  thisFrmMainVertical->AddFrame(grFrame,
222  new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
223  }
224  }
225  //============================================================================
226 
227  thisFrmMain->AddFrame(thisFrmMainVertical,
228  new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
229 
230  thisFrmMain->MapSubwindows();
231  thisFrmMain->Resize();
232  thisFrmMain->MapWindow();
233 
234  browser->StopEmbedding();
235  browser->SetTabTitle("Hit Options", 0);
236 }
237 
238 void MainWindow::SpawnFileDialog() {
239  EDApplication *thisApp = (EDApplication *)gApplication;
240 
241  TString dir(".");
242  TGFileInfo fi;
243  fi.fFileTypes = filetypes;
244  fi.fIniDir = StrDup(dir);
245  printf("fIniDir = %s\n", fi.fIniDir);
246  new TGFileDialog(gClient->GetRoot(), _frmMain, kFDOpen, &fi);
247  printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
248  thisApp->SetFileToBeLoaded(fi.fFilename);
249  thisApp->LoadRootFile();
250 }
#define ENDL
Definition: GGSSmartLog.h:105
#define COUT(level)
Smart log macro. It writes on stdout only if the specified verbosity level is lesser than the maximum...
Definition: GGSSmartLog.h:76
Long64_t GetEntries()
The total number of events.