ATLAS Offline Software
Loading...
Searching...
No Matches
VP12DExaminerViewer.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6// //
7// Implementation of class VP12DExaminerViewer //
8// //
9// Author: Thomas Kittelmann <Thomas.Kittelmann@cern.ch> //
10// //
11// Initial version: April 2007 //
12// Major update to support multiple views: July 2007 //
13// //
15
18#include "ui_vp12dexaminerviewerform.h"
19#include <iostream>
20
21//Fixme: If you set seekmode in one view, then even after you use it
22//up, the other views will still be in seek mode. I guess we need a
23//seekmodedone signal and an endSeekMode slot in vp1graphicsview.
24
25//____________________________________________________________________
27public:
29 Ui::VP12DExaminerViewerForm * ui;
31
32 //Common init stuff for the constructors:
33 void init1();//Before the views are setup in the stackwidget
34 void init2();//After the views are setup in the stackwidget
35
36 //For some pushbuttons, only the visible view should be
37 //connected. Thus use the following when changing view:
40
41 //Extra info for multi-view mode:
42 QList<QPair<QString,QString> > multiviews_viewidAndIconUrl;
43 QMap<QString,VP1GraphicsView*> multiviews_viewid2view;
44 QMap<QPushButton*,QString> button2viewid;
45
46
47 //Helpers
49
50
51};
52
53
54//____________________________________________________________________
56{
57 ui = new Ui::VP12DExaminerViewerForm;
58 ui->setupUi(theclass);
59
60 //Clear stack widget:
61
62 while (ui->stackedWidget_views->count())
63 ui->stackedWidget_views->removeWidget(ui->stackedWidget_views->currentWidget());
64
65 //Setup mode buttons:
66 connect(ui->pushButton_pick,SIGNAL(clicked()),theclass,SLOT(setPickMode()));
67 connect(ui->pushButton_changeview,SIGNAL(clicked()),theclass,SLOT(setChangeViewMode()));
68 connect(ui->pushButton_seek,SIGNAL(clicked()),theclass,SLOT(setSeekMode()));
69
70 //Hide unused buttons:
71 ui->pushButton_zoomplus->hide();
72 ui->pushButton_zoomminus->hide();
73}
74
75//____________________________________________________________________
77{
78 if (theclass->view())
80 else
81 std::cout<<"VP12DExaminerViewer::Imp::init2 WARNING: Current View is NULL"<<std::endl;
82 //Start in pick mode:
83 theclass->setPickMode();
84
85}
86
87
88//____________________________________________________________________
89VP12DExaminerViewer::VP12DExaminerViewer(QWidget * parent, Qt::WindowFlags f)
90 : QWidget(parent,f), m_d(new Imp)
91{
92 m_d->theclass=this;
93 m_d->singleviewmode = true;
94
95 m_d->init1();
96
97 //Add graphicsview:
98 m_d->ui->stackedWidget_views->insertWidget(m_d->ui->stackedWidget_views->count(),new VP1GraphicsView);
99
100 //Setup viewchangebuttons:
101 m_d->ui->widget_viewchangebuttons->hide();
102
103 m_d->init2();
104}
105
106//____________________________________________________________________
107VP12DExaminerViewer::VP12DExaminerViewer(const QList<QPair<QString,QString> >& views,
108 QWidget * parent, Qt::WindowFlags f)
109 : QWidget(parent,f), m_d(new Imp)
110{
111 if (!views.count())
112 std::cout<<"VP12DExaminerViewer ERROR: Using multimode constructor with empty list of requested views!"<<std::endl;
113
114
115 m_d->theclass=this;
116 m_d->singleviewmode = false;
117
118 m_d->init1();
119
120 //Setup layout for the buttons used to change the views:
121 QVBoxLayout *layout = new QVBoxLayout;
122 layout->setSpacing(0);
123 layout->setContentsMargins(0, 0, 0, 0);
124 QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
125 sizePolicy.setHorizontalStretch(0);
126 sizePolicy.setVerticalStretch(0);
127 m_d->ui->widget_viewchangebuttons->setLayout(layout);
128
129 //Add graphicsviews:
130 m_d->multiviews_viewidAndIconUrl = views;
131 VP1GraphicsView * firstview(0);
132 for (int i = 0; i<views.count();++i) {
133
135 if (!firstview)
136 firstview=view;
137
138 m_d->multiviews_viewid2view.insert(views.at(i).first,view);
139
140 m_d->ui->stackedWidget_views->insertWidget(m_d->ui->stackedWidget_views->count(),view);
141 //Add button:
142 QPushButton* button = new QPushButton(m_d->ui->widget_viewchangebuttons);
143 button->setToolTip(views.at(i).first);
144 button->setSizePolicy(sizePolicy);
145 button->setMinimumSize(QSize(30, 30));
146 button->setMaximumSize(QSize(30, 30));
147 button->setFocusPolicy(Qt::NoFocus);
148 button->setIcon(QIcon(views.at(i).second));
149 button->setIconSize(QSize(30, 30));
150 button->setCheckable(false);
151 layout->addWidget(button);
152 //connect button here and put it in button -> view_id map:
153 connect(button,SIGNAL(clicked()),this,SLOT(changeViewButtonClicked()));
154 m_d->button2viewid.insert(button,views.at(i).first);
155 }
156
157 QSpacerItem * spacerItem = new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
158 layout->addItem(spacerItem);
159
160 if (firstview)
161 m_d->ui->stackedWidget_views->setCurrentWidget(firstview);
162 else
163 std::cout<<"VP12DExaminerViewer WARNING: View is NULL"<<std::endl;
164
165 m_d->init2();
166
167// VP1GraphicsView a(a);
168}
169
170//____________________________________________________________________
172{
173 connect(ui->pushButton_sethome,SIGNAL(clicked()),view,SLOT(setHome()));
174 connect(ui->pushButton_home,SIGNAL(clicked()),view,SLOT(viewHome()));
175 connect(ui->pushButton_viewall,SIGNAL(clicked()),view,SLOT(fitViewToContents()));
176 connect(ui->pushButton_print,SIGNAL(clicked()),view,SLOT(print()));
177}
178
179//____________________________________________________________________
181{
182 disconnect(ui->pushButton_sethome,SIGNAL(clicked()),view,SLOT(setHome()));
183 disconnect(ui->pushButton_home,SIGNAL(clicked()),view,SLOT(viewHome()));
184 disconnect(ui->pushButton_viewall,SIGNAL(clicked()),view,SLOT(fitViewToContents()));
185 disconnect(ui->pushButton_print,SIGNAL(clicked()),view,SLOT(print()));
186}
187
188//____________________________________________________________________
193
194//____________________________________________________________________
196 return static_cast<VP1GraphicsView *>(m_d->ui->stackedWidget_views->currentWidget());
197 // return m_d->view;
198}
199
200//____________________________________________________________________
201VP1GraphicsView * VP12DExaminerViewer::view(const QString& view_id) const
202{
203 if (m_d->singleviewmode||!m_d->multiviews_viewid2view.contains(view_id))
204 return 0;
205
206 return m_d->multiviews_viewid2view[view_id];
207}
208
209//____________________________________________________________________
211{
212 //Change viewmode for all the views:
213 if (singleviewmode) {
214 theclass->view()->setMode(m);
215 } else {
216 QMap<QString,VP1GraphicsView*>::iterator it, itE = multiviews_viewid2view.end();
217 for(it = multiviews_viewid2view.begin(); it!=itE; ++it) {
218 it.value()->setMode(m);
219 }
220 }
221}
222
223//____________________________________________________________________
225{
226 m_d->ui->pushButton_pick->setChecked(true);
227 m_d->ui->pushButton_changeview->setChecked(false);
228 m_d->setModeAllViews(VP1GraphicsView::PICK);
229}
230
231//____________________________________________________________________
233{
234 m_d->ui->pushButton_pick->setChecked(false);
235 m_d->ui->pushButton_changeview->setChecked(true);
236 m_d->setModeAllViews(VP1GraphicsView::CHANGEVIEW);
237}
238
239//____________________________________________________________________
241{
242 m_d->setModeAllViews(VP1GraphicsView::SEEK);
243}
244
245//____________________________________________________________________
247{
248 if (m_d->singleviewmode)
249 return QStringList();
250
251 QStringList l;
252 QMap<QString,VP1GraphicsView*>::iterator it, itE = m_d->multiviews_viewid2view.end();
253 for(it = m_d->multiviews_viewid2view.begin(); it!=itE; ++it) {
254 l << it.key();
255 }
256
257 return l;
258}
259
260//____________________________________________________________________
261QList<QPair<QString,QString> > VP12DExaminerViewer::viewIDsAndIconUrls() const
262{
263 if (m_d->singleviewmode)
264 return QList<QPair<QString,QString> >();
265
266 return m_d->multiviews_viewidAndIconUrl;
267}
268
269//____________________________________________________________________
271{
272 return m_d->singleviewmode;
273}
274
275//____________________________________________________________________
277{
278 if (m_d->singleviewmode)
279 return "";
280
281 VP1GraphicsView* currentview = view();
282 if (!currentview)
283 return "";
284
285 QMap<QString,VP1GraphicsView*>::iterator it, itE = m_d->multiviews_viewid2view.end();
286 for(it = m_d->multiviews_viewid2view.begin(); it!=itE; ++it) {
287 if (it.value()==currentview)
288 return it.key();
289 }
290
291 return "";
292}
293
294//____________________________________________________________________
295void VP12DExaminerViewer::setShownView(const QString& viewid)
296{
297 if (m_d->singleviewmode)
298 return;
299
300 if (!m_d->multiviews_viewid2view.contains(viewid))
301 return;
302
303 VP1GraphicsView* oldview = view();
304 VP1GraphicsView* newview = m_d->multiviews_viewid2view[viewid];
305 if (!oldview||!newview)
306 return;
307 if (oldview==newview)
308 return;
309
311
312 m_d->disconnectButtonsFromView(oldview);
313 m_d->ui->stackedWidget_views->setCurrentWidget(newview);
314 m_d->connectButtonsToView(newview);
315
317}
318
319//____________________________________________________________________
321{
322 QPushButton * button = static_cast<QPushButton*>(sender());
323 if (!button||!m_d->button2viewid.contains(button))
324 return;
325 setShownView(m_d->button2viewid[button]);
326}
void print(char *figname, TCanvas *c1)
void disconnectButtonsFromView(VP1GraphicsView *)
void connectButtonsToView(VP1GraphicsView *)
QMap< QPushButton *, QString > button2viewid
void setModeAllViews(VP1GraphicsView::Mode)
VP12DExaminerViewer * theclass
QMap< QString, VP1GraphicsView * > multiviews_viewid2view
Ui::VP12DExaminerViewerForm * ui
QList< QPair< QString, QString > > multiviews_viewidAndIconUrl
VP12DExaminerViewer(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
VP1GraphicsView * view() const
QList< QPair< QString, QString > > viewIDsAndIconUrls() const
void setShownView(const QString &)
QStringList viewIDs() const
void currentViewAboutToChange(VP1GraphicsView *)