www.pudn.com > ParaView3.rar > MainWindow.cxx
/*========================================================================= Program: ParaView Module: $RCS $ Copyright (c) 2005,2006 Sandia Corporation, Kitware Inc. All rights reserved. ParaView is a free software; you can redistribute it and/or modify it under the terms of the ParaView license version 1.1. See License_v1.1.txt for the full ParaView license. A copy of this license can be obtained by contacting Kitware Inc. 28 Corporate Drive Clifton Park, NY 12065 USA THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =========================================================================*/ #include#include "AboutDialog.h" #include "MainWindow.h" #include "ui_MainWindow.h" #include #include #include //#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ////////////////////////////////////////////////////////////////////////////// // MainWindow::pqImplementation class MainWindow::pqImplementation { public: pqImplementation(QWidget* parent) : AssistantClient(0), Core(parent), RecentFilesMenu(0), ViewMenu(0), ToolbarsMenu(0) { } ~pqImplementation() { delete this->ViewMenu; delete this->ToolbarsMenu; if(this->AssistantClient) { this->AssistantClient->closeAssistant(); delete this->AssistantClient; } } QPointer AssistantClient; Ui::MainWindow UI; pqMainWindowCore Core; pqRecentFilesMenu* RecentFilesMenu; pqViewMenu* ViewMenu; pqViewMenu* ToolbarsMenu; QLineEdit* CurrentTimeWidget; QSpinBox* CurrentTimeIndexWidget; QPointer ActiveServer; }; ////////////////////////////////////////////////////////////////////////////// // MainWindow MainWindow::MainWindow() : Implementation(new pqImplementation(this)) { this->Implementation->UI.setupUi(this); this->insertToolBarBreak(this->Implementation->UI.variableToolbar); this->insertToolBarBreak(this->Implementation->UI.commonFilters); this->setIconSize(QSize(24, 24)); this->Implementation->RecentFilesMenu = new pqRecentFilesMenu(*this->Implementation->UI.menuRecentFiles, this); QObject::connect(this->Implementation->RecentFilesMenu, SIGNAL(serverConnectFailed()), &this->Implementation->Core, SLOT(makeDefaultConnectionIfNoneExists())); this->Implementation->ViewMenu = new pqViewMenu(*this->Implementation->UI.menuView, this); this->Implementation->ToolbarsMenu = new pqViewMenu(*this->Implementation->UI.menuToolbars); this->setWindowTitle( QString("Kitware ParaView %1").arg(PARAVIEW_VERSION_FULL)); // Setup menus and toolbars ... connect(this->Implementation->UI.actionFileOpen, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onFileOpen())); connect( &this->Implementation->Core, SIGNAL(enableFileOpen(bool)), this->Implementation->UI.actionFileOpen, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionFileLoadServerState, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onFileLoadServerState())); connect( &this->Implementation->Core, SIGNAL(enableFileLoadServerState(bool)), this->Implementation->UI.actionFileLoadServerState, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionFileSaveServerState, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onFileSaveServerState())); connect( &this->Implementation->Core, SIGNAL(enableFileSaveServerState(bool)), this->Implementation->UI.actionFileSaveServerState, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionFileSaveData, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onFileSaveData())); connect( &this->Implementation->Core, SIGNAL(enableFileSaveData(bool)), this->Implementation->UI.actionFileSaveData, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionFileSaveScreenshot, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onFileSaveScreenshot())); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionFileSaveScreenshot, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionFileSaveAnimation, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onFileSaveAnimation())); connect( &this->Implementation->Core, SIGNAL(enableFileSaveAnimation(bool)), this->Implementation->UI.actionFileSaveAnimation, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionFileSaveGeometry, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onSaveGeometry())); connect(&this->Implementation->Core, SIGNAL(enableFileSaveGeometry(bool)), this->Implementation->UI.actionFileSaveGeometry, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionFileExit, SIGNAL(triggered()), pqApplicationCore::instance(), SLOT(quit())); pqUndoStack* undoStack = this->Implementation->Core.getApplicationUndoStack(); connect(this->Implementation->UI.actionEditUndo, SIGNAL(triggered()), undoStack, SLOT(undo())); connect(undoStack, SIGNAL(canUndoChanged(bool)), this->Implementation->UI.actionEditUndo, SLOT(setEnabled(bool))); connect(undoStack, SIGNAL(undoLabelChanged(const QString&)), this, SLOT(onUndoLabel(const QString&))); connect(this->Implementation->UI.actionEditSettings, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onEditSettings())); connect(this->Implementation->UI.actionEditRedo, SIGNAL(triggered()), undoStack, SLOT(redo())); connect(undoStack, SIGNAL(canRedoChanged(bool)), this->Implementation->UI.actionEditRedo, SLOT(setEnabled(bool))); connect(undoStack, SIGNAL(redoLabelChanged(const QString&)), this, SLOT(onRedoLabel(const QString&))); connect(this->Implementation->UI.actionEditCameraUndo, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onEditCameraUndo())); connect(&this->Implementation->Core, SIGNAL(enableCameraUndo(bool)), this->Implementation->UI.actionEditCameraUndo, SLOT(setEnabled(bool))); connect(&this->Implementation->Core, SIGNAL(cameraUndoLabel(const QString&)), this, SLOT(onCameraUndoLabel(const QString&))); connect(this->Implementation->UI.actionEditCameraRedo, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onEditCameraRedo())); connect(&this->Implementation->Core, SIGNAL(enableCameraRedo(bool)), this->Implementation->UI.actionEditCameraRedo, SLOT(setEnabled(bool))); connect(&this->Implementation->Core, SIGNAL(cameraRedoLabel(const QString&)), this, SLOT(onCameraRedoLabel(const QString&))); connect(this->Implementation->UI.actionServerConnect, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onServerConnect())); connect( &this->Implementation->Core, SIGNAL(enableServerConnect(bool)), this->Implementation->UI.actionServerConnect, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionServerDisconnect, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onServerDisconnect())); connect( &this->Implementation->Core, SIGNAL(enableServerDisconnect(bool)), this->Implementation->UI.actionServerDisconnect, SLOT(setEnabled(bool))); this->Implementation->Core.setSourceMenu( this->Implementation->UI.menuSources); connect( &this->Implementation->Core, SIGNAL(enableSourceCreate(bool)), this->Implementation->UI.menuSources, SLOT(setEnabled(bool))); this->Implementation->Core.setFilterMenu( this->Implementation->UI.menuFilters); connect( &this->Implementation->Core, SIGNAL(enableFilterCreate(bool)), this->Implementation->UI.menuFilters, SLOT(setEnabled(bool))); //this->Implementation->Core.pipelineMenu().setMenuAction( //pqPipelineMenu::AddSourceAction, this->Implementation->UI.actionAddSource); //this->Implementation->Core.pipelineMenu().setMenuAction( //pqPipelineMenu::AddFilterAction, this->Implementation->UI.actionAddFilter); this->Implementation->Core.pipelineMenu().setMenuAction( pqPipelineMenu::ChangeInputAction, this->Implementation->UI.actionChangeInput); this->Implementation->Core.pipelineMenu().setMenuAction( pqPipelineMenu::DeleteAction, this->Implementation->UI.actionDelete); connect(this->Implementation->UI.actionDelete_All, SIGNAL(triggered()), this, SLOT(onDeleteAll())); connect(this->Implementation->UI.actionToolsCreateLookmark, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsCreateLookmark())); connect(this->Implementation->UI.actionToolsCreateCustomFilter, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsCreateCustomFilter())); connect(this->Implementation->UI.actionToolsManageCustomFilters, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsManageCustomFilters())); connect(this->Implementation->UI.actionToolsManageLinks, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsManageLinks())); connect(this->Implementation->UI.actionToolsAddCameraLink, SIGNAL(triggered()), this, SLOT(onAddCameraLink())); connect(this->Implementation->UI.actionToolsDumpWidgetNames, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsDumpWidgetNames())); connect(this->Implementation->UI.actionToolsRecordTest, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsRecordTest())); connect(this->Implementation->UI.actionToolsRecordTestScreenshot, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsRecordTestScreenshot())); connect(this->Implementation->UI.actionToolsPlayTest, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsPlayTest())); connect(this->Implementation->UI.actionToolsTimerLog, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsTimerLog())); connect(this->Implementation->UI.actionToolsOutputWindow, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsOutputWindow())); connect(this->Implementation->UI.actionToolsPythonShell, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onToolsPythonShell())); connect(this->Implementation->UI.actionHelpAbout, SIGNAL(triggered()), this, SLOT(onHelpAbout())); connect(this->Implementation->UI.actionHelpHelp, SIGNAL(triggered()), this, SLOT(onHelpHelp())); connect(this->Implementation->UI.actionHelpEnableTooltips, SIGNAL(triggered(bool)), &this->Implementation->Core, SLOT(onHelpEnableTooltips(bool))); this->Implementation->Core.onHelpEnableTooltips( this->Implementation->UI.actionHelpEnableTooltips->isChecked()); connect(this->Implementation->UI.actionVCRPlay, SIGNAL(triggered()), &this->Implementation->Core.VCRController(), SLOT(onPlay())); connect(this->Implementation->UI.actionVCRPause, SIGNAL(triggered()), &this->Implementation->Core.VCRController(), SLOT(onPause())); connect(this->Implementation->UI.actionVCRFirstFrame, SIGNAL(triggered()), &this->Implementation->Core.VCRController(), SLOT(onFirstFrame())); connect(this->Implementation->UI.actionVCRPreviousFrame, SIGNAL(triggered()), &this->Implementation->Core.VCRController(), SLOT(onPreviousFrame())); connect(this->Implementation->UI.actionVCRNextFrame, SIGNAL(triggered()), &this->Implementation->Core.VCRController(), SLOT(onNextFrame())); connect(this->Implementation->UI.actionVCRLastFrame, SIGNAL(triggered()), &this->Implementation->Core.VCRController(), SLOT(onLastFrame())); connect(this->Implementation->UI.actionVCRLoop, SIGNAL(toggled(bool)), &this->Implementation->Core.VCRController(), SLOT(onLoop(bool))); pqVCRController* vcrcontroller = &this->Implementation->Core.VCRController(); connect(vcrcontroller, SIGNAL(enabled(bool)), this->Implementation->UI.actionVCRPlay, SLOT(setEnabled(bool))); connect(vcrcontroller, SIGNAL(enabled(bool)), this->Implementation->UI.actionVCRFirstFrame, SLOT(setEnabled(bool))); connect(vcrcontroller, SIGNAL(enabled(bool)), this->Implementation->UI.actionVCRPreviousFrame, SLOT(setEnabled(bool))); connect(vcrcontroller, SIGNAL(enabled(bool)), this->Implementation->UI.actionVCRNextFrame, SLOT(setEnabled(bool))); connect(vcrcontroller, SIGNAL(enabled(bool)), this->Implementation->UI.actionVCRLastFrame, SLOT(setEnabled(bool))); connect(vcrcontroller, SIGNAL(enabled(bool)), this->Implementation->UI.actionVCRLoop, SLOT(setEnabled(bool))); connect(vcrcontroller, SIGNAL(timeRanges(double, double)), this, SLOT(setTimeRanges(double, double))); connect(vcrcontroller, SIGNAL(loop(bool)), this->Implementation->UI.actionVCRLoop, SLOT(setChecked(bool))); connect(vcrcontroller, SIGNAL(playing(bool)), this, SLOT(onPlaying(bool))); connect(vcrcontroller, SIGNAL(playing(bool)), this->Implementation->UI.actionVCRPause, SLOT(setEnabled(bool))); this->Implementation->UI.actionVCRPause->setVisible(false); connect(this->Implementation->UI.actionMoveMode, SIGNAL(triggered()), &this->Implementation->Core.selectionManager(), SLOT(switchToInteraction())); connect(this->Implementation->UI.actionSelectionMode, SIGNAL(triggered()), &this->Implementation->Core.selectionManager(), SLOT(switchToSelection())); // Create Selection Shortcut. QShortcut *s=new QShortcut(QKeySequence(tr("S")),&this->Implementation->Core.multiViewManager()); QObject::connect( s, SIGNAL(activated()), this, SLOT(onSelectionShortcut())); connect(&this->Implementation->Core.selectionManager(), SIGNAL(selectionMarked()), this, SLOT(onSelectionShortcutFinished())); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionResetCamera, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionPositiveX, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionNegativeX, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionPositiveY, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionNegativeY, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionPositiveZ, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableFileSaveScreenshot(bool)), this->Implementation->UI.actionNegativeZ, SLOT(setEnabled(bool))); connect( this->Implementation->UI.actionResetCamera, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetCamera())); connect( this->Implementation->UI.actionPositiveX, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetViewDirectionPosX())); connect( this->Implementation->UI.actionNegativeX, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetViewDirectionNegX())); connect( this->Implementation->UI.actionPositiveY, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetViewDirectionPosY())); connect( this->Implementation->UI.actionNegativeY, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetViewDirectionNegY())); connect( this->Implementation->UI.actionPositiveZ, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetViewDirectionPosZ())); connect( this->Implementation->UI.actionNegativeZ, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetViewDirectionNegZ())); // Setup the 'modes' so that they are exclusively selected QActionGroup *modeGroup = new QActionGroup(this); modeGroup->addAction(this->Implementation->UI.actionMoveMode); modeGroup->addAction(this->Implementation->UI.actionSelectionMode); this->Implementation->Core.setupVariableToolbar( this->Implementation->UI.variableToolbar); connect( &this->Implementation->Core, SIGNAL(enableVariableToolbar(bool)), this->Implementation->UI.variableToolbar, SLOT(setEnabled(bool))); this->Implementation->Core.setupRepresentationToolbar( this->Implementation->UI.representationToolbar); connect( &this->Implementation->Core, SIGNAL(enableVariableToolbar(bool)), this->Implementation->UI.representationToolbar, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableSelectionToolbar(bool)), this->Implementation->UI.selectionToolbar, SLOT(setEnabled(bool))); connect( &this->Implementation->Core, SIGNAL(enableSelectionToolbar(bool)), this->Implementation->UI.actionSelectionMode, SLOT(setEnabled(bool))); this->Implementation->Core.setupCommonFiltersToolbar( this->Implementation->UI.commonFilters); this->Implementation->Core.setupLookmarkToolbar( this->Implementation->UI.lookmarkToolbar); // Setup dockable windows ... this->Implementation->Core.setupPipelineBrowser( this->Implementation->UI.pipelineBrowserDock); pqPipelineBrowser *browser = this->Implementation->Core.pipelineBrowser(); this->Implementation->Core.pipelineMenu().setModels(browser->getModel(), browser->getSelectionModel()); //connect(this->Implementation->UI.actionAddSource, SIGNAL(triggered()), //browser, SLOT(addSource())); //connect(this->Implementation->UI.actionAddFilter, SIGNAL(triggered()), //browser, SLOT(addFilter())); connect(this->Implementation->UI.actionChangeInput, SIGNAL(triggered()), browser, SLOT(changeInput())); connect(this->Implementation->UI.actionDelete, SIGNAL(triggered()), browser, SLOT(deleteSelected())); pqPipelineBrowserContextMenu *browserMenu = new pqPipelineBrowserContextMenu(browser); browserMenu->setMenuAction(this->Implementation->UI.actionFileOpen); //browserMenu->setMenuAction(this->Implementation->UI.actionAddSource); //browserMenu->setMenuAction(this->Implementation->UI.actionAddFilter); browserMenu->setMenuAction(this->Implementation->UI.actionChangeInput); browserMenu->setMenuAction(this->Implementation->UI.actionDelete); browserMenu->setMenuAction(this->Implementation->UI.actionToolsCreateCustomFilter); pqProxyTabWidget* const proxyTab = this->Implementation->Core.setupProxyTabWidget( this->Implementation->UI.objectInspectorDock); QObject::connect( proxyTab->getObjectInspector(), SIGNAL(preaccept()), this, SLOT(onPreAccept())); QObject::connect( proxyTab->getObjectInspector(), SIGNAL(postaccept()), this, SLOT(onPostAccept())); QObject::connect( this->Implementation->UI.actionTesting_Window_Size, SIGNAL(toggled(bool)), &this->Implementation->Core, SLOT(enableTestingRenderWindowSize(bool))); this->Implementation->Core.setupStatisticsView( this->Implementation->UI.statisticsViewDock); this->Implementation->Core.setupElementInspector( this->Implementation->UI.elementInspectorDock); this->Implementation->Core.setupLookmarkBrowser( this->Implementation->UI.lookmarkBrowserDock); this->Implementation->Core.setupLookmarkInspector( this->Implementation->UI.lookmarkInspectorDock); pqAnimationPanel* animation_panel = this->Implementation->Core.setupAnimationPanel( this->Implementation->UI.animationPanelDock); animation_panel->setCurrentTimeToolbar( this->Implementation->UI.currentTimeToolbar); // Setup the view menu ... this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.variableToolbar, this->Implementation->UI.variableToolbar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.cameraToolbar, this->Implementation->UI.cameraToolbar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.commonFilters, this->Implementation->UI.commonFilters->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.currentTimeToolbar, this->Implementation->UI.currentTimeToolbar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.lookmarkToolbar, this->Implementation->UI.lookmarkToolbar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.mainToolBar, this->Implementation->UI.mainToolBar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.representationToolbar, this->Implementation->UI.representationToolbar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.selectionToolbar, this->Implementation->UI.selectionToolbar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.undoRedoToolbar, this->Implementation->UI.undoRedoToolbar->windowTitle()); this->Implementation->ToolbarsMenu->addWidget( this->Implementation->UI.VCRToolbar, this->Implementation->UI.VCRToolbar->windowTitle()); //this->Implementation->ToolbarsMenu->addWidget( // this->Implementation->UI.customFilterToolbar, // this->Implementation->UI.customFilterToolbar->windowTitle()); this->Implementation->ViewMenu->addWidget( this->Implementation->UI.animationPanelDock, this->Implementation->UI.animationPanelDock->windowTitle()); this->Implementation->ViewMenu->addWidget( this->Implementation->UI.elementInspectorDock, this->Implementation->UI.elementInspectorDock->windowTitle()); this->Implementation->ViewMenu->addWidget( this->Implementation->UI.lookmarkBrowserDock, this->Implementation->UI.lookmarkBrowserDock->windowTitle()); this->Implementation->ViewMenu->addWidget( this->Implementation->UI.lookmarkInspectorDock, this->Implementation->UI.lookmarkInspectorDock->windowTitle()); this->Implementation->ViewMenu->addWidget( this->Implementation->UI.objectInspectorDock, this->Implementation->UI.objectInspectorDock->windowTitle()); this->Implementation->ViewMenu->addWidget( this->Implementation->UI.pipelineBrowserDock, this->Implementation->UI.pipelineBrowserDock->windowTitle()); this->Implementation->ViewMenu->addWidget( this->Implementation->UI.statisticsViewDock, this->Implementation->UI.statisticsViewDock->windowTitle()); // Setup the multiview render window ... this->setCentralWidget(&this->Implementation->Core.multiViewManager()); // Setup the statusbar ... this->Implementation->Core.setupProgressBar(this->statusBar()); // Set up the dock window corners to give the vertical docks more room. this->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); this->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); // Setup the default dock configuration ... this->Implementation->UI.elementInspectorDock->hide(); this->Implementation->UI.lookmarkBrowserDock->hide(); this->Implementation->UI.lookmarkInspectorDock->hide(); this->Implementation->UI.statisticsViewDock->hide(); this->Implementation->UI.animationPanelDock->hide(); // Fix the toolbar layouts from designer. this->Implementation->UI.mainToolBar->layout()->setSpacing(0); this->Implementation->UI.selectionToolbar->layout()->setSpacing(0); this->Implementation->UI.variableToolbar->layout()->setSpacing(0); this->Implementation->UI.representationToolbar->layout()->setSpacing(0); //this->Implementation->UI.customFilterToolbar->layout()->setSpacing(0); this->Implementation->UI.lookmarkToolbar->layout()->setSpacing(0); this->Implementation->UI.undoRedoToolbar->layout()->setSpacing(0); this->Implementation->UI.VCRToolbar->layout()->setSpacing(0); this->Implementation->UI.cameraToolbar->layout()->setSpacing(0); // Now that we're ready, initialize everything ... this->Implementation->Core.initializeStates(); this->Implementation->UI.actionEditUndo->setEnabled( undoStack->canUndo()); this->Implementation->UI.actionEditRedo->setEnabled( undoStack->canRedo()); this->onUndoLabel(undoStack->undoLabel()); this->onRedoLabel(undoStack->redoLabel()); // Set up scalar bar visibility tool bar item. pqScalarBarVisibilityAdaptor* sbva = new pqScalarBarVisibilityAdaptor( this->Implementation->UI.actionScalarBarVisibility); QObject::connect(this->Implementation->Core.getObjectInspectorDriver(), SIGNAL(displayChanged(pqConsumerDisplay *, pqGenericViewModule *)), sbva, SLOT(setActiveDisplay(pqConsumerDisplay *, pqGenericViewModule *))); // Set up Center Axes toolbar. QObject::connect( this->Implementation->UI.actionResetCenter, SIGNAL(triggered()), &this->Implementation->Core, SLOT(resetCenterOfRotationToCenterOfCurrentData())); QObject::connect( this->Implementation->UI.actionShowCenterAxes, SIGNAL(toggled(bool)), &this->Implementation->Core, SLOT(setCenterAxesVisibility(bool))); QObject::connect( &this->Implementation->Core, SIGNAL(enableShowCenterAxis(bool)), this, SLOT(onShowCenterAxisChanged(bool)), Qt::QueuedConnection); QObject::connect( &this->Implementation->Core, SIGNAL(enableResetCenter(bool)), this->Implementation->UI.actionResetCenter, SLOT(setEnabled(bool))); connect(this->Implementation->UI.actionManage_Plugins, SIGNAL(triggered()), &this->Implementation->Core, SLOT(onManagePlugins())); // Restore the state of the window ... pqApplicationCore::instance()->settings()->restoreState("MainWindow", *this); } MainWindow::~MainWindow() { this->Implementation->Core.removePluginToolBars(); // Save the state of the window ... pqApplicationCore::instance()->settings()->saveState(*this, "MainWindow"); delete this->Implementation; } //----------------------------------------------------------------------------- void MainWindow::onShowCenterAxisChanged(bool enabled) { this->Implementation->UI.actionShowCenterAxes->setEnabled(enabled); this->Implementation->UI.actionShowCenterAxes->blockSignals(true); pqRenderViewModule* renView = qobject_cast ( pqActiveView::instance().current()); this->Implementation->UI.actionShowCenterAxes->setChecked( renView ? renView->getCenterAxesVisibility() : false); this->Implementation->UI.actionShowCenterAxes->blockSignals(false); } //----------------------------------------------------------------------------- bool MainWindow::compareView(const QString& ReferenceImage, double Threshold, ostream& Output, const QString& TempDirectory) { return this->Implementation->Core.compareView( ReferenceImage, Threshold, Output, TempDirectory); } //----------------------------------------------------------------------------- void MainWindow::onUndoLabel(const QString& label) { this->Implementation->UI.actionEditUndo->setText( label.isEmpty() ? tr("Can't Undo") : QString(tr("&Undo %1")).arg(label)); this->Implementation->UI.actionEditUndo->setStatusTip( label.isEmpty() ? tr("Can't Undo") : QString(tr("Undo %1")).arg(label)); } //----------------------------------------------------------------------------- void MainWindow::onRedoLabel(const QString& label) { this->Implementation->UI.actionEditRedo->setText( label.isEmpty() ? tr("Can't Redo") : QString(tr("&Redo %1")).arg(label)); this->Implementation->UI.actionEditRedo->setStatusTip( label.isEmpty() ? tr("Can't Redo") : QString(tr("Redo %1")).arg(label)); } //----------------------------------------------------------------------------- void MainWindow::onCameraUndoLabel(const QString& label) { this->Implementation->UI.actionEditCameraUndo->setText( label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("U&ndo %1")).arg(label)); this->Implementation->UI.actionEditCameraUndo->setStatusTip( label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("Undo %1")).arg(label)); } //----------------------------------------------------------------------------- void MainWindow::onCameraRedoLabel(const QString& label) { this->Implementation->UI.actionEditCameraRedo->setText( label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("R&edo %1")).arg(label)); this->Implementation->UI.actionEditCameraRedo->setStatusTip( label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("Redo %1")).arg(label)); } //----------------------------------------------------------------------------- void MainWindow::onPreAccept() { this->setEnabled(false); this->statusBar()->showMessage(tr("Updating...")); } //----------------------------------------------------------------------------- void MainWindow::onPostAccept() { this->setEnabled(true); this->statusBar()->showMessage(tr("Ready"), 2000); } //----------------------------------------------------------------------------- void MainWindow::onHelpAbout() { AboutDialog* const dialog = new AboutDialog(this); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->show(); } //----------------------------------------------------------------------------- void MainWindow::onHelpHelp() { if(this->Implementation->AssistantClient) { if(!this->Implementation->AssistantClient->isOpen()) { this->Implementation->AssistantClient->openAssistant(); } return; } QString assistantExe; QString profileFile; const char* assistantName = "assistant"; #if defined(Q_WS_WIN) const char* binDir = "\\"; const char* binDir1 = "\\..\\"; #elif defined(Q_WS_MAC) const char* binDir = "/"; const char* binDir1 = "/../../../"; #else const char* binDir = "/"; const char* binDir1 = "/"; #endif QString helper = QCoreApplication::applicationDirPath() + binDir + QString("pqClientDocFinder.txt"); if(!QFile::exists(helper)) { helper = QCoreApplication::applicationDirPath() + binDir1 + QString("pqClientDocFinder.txt"); } if(QFile::exists(helper)) { QFile file(helper); if(file.open(QIODevice::ReadOnly)) { assistantExe = file.readLine().trimmed() + assistantName; profileFile = file.readLine().trimmed(); } } if(assistantExe.isEmpty()) { QString assistant = QCoreApplication::applicationDirPath(); assistant += QDir::separator(); assistant += assistantName; assistantExe = assistant; } this->Implementation->AssistantClient = new QAssistantClient(assistantExe, this); QObject::connect(this->Implementation->AssistantClient, SIGNAL(error(const QString&)), this, SLOT(assistantError(const QString&))); QStringList args; args.append(QString("-profile")); if(profileFile.isEmpty()) { // see if help is bundled up with the application QString profile = QCoreApplication::applicationDirPath() + QDir::separator() + QString("pqClient.adp"); if(QFile::exists(profile)) { profileFile = profile; } } if(profileFile.isEmpty() && getenv("PARAVIEW_HELP")) { // not bundled, ask for help args.append(getenv("PARAVIEW_HELP")); } else if(profileFile.isEmpty()) { // no help, error out QMessageBox::critical( this, "Help error", "Couldn't find" " pqClient.adp.\nTry setting the PARAVIEW_HELP environment variable which" " points to that file"); delete this->Implementation->AssistantClient; return; } args.append(profileFile); this->Implementation->AssistantClient->setArguments(args); this->Implementation->AssistantClient->openAssistant(); } //----------------------------------------------------------------------------- void MainWindow::assistantError(const QString& error) { qCritical(error.toAscii().data()); } //----------------------------------------------------------------------------- void MainWindow::onSelectionShortcut() { if (!this->Implementation->UI.selectionToolbar->isEnabled()) { return; } if(this->Implementation->UI.actionSelectionMode->isVisible()) { this->Implementation->UI.actionSelectionMode->trigger(); } else { this->Implementation->UI.actionSelectionMode->setChecked(true); this->Implementation->Core.selectionManager().switchToSelection(); } } //----------------------------------------------------------------------------- void MainWindow::onSelectionShortcutFinished() { // At end of each selection, we want to switch back to the normal interaction mode. if(this->Implementation->UI.actionMoveMode->isVisible()) { this->Implementation->UI.actionMoveMode->trigger(); } else { this->Implementation->UI.actionMoveMode->setChecked(true); this->Implementation->Core.selectionManager().switchToInteraction(); } } //----------------------------------------------------------------------------- QVariant MainWindow::findToolBarActionsNotInMenus() { QStringList missingInActions; // get all QActions on toolbars QList toolBars = this->findChildren (); QList toolBarActions; foreach(QToolBar* tb, toolBars) { toolBarActions += tb->actions(); } // get all QActions on menus (recursively) QList menuActions = this->menuBar()->actions(); for(int i = 0; i < menuActions.size();) { QAction* a = menuActions[i]; if(a->menu()) { menuActions += a->menu()->actions(); menuActions.removeAt(i); } else { i++; } } // sort actions qSort(toolBarActions.begin(), toolBarActions.end()); qSort(menuActions.begin(), menuActions.end()); // make sure all toolbar icons are in the menu QList ::iterator iter = menuActions.begin(); foreach(QAction* a, toolBarActions) { QList ::iterator newiter; newiter = qBinaryFind(iter, menuActions.end(), a); if(newiter == menuActions.end()) { missingInActions.append(pqObjectNaming::GetName(*a)); } else { iter = newiter; } } return missingInActions.join(", "); } //----------------------------------------------------------------------------- void MainWindow::onPlaying(bool playing) { this->Implementation->UI.actionVCRPlay->setVisible(!playing); this->Implementation->UI.actionVCRPause->setVisible(playing); } //----------------------------------------------------------------------------- void MainWindow::onAddCameraLink() { pqGenericViewModule* vm = pqActiveView::instance().current(); pqRenderViewModule* rm = qobject_cast (vm); if(rm) { rm->linkToOtherView(); } else { QMessageBox::information(this, "Add Camera Link", "No render module is active"); } } //----------------------------------------------------------------------------- void MainWindow::onDeleteAll() { pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder(); this->Implementation->Core.getApplicationUndoStack()-> beginUndoSet("Delete All"); builder->destroySources(); this->Implementation->Core.getApplicationUndoStack()->endUndoSet(); } //----------------------------------------------------------------------------- void MainWindow::setTimeRanges(double start, double end) { this->Implementation->UI.actionVCRFirstFrame->setToolTip( QString("First Frame (%1)").arg(start, 0, 'g')); this->Implementation->UI.actionVCRLastFrame->setToolTip( QString("Last Frame (%1)").arg(end, 0, 'g')); }