ATLAS Offline Software
Loading...
Searching...
No Matches
VP1EventDisplayEditor Class Reference

#include <VP1EventDisplayEditor.h>

Inheritance diagram for VP1EventDisplayEditor:
Collaboration diagram for VP1EventDisplayEditor:

Classes

class  Imp

Public Member Functions

 VP1EventDisplayEditor (VP1MainWindow *mainWindow, const QList< unsigned long long > &listRunEventNumberTimestamp)
virtual ~VP1EventDisplayEditor ()
void addPixmapList (QList< QPixmap > &list, QStringList &listNames)
void setTabsList (QStringList listNames)

Protected Member Functions

void closeEvent (QCloseEvent *)

Private Slots

void setTextLabel ()
void removeObject ()
void addLogo ()
void setBackgroundColor ()
void savePicture ()
void printPicture ()
void getTabSnapshot ()
void enableCustomTextField (bool checked)

Private Member Functions

QString getEventDetailsLabel ()
void addTextLabel (QString text, QFont font)

Private Attributes

Impm_d
QGraphicsScene * m_scene
QList< QGraphicsItem * > m_sceneItems
VP1EventDisplaySceneViewm_preview
QStringList m_listTabNames
QList< IVP1ChannelWidget * > m_allTabs
VP1MainWindowm_mainWindow
int m_runNumber
unsigned long long m_eventNumber
unsigned m_eventTimestamp

Detailed Description

Definition at line 34 of file VP1EventDisplayEditor.h.

Constructor & Destructor Documentation

◆ VP1EventDisplayEditor()

VP1EventDisplayEditor::VP1EventDisplayEditor ( VP1MainWindow * mainWindow,
const QList< unsigned long long > & listRunEventNumberTimestamp )

Definition at line 144 of file VP1EventDisplayEditor.cxx.

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}
unsigned long long m_eventNumber
void enableCustomTextField(bool checked)
VP1EventDisplaySceneView * m_preview
static void message(const QString &, IVP1System *sys=0)
Definition VP1Msg.cxx:30
str layout
Definition TileTB.py:76

◆ ~VP1EventDisplayEditor()

VP1EventDisplayEditor::~VP1EventDisplayEditor ( )
virtual

Definition at line 348 of file VP1EventDisplayEditor.cxx.

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}

Member Function Documentation

◆ addLogo

void VP1EventDisplayEditor::addLogo ( )
privateslot

Definition at line 624 of file VP1EventDisplayEditor.cxx.

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
678 // add to the list of object labels
679 new QListWidgetItem(name, m_d->ui.listWidget);
680}
QList< QGraphicsItem * > m_sceneItems

◆ addPixmapList()

void VP1EventDisplayEditor::addPixmapList ( QList< QPixmap > & list,
QStringList & listNames )

Definition at line 424 of file VP1EventDisplayEditor.cxx.

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);
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}
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84
list(name, path='/')
Definition histSizes.py:38

◆ addTextLabel()

void VP1EventDisplayEditor::addTextLabel ( QString text,
QFont font )
private

Definition at line 559 of file VP1EventDisplayEditor.cxx.

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
585}

◆ closeEvent()

void VP1EventDisplayEditor::closeEvent ( QCloseEvent * ev)
protected

Definition at line 706 of file VP1EventDisplayEditor.cxx.

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}
int ev
Definition globals.cxx:25

◆ enableCustomTextField

void VP1EventDisplayEditor::enableCustomTextField ( bool checked)
privateslot

Definition at line 360 of file VP1EventDisplayEditor.cxx.

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}

◆ getEventDetailsLabel()

QString VP1EventDisplayEditor::getEventDetailsLabel ( )
private

Definition at line 371 of file VP1EventDisplayEditor.cxx.

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}
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.

◆ getTabSnapshot

void VP1EventDisplayEditor::getTabSnapshot ( )
privateslot

Definition at line 589 of file VP1EventDisplayEditor.cxx.

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}
void addPixmapList(QList< QPixmap > &list, QStringList &listNames)

◆ printPicture

void VP1EventDisplayEditor::printPicture ( )
privateslot

Definition at line 385 of file VP1EventDisplayEditor.cxx.

386{
387 m_preview->print();
388}

◆ removeObject

void VP1EventDisplayEditor::removeObject ( )
privateslot

Definition at line 447 of file VP1EventDisplayEditor.cxx.

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}

◆ savePicture

void VP1EventDisplayEditor::savePicture ( )
privateslot

Definition at line 392 of file VP1EventDisplayEditor.cxx.

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}
str image
Definition MyPlots.py:40

◆ setBackgroundColor

void VP1EventDisplayEditor::setBackgroundColor ( )
privateslot

Definition at line 684 of file VP1EventDisplayEditor.cxx.

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}

◆ setTabsList()

void VP1EventDisplayEditor::setTabsList ( QStringList listNames)

Definition at line 614 of file VP1EventDisplayEditor.cxx.

615{
616 VP1Msg::messageVerbose("VP1EventDisplayEditor::setTabsList()");
617
618 m_d->ui.comboBox_tabNumber->addItems(listNames);
619
620}

◆ setTextLabel

void VP1EventDisplayEditor::setTextLabel ( )
privateslot

Definition at line 473 of file VP1EventDisplayEditor.cxx.

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}
void addTextLabel(QString text, QFont font)

Member Data Documentation

◆ m_allTabs

QList<IVP1ChannelWidget*> VP1EventDisplayEditor::m_allTabs
private

Definition at line 81 of file VP1EventDisplayEditor.h.

◆ m_d

Imp* VP1EventDisplayEditor::m_d
private

Definition at line 72 of file VP1EventDisplayEditor.h.

◆ m_eventNumber

unsigned long long VP1EventDisplayEditor::m_eventNumber
private

Definition at line 86 of file VP1EventDisplayEditor.h.

◆ m_eventTimestamp

unsigned VP1EventDisplayEditor::m_eventTimestamp
private

Definition at line 87 of file VP1EventDisplayEditor.h.

◆ m_listTabNames

QStringList VP1EventDisplayEditor::m_listTabNames
private

Definition at line 80 of file VP1EventDisplayEditor.h.

◆ m_mainWindow

VP1MainWindow* VP1EventDisplayEditor::m_mainWindow
private

Definition at line 83 of file VP1EventDisplayEditor.h.

◆ m_preview

VP1EventDisplaySceneView* VP1EventDisplayEditor::m_preview
private

Definition at line 78 of file VP1EventDisplayEditor.h.

◆ m_runNumber

int VP1EventDisplayEditor::m_runNumber
private

Definition at line 85 of file VP1EventDisplayEditor.h.

◆ m_scene

QGraphicsScene* VP1EventDisplayEditor::m_scene
private

Definition at line 73 of file VP1EventDisplayEditor.h.

◆ m_sceneItems

QList< QGraphicsItem* > VP1EventDisplayEditor::m_sceneItems
private

Definition at line 75 of file VP1EventDisplayEditor.h.


The documentation for this class was generated from the following files: