ATLAS Offline Software
Loading...
Searching...
No Matches
VP1EventDisplayEditor.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Header file for class VP1EventDisplayEditor //
9// //
10// Description: Event display editor. //
11// //
12// Author: Riccardo-Maria BIANCHI (rbianchi@cern.ch) //
13// Initial version: September 2013 //
14//
15// Main updates:
16// - 2023 Nov, Riccardo.Maria.Bianchi@cern.ch,
17// Added HTML support in labels
18// //
20
22#include "ui_vp1eventdisplayeditor.h"
23
29
30#include <QRectF>
31#include <QShortcut>
32#include <QCloseEvent>
33#include <QFileDialog>
34
35#include <iostream>
36
37
38//____________________________________________________________________
40
41public:
42
44 Ui::VP1EventDisplayEditorForm ui;
45
46 // VP1ExaminerViewer* viewer;
47
48 // QGraphicsScene* scene;
49
50 // QWidget * frameHolderWidget;
51
52};
53
54
56//QByteArray VP1EventDisplayEditor::state() const
57//{
58// VP1Serialise s(0/*version*/);
59// QList<QByteArray> frameStates;
60// foreach(VP1CustomTourFrameWidget*frame,d->frames) {
61// frameStates << frame->serialise();
62// s.ignoreWidget(frame);
63// }
64// s.save(frameStates);
65// s.save(d->ui.doubleSpinBox_theta);
66// s.save(d->ui.doubleSpinBox_radius);
67// s.save(d->ui.groupBox_utilityZoom);
68// s.warnUnsaved(this);
69// return s.result();
70//}
71
73//void VP1EventDisplayEditor::setState(QByteArray ba)
74//{
75// foreach(VP1CustomTourFrameWidget*frame,d->frames)
76// frame->deleteLater();
77// d->frames.clear();
78//
79// VP1Deserialise s(ba);
80// if (s.version()!=0)
81// return;
82// QList<QByteArray> frameStates = s.restore<QList<QByteArray> >();
83// s.restore(d->ui.doubleSpinBox_theta);
84// s.restore(d->ui.doubleSpinBox_radius);
85// s.restore(d->ui.groupBox_utilityZoom);
86// s.warnUnrestored(this);
87//
88// d->ui.widget_utilityZoomContents->setVisible(d->ui.groupBox_utilityZoom->isChecked());
89//
90// foreach(QByteArray ba2, frameStates)
91// d->addFrame(new VP1CustomTourFrameWidget(ba2));
92// d->updateFrameListVisuals();
93// enabledFrameListChanged();
94//}
95
96
97/*
98 * My first, old version
99 */
102//VP1EventDisplayEditor::VP1EventDisplayEditor()
103//: QWidget(0,Qt::WindowStaysOnTopHint), d(new Imp)
104//{
105// d->theclass = this;
106// d->ui.setupUi(this);
107//
108// scene = new QGraphicsScene(); // the size of the scene is by default infinite. But we will limit the view, here below
109// scene->setSceneRect(QRectF(0.0, 0.0, 4000., 2641.));
110//
111// scene_preview = new QGraphicsScene();
112//
113//
114// d->ui.graphicsView->setScene(scene);
115// d->ui.graphicsView->setSceneRect(0, 0, 4000, 2641); // the size of a final ATLAS event display
116// d->ui.graphicsView->setMaximumSize(1000, 660); // the size of the view window on the screen
117//
118// d->ui.graphicsView_preview->setScene(scene_preview);
119// d->ui.graphicsView_preview->setSceneRect(0, 0, 333, 220); // the size of the preview scene
120// d->ui.graphicsView_preview->setMaximumSize(333, 220); // the size of the preview window
121//
122// // set the default bkg color: black
123// setBackgroundColor();
124//
125// setWindowIcon(QIcon(QString(":/vp1/icons/icons/3d_32x32.png")));
126//
127// connect(d->ui.pushButton_addText,SIGNAL(clicked()), this,SLOT(addTextLabel()));
128// connect(d->ui.pushButton_removeObj,SIGNAL(clicked()), this,SLOT(removeObject()));
129// connect(d->ui.pushButton_addLogo,SIGNAL(clicked()), this,SLOT(addLogo()));
130//
131// connect(d->ui.radioButton_black,SIGNAL(clicked()), this,SLOT(setBackgroundColor()));
132// connect(d->ui.radioButton_white,SIGNAL(clicked()), this,SLOT(setBackgroundColor()));
133// connect(d->ui.radioButton_transparent,SIGNAL(clicked()), this,SLOT(setBackgroundColor()));
134//
135// connect(scene,SIGNAL(changed(const QList<QRectF>&)), this,SLOT(updatePreview(const QList<QRectF>&)));
136//
137//}
138
139
140/*
141 * new version
142 */
143//____________________________________________________________________
144VP1EventDisplayEditor::VP1EventDisplayEditor(VP1MainWindow* mainWindow, const QList<unsigned long long>& listRunEventNumberTimestamp)
145//: QWidget(0,Qt::WindowStaysOnTopHint), d(new Imp)
146: QWidget(0), m_d(new Imp)
147{
148 m_mainWindow = mainWindow;
149
150 m_runNumber = listRunEventNumberTimestamp[0];
151 m_eventNumber = listRunEventNumberTimestamp[1];
152 m_eventTimestamp = listRunEventNumberTimestamp[2];
153
154
155 m_d->theclass = this;
156 m_d->ui.setupUi(this);
157
158 /* initialize the scene
159 *
160 * this is the scene that will be rendered and saved to the file.
161 * By default the scene dimension is 4000x2641 pixels.
162 *
163 */
164 m_scene = new QGraphicsScene();
165 m_scene->setSceneRect(QRectF(0.0, 0.0, 4000., 2641.));
166
167
168 VP1EventDisplaySceneView *view = new VP1EventDisplaySceneView("Full-size view");
169 view->view()->setScene(m_scene);
170
171 m_preview = new VP1EventDisplaySceneView("Preview", true);
172 m_preview->view()->setScene(m_scene);
173
174 // the right splitter, containing the list of objects in the scene and the preview
175 QSplitter *previewSplitter = new QSplitter;
176 previewSplitter->setOrientation(Qt::Vertical);
177
178 // the center splitter, containing the main view and the preview splitter
179 QSplitter *viewSplitter = new QSplitter;
180 viewSplitter->setOrientation(Qt::Horizontal);
181
182 // the center splitter, containing the main view and the preview splitter
183 QSplitter *toolsSplitter = new QSplitter;
184 toolsSplitter->setOrientation(Qt::Vertical);
185
186 // the main splitter, containing all views
187 QSplitter *mainSplitter = new QSplitter;
188 mainSplitter->setOrientation(Qt::Horizontal);
189
190
191 previewSplitter->addWidget(m_d->ui.groupBox_objectList);
192 previewSplitter->addWidget(m_preview);
193 previewSplitter->addWidget(m_d->ui.groupBox_actions);
194
195
196 QWidget *containerPreview = new QWidget;
197 QVBoxLayout *containerPreview_layout = new QVBoxLayout;
198
199 containerPreview_layout->addWidget(previewSplitter);
200 containerPreview->setLayout(containerPreview_layout);
201
202 viewSplitter->addWidget(view);
203 viewSplitter->addWidget(containerPreview);
204
205 QWidget *containerAllViews = new QWidget;
206 QHBoxLayout *containerAllViews_layout = new QHBoxLayout;
207 containerAllViews_layout->addWidget(viewSplitter);
208 containerAllViews->setLayout(containerAllViews_layout);
209
210
211 toolsSplitter->addWidget(m_d->ui.groupBox_getTab);
212 toolsSplitter->addWidget(m_d->ui.groupBox_bkg);
213 toolsSplitter->addWidget(m_d->ui.groupBox_logo);
214 toolsSplitter->addWidget(m_d->ui.groupBox_labels);
215
216 QWidget *containerTools = new QWidget;
217 QVBoxLayout *containerTools_layout = new QVBoxLayout;
218 containerTools_layout->addWidget(toolsSplitter);
219 containerTools_layout->addStretch(1);
220 containerTools->setLayout(containerTools_layout);
221
222
223 // mainSplitter->addWidget(containerTools);
224 mainSplitter->addWidget(containerAllViews);
225
226 QGridLayout* grid = static_cast<QGridLayout*>(this->layout());
227 grid->addWidget(containerTools);
228 grid->addWidget(mainSplitter);
229
230
231
232 /*
233 * setting the size of the preview window
234 */
235 //m_preview->view()->setFixedSize(450,302);
236 /*
237 * this triggers a better fitInView() but not enough for our purpose.
238 * See: http://stackoverflow.com/a/17085612
239 */
240 //m_preview->show();
241
242 /*
243 * setting the size of the viewport
244 *
245 * Details:
246 * The QGraphicsView is not the widget that actually contains the scene,
247 * because the QGraphicsView also manages the scrollbars.
248 * The scene is drawn in the viewport widget,
249 * which is a little smaller than the QGraphicsView.
250 * (http://qt-project.org/forums/viewthread/17504)
251 *
252 * Update: useful, but it's useless here, because we want to use fitInView()
253 * from the view, and that does not match with the viewport size.
254 */
255 // m_preview->view()->viewport()->setFixedSize(400,265);
256
257
258 QSize size = m_preview->view()->maximumViewportSize();
259 VP1Msg::message("scene rect: " + QString::number(m_scene->sceneRect().width()) + " - " + QString::number(m_scene->sceneRect().height()) );
260 VP1Msg::message("max preview size: " + QString::number(size.width()) + " - " + QString::number(size.height()) );
261
262 m_preview->view()->ensureVisible ( m_scene->sceneRect(), 0, 0 );
263 m_preview->view()->fitInView( m_scene->sceneRect(), Qt::KeepAspectRatio);
264
265 // add a frame to preview to define the the rendering area
266 m_preview->addRenderingFrame();
267
268 // set the default m_scene bkg color: black
269 this->setBackgroundColor(); // the "black" checkbox is checked by default in the GUI
270
271 setWindowIcon(QIcon(QString(":/vp1/icons/icons/3d_32x32.png")));
272
273 connect(m_d->ui.pushButton_get,SIGNAL(clicked()), this,SLOT(getTabSnapshot()));
274
275// connect(m_d->ui.pushButton_eventDetailsLabel,SIGNAL(clicked()), this,SLOT(getEventDetailsLabel()));
276
277
278 connect(m_d->ui.radioButton_eventDetails,SIGNAL(toggled(bool)), this,SLOT(enableCustomTextField(bool)));
279 // connect(m_d->ui.radioButton_customText,SIGNAL(toggled()), this,SLOT(showCustomTextField()));
280
281 connect(m_d->ui.pushButton_addText,SIGNAL(clicked()), this,SLOT(setTextLabel()));
282 connect(m_d->ui.pushButton_removeObj,SIGNAL(clicked()), this,SLOT(removeObject()));
283 connect(m_d->ui.pushButton_addLogo,SIGNAL(clicked()), this,SLOT(addLogo()));
284
285 connect(m_d->ui.pushButton_save,SIGNAL(clicked()), this,SLOT(savePicture()));
286 connect(m_d->ui.pushButton_print,SIGNAL(clicked()), this,SLOT(printPicture()));
287
288
289 connect(m_d->ui.radioButton_black,SIGNAL(clicked()), this,SLOT(setBackgroundColor()));
290 connect(m_d->ui.radioButton_white,SIGNAL(clicked()), this,SLOT(setBackgroundColor()));
291 connect(m_d->ui.radioButton_transparent,SIGNAL(clicked()), this,SLOT(setBackgroundColor()));
292
293 this->setWindowTitle(tr("ATLAS VP1 Event Display Editor"));
294
295 this->getEventDetailsLabel();
296
297
298}
299
300/*
301 * Qt example
302 */
303//VP1EventDisplayEditor::VP1EventDisplayEditor()
305//: QWidget(0), m_d(new Imp)
306//{
307// m_d->theclass = this;
308// m_d->ui.setupUi(this);
309//
310// m_scene = new QGraphicsScene();
311//
312// h1Splitter = new QSplitter;
313// h2Splitter = new QSplitter;
314//
315// QSplitter *vSplitter = new QSplitter;
316// vSplitter->setOrientation(Qt::Vertical);
317// vSplitter->addWidget(h1Splitter);
318// vSplitter->addWidget(h2Splitter);
319//
320// VP1EventDisplaySceneView *view = new VP1EventDisplaySceneView("Top left view");
321// view->view()->setScene(m_scene);
322// h1Splitter->addWidget(view);
323//
324// view = new VP1EventDisplaySceneView("Top right view");
325// view->view()->setScene(m_scene);
326// h1Splitter->addWidget(view);
327//
328// view = new VP1EventDisplaySceneView("Bottom left view");
329// view->view()->setScene(m_scene);
330// h2Splitter->addWidget(view);
331//
332// view = new VP1EventDisplaySceneView("Bottom right view");
333// view->view()->setScene(m_scene);
334// h2Splitter->addWidget(view);
335//
336// QLayout *layout = this->layout();
337// layout->addWidget(vSplitter);
339//
340// setWindowTitle(tr("Chip Demo"));
341//
342//
343//}
344
345
346
347//____________________________________________________________________
349{
350 // m_d->frameHolderWidget->deleteLater();
351 // foreach(VP1CustomTourFrameWidget*frame,m_d->frames)
352 // frame->deleteLater();
353 delete m_d;
354 delete m_scene;
355 // delete scene_preview;
356}
357
358
359//____________________________________________________________________
361{
362// if (m_d->ui.radioButton_eventDetails->isChecked())
363 if (checked)
364 m_d->ui.lineEdit_customLabelText->setEnabled(false);
365 else
366 m_d->ui.lineEdit_customLabelText->setEnabled(true);
367}
368
369
370//____________________________________________________________________
372{
373
374 QString evtstr = "Run: "+QString::number(m_runNumber)+"\n"
375 + "Event: "+QString::number(m_eventNumber)+"\n"
376 + QString(m_eventTimestamp>0 ? QDateTime::fromTime_t(m_eventTimestamp).toString(Qt::ISODate).replace('T',' ')+ " CEST" : "");
377
378 //VP1Msg::messageVerbose(evtstr);
379
380 return evtstr;
381}
382
383
384//____________________________________________________________________
386{
387 m_preview->print();
388}
389
390
391//____________________________________________________________________
393{
394 VP1Msg::messageVerbose("VP1EventDisplayEditor::savePicture()");
395
396 // hide the rendering frame, cause we do not want it in the final picture
397 m_preview->hideRenderingFrame();
398
399 QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
400 "event_display.png",
401 tr("Images (*.png *.jpg)"));
402
403 QImage image(m_scene->sceneRect().size().toSize(), QImage::Format_ARGB32);
404 image.fill(Qt::transparent);
405
406 QPainter painter(&image);
407 painter.setRenderHint(QPainter::Antialiasing);
408
409 m_scene->render(&painter);
410
411 image.save(fileName);
412
413 // show the rendering frame again
414 m_preview->showRenderingFrame();
415
416}
417
418
419
420
421
422
423//____________________________________________________________________
424void VP1EventDisplayEditor::addPixmapList(QList<QPixmap>& list, QStringList& listNames)
425{
426 VP1Msg::messageVerbose("VP1EventDisplayEditor::addPixmapList()");
427
428 if (!list.isEmpty()) {
429 for (QPixmap img : list) {
430 // add and set it movableimage to the scene
431 QGraphicsPixmapItem* item = m_scene->addPixmap(img);
432 item->setFlags(QGraphicsItem::ItemIsMovable);
433 m_sceneItems << item;
434 }
435 }
436
437 if (!listNames.isEmpty()) {
438 for (const QString& name : listNames) {
439 // add image name to the list
440 new QListWidgetItem(name, m_d->ui.listWidget);
441 }
442 }
443}
444
445
446//____________________________________________________________________
448{
449 QListWidgetItem * currentItem = m_d->ui.listWidget->currentItem();
450 QString text = currentItem->text();
451 int currentPos = m_d->ui.listWidget->row( currentItem );
452
453 // remove the object from the scene
454 m_scene->removeItem( m_sceneItems[currentPos] );
455 // remove its associated pointer in our list
456 m_sceneItems.removeAt( currentPos );
457 // remove its associated label
458 QListWidgetItem * item = m_d->ui.listWidget->takeItem(currentPos);
459 delete item;
460
461 VP1Msg::message("Successfully removed the object: " + text);
462}
463
466//void VP1EventDisplayEditor::addTextLabelSlot()
467//{
468// this->addTextLabel();
469//}
470
471
472//____________________________________________________________________
474{
475 QString text;
476 QFont font;
477
478// /* if we use this function programmatically,
479// * passing text directly
480// */
481// if (!textString.isEmpty()) {
482//
483// text = textString;
484//
485// // default settings
486// int size = 32;
487// int weight = QFont::Normal;
488// bool italics = false;
489// QString typeface = "Courier";
490//
491// // default font
492// font = QFont(typeface, size, weight, italics);
493//
494// // default font family, if Courier is not available
495// font.setStyleHint(QFont::TypeWriter);
496//
497// }
498
499// /* if we use this function from the GUI,
500// * then we get all user's settings from the GUI itself
501// */
502// else {
503
504 if (m_d->ui.radioButton_eventDetails->isChecked()) {
505 // get the event details
506 text = this->getEventDetailsLabel();
507 }
508 else {
509 // get the user's text
510 text = m_d->ui.lineEdit_customLabelText->text();
511 }
512
513
514 // get users' settings
515 int size = 0;
516 if (m_d->ui.radioButton_size12->isChecked()) size = 12;
517 else if (m_d->ui.radioButton_size24->isChecked()) size = 24;
518 else if (m_d->ui.radioButton_size32->isChecked()) size = 32;
519 else if (m_d->ui.radioButton_size44->isChecked()) size = 44;
520 else if (m_d->ui.radioButton_sizeCustom->isChecked()) {
521 size = m_d->ui.spinBox_size->value();
522 }
523
524 QString typeface = "Courier"; // default typeface
525
526 int weight = QFont::Normal;
527 if (m_d->ui.radioButton_light->isChecked()) weight = QFont::Light;
528 else if (m_d->ui.radioButton_normal->isChecked()) weight = QFont::Normal;
529 else if (m_d->ui.radioButton_bold->isChecked()) weight = QFont::Bold;
530 else if (m_d->ui.radioButton_black_2->isChecked()) weight = QFont::Black;
531
532 bool italics = false;
533 if (m_d->ui.radioButton_italics->isChecked()) italics = true;
534
535 font = QFont(typeface, size, weight, italics);
536
537 if (m_d->ui.radioButton_monaco->isChecked()) {
538 // typeface = "Monaco";
539 typeface = "Courier";
540 font.setStyleHint(QFont::TypeWriter); // this defines the family to choose from, if the preferred typeface is not available on the host system
541 }
542 else if (m_d->ui.radioButton_helvetica->isChecked()) {
543 typeface = "Helvetica";
544 font.setStyleHint(QFont::SansSerif);
545 }
546 else if (m_d->ui.radioButton_times->isChecked()) {
547 typeface = "Times";
548 font.setStyleHint(QFont::Serif);
549 }
550 font.setFamily(typeface);
551
552// }
553
554 this->addTextLabel(std::move(text), font);
555}
556
557
558//____________________________________________________________________
559void VP1EventDisplayEditor::addTextLabel(QString text, QFont font)
560{
561// adding the label to the m_scene
562QGraphicsTextItem* item = m_scene->addText(text, font);
563item->setFlags(QGraphicsItem::ItemIsMovable);
564
565// The addText() method creates a TextItem with 'plain text.
566// So, we now set again the text property with the setHtml()
567// method, so users can use HTML tags to stylize their labels.
568// That's especially useful in this context, to add labels
569// with the Pt values of the physics objects.
570item->setHtml(text);
571
572// set the user's preferred color
573if (m_d->ui.radioButton_whiteText->isChecked()) {
574 item->setDefaultTextColor(Qt::white);
575} else if (m_d->ui.radioButton_blackText->isChecked()) {
576 item->setDefaultTextColor(Qt::black);
577}
578
579// adding the label to the list of objects
580QString strippedText = text.replace('\n',' ').replace('\t', ' ').simplified();
581new QListWidgetItem(strippedText, m_d->ui.listWidget);
582
583// adding the label to list of object pointers
584m_sceneItems << item;
585}
586
587
588//____________________________________________________________________
590{
591 int tabN = m_d->ui.comboBox_tabNumber->currentIndex();
592 QString tabName = m_d->ui.comboBox_tabNumber->currentText();
593 VP1Msg::messageVerbose("Got tab: " + tabName + " at idx: " + QString::number(tabN) );
594
595 int imageWidth = m_d->ui.spinBox_imageWidth->value();
596 VP1Msg::messageVerbose("width: " + QString::number(imageWidth) );
597
598 QPixmap snap = m_mainWindow->getSingleChannelCustomSnapshot( tabName, imageWidth );
599
600 tabName = tabName + "_" + QString::number(imageWidth);
601
602
603 QList<QPixmap> listPixmap;
604 QStringList listNamesPixmap;
605
606 listPixmap << snap;
607 listNamesPixmap << tabName;
608
609 this->addPixmapList(listPixmap, listNamesPixmap);
610
611}
612
613//____________________________________________________________________
614void VP1EventDisplayEditor::setTabsList( QStringList listNames )
615{
616 VP1Msg::messageVerbose("VP1EventDisplayEditor::setTabsList()");
617
618 m_d->ui.comboBox_tabNumber->addItems(listNames);
619
620}
621
622
623//____________________________________________________________________
625{
626 QPixmap pix;
627 QString name;
628
629 // load the right version of the ATLAS logo
630 if ( m_d->ui.radioButton_300px->isChecked() ) {
631 if ( m_d->ui.radioButton_logo_white->isChecked() )
632 pix.load(":/vp1/images/images/ATLAS-Logo-New_300pixels.png");
633 if ( m_d->ui.radioButton_logo_main->isChecked() )
634 pix.load(":/vp1/images/images/ATLAS-Logo-Ref-RGB-transpBkg-300px.png");
635 name = "logo_300px";
636 }
637 else if ( m_d->ui.radioButton_450px->isChecked() ) {
638 if ( m_d->ui.radioButton_logo_white->isChecked() )
639 pix.load(":/vp1/images/images/ATLAS-Logo-New_450pixels.png");
640 if ( m_d->ui.radioButton_logo_main->isChecked() )
641 pix.load(":/vp1/images/images/ATLAS-Logo-Ref-RGB-transpBkg-450px.png");
642 name = "logo_450px";
643 }
644 else if ( m_d->ui.radioButton_600px->isChecked() ) {
645 if ( m_d->ui.radioButton_logo_white->isChecked() )
646 pix.load(":/vp1/images/images/ATLAS-Logo-New_600pixels.png");
647 if ( m_d->ui.radioButton_logo_main->isChecked() )
648 pix.load(":/vp1/images/images/ATLAS-Logo-Ref-RGB-transpBkg-600px.png");
649 name = "logo_600px";
650 }
651 else if ( m_d->ui.radioButton_800px->isChecked() ) {
652 if ( m_d->ui.radioButton_logo_white->isChecked() )
653 pix.load(":/vp1/images/images/ATLAS-Logo-New_800pixels.png");
654 if ( m_d->ui.radioButton_logo_main->isChecked() )
655 pix.load(":/vp1/images/images/ATLAS-Logo-Ref-RGB-transpBkg-800px.png");
656 name = "logo_800px";
657 }
658 else if ( m_d->ui.radioButton_1000px->isChecked() ) {
659 if ( m_d->ui.radioButton_logo_white->isChecked() )
660 pix.load(":/vp1/images/images/ATLAS-Logo-New_1000pixels.png");
661 if ( m_d->ui.radioButton_logo_main->isChecked() )
662 pix.load(":/vp1/images/images/ATLAS-Logo-Ref-RGB-transpBkg-1000px.png");
663 name = "logo_1000px";
664 }
665 else if ( m_d->ui.radioButton_1200px->isChecked() ) {
666 if ( m_d->ui.radioButton_logo_white->isChecked() )
667 pix.load(":/vp1/images/images/ATLAS-Logo-New_1200pixels.png");
668 if ( m_d->ui.radioButton_logo_main->isChecked() )
669 pix.load(":/vp1/images/images/ATLAS-Logo-Ref-RGB-transpBkg-1200px.png");
670 name = "logo_1200px";
671 }
672
673 // add the logo to the m_scene
674 QGraphicsPixmapItem* item = m_scene->addPixmap(pix);
675 item->setFlags(QGraphicsItem::ItemIsMovable);
676 // add to the list of pointers
677 m_sceneItems << item;
678 // add to the list of object labels
679 new QListWidgetItem(name, m_d->ui.listWidget);
680}
681
682
683//____________________________________________________________________
685{
686
687 // a white background
688 if ( m_d->ui.radioButton_white->isChecked() )
689 m_scene->setBackgroundBrush(Qt::white);
690 // a black background
691 else if ( m_d->ui.radioButton_black->isChecked() )
692 m_scene->setBackgroundBrush(Qt::black);
693 // a transparent background
694 else if ( m_d->ui.radioButton_transparent->isChecked() ) {
695 m_scene->setBackgroundBrush(Qt::NoBrush);
696 // // a gradient background
697 // QRadialGradient gradient(0, 0, 10);
698 // gradient.setSpread(QGradient::RepeatSpread);
699 // m_scene->setBackgroundBrush(gradient);
700 }
701}
702
703
704
705//____________________________________________________________________
707{
708 // if you want to just hide the window when closed, uncomment the lines below
709 ev->ignore();
710 hide();
711
712 // this, instead, will close the window
713 // ev->accept();
714}
715
716//QGraphicsView* VP1EventDisplayEditor::getView()
717//{
718// return m_d->ui.graphicsView;
719//}
720
721
722
723
725//void VP1EventDisplayEditor::buttonClicked()
726//{
727// if (m_d->ui.pushButton_addCurrentView==sender()) {
728// VP1CustomTourFrameWidget * frame = new VP1CustomTourFrameWidget(m_d->viewer->currentCamIsPerspective(),
729// m_d->viewer->currentCameraState());
730// m_d->addFrame(frame);
731// m_d->updateFrameSnapshot(frame);
732// m_d->updateFrameListVisuals();
733// } else if (m_d->ui.pushButton_refreshPreviews==sender()) {
734// foreach(VP1CustomTourFrameWidget*frame,m_d->frames)
735// m_d->updateFrameSnapshot(frame);
736// } else if (m_d->ui.pushButton_execute==sender()) {
737// m_d->viewer->startCustomTour();
738// } else if (m_d->ui.pushButton_utilityZoomShow==sender()) {
739// }
740//}
741
VP1EventDisplayEditor * theclass
Ui::VP1EventDisplayEditorForm ui
unsigned long long m_eventNumber
void enableCustomTextField(bool checked)
VP1EventDisplaySceneView * m_preview
void addPixmapList(QList< QPixmap > &list, QStringList &listNames)
void addTextLabel(QString text, QFont font)
void setTabsList(QStringList listNames)
VP1EventDisplayEditor(VP1MainWindow *mainWindow, const QList< unsigned long long > &listRunEventNumberTimestamp)
QList< QGraphicsItem * > m_sceneItems
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84
static void message(const QString &, IVP1System *sys=0)
Definition VP1Msg.cxx:30
int ev
Definition globals.cxx:25
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310