#include #include "VMainWindow.h" #include "VFileManager.h" #include "VView.h" #include "VScene.h" #include "VRichScene.h" #include "VTrackingScene.h" #include "VRichPropertiesWidget.h" #include "VTrackingPropertiesWidget.h" #include "VTracking3DView.h" VMainWindow::VMainWindow() { createMainTabBar(); createActions(); createMenus(); createToolBars(); createStatusBar(); createPropertiesDockWidget(); fCurEventNum = 0; } void VMainWindow::about() { QMessageBox::about(this, tr("About Event Display"), tr("The Event Display for the CBM experiment")); } void VMainWindow::closeEvent( QCloseEvent *event) { } void VMainWindow::createActions() { fExitAct = new QAction(tr("E&xit"), this); //fExitAct->setShortcut(tr("Ctrl+Q")); fExitAct->setStatusTip(tr("Exit the application")); connect(fExitAct, SIGNAL(triggered()), this, SLOT(close())); fNextEventAct = new QAction(QIcon(":/images/next.png"), tr("&Next"), this); //fNextEventAct->setShortcut(tr("Ctrl+X")); fNextEventAct->setStatusTip(tr("Go to the next event")); connect(fNextEventAct, SIGNAL(triggered()), this, SLOT(nextEvent())); fPreviousEventAct = new QAction(QIcon(":/images/prev.png"), tr("&Prev"), this); //fPreviousEventAct->setShortcut(tr("Ctrl+C")); fPreviousEventAct->setStatusTip(tr("Go to the previous event")); connect(fPreviousEventAct, SIGNAL(triggered()), this, SLOT(previousEvent())); fAboutAct = new QAction(tr("&About"), this); fAboutAct->setStatusTip(tr("Show the application's About box")); connect(fAboutAct, SIGNAL(triggered()), this, SLOT(about())); fAboutQtAct = new QAction(tr("About &Qt"), this); fAboutQtAct->setStatusTip(tr("Show the Qt library's About box")); connect(fAboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); fOpenFileAct = new QAction(QIcon(":/images/open.png"), tr("Open File"), this); fOpenFileAct->setStatusTip(tr("Open File")); connect(fOpenFileAct, SIGNAL(triggered()), this, SLOT(openFile())); fSaveSnapshotToFileAct= new QAction(QIcon(":/images/saveas.png"), tr("Save Snapshot To Image File"), this); fSaveSnapshotToFileAct->setStatusTip(tr("Save Snapshot To Image File")); connect(fSaveSnapshotToFileAct, SIGNAL(triggered()), this, SLOT(saveSnapshotToFile())); ; } void VMainWindow::createMenus() { fFileMenu = menuBar()->addMenu(tr("&File")); fFileMenu->addAction(fOpenFileAct); fFileMenu->addSeparator(); fFileMenu->addAction(fSaveSnapshotToFileAct); fFileMenu->addSeparator(); fFileMenu->addAction(fExitAct); fNavigationMenu = menuBar()->addMenu(tr("&Navigation")); fNavigationMenu->addAction(fNextEventAct); fNavigationMenu->addAction(fPreviousEventAct); fHelpMenu = menuBar()->addMenu(tr("&Help")); fHelpMenu->addAction(fAboutAct); fHelpMenu->addAction(fAboutQtAct); } void VMainWindow::createToolBars() { fFileToolBar = addToolBar(tr("File")); fFileToolBar->addAction(fOpenFileAct); fFileToolBar->addSeparator(); fFileToolBar->addAction(fSaveSnapshotToFileAct); // fFileToolBar->addAction(fExitAct); fNavigationToolBar = addToolBar(tr("Navigation")); fNavigationToolBar->addAction(fPreviousEventAct); fNavigationToolBar->addAction(fNextEventAct); fEventLineEdit = new QLineEdit(tr("0")); fEventLineEdit->setFixedWidth(40); fEventLineEdit->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); fEventLineEdit->setAlignment(Qt::AlignRight); fNofEventsLabel = new QLabel("/0"); fNavigationToolBar->addWidget(fEventLineEdit); fNavigationToolBar->addWidget(fNofEventsLabel); connect(fEventLineEdit, SIGNAL(editingFinished()), this, SLOT(changeEventNum())); fFileNamesToolBar = addToolBar(tr("File names")); fOpenFilesLabel = new QLabel("Opened files:"); fFileListLabel = new QLabel(""); fFileNamesToolBar->addWidget(fOpenFilesLabel); fFileNamesToolBar->addWidget(fFileListLabel); } void VMainWindow::createStatusBar() { statusBar()->showMessage(tr("Ready")); } void VMainWindow::createMainTabBar() { fMainTabWidget = new QTabWidget; setCentralWidget(fMainTabWidget); fRichScene = new VRichScene(); fRichViewWidget = new VView(); fRichViewWidget->setScene(fRichScene); fTrackingScene = new VTrackingScene(); fTrackingViewWidget = new VView(); fTrackingViewWidget->setScene(fTrackingScene); fTracking3DView = new VTracking3DView(fTrackingScene, this); fMainTabWidget->addTab(fRichViewWidget, "RICH" ); fMainTabWidget->addTab(fTrackingViewWidget, "Tracking"); fMainTabWidget->addTab(fTracking3DView, "Tracking 3D"); connect(fMainTabWidget, SIGNAL(currentChanged (int)), this, SLOT(changeMainTab(int))); } void VMainWindow::createPropertiesDockWidget() { fRichPropertiesDockWidget = new QDockWidget(tr("RICH Properties")); VRichPropertiesWidget* richPropWidget = new VRichPropertiesWidget(fRichScene); fRichPropertiesDockWidget->setWidget(richPropWidget); addDockWidget(Qt::LeftDockWidgetArea,fRichPropertiesDockWidget); fTrackingPropertiesDockWidget = new QDockWidget(tr("Tracking Properties")); VTrackingPropertiesWidget* trackingPropWidget = new VTrackingPropertiesWidget(fTrackingScene); fTrackingPropertiesDockWidget->setWidget(trackingPropWidget); addDockWidget(Qt::LeftDockWidgetArea,fTrackingPropertiesDockWidget); changeMainTab(0); } void VMainWindow::nextEvent() { int nofEvents = VFileManager::instance()->getNofEvents(); if (fCurEventNum < nofEvents) fCurEventNum++; processEvent(fCurEventNum); } void VMainWindow::previousEvent() { if (fCurEventNum > 0) fCurEventNum--; processEvent(fCurEventNum); } void VMainWindow::openFile() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open file"), ".root", tr("Root files (*.root)")); if (!fileName.isEmpty()) { VFileManager *fm = VFileManager::instance(); fm->addFile(fileName); processEvent(0); setFileNamesLabel(); } } void VMainWindow::processEvent( int event) { fCurEventNum = event; if (fMainTabWidget->currentIndex() == 0) { // Draw RICH scene fRichScene->LoadData(); fRichScene->ProcessEvent(event); } else if (fMainTabWidget->currentIndex() == 1) { // Draw tracking scene fTrackingScene->LoadData(); fTrackingScene->ProcessEvent(event); fTrackingScene->DrawQt(); } else if (fMainTabWidget->currentIndex() == 2) { // Draw tracking 3D fTrackingScene->LoadData(); fTrackingScene->ProcessEvent(event); fTracking3DView->updateGL(); } fEventLineEdit->setText(QString("%1").arg(fCurEventNum)); } void VMainWindow::changeEventNum() { QString text = fEventLineEdit->text(); int event = text.toInt(); if (event >= 0 && event < VFileManager::instance()->getNofEvents()) { processEvent(event); } } void VMainWindow::saveSnapshotToFile() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), "untitled", tr("Images (*.png)")); if (fileName.isEmpty()) return; qDebug() << fileName; if ( !fileName.contains(".png", Qt::CaseInsensitive) ) fileName += ".png"; qDebug() << fileName; QPixmap pix = QPixmap::grabWidget(this); pix.save(fileName, "PNG"); } void VMainWindow::changeMainTab( int index) { if (index == 0) { fRichPropertiesDockWidget->setVisible(true); fTrackingPropertiesDockWidget->setVisible(false); } else if (index == 1) { fRichPropertiesDockWidget->setVisible(false); fTrackingPropertiesDockWidget->setVisible(true); } else if (index == 2) { fRichPropertiesDockWidget->setVisible(false); fTrackingPropertiesDockWidget->setVisible(true); } } void VMainWindow::setFileNamesLabel() { VFileManager* fm = VFileManager::instance(); QString text(""); for (int i = 0; i < fm->getNofFiles(); i++) { text += fm->getFileName(i); if (i != fm->getNofFiles() - 1) text += "\n"; } fFileListLabel->setText(text); }