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