GEMC  1.8
Geant4 Monte-Carlo Framework
gemc_MainGui.cc
Go to the documentation of this file.
1 // %%%%%%%%%%
2 // Qt headers
3 // %%%%%%%%%%
4 #include <QApplication>
5 #include <QLineEdit>
6 
7 // %%%%%%%%%%%%%
8 // gemc headers
9 // %%%%%%%%%%%%%
10 #include "gemc_MainGui.h"
11 #include "string_utilities.h"
12 // All icon images must be 96x84
13 #include "images/run_control_xpm.h"
16 #include "images/infos_xpm.h"
17 #include "images/g4dialog_xpm.h"
19 
20 // %%%%%%%%%%%
21 // C++ headers
22 // %%%%%%%%%%%
23 #include <iostream>
24 #include <string>
25 using namespace std;
26 
27 gemcMainWidget::gemcMainWidget(G4RunManager *RM, G4VisManager *VM, gemc_opts *Opts, map<string, MSensitiveDetector*> SDM)
28 {
29  runManager = RM;
30  visManager = VM;
31  UImanager = G4UImanager::GetUIpointer();
32  DTree = NULL;
33  gemcOpt = Opts;
34  SeDe_Map = SDM;
35  double qt_mode = gemcOpt->args["USE_QT"].arg ;
36 
37  contentsWidget = new QListWidget;
38  contentsWidget->setViewMode(QListView::IconMode);
39  // icon size
40  contentsWidget->setIconSize(QSize(96, 84));
41  contentsWidget->setMovement(QListView::Static);
42 
43  // icon container sizes
44  contentsWidget->setMinimumWidth(125);
45  contentsWidget->setMaximumWidth(125);
46  contentsWidget->setMinimumHeight(700);
47  // makes all icon the same size
48  contentsWidget->setUniformItemSizes(1);
49  // activate tracking (for mouse over effect)
50  contentsWidget->setMouseTracking(1);
51 
52  contentsWidget->setSpacing(8);
53 
54  // Content:
55  // Run Control
56  // Camera Control
57  // Infos
58  // G4 Dialog
59  // Oscilloscope Signal
60 
61  pagesWidget = new QStackedWidget;
62  pagesWidget->addWidget(new run_control (this, gemcOpt));
63  pagesWidget->addWidget(new camera_control (this, gemcOpt));
64  pagesWidget->addWidget(new infos (this, gemcOpt));
65  pagesWidget->addWidget(new g4dialog (this, gemcOpt));
66  pagesWidget->addWidget(gsig = new gsignal (this, gemcOpt, SeDe_Map));
67  pagesWidget->setMinimumWidth(650);
68  pagesWidget->setMaximumWidth(650);
69 
70  QPushButton *closeButton = new QPushButton(tr("Exit"));
71 
72  createIcons();
73  contentsWidget->setCurrentRow(0);
74  if(qt_mode > 1)
75  contentsWidget->setCurrentRow(1);
76 
77  //connect(closeButton, SIGNAL(clicked()), qApp, SLOT(quit()));
78  connect(closeButton, SIGNAL(clicked()), this, SLOT(gemc_quit()));
79 
80  QHBoxLayout *horizontalLayout = new QHBoxLayout;
81  horizontalLayout->addWidget(contentsWidget);
82  horizontalLayout->addWidget(pagesWidget, 1);
83 
84  QHBoxLayout *buttonsLayout = new QHBoxLayout;
85  buttonsLayout->addStretch(1);
86  buttonsLayout->addWidget(closeButton);
87 
88  QVBoxLayout *mainLayout = new QVBoxLayout;
89  mainLayout->addLayout(horizontalLayout);
90  mainLayout->addStretch(1);
91  mainLayout->addSpacing(12);
92  mainLayout->addLayout(buttonsLayout);
93  setLayout(mainLayout);
94 
95  setWindowTitle(tr("Config Dialog"));
96 
97  return;
98 }
99 
100 void gemcMainWidget::Build_DTree()
101 {
102  string hd_msg = gemcOpt->args["LOG_MSG"].args;
103  double VERB = gemcOpt->args["GEO_VERBOSITY"].arg ;
104 
105  if(DTree != NULL)
106  {
107  delete DTree;
108  if(VERB>3)
109  cout << hd_msg << " Detector Widget Tree Already Present." << endl;
110  }
111  DTree = new detector_tree(Hall_Map, *gemcOpt, runManager, visManager, UImanager, *mats);
112  DTree->show();
113 }
114 
115 
116 void gemcMainWidget::changePage(QListWidgetItem *current, QListWidgetItem *previous)
117 {
118  if (!current)
119  current = previous;
120 
121  if(gemc_tostring(current->text()) == "Detector")
122  {
123  Build_DTree();
124  return;
125  }
126 
127  // manually setting the content index because "detector" doesn't have a content
128  if(contentsWidget->row(current) == 0) pagesWidget->setCurrentIndex(0);
129  if(contentsWidget->row(current) == 1) pagesWidget->setCurrentIndex(1);
130  if(contentsWidget->row(current) == 3) pagesWidget->setCurrentIndex(2);
131  if(contentsWidget->row(current) == 4) pagesWidget->setCurrentIndex(3);
132  if(contentsWidget->row(current) == 5)
133  {
134  pagesWidget->setCurrentIndex(4);
135  gsig->CreateSDetsTree();
136  }
137 }
138 
139 void gemcMainWidget::createIcons()
140 {
141  i_default = QColor( 220, 220, 255);
142  i_hovered = QColor( 210, 210, 240);
143 
144  QListWidgetItem *rcontrol = new QListWidgetItem(contentsWidget);
145  rcontrol->setIcon(QPixmap(run_control_xpm));
146  rcontrol->setText(tr("Run Control"));
147  rcontrol->setBackground(QBrush(i_default));
148  rcontrol->setTextAlignment(Qt::AlignHCenter);
149  rcontrol->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled);
150 
151  QListWidgetItem *ccontrol = new QListWidgetItem(contentsWidget);
152  ccontrol->setIcon(QPixmap(camera_control_xpm));
153  ccontrol->setText(tr("Camera"));
154  ccontrol->setBackground(QBrush(i_default));
155  ccontrol->setTextAlignment(Qt::AlignHCenter);
156  ccontrol->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
157 
158  QListWidgetItem *dinspector = new QListWidgetItem(contentsWidget);
159  dinspector->setIcon(QPixmap(detector_inspector_xpm));
160  dinspector->setText(tr("Detector"));
161  dinspector->setBackground(QBrush(i_default));
162  dinspector->setTextAlignment(Qt::AlignHCenter);
163  dinspector->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
164 
165  QListWidgetItem *infos = new QListWidgetItem(contentsWidget);
166  infos->setIcon(QPixmap(infos_xpm));
167  infos->setText(tr("Infos"));
168  infos->setBackground(QBrush(i_default));
169  infos->setTextAlignment(Qt::AlignHCenter);
170  infos->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
171 
172  QListWidgetItem *g4dialog = new QListWidgetItem(contentsWidget);
173  g4dialog->setIcon(QPixmap(g4dialog_xpm));
174  g4dialog->setText(tr("G4Dialog"));
175  g4dialog->setBackground(QBrush(i_default));
176  g4dialog->setTextAlignment(Qt::AlignHCenter);
177  g4dialog->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
178 
179  QListWidgetItem *gsignal = new QListWidgetItem(contentsWidget);
180  gsignal->setIcon(QPixmap(analog_signal_xpm));
181  gsignal->setText(tr("Signals"));
182  gsignal->setBackground(QBrush(i_default));
183  gsignal->setTextAlignment(Qt::AlignHCenter);
184  gsignal->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
185 
186  connect(contentsWidget,
187  SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem*)),
188  this, SLOT(changePage(QListWidgetItem *, QListWidgetItem*)));
189 
190  connect(contentsWidget, SIGNAL(itemEntered(QListWidgetItem *)), this, SLOT(change_background(QListWidgetItem *)) );
191 
192 }
193 
194 void gemcMainWidget::change_background(QListWidgetItem* item)
195 {
196  for(int i=0; i<contentsWidget->count(); i++)
197  contentsWidget->item(i)->setBackground(QBrush(i_default));
198 
199  item->setBackground(QBrush(i_hovered));
200 
201 }
202 
203 
205 {
206  string hd_msg = gemcOpt->args["LOG_MSG"].args;
207 
208  if(DTree != NULL)
209  delete DTree;
210 
211  cout << endl;
212 }
213 
214 
215 
216 
217 
STL namespace.
string gemc_tostring(QString input)
gemcMainWidget(G4RunManager *, G4VisManager *, gemc_opts *, map< string, MSensitiveDetector * >)
Definition: gemc_MainGui.cc:27
void change_background(QListWidgetItem *)
Definition: infos.h:61
void changePage(QListWidgetItem *current, QListWidgetItem *previous)