/*========================================================================= Program: ParaView Module: pqParaViewMenuBuilders.cxx 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.2. See License_v1.2.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 "pqParaViewMenuBuilders.h" #include "vtkPVConfig.h" #include "ui_pqFileMenuBuilder.h" #include "ui_pqEditMenuBuilder.h" #include "ui_pqPipelineBrowserContextMenu.h" #include "pqAboutDialogReaction.h" #include "pqAnimationTimeToolbar.h" #include "pqApplicationCore.h" #include "pqApplicationSettingsReaction.h" #include "pqAxesToolbar.h" #include "pqCameraLinkReaction.h" #include "pqCameraToolbar.h" #include "pqCameraUndoRedoReaction.h" #include "pqCatalystConnectReaction.h" #include "pqCatalystContinueReaction.h" #include "pqCatalystPauseSimulationReaction.h" #include "pqCatalystRemoveBreakpointReaction.h" #include "pqCatalystSetBreakpointReaction.h" #include "pqCategoryToolbarsBehavior.h" #include "pqChangePipelineInputReaction.h" #include "pqColorToolbar.h" #include "pqCopyReaction.h" #include "pqCreateCustomFilterReaction.h" #include "pqDataQueryReaction.h" #include "pqDeleteReaction.h" #include "pqDesktopServicesReaction.h" #include "pqExportReaction.h" #include "pqFiltersMenuReaction.h" #include "pqHelpReaction.h" #include "pqIgnoreSourceTimeReaction.h" #include "pqLinkSelectionReaction.h" #include "pqLoadDataReaction.h" #include "pqLoadRestoreWindowLayoutReaction.h" #include "pqLoadStateReaction.h" #include "pqMainControlsToolbar.h" #include "pqManageCustomFiltersReaction.h" #include "pqManageLinksReaction.h" #include "pqManagePluginsReaction.h" #include "pqPVApplicationCore.h" #include "pqProxyGroupMenuManager.h" #include "pqPythonShellReaction.h" #include "pqRecentFilesMenu.h" #include "pqRepresentationToolbar.h" #include "pqSaveAnimationGeometryReaction.h" #include "pqSaveAnimationReaction.h" #include "pqSaveDataReaction.h" #include "pqSaveScreenshotReaction.h" #include "pqSaveStateReaction.h" #include "pqServerConnectReaction.h" #include "pqServerDisconnectReaction.h" #include "pqSetName.h" #include "pqSourcesMenuReaction.h" #include "pqTestingReaction.h" #include "pqTimerLogReaction.h" #include "pqUndoRedoReaction.h" #include "pqVCRToolbar.h" #include "pqViewMenuManager.h" #ifdef PARAVIEW_ENABLE_PYTHON #include "pqMacroReaction.h" #include "pqPythonManager.h" #include "pqTraceReaction.h" #endif #include #include #include #include #include //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildFileMenu(QMenu& menu) { QString objectName = menu.objectName(); Ui::pqFileMenuBuilder ui; ui.setupUi(&menu); // since the UI file tends to change the name of the menu. menu.setObjectName(objectName); QObject::connect(ui.actionFileExit, SIGNAL(triggered()), pqApplicationCore::instance(), SLOT(quit())); // now setup reactions. new pqLoadDataReaction(ui.actionFileOpen); new pqRecentFilesMenu(*ui.menuRecentFiles, ui.menuRecentFiles); new pqLoadStateReaction(ui.actionFileLoadServerState); new pqSaveStateReaction(ui.actionFileSaveServerState); new pqServerConnectReaction(ui.actionServerConnect); new pqServerDisconnectReaction(ui.actionServerDisconnect); new pqSaveScreenshotReaction(ui.actionFileSaveScreenshot); new pqSaveAnimationReaction(ui.actionFileSaveAnimation); new pqSaveAnimationGeometryReaction(ui.actionFileSaveGeometry); new pqExportReaction(ui.actionExport); new pqSaveDataReaction(ui.actionFileSaveData); new pqLoadRestoreWindowLayoutReaction(true, ui.actionFileLoadWindowLayout); new pqLoadRestoreWindowLayoutReaction(false, ui.actionFileSaveWindowLayout); } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildEditMenu(QMenu& menu) { QString objectName = menu.objectName(); Ui::pqEditMenuBuilder ui; ui.setupUi(&menu); // since the UI file tends to change the name of the menu. menu.setObjectName(objectName); new pqUndoRedoReaction(ui.actionEditUndo, true); new pqUndoRedoReaction(ui.actionEditRedo, false); new pqCameraUndoRedoReaction(ui.actionEditCameraUndo, true); new pqCameraUndoRedoReaction(ui.actionEditCameraRedo, false); new pqChangePipelineInputReaction(ui.actionChangeInput); new pqIgnoreSourceTimeReaction(ui.actionIgnoreTime); new pqDeleteReaction(ui.actionDelete); new pqDeleteReaction(ui.actionDelete_All, true); new pqCopyReaction(ui.actionCopy); new pqCopyReaction(ui.actionPaste, true); new pqApplicationSettingsReaction(ui.actionEditSettings); new pqDataQueryReaction(ui.actionQuery); } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildSourcesMenu(QMenu& menu, QMainWindow* mainWindow) { pqProxyGroupMenuManager* mgr = new pqProxyGroupMenuManager(&menu, "ParaViewSources"); mgr->addProxyDefinitionUpdateListener("sources"); new pqSourcesMenuReaction(mgr); pqPVApplicationCore::instance()->registerForQuicklaunch(mgr->widgetActionsHolder()); if (mainWindow) { // create toolbars for categories as needed. new pqCategoryToolbarsBehavior(mgr, mainWindow); } } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildFiltersMenu(QMenu& menu, QMainWindow* mainWindow) { pqProxyGroupMenuManager* mgr = new pqProxyGroupMenuManager(&menu, "ParaViewFilters"); mgr->addProxyDefinitionUpdateListener("filters"); mgr->setRecentlyUsedMenuSize(10); pqFiltersMenuReaction *menuReaction = new pqFiltersMenuReaction(mgr); pqPVApplicationCore *appCore = pqPVApplicationCore::instance(); appCore->registerForQuicklaunch(mgr->widgetActionsHolder()); // Connect the filters menu about to show and the quick-launch dialog about to show // to update the enabled/disabled state of the menu items via the // pqFiltersMenuReaction QObject::connect(&menu, SIGNAL(aboutToShow()),menuReaction,SLOT(updateEnableState())); QObject::connect(appCore,SIGNAL(aboutToShowQuickLaunch()),menuReaction,SLOT(updateEnableState())); if (mainWindow) { // create toolbars for categories as needed. new pqCategoryToolbarsBehavior(mgr, mainWindow); } } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildToolsMenu(QMenu& menu) { new pqCreateCustomFilterReaction(menu.addAction("Create Custom Filter...") << pqSetName("actionToolsCreateCustomFilter")); new pqCameraLinkReaction(menu.addAction("Add Camera Link...") << pqSetName("actionToolsAddCameraLink")); new pqLinkSelectionReaction(menu.addAction("Link with Selection") << pqSetName("actionToolsLinkSelection")); menu.addSeparator(); new pqManageCustomFiltersReaction(menu.addAction("Manage Custom Filters...") << pqSetName("actionToolsManageCustomFilters")); new pqManageLinksReaction(menu.addAction("Manage Links...") << pqSetName("actionToolsManageLinks")); // // Add support for importing plugins only if ParaView was built shared. new pqManagePluginsReaction(menu.addAction("Manage Plugins...") << pqSetName("actionManage_Plugins")); menu.addSeparator(); // -------------------------------------------------- // new pqTestingReaction(menu.addAction("Record Test...") << pqSetName("actionToolsRecordTest"), pqTestingReaction::RECORD); new pqTestingReaction(menu.addAction("Play Test...") << pqSetName("actionToolsPlayTest"), pqTestingReaction::PLAYBACK,Qt::QueuedConnection); new pqTestingReaction(menu.addAction("Lock View Size") << pqSetName("actionTesting_Window_Size"), pqTestingReaction::LOCK_VIEW_SIZE); new pqTestingReaction(menu.addAction("Lock View Size Custom...") << pqSetName("actionTesting_Window_Size_Custom"), pqTestingReaction::LOCK_VIEW_SIZE_CUSTOM); menu.addSeparator(); new pqTimerLogReaction(menu.addAction("Timer Log") << pqSetName("actionToolsTimerLog")); QAction* action = menu.addAction("&Output Window") << pqSetName("actionToolsOutputWindow"); QObject::connect(action, SIGNAL(triggered()), pqApplicationCore::instance(), SLOT(showOutputWindow())); menu.addSeparator(); // -------------------------------------------------- new pqPythonShellReaction(menu.addAction("Python Shell") << pqSetName("actionToolsPythonShell")); #ifdef PARAVIEW_ENABLE_PYTHON menu.addSeparator(); // -------------------------------------------------- new pqTraceReaction(menu.addAction("Start Trace") << pqSetName("actionToolsStartStopTrace"), "Start Trace", "Stop Trace"); #endif } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildViewMenu(QMenu& menu, QMainWindow& mainWindow) { new pqViewMenuManager(&mainWindow, &menu); } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildPipelineBrowserContextMenu(QWidget& widget) { QString objectName = widget.objectName(); Ui::pqPipelineBrowserContextMenu ui; ui.setupUi(&widget); // since the UI file tends to change the name of the menu. widget.setObjectName(objectName); widget.setContextMenuPolicy(Qt::ActionsContextMenu); QByteArray signalName=QMetaObject::normalizedSignature("deleteKey()"); if (widget.metaObject()->indexOfSignal(signalName) != -1) { // Trigger a delete when the user requests a delete. QObject::connect(&widget, SIGNAL(deleteKey()), ui.actionPBDelete, SLOT(trigger()), Qt::QueuedConnection); } // And here the reactions come in handy! Just reuse the reaction used for // File | Open. new pqLoadDataReaction(ui.actionPBOpen); new pqChangePipelineInputReaction(ui.actionPBChangeInput); new pqLinkSelectionReaction(ui.actionPBLinkSelection); new pqCreateCustomFilterReaction(ui.actionPBCreateCustomFilter); new pqIgnoreSourceTimeReaction(ui.actionPBIgnoreTime); new pqDeleteReaction(ui.actionPBDelete); new pqCopyReaction(ui.actionPBCopy); new pqCopyReaction(ui.actionPBPaste, true); } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildMacrosMenu #ifdef PARAVIEW_ENABLE_PYTHON (QMenu& menu) #else (QMenu& ) #endif { #ifdef PARAVIEW_ENABLE_PYTHON // Give the macros menu to the pqPythonMacroSupervisor pqPythonManager* manager = pqPVApplicationCore::instance()->pythonManager(); if (manager) { new pqMacroReaction(menu.addAction("Add new macro...") << pqSetName("actionMacroCreate")); QMenu *editMenu = menu.addMenu("Edit..."); QMenu *deleteMenu = menu.addMenu("Delete..."); menu.addSeparator(); manager->addWidgetForRunMacros(&menu); manager->addWidgetForEditMacros(editMenu); manager->addWidgetForDeleteMacros(deleteMenu); } #endif } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildHelpMenu(QMenu& menu) { #if defined (_WIN32) QString filePath = QCoreApplication::applicationDirPath() + "/../doc/ParaViewGuide-CE.pdf"; #elif defined(__APPLE__) QString filePath = QCoreApplication::applicationDirPath() + "/../../../doc/ParaViewGuide-CE.pdf"; #else QString filePath = QCoreApplication::applicationDirPath() + "/../../doc/ParaViewGuide-CE.pdf"; #endif new pqDesktopServicesReaction( QUrl::fromLocalFile(filePath), (menu.addAction(QIcon(":/pqWidgets/Icons/pdf.png"), "ParaView Guide") << pqSetName("actionGuide"))); QAction * help = menu.addAction("Help") << pqSetName("actionHelp"); help->setShortcut(QKeySequence::HelpContents); new pqHelpReaction(help); menu.addSeparator(); new pqDesktopServicesReaction( QUrl("http://www.paraview.org/tutorials/"), (menu.addAction("Online Tutorials") << pqSetName("actionTutorials"))); new pqDesktopServicesReaction( QUrl("http://www.kitware.com/blog/home/browse/topic/13"), (menu.addAction("Online Blogs") << pqSetName("actionBlogs"))); menu.addSeparator(); new pqAboutDialogReaction( menu.addAction("About...") << pqSetName("actionAbout")); } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildToolbars(QMainWindow& mainWindow) { QToolBar* mainToolBar = new pqMainControlsToolbar(&mainWindow) << pqSetName("MainControlsToolbar"); mainToolBar->layout()->setSpacing(0); mainWindow.addToolBar(Qt::TopToolBarArea, mainToolBar); QToolBar* vcrToolbar = new pqVCRToolbar(&mainWindow) << pqSetName("VCRToolbar"); vcrToolbar->layout()->setSpacing(0); mainWindow.addToolBar(Qt::TopToolBarArea, vcrToolbar); QToolBar* timeToolbar = new pqAnimationTimeToolbar(&mainWindow) << pqSetName("currentTimeToolbar"); timeToolbar->layout()->setSpacing(0); mainWindow.addToolBar(Qt::TopToolBarArea, timeToolbar); QToolBar* colorToolbar = new pqColorToolbar(&mainWindow) << pqSetName("variableToolbar"); colorToolbar->layout()->setSpacing(0); mainWindow.addToolBar(Qt::TopToolBarArea, colorToolbar); mainWindow.insertToolBarBreak(colorToolbar); QToolBar* reprToolbar = new pqRepresentationToolbar(&mainWindow) << pqSetName("representationToolbar"); reprToolbar->layout()->setSpacing(0); mainWindow.addToolBar(Qt::TopToolBarArea, reprToolbar); QToolBar* cameraToolbar = new pqCameraToolbar(&mainWindow) << pqSetName("cameraToolbar"); cameraToolbar->layout()->setSpacing(0); mainWindow.addToolBar(Qt::TopToolBarArea, cameraToolbar); QToolBar* axesToolbar = new pqAxesToolbar(&mainWindow) << pqSetName("axesToolbar"); axesToolbar->layout()->setSpacing(0); mainWindow.addToolBar(Qt::TopToolBarArea, axesToolbar); #ifdef PARAVIEW_ENABLE_PYTHON // Give the macros menu to the pqPythonMacroSupervisor pqPythonManager* manager = qobject_cast( pqApplicationCore::instance()->manager("PYTHON_MANAGER")); if (manager) { QToolBar* macrosToolbar = new QToolBar("Macros Toolbars", &mainWindow) << pqSetName("MacrosToolbar"); manager->addWidgetForRunMacros(macrosToolbar); mainWindow.addToolBar(Qt::TopToolBarArea, macrosToolbar); } #endif } //----------------------------------------------------------------------------- void pqParaViewMenuBuilders::buildCatalystMenu(QMenu& menu) { new pqCatalystConnectReaction(menu.addAction("Connect...") << pqSetName("actionCatalystConnect")); new pqCatalystPauseSimulationReaction( menu.addAction("Pause Simulation") << pqSetName("actionCatalystPauseSimulation")); new pqCatalystContinueReaction( menu.addAction("Continue") << pqSetName("actionCatalystContinue")); new pqCatalystSetBreakpointReaction( menu.addAction("Set Breakpoint") << pqSetName("actionCatalystSetBreakpoint")); new pqCatalystRemoveBreakpointReaction( menu.addAction("Remove Breakpoint") << pqSetName("actionCatalystRemoveBreakpoint")); }