From b65e840ed5dc7b1e2c9cbb1d4b93a5ee0900becb Mon Sep 17 00:00:00 2001 From: Utkarsh Ayachit <utkarsh.ayachit@kitware.com> Date: Sun, 22 Nov 2009 14:49:14 -0500 Subject: [PATCH] ENH: ParaView Customization/Branding Commit. This commit makes it possible to make custom clients based on ParaView. There are a host of changes in this commit that restucture the Qt client level classes. For more details refer to the following links: http://www.paraview.org/ParaView3/index.php/ParaView-based_Applications http://www.paraview.org/Wiki/Writing_Custom_Applications --- Applications/CMakeLists.txt | 15 +- Applications/Client/CMakeLists.txt | 540 --- Applications/Client/CompleteBundle.cmake.in | 115 - Applications/Client/CreateBundle.sh.in | 63 - Applications/Client/ParaViewLogo.png | Bin 18008 -> 0 bytes .../Client/Testing/Cxx/CMakeLists.txt | 81 - .../Testing/Cxx/ManualConnectBuiltin.xml.in | 13 - .../Testing/Cxx/ManualConnectCRSDS-rc.xml.in | 30 - .../Testing/Cxx/ManualConnectCRSDS.xml.in | 25 - .../Testing/Cxx/ManualConnectCRSDSRR.xml.in | 33 - .../Testing/Cxx/ManualConnectCS-rc.xml.in | 28 - .../Client/Testing/Cxx/ManualConnectCS.xml.in | 23 - .../Testing/Cxx/ManualConnectCSRR.xml.in | 31 - .../Client/Testing/Python/HistogramChart.py | 25 - .../Client/Testing/Python/OpenHelp.py | 13 - .../Client/Testing/Python/ToolBarAndMenus.py | 27 - .../Client/Testing/XML/CalcParens.xml | 20 - .../Client/Testing/XML/Calculator.xml | 30 - .../Client/Testing/XML/ChartOptions.xml | 39 - Applications/Client/Testing/XML/Clip.xml | 60 - .../Client/Testing/XML/ColorEditor2.xml | 21 - Applications/Client/Testing/XML/Contour.xml | 11 - .../Client/Testing/XML/ContourRange.xml | 23 - .../Testing/XML/CreateAndLoadLookmark.xml | 24 - .../Client/Testing/XML/CustomSourceProbe.xml | 27 - Applications/Client/Testing/XML/CutMulti.xml | 23 - .../Client/Testing/XML/D3SmallCells.xml | 19 - .../Testing/XML/DualSphereAnimation.xml | 14 - .../Client/Testing/XML/ExTimeseries.xml | 20 - .../Client/Testing/XML/ExodusIIPanel.xml | 10 - .../Client/Testing/XML/ExodusModeShapes.xml | 15 - .../Client/Testing/XML/ExodusWriter.xml | 19 - Applications/Client/Testing/XML/ExodusXML.xml | 26 - .../Client/Testing/XML/ExtractBlock.xml | 21 - .../Client/Testing/XML/ExtractLevel.xml | 23 - .../Client/Testing/XML/FFTOverTime.xml | 36 - Applications/Client/Testing/XML/Flow.xml | 27 - Applications/Client/Testing/XML/Flow2.xml | 58 - Applications/Client/Testing/XML/Fractal2D.xml | 20 - .../Client/Testing/XML/GlobalProperties.xml | 68 - .../Client/Testing/XML/ImageShrink.xml | 14 - Applications/Client/Testing/XML/LinePlot.xml | 11 - .../Client/Testing/XML/LoadStateHistogram.xml | 9 - .../Client/Testing/XML/NormalGlyphs.xml | 47 - .../Testing/XML/ObjectInspectorSphere.xml | 79 - Applications/Client/Testing/XML/OpenFile.xml | 7 - .../Client/Testing/XML/OpenSaveData.xml | 13 - .../Client/Testing/XML/Plot3DReader.xml | 13 - Applications/Client/Testing/XML/PlotEdges.xml | 24 - .../Client/Testing/XML/PlotEdges2.xml | 45 - .../Client/Testing/XML/PropertyLink.xml | 8 - .../Testing/XML/PythonProgrammableFilter.xml | 12 - .../Client/Testing/XML/RectilinearFractal.xml | 23 - .../Testing/XML/RepresentationSelector.xml | 23 - .../Client/Testing/XML/SPTimeseries.xml | 26 - Applications/Client/Testing/XML/SaveCSV.xml | 26 - .../Client/Testing/XML/SelectReader.xml | 10 - Applications/Client/Testing/XML/Selection.xml | 35 - .../Client/Testing/XML/SimpleInteraction.xml | 92 - Applications/Client/Testing/XML/Slice.xml | 68 - .../Testing/XML/StreamTracerUpdates.xml | 17 - .../Testing/XML/StructuredVolumeRender.xml | 12 - .../Client/Testing/XML/TemporalShiftScale.xml | 20 - .../Client/Testing/XML/Tessellate.xml | 17 - Applications/Client/Testing/XML/Threshold.xml | 141 - Applications/Client/Testing/XML/UndoRedo.xml | 18 - Applications/Client/Testing/XML/UndoRedo1.xml | 126 - Applications/Client/Testing/XML/UndoRedo2.xml | 161 - Applications/Client/Testing/XML/UndoRedo3.xml | 157 - Applications/Client/Testing/XML/UndoRedo4.xml | 114 - Applications/Client/Testing/XML/UndoRedo5.xml | 165 - Applications/Client/Testing/XML/UndoRedo6.xml | 76 - Applications/Client/Testing/XML/UndoRedo7.xml | 20 - .../Testing/XML/UnstructuredVolumeRender.xml | 18 - .../Client/Testing/XML/XdmfGridAttributes.xml | 33 - Applications/Client/Testing/XML/XdmfRead.xml | 14 - .../Client/Testing/XML/XdmfReadImageData.xml | 20 - .../XML/XdmfReadImageDataCollection.xml | 13 - .../Testing/XML/XdmfReadRectilinearGrid.xml | 11 - .../XML/XdmfReadRectilinearGridCollection.xml | 11 - .../Testing/XML/XdmfReadStructuredGrid.xml | 11 - .../XML/XdmfReadStructuredGridCollection.xml | 11 - Applications/Client/paraq.iss | 106 - Applications/Client/pqClient.rc | 4 - Applications/Client/pvIcon.svg | 83 - Applications/OverView/Core/DisplayPolicy.h | 2 +- Applications/OverView/Core/MainWindow.cxx | 6 +- .../OverView/Core/ProcessModuleGUIHelper.cxx | 6 +- Applications/ParaView/CMakeLists.txt | 58 + .../{Client => ParaView}/MacIcon.icns | Bin Applications/ParaView/PVSplashScreen.png | Bin 0 -> 113654 bytes Applications/ParaView/ParaViewFilters.xml | 163 + Applications/ParaView/ParaViewMainWindow.cxx | 117 + Applications/ParaView/ParaViewMainWindow.h | 59 + Applications/ParaView/ParaViewMainWindow.ui | 204 + Applications/ParaView/ParaViewReaders.xml | 59 + Applications/ParaView/ParaViewSources.xml | 27 + Applications/ParaView/ParaViewWriters.xml | 26 + Applications/ParaView/Testing/CMakeLists.txt | 101 + .../ParaView/Testing/Python/CMakeLists.txt | 38 + .../Python/DisconnectAndSaveAnimation.py | 20 +- .../Testing/Python/FileSeries.py | 10 +- .../Testing/Python/LoadStateMultiView.py | 22 +- .../Testing/Python/ObjectPanelPlugin.py | 4 +- .../Testing/Python/PVBlotTest1.py | 0 .../Testing/Python/SaveAnimationMultiView.py | 22 +- .../Testing/Python/SaveLargeScreenshot.py | 14 +- .../Testing/Python/TestContourWidget.py | 8 +- .../Testing/Python/ToolBarPlugin.py | 0 .../Testing/XML/3DWidgetInCustomFilter.xml | 21 +- .../Testing/XML/AboutDialog.xml | 2 +- .../Testing/XML/AnimatePipelineTime.xml | 17 +- .../ParaView/Testing/XML/CMakeLists.txt | 153 + .../ParaView/Testing/XML/CalcParens.xml | 21 + .../ParaView/Testing/XML/Calculator.xml | 30 + .../Testing/XML/CameraLink.xml | 18 +- Applications/ParaView/Testing/XML/Clip.xml | 57 + .../Testing/XML/ColorEditor1.xml | 14 +- .../ParaView/Testing/XML/ColorEditor2.xml | 21 + .../Testing/XML/ColorEditor3.xml | 32 +- .../Testing/XML/ColorEditor4.xml | 6 +- Applications/ParaView/Testing/XML/Contour.xml | 11 + .../ParaView/Testing/XML/ContourRange.xml | 24 + .../Testing/XML/CustomFilter.xml | 29 +- .../Testing/XML/CustomSourceProbe.xml | 27 + .../ParaView/Testing/XML/D3SmallCells.xml | 19 + .../Testing/XML/DualSphereAnimation.xml | 14 + .../ParaView/Testing/XML/ExTimeseries.xml | 20 + .../Testing/XML/ExTimeseries2.xml | 14 +- .../ParaView/Testing/XML/ExodusIIPanel.xml | 10 + .../ParaView/Testing/XML/ExodusModeShapes.xml | 15 + .../ParaView/Testing/XML/ExodusXML.xml | 26 + .../ParaView/Testing/XML/ExtractBlock.xml | 21 + .../ParaView/Testing/XML/ExtractLevel.xml | 23 + .../ParaView/Testing/XML/FFTOverTime.xml | 36 + Applications/ParaView/Testing/XML/Flow.xml | 27 + Applications/ParaView/Testing/XML/Flow2.xml | 58 + .../ParaView/Testing/XML/Fractal2D.xml | 20 + .../Testing/XML/Fractal3D.xml | 2 +- .../ParaView/Testing/XML/GlobalProperties.xml | 68 + .../ParaView/Testing/XML/LinePlot.xml | 11 + .../Testing/XML/LoadSaveStateAnimation.xml | 10 +- .../Testing/XML/LoadState.xml | 4 +- .../ParaView/Testing/XML/NormalGlyphs.xml | 47 + .../Testing/XML/ObjectInspectorSphere.xml | 79 + .../ParaView/Testing/XML/OpenHelp.xml | 10 + .../ParaView/Testing/XML/OpenSaveData.xml | 13 + .../ParaView/Testing/XML/Plot3DReader.xml | 13 + .../ParaView/Testing/XML/PlotEdges.xml | 24 + .../ParaView/Testing/XML/PlotEdges2.xml | 45 + .../ParaView/Testing/XML/PropertyLink.xml | 8 + .../Testing/XML/ReadXMLPolyDataFileSeries.xml | 4 +- .../Testing/XML/RectilinearFractal.xml | 23 + .../Testing/XML/RepresentationSelector.xml | 23 + .../ParaView/Testing/XML/SPTimeseries.xml | 26 + .../Testing/XML/SaveAnimationGeometry.xml | 14 +- Applications/ParaView/Testing/XML/SaveCSV.xml | 26 + .../Testing/XML/SaveColorMap.xml | 6 +- .../ParaView/Testing/XML/SelectReader.xml | 10 + .../Testing/XML/SimpleInteraction.xml | 92 + Applications/ParaView/Testing/XML/Slice.xml | 68 + .../Testing/XML/StreamTracerUpdates.xml | 17 + .../Testing/XML/TemporalInterpolator.xml | 13 +- .../Testing/XML/TemporalShiftScale.xml | 20 + .../ParaView/Testing/XML/Tessellate.xml | 17 + .../ParaView/Testing/XML/Threshold.xml | 141 + .../ParaView/Testing/XML/UndoRedo.xml | 18 + .../ParaView/Testing/XML/UndoRedo1.xml | 126 + .../ParaView/Testing/XML/UndoRedo2.xml | 161 + .../ParaView/Testing/XML/UndoRedo3.xml | 57 + .../ParaView/Testing/XML/UndoRedo4.xml | 114 + .../ParaView/Testing/XML/UndoRedo5.xml | 58 + .../ParaView/Testing/XML/UndoRedo6.xml | 49 + .../ParaView/Testing/XML/UndoRedo7.xml | 20 + .../Testing/XML/UnstructuredOutline.xml | 8 +- .../Testing/XML/VariableSelector.xml | 6 +- .../Testing/XML/ViewSettingsDialog.xml | 6 +- .../Testing/XML/XdmfGridAttributes.xml | 33 + .../ParaView/Testing/XML/XdmfRead.xml | 14 + .../Testing/XML/XdmfReadImageData.xml | 20 + .../XML/XdmfReadImageDataCollection.xml | 13 + .../Testing/XML/XdmfReadRectilinearGrid.xml | 11 + .../XML/XdmfReadRectilinearGridCollection.xml | 11 + .../Testing/XML/XdmfReadStructuredGrid.xml | 11 + .../XML/XdmfReadStructuredGridCollection.xml | 11 + .../paraqlogo.ico => ParaView/WinIcon.ico} | Bin Applications/StreamingParaView/CMakeLists.txt | 15 +- .../pqCustomDisplayPolicy.cxx | 3 +- .../StreamingParaView/pqExtraResources.qrc.in | 5 - CMake/ParaViewBranding.cmake | 261 ++ CMake/ParaViewMacros.cmake | 63 + CMake/ParaViewPlugins.cmake | 18 +- CMake/branded_paraview_main.cxx.in | 136 + CMake/branded_splash.png | Bin 0 -> 113654 bytes CMakeLists.txt | 28 +- Documentation/CMakeLists.txt | 41 + Documentation/GenerateQHP.cmake | 12 + Documentation/LookmarkBrowser.png | Bin 122145 -> 0 bytes Documentation/LookmarkButton.png | Bin 1092 -> 0 bytes Documentation/LookmarkInspector.png | Bin 421171 -> 0 bytes Documentation/Lookmarks.html | 117 - Documentation/ToolsMenu.html | 8 +- Documentation/ViewMenu.html | 19 - Documentation/Views.html | 1 - Documentation/index.html | 12 - Documentation/paraview.qhp.in | 329 ++ Documentation/pqClient.adp | 220 - Documentation/pqClient.qch | Bin 1474560 -> 0 bytes Documentation/pqClient.qhp | 751 ---- Examples/CMakeLists.txt | 1 + Examples/CustomApplications/CMakeLists.txt | 12 + .../CustomApplications/Clone1/CMakeLists.txt | 43 + .../Clone1/ParaViewFilters.xml | 162 + .../Clone1/ParaViewReaders.xml | 58 + .../Clone1/ParaViewSources.xml | 27 + .../Clone1/ParaViewWriters.xml | 26 + .../Clone1/myMainWindow.cxx | 117 + .../CustomApplications/Clone1/myMainWindow.h | 59 + .../CustomApplications/Clone1/myMainWindow.ui | 204 + .../CustomApplications/Clone2/CMakeLists.txt | 43 + .../Clone2/ParaViewFilters.xml | 162 + .../Clone2/ParaViewReaders.xml | 58 + .../Clone2/ParaViewSources.xml | 27 + .../Clone2/ParaViewWriters.xml | 26 + .../Clone2/myMainWindow.cxx | 158 + .../CustomApplications/Clone2/myMainWindow.h | 59 + .../CustomApplications/Clone2/myMainWindow.ui | 125 + .../CustomApplications/Demo0/CMakeLists.txt | 9 + .../CustomApplications/Demo0/DemoApp0.cxx | 12 + .../CustomApplications/Demo1/CMakeLists.txt | 24 + .../CustomApplications/Demo1/DemoApp1.cxx | 12 + .../CustomApplications/Demo1/myMainWindow.cxx | 73 + .../CustomApplications/Demo1/myMainWindow.h | 53 + .../CustomApplications/Demo1/myMainWindow.ui | 23 + .../ParticlesViewer/CMakeLists.txt | 48 + .../ParticlesViewerDisplayPolicy.cxx | 47 +- .../ParticlesViewerDisplayPolicy.h | 53 + .../ParticlesViewerMainWindow.ui | 121 + .../ParticlesViewerStarter.cxx | 80 + .../ParticlesViewer/ParticlesViewerStarter.h | 55 + .../ParticlesViewer/README.txt | 20 + .../ParticlesViewer/SupportedReader.xml | 5 + .../Spreadsheet/CMakeLists.txt | 35 + .../CustomApplications/Spreadsheet/README.txt | 14 + .../Spreadsheet/SpreadSheetMainWindow.cxx | 113 + .../Spreadsheet/SpreadSheetMainWindow.h | 54 + .../Spreadsheet/SpreadSheetMainWindow.ui | 69 + .../Spreadsheet/SupportedReader.xml | 5 + Examples/Plugins/CMakeLists.txt | 11 +- Examples/Plugins/DockWidget/CMakeLists.txt | 16 + .../Plugins/DockWidget/ExampleDockPanel.cxx | 11 + .../Plugins/DockWidget/ExampleDockPanel.h | 16 + .../Plugins/DockWidget/ExampleDockPanel.ui | 51 + ParaViewConfig.cmake.in | 13 +- Qt/ApplicationComponents/CMakeLists.txt | 302 ++ .../Resources/UI/pqAxesToolbar.ui | 103 + .../Resources/UI/pqCameraToolbar.ui | 181 + .../Resources/UI/pqColorToolbar.ui | 76 + .../Resources/UI/pqDefaultMainWindow.ui | 75 + .../Resources/UI/pqEditMenuBuilder.ui | 148 + .../Resources/UI/pqFileMenuBuilder.ui | 133 + .../Resources/UI/pqMainControlsToolbar.ui | 106 + .../UI/pqPipelineBrowserContextMenu.ui | 79 + .../Resources/UI/pqSelectionToolbar.ui | 179 + .../Resources/UI/pqVCRToolbar.ui | 109 + .../Resources/pqApplicationComponents.qrc | 4 + .../pqAboutDialogReaction.cxx | 50 + .../pqAboutDialogReaction.h | 62 + .../pqAlwaysConnectedBehavior.cxx | 84 + .../pqAlwaysConnectedBehavior.h | 70 + .../pqAnimationTimeToolbar.cxx | 47 + .../pqAnimationTimeToolbar.h | 64 + .../pqApplicationComponentsExport.h.in | 51 + .../pqApplicationSettingsReaction.cxx | 65 + .../pqApplicationSettingsReaction.h | 68 + .../pqAutoLoadPluginXMLBehavior.cxx | 92 + .../pqAutoLoadPluginXMLBehavior.h | 66 + Qt/ApplicationComponents/pqAxesToolbar.cxx | 190 + Qt/ApplicationComponents/pqAxesToolbar.h | 78 + .../pqCameraLinkReaction.cxx | 69 + .../pqCameraLinkReaction.h | 63 + Qt/ApplicationComponents/pqCameraReaction.cxx | 159 + Qt/ApplicationComponents/pqCameraReaction.h | 85 + Qt/ApplicationComponents/pqCameraToolbar.cxx | 79 + Qt/ApplicationComponents/pqCameraToolbar.h | 75 + .../pqCameraUndoRedoReaction.cxx | 123 + .../pqCameraUndoRedoReaction.h | 77 + .../pqCategoryToolbarsBehavior.cxx | 80 + .../pqCategoryToolbarsBehavior.h | 72 + .../pqChangePipelineInputReaction.cxx | 141 + .../pqChangePipelineInputReaction.h | 65 + Qt/ApplicationComponents/pqColorToolbar.cxx | 62 + Qt/ApplicationComponents/pqColorToolbar.h | 64 + .../pqCommandLineOptionsBehavior.cxx | 207 + .../pqCommandLineOptionsBehavior.h | 63 + .../pqCrashRecoveryBehavior.cxx | 107 + .../pqCrashRecoveryBehavior.h | 64 + .../pqCreateCustomFilterReaction.cxx | 110 + .../pqCreateCustomFilterReaction.h | 66 + .../pqDataTimeStepBehavior.cxx | 87 + .../pqDataTimeStepBehavior.h | 60 + .../pqDefaultMainWindow.cxx | 55 + .../pqDefaultMainWindow.h | 55 + .../pqDefaultViewBehavior.cxx | 112 + .../pqDefaultViewBehavior.h | 62 + Qt/ApplicationComponents/pqDeleteBehavior.cxx | 119 + Qt/ApplicationComponents/pqDeleteBehavior.h | 63 + Qt/ApplicationComponents/pqDeleteReaction.cxx | 176 + Qt/ApplicationComponents/pqDeleteReaction.h | 78 + .../pqEditCameraReaction.cxx | 107 + .../pqEditCameraReaction.h | 67 + .../pqEditColorMapReaction.cxx | 117 + .../pqEditColorMapReaction.h | 67 + .../ApplicationComponents/pqEditMenu.cxx | 50 +- Qt/ApplicationComponents/pqEditMenu.h | 65 + Qt/ApplicationComponents/pqExportReaction.cxx | 86 + Qt/ApplicationComponents/pqExportReaction.h | 71 + .../pqFiltersMenuReaction.cxx | 296 ++ .../pqFiltersMenuReaction.h | 77 + Qt/ApplicationComponents/pqHelpReaction.cxx | 107 + Qt/ApplicationComponents/pqHelpReaction.h | 65 + .../pqIgnoreSourceTimeReaction.cxx | 139 + .../pqIgnoreSourceTimeReaction.h | 75 + .../pqListNewProxyDefinitionsBehavior.cxx | 173 + .../pqListNewProxyDefinitionsBehavior.h | 84 + .../pqLoadDataReaction.cxx | 178 + Qt/ApplicationComponents/pqLoadDataReaction.h | 84 + .../pqLoadStateReaction.cxx | 110 + .../pqLoadStateReaction.h | 69 + .../pqMainControlsToolbar.cxx | 57 + .../pqMainControlsToolbar.h | 67 + .../pqManageCustomFiltersReaction.cxx | 65 + .../pqManageCustomFiltersReaction.h | 64 + .../pqManageLinksReaction.cxx | 47 + .../pqManageLinksReaction.h | 60 + .../pqManagePluginsReaction.cxx | 46 + .../pqManagePluginsReaction.h | 60 + .../pqPVAnimationWidget.cxx | 47 + .../pqPVAnimationWidget.h | 53 + .../pqPVApplicationCore.cxx | 143 + .../pqPVApplicationCore.h | 103 + .../pqPVNewSourceBehavior.cxx | 97 + .../pqPVNewSourceBehavior.h | 65 + .../pqParaViewBehaviors.cxx | 90 + .../pqParaViewBehaviors.h | 63 + .../pqParaViewMenuBuilders.cxx | 337 ++ .../pqParaViewMenuBuilders.h | 88 + .../pqPersistentMainWindowStateBehavior.cxx | 87 + .../pqPersistentMainWindowStateBehavior.h | 66 + .../pqPluginActionGroupBehavior.cxx | 127 + .../pqPluginActionGroupBehavior.h | 60 + .../pqPluginDockWidgetsBehavior.cxx | 90 + .../pqPluginDockWidgetsBehavior.h | 60 + .../pqPluginPathBehavior.cxx | 45 + .../pqPluginPathBehavior.h | 68 + .../pqProxyGroupMenuManager.cxx | 504 +++ .../pqProxyGroupMenuManager.h | 130 + .../pqPythonShellReaction.cxx | 70 + .../pqPythonShellReaction.h | 63 + Qt/ApplicationComponents/pqReaction.cxx | 48 + Qt/ApplicationComponents/pqReaction.h | 73 + .../pqRepresentationToolbar.cxx | 50 + .../pqRepresentationToolbar.h | 64 + .../pqResetScalarRangeReaction.cxx | 73 + .../pqResetScalarRangeReaction.h | 67 + .../pqSaveAnimationGeometryReaction.cxx | 119 + .../pqSaveAnimationGeometryReaction.h | 70 + .../pqSaveAnimationReaction.cxx | 72 + .../pqSaveAnimationReaction.h | 67 + .../pqSaveDataReaction.cxx | 180 + Qt/ApplicationComponents/pqSaveDataReaction.h | 72 + .../pqSaveScreenshotReaction.cxx | 186 + .../pqSaveScreenshotReaction.h | 72 + .../pqSaveStateReaction.cxx | 91 + .../pqSaveStateReaction.h | 70 + .../pqScalarBarVisibilityReaction.cxx | 137 + .../pqScalarBarVisibilityReaction.h | 73 + .../pqSelectionInspectorWidget.cxx | 43 + .../pqSelectionInspectorWidget.h | 55 + .../pqSelectionToolbar.cxx | 168 + Qt/ApplicationComponents/pqSelectionToolbar.h | 78 + .../pqServerConnectReaction.cxx | 106 + .../pqServerConnectReaction.h | 65 + .../pqServerDisconnectReaction.cxx | 84 + .../pqServerDisconnectReaction.h | 64 + .../pqSourcesMenuReaction.cxx | 83 + .../pqSourcesMenuReaction.h | 69 + .../pqStandardViewFrameActionGroup.cxx | 105 + .../pqStandardViewFrameActionGroup.h | 57 + Qt/ApplicationComponents/pqStatusBar.cxx | 71 + Qt/ApplicationComponents/pqStatusBar.h | 56 + .../pqTestingReaction.cxx | 117 + Qt/ApplicationComponents/pqTestingReaction.h | 94 + .../pqTimerLogReaction.cxx | 46 + Qt/ApplicationComponents/pqTimerLogReaction.h | 61 + .../pqUndoRedoBehavior.cxx | 99 + Qt/ApplicationComponents/pqUndoRedoBehavior.h | 53 + .../pqUndoRedoReaction.cxx | 128 + Qt/ApplicationComponents/pqUndoRedoReaction.h | 83 + Qt/ApplicationComponents/pqVCRToolbar.cxx | 130 + .../pqVCRToolbar.h} | 74 +- .../pqViewFrameActionsBehavior.cxx | 57 + .../pqViewFrameActionsBehavior.h | 77 + .../pqViewMenuManager.cxx | 129 + Qt/ApplicationComponents/pqViewMenuManager.h | 61 + .../pqViewSettingsManager.cxx | 96 + .../pqViewSettingsManager.h | 58 + .../pqViewSettingsReaction.cxx | 98 + .../pqViewSettingsReaction.h | 80 + Qt/CMakeLists.txt | 1 + Qt/Components/CMakeLists.txt | 93 +- .../Resources/Icons/pqLookmark16.png | Bin 818 -> 0 bytes .../Resources/Icons/pqLookmarkThumbnail.png | Bin 2393 -> 0 bytes .../Resources/UI/pqClientAboutDialog.ui | 72 +- .../Resources/UI/pqClientMainWindow.ui | 1425 ------ .../Resources/UI/pqLookmarkBrowser.ui | 138 - .../UI/pqLookmarkDefinitionWizard.ui | 300 -- .../Resources/UI/pqLookmarkInspector.ui | 350 -- .../Resources/XML/ParaViewFilters.xml | 164 - .../Resources/XML/ParaViewReaders.xml | 233 - .../Resources/XML/ParaViewSources.xml | 27 - .../Resources/XML/ParaViewWriters.xml | 77 - Qt/Components/Resources/XML/Placeholder.xml | 5 + Qt/Components/Resources/pqComponents.qrc | 2 - Qt/Components/pqActiveChartOptions.cxx | 12 - Qt/Components/pqActiveObjects.cxx | 208 + Qt/Components/pqActiveObjects.h | 115 + Qt/Components/pqActiveViewOptionsManager.cxx | 25 +- Qt/Components/pqActiveViewOptionsManager.h | 3 +- Qt/Components/pqAnimationManager.cxx | 36 +- Qt/Components/pqAnimationManager.h | 40 +- Qt/Components/pqAnimationViewWidget.h | 4 +- Qt/Components/pqApplicationOptionsDialog.cxx | 37 +- Qt/Components/pqApplicationOptionsDialog.h | 14 +- Qt/Components/pqClientAboutDialog.cxx | 12 +- Qt/Components/pqClientAboutDialog.h | 2 +- Qt/Components/pqClientMainWindow.cxx | 1236 ----- Qt/Components/pqClientMainWindow.h | 119 - .../pqClientProcessModuleGUIHelper.cxx | 98 - .../pqClientProcessModuleGUIHelper.h | 90 - Qt/Components/pqColorScaleToolbar.cxx | 11 +- Qt/Components/pqColorScaleToolbar.h | 4 +- Qt/Components/pqComponentsTestUtility.cxx | 87 + Qt/Components/pqComponentsTestUtility.h | 58 + Qt/Components/pqDataInformationModel.cxx | 2 +- Qt/Components/pqDisplayColorWidget.cxx | 17 +- Qt/Components/pqDisplayColorWidget.h | 9 - Qt/Components/pqDisplayProxyEditor.cxx | 14 +- Qt/Components/pqDisplayProxyEditorWidget.h | 10 +- .../pqDisplayRepresentationWidget.cxx | 14 +- Qt/Components/pqDisplayRepresentationWidget.h | 7 - Qt/Components/pqExtraResources.qrc.in | 5 - Qt/Components/pqFilterInputDialog.cxx | 3 - Qt/Components/pqFilterInputDialog.h | 2 - Qt/Components/pqLookmarkBrowser.cxx | 211 - Qt/Components/pqLookmarkBrowser.h | 126 - Qt/Components/pqLookmarkBrowserModel.cxx | 271 -- Qt/Components/pqLookmarkBrowserModel.h | 179 - Qt/Components/pqLookmarkDefinitionWizard.cxx | 425 -- Qt/Components/pqLookmarkDefinitionWizard.h | 135 - Qt/Components/pqLookmarkInspector.cxx | 295 -- Qt/Components/pqLookmarkInspector.h | 105 - Qt/Components/pqLookmarkManagerModel.cxx | 390 -- Qt/Components/pqLookmarkManagerModel.h | 144 - Qt/Components/pqLookmarkModel.cxx | 350 -- Qt/Components/pqLookmarkModel.h | 169 - Qt/Components/pqLookmarkSourceDialog.cxx | 255 -- Qt/Components/pqLookmarkSourceDialog.h | 93 - Qt/Components/pqLookmarkStateLoader.cxx | 628 --- Qt/Components/pqLookmarkStateLoader.h | 132 - Qt/Components/pqMainWindowCore.cxx | 3987 ----------------- Qt/Components/pqMainWindowCore.h | 513 --- Qt/Components/pqMultiView.cxx | 2 +- Qt/Components/pqObjectInspectorDriver.cxx | 187 - Qt/Components/pqObjectInspectorDriver.h | 156 - Qt/Components/pqObjectInspectorWidget.cxx | 121 +- Qt/Components/pqObjectInspectorWidget.h | 12 + Qt/Components/pqObjectPanel.cxx | 7 +- Qt/Components/pqOptionsDialog.cxx | 3 + Qt/Components/pqPipelineBrowser.cxx | 37 +- Qt/Components/pqPipelineBrowser.h | 13 +- .../pqPipelineBrowserStateManager.cxx | 267 -- Qt/Components/pqPipelineBrowserWidget.cxx | 246 + Qt/Components/pqPipelineBrowserWidget.h | 84 + Qt/Components/pqProxyInformationWidget.cxx | 2 +- Qt/Components/pqProxyMenuManager.h | 1 + Qt/Components/pqProxyTabWidget.cxx | 81 +- Qt/Components/pqProxyTabWidget.h | 34 +- Qt/Components/pqSelectReaderDialog.cxx | 39 +- Qt/Components/pqSelectReaderDialog.h | 7 +- Qt/Components/pqSelectionInspectorPanel.cxx | 4 +- Qt/Components/pqSelectionManager.cxx | 9 +- .../pqSignalAdaptorCompositeTreeWidget.cxx | 7 +- Qt/Components/pqSourceHistoryModel.cxx | 234 - Qt/Components/pqSourceHistoryModel.h | 178 - Qt/Components/pqSourceInfoFilterModel.cxx | 524 --- Qt/Components/pqSourceInfoFilterModel.h | 235 - Qt/Components/pqSourceInfoGroupMap.cxx | 506 --- Qt/Components/pqSourceInfoGroupMap.h | 94 - Qt/Components/pqSourceInfoIcons.cxx | 106 - Qt/Components/pqSourceInfoIcons.h | 110 - Qt/Components/pqSourceInfoModel.cxx | 628 --- Qt/Components/pqSourceInfoModel.h | 191 - Qt/Components/pqSourceProxyInfo.cxx | 397 -- Qt/Components/pqSourceProxyInfo.h | 134 - Qt/Components/pqSpreadSheetViewDecorator.cxx | 1 - Qt/Components/pqStateLoader.cxx | 298 -- Qt/Components/pqStateLoader.h | 90 - Qt/Components/pqVCRController.cxx | 23 +- Qt/Components/pqViewManager.cxx | 277 +- Qt/Components/pqViewManager.h | 64 +- Qt/Core/CMakeLists.txt | 29 +- Qt/Core/Resources/pqTestingServers.pvsc.in | 19 + Qt/Core/Testing/BasicApp.cxx | 176 +- Qt/Core/Testing/BasicApp.h | 20 + Qt/Core/Testing/CMakeLists.txt | 9 +- Qt/Core/Testing/pqFileDialogTest.cxx | 62 +- Qt/Core/Testing/pqFileDialogTest.h | 9 +- Qt/Core/pqApplicationCore.cxx | 557 ++- Qt/Core/pqApplicationCore.h | 249 +- Qt/Core/pqBrandPluginsLoader.cxx | 118 + Qt/Core/pqBrandPluginsLoader.h | 71 + Qt/Core/pqChartView.cxx | 2 +- Qt/Core/pqCoreInit.cxx | 1 + Qt/Core/pqCoreTestUtility.cxx | 84 +- Qt/Core/pqCoreTestUtility.h | 18 +- .../main.cxx => Qt/Core/pqCoreUtilities.cxx | 68 +- Qt/Core/pqCoreUtilities.h | 69 + Qt/Core/pqDataRepresentation.cxx | 13 + Qt/Core/pqDataRepresentation.h | 4 + Qt/Core/pqDisplayPolicy.cxx | 22 +- Qt/Core/pqDisplayPolicy.h | 6 +- Qt/Core/pqHelperProxyStateLoader.cxx | 161 + .../pqHelperProxyStateLoader.h} | 62 +- Qt/Core/pqObjectBuilder.cxx | 17 +- Qt/Core/pqObjectBuilder.h | 2 +- Qt/Core/pqOptions.cxx | 80 +- Qt/Core/pqOptions.h | 48 +- Qt/Core/pqOutputPort.cxx | 18 +- Qt/Core/pqOutputPort.h | 11 +- Qt/Core/pqPipelineFilter.cxx | 36 +- Qt/Core/pqPipelineFilter.h | 3 + Qt/Core/pqPipelineRepresentation.cxx | 44 +- Qt/Core/pqPipelineRepresentation.h | 8 +- Qt/Core/pqPipelineSource.cxx | 11 + Qt/Core/pqProcessModuleGUIHelper.cxx | 73 +- Qt/Core/pqProcessModuleGUIHelper.h | 4 +- Qt/Core/pqProgressManager.cxx | 87 +- Qt/Core/pqProgressManager.h | 14 +- Qt/Core/pqProxyModifiedStateUndoElement.cxx | 112 + Qt/Core/pqProxyModifiedStateUndoElement.h | 71 + Qt/Core/pqPythonEventSourceImage.cxx | 4 +- Qt/Core/pqReaderFactory.cxx | 484 -- Qt/Core/pqReaderFactory.h | 140 - Qt/Core/pqRenderView.cxx | 19 +- Qt/Core/pqRenderView.h | 5 +- Qt/Core/pqRenderViewBase.cxx | 2 +- Qt/Core/pqScalarBarVisibilityAdaptor.cxx | 13 +- Qt/Core/pqScalarBarVisibilityAdaptor.h | 9 +- Qt/Core/pqScatterPlotRepresentation.cxx | 2 +- Qt/Core/pqServerManagerModel.cxx | 21 +- Qt/Core/pqServerManagerModel.h | 9 + Qt/Core/pqServerManagerObserver.cxx | 20 + Qt/Core/pqServerManagerObserver.h | 12 +- Qt/Core/pqServerResources.cxx | 3 +- Qt/Core/pqServerStartups.cxx | 11 +- Qt/Core/pqSpreadSheetViewSelectionModel.cxx | 2 +- Qt/Core/pqStandardViewModules.h | 2 +- Qt/Core/pqUndoStack.cxx | 5 + Qt/Core/pqUndoStack.h | 55 + Qt/Core/pqView.h | 7 +- Qt/Core/pqViewExporterManager.cxx | 28 +- Qt/Core/pqViewExporterManager.h | 4 +- Qt/Python/pqPythonManager.cxx | 11 +- Qt/Python/pqPythonManager.h | 9 - Qt/Testing/pqAbstractActivateEventPlayer.cxx | 39 +- Qt/Testing/pqAbstractBooleanEventPlayer.cxx | 10 + .../pqAbstractButtonEventTranslator.cxx | 13 +- Qt/Testing/pqEventDispatcher.cxx | 325 +- Qt/Testing/pqEventDispatcher.h | 61 +- Qt/Testing/pqMenuEventTranslator.cxx | 14 +- Qt/Testing/pqTestUtility.cxx | 77 +- Qt/Testing/pqTestUtility.h | 33 +- Qt/Testing/pqThreadedEventSource.cxx | 5 + Qt/Testing/pqThreadedEventSource.h | 3 + Qt/Widgets/CMakeLists.txt | 3 - Qt/Widgets/Testing/CMakeLists.txt | 3 +- Qt/Widgets/pqHelpWindow.cxx | 22 +- Qt/Widgets/pqHelpWindow.h | 7 +- Qt/Widgets/pqLookmarkToolbar.cxx | 165 - Qt/Widgets/pqTreeWidget.cxx | 2 +- Servers/Common/vtkCommandOptions.cxx | 26 +- Servers/Common/vtkCommandOptions.h | 9 + Servers/Common/vtkPVOptions.cxx | 11 +- Servers/Common/vtkProcessModule.cxx | 4 +- Servers/Common/vtkProcessModuleGUIHelper.h | 4 +- Servers/Executables/CMakeLists.txt | 28 +- .../Executables/vtkSMTestDriver.cxx | 258 +- .../Executables/vtkSMTestDriver.h | 33 +- .../Executables/vtkSMTestDriverConfig.h.in | 19 +- Servers/Filters/vtkPVMain.cxx | 10 +- Servers/ServerManager/CMakeLists.txt | 8 +- Servers/ServerManager/Resources/readers.xml | 245 +- Servers/ServerManager/Resources/writers.xml | 60 + .../Testing/Python/CMakeLists.txt | 1 - .../Testing/SMStates/Animation.pvsm | 3126 ------------- .../ServerManager/vtkInitializationHelper.cxx | 58 +- .../ServerManager/vtkInitializationHelper.h | 10 +- .../vtkSMExtractDocumentation.cxx | 4 + Servers/ServerManager/vtkSMOutputPort.h | 6 - Servers/ServerManager/vtkSMPQStateLoader.h | 2 +- Servers/ServerManager/vtkSMProxyManager.cxx | 48 +- Servers/ServerManager/vtkSMProxyManager.h | 22 + Servers/ServerManager/vtkSMReaderFactory.cxx | 517 +++ Servers/ServerManager/vtkSMReaderFactory.h | 146 + Servers/ServerManager/vtkSMStateLoader.cxx | 53 +- Servers/ServerManager/vtkSMWriterFactory.cxx | 419 ++ Servers/ServerManager/vtkSMWriterFactory.h | 118 + Utilities/Doxygen/CMakeLists.txt | 8 +- VTK | 2 +- 620 files changed, 26279 insertions(+), 27981 deletions(-) delete mode 100644 Applications/Client/CMakeLists.txt delete mode 100644 Applications/Client/CompleteBundle.cmake.in delete mode 100755 Applications/Client/CreateBundle.sh.in delete mode 100644 Applications/Client/ParaViewLogo.png delete mode 100644 Applications/Client/Testing/Cxx/CMakeLists.txt delete mode 100644 Applications/Client/Testing/Cxx/ManualConnectBuiltin.xml.in delete mode 100644 Applications/Client/Testing/Cxx/ManualConnectCRSDS-rc.xml.in delete mode 100644 Applications/Client/Testing/Cxx/ManualConnectCRSDS.xml.in delete mode 100644 Applications/Client/Testing/Cxx/ManualConnectCRSDSRR.xml.in delete mode 100644 Applications/Client/Testing/Cxx/ManualConnectCS-rc.xml.in delete mode 100644 Applications/Client/Testing/Cxx/ManualConnectCS.xml.in delete mode 100644 Applications/Client/Testing/Cxx/ManualConnectCSRR.xml.in delete mode 100644 Applications/Client/Testing/Python/HistogramChart.py delete mode 100644 Applications/Client/Testing/Python/OpenHelp.py delete mode 100644 Applications/Client/Testing/Python/ToolBarAndMenus.py delete mode 100644 Applications/Client/Testing/XML/CalcParens.xml delete mode 100644 Applications/Client/Testing/XML/Calculator.xml delete mode 100644 Applications/Client/Testing/XML/ChartOptions.xml delete mode 100644 Applications/Client/Testing/XML/Clip.xml delete mode 100644 Applications/Client/Testing/XML/ColorEditor2.xml delete mode 100644 Applications/Client/Testing/XML/Contour.xml delete mode 100644 Applications/Client/Testing/XML/ContourRange.xml delete mode 100644 Applications/Client/Testing/XML/CreateAndLoadLookmark.xml delete mode 100644 Applications/Client/Testing/XML/CustomSourceProbe.xml delete mode 100644 Applications/Client/Testing/XML/CutMulti.xml delete mode 100644 Applications/Client/Testing/XML/D3SmallCells.xml delete mode 100644 Applications/Client/Testing/XML/DualSphereAnimation.xml delete mode 100644 Applications/Client/Testing/XML/ExTimeseries.xml delete mode 100644 Applications/Client/Testing/XML/ExodusIIPanel.xml delete mode 100644 Applications/Client/Testing/XML/ExodusModeShapes.xml delete mode 100644 Applications/Client/Testing/XML/ExodusWriter.xml delete mode 100644 Applications/Client/Testing/XML/ExodusXML.xml delete mode 100644 Applications/Client/Testing/XML/ExtractBlock.xml delete mode 100644 Applications/Client/Testing/XML/ExtractLevel.xml delete mode 100644 Applications/Client/Testing/XML/FFTOverTime.xml delete mode 100644 Applications/Client/Testing/XML/Flow.xml delete mode 100644 Applications/Client/Testing/XML/Flow2.xml delete mode 100644 Applications/Client/Testing/XML/Fractal2D.xml delete mode 100644 Applications/Client/Testing/XML/GlobalProperties.xml delete mode 100644 Applications/Client/Testing/XML/ImageShrink.xml delete mode 100644 Applications/Client/Testing/XML/LinePlot.xml delete mode 100644 Applications/Client/Testing/XML/LoadStateHistogram.xml delete mode 100644 Applications/Client/Testing/XML/NormalGlyphs.xml delete mode 100644 Applications/Client/Testing/XML/ObjectInspectorSphere.xml delete mode 100644 Applications/Client/Testing/XML/OpenFile.xml delete mode 100644 Applications/Client/Testing/XML/OpenSaveData.xml delete mode 100644 Applications/Client/Testing/XML/Plot3DReader.xml delete mode 100644 Applications/Client/Testing/XML/PlotEdges.xml delete mode 100644 Applications/Client/Testing/XML/PlotEdges2.xml delete mode 100644 Applications/Client/Testing/XML/PropertyLink.xml delete mode 100644 Applications/Client/Testing/XML/PythonProgrammableFilter.xml delete mode 100644 Applications/Client/Testing/XML/RectilinearFractal.xml delete mode 100644 Applications/Client/Testing/XML/RepresentationSelector.xml delete mode 100644 Applications/Client/Testing/XML/SPTimeseries.xml delete mode 100644 Applications/Client/Testing/XML/SaveCSV.xml delete mode 100644 Applications/Client/Testing/XML/SelectReader.xml delete mode 100644 Applications/Client/Testing/XML/Selection.xml delete mode 100644 Applications/Client/Testing/XML/SimpleInteraction.xml delete mode 100644 Applications/Client/Testing/XML/Slice.xml delete mode 100644 Applications/Client/Testing/XML/StreamTracerUpdates.xml delete mode 100644 Applications/Client/Testing/XML/StructuredVolumeRender.xml delete mode 100644 Applications/Client/Testing/XML/TemporalShiftScale.xml delete mode 100644 Applications/Client/Testing/XML/Tessellate.xml delete mode 100644 Applications/Client/Testing/XML/Threshold.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo1.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo2.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo3.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo4.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo5.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo6.xml delete mode 100644 Applications/Client/Testing/XML/UndoRedo7.xml delete mode 100644 Applications/Client/Testing/XML/UnstructuredVolumeRender.xml delete mode 100644 Applications/Client/Testing/XML/XdmfGridAttributes.xml delete mode 100644 Applications/Client/Testing/XML/XdmfRead.xml delete mode 100644 Applications/Client/Testing/XML/XdmfReadImageData.xml delete mode 100644 Applications/Client/Testing/XML/XdmfReadImageDataCollection.xml delete mode 100644 Applications/Client/Testing/XML/XdmfReadRectilinearGrid.xml delete mode 100644 Applications/Client/Testing/XML/XdmfReadRectilinearGridCollection.xml delete mode 100644 Applications/Client/Testing/XML/XdmfReadStructuredGrid.xml delete mode 100644 Applications/Client/Testing/XML/XdmfReadStructuredGridCollection.xml delete mode 100644 Applications/Client/paraq.iss delete mode 100644 Applications/Client/pqClient.rc delete mode 100644 Applications/Client/pvIcon.svg create mode 100644 Applications/ParaView/CMakeLists.txt rename Applications/{Client => ParaView}/MacIcon.icns (100%) create mode 100644 Applications/ParaView/PVSplashScreen.png create mode 100644 Applications/ParaView/ParaViewFilters.xml create mode 100644 Applications/ParaView/ParaViewMainWindow.cxx create mode 100644 Applications/ParaView/ParaViewMainWindow.h create mode 100644 Applications/ParaView/ParaViewMainWindow.ui create mode 100644 Applications/ParaView/ParaViewReaders.xml create mode 100644 Applications/ParaView/ParaViewSources.xml create mode 100644 Applications/ParaView/ParaViewWriters.xml create mode 100644 Applications/ParaView/Testing/CMakeLists.txt create mode 100644 Applications/ParaView/Testing/Python/CMakeLists.txt rename Applications/{Client => ParaView}/Testing/Python/DisconnectAndSaveAnimation.py (75%) rename Applications/{Client => ParaView}/Testing/Python/FileSeries.py (84%) rename Applications/{Client => ParaView}/Testing/Python/LoadStateMultiView.py (58%) rename Applications/{Client => ParaView}/Testing/Python/ObjectPanelPlugin.py (75%) rename Applications/{Client => ParaView}/Testing/Python/PVBlotTest1.py (100%) rename Applications/{Client => ParaView}/Testing/Python/SaveAnimationMultiView.py (75%) rename Applications/{Client => ParaView}/Testing/Python/SaveLargeScreenshot.py (76%) rename Applications/{Client => ParaView}/Testing/Python/TestContourWidget.py (67%) rename Applications/{Client => ParaView}/Testing/Python/ToolBarPlugin.py (100%) rename Applications/{Client => ParaView}/Testing/XML/3DWidgetInCustomFilter.xml (59%) rename Applications/{Client => ParaView}/Testing/XML/AboutDialog.xml (57%) rename Applications/{Client => ParaView}/Testing/XML/AnimatePipelineTime.xml (73%) create mode 100644 Applications/ParaView/Testing/XML/CMakeLists.txt create mode 100644 Applications/ParaView/Testing/XML/CalcParens.xml create mode 100644 Applications/ParaView/Testing/XML/Calculator.xml rename Applications/{Client => ParaView}/Testing/XML/CameraLink.xml (53%) create mode 100644 Applications/ParaView/Testing/XML/Clip.xml rename Applications/{Client => ParaView}/Testing/XML/ColorEditor1.xml (88%) create mode 100644 Applications/ParaView/Testing/XML/ColorEditor2.xml rename Applications/{Client => ParaView}/Testing/XML/ColorEditor3.xml (66%) rename Applications/{Client => ParaView}/Testing/XML/ColorEditor4.xml (53%) create mode 100644 Applications/ParaView/Testing/XML/Contour.xml create mode 100644 Applications/ParaView/Testing/XML/ContourRange.xml rename Applications/{Client => ParaView}/Testing/XML/CustomFilter.xml (79%) create mode 100644 Applications/ParaView/Testing/XML/CustomSourceProbe.xml create mode 100644 Applications/ParaView/Testing/XML/D3SmallCells.xml create mode 100644 Applications/ParaView/Testing/XML/DualSphereAnimation.xml create mode 100644 Applications/ParaView/Testing/XML/ExTimeseries.xml rename Applications/{Client => ParaView}/Testing/XML/ExTimeseries2.xml (51%) create mode 100644 Applications/ParaView/Testing/XML/ExodusIIPanel.xml create mode 100644 Applications/ParaView/Testing/XML/ExodusModeShapes.xml create mode 100644 Applications/ParaView/Testing/XML/ExodusXML.xml create mode 100644 Applications/ParaView/Testing/XML/ExtractBlock.xml create mode 100644 Applications/ParaView/Testing/XML/ExtractLevel.xml create mode 100644 Applications/ParaView/Testing/XML/FFTOverTime.xml create mode 100644 Applications/ParaView/Testing/XML/Flow.xml create mode 100644 Applications/ParaView/Testing/XML/Flow2.xml create mode 100644 Applications/ParaView/Testing/XML/Fractal2D.xml rename Applications/{Client => ParaView}/Testing/XML/Fractal3D.xml (61%) create mode 100644 Applications/ParaView/Testing/XML/GlobalProperties.xml create mode 100644 Applications/ParaView/Testing/XML/LinePlot.xml rename Applications/{Client => ParaView}/Testing/XML/LoadSaveStateAnimation.xml (78%) rename Applications/{Client => ParaView}/Testing/XML/LoadState.xml (57%) create mode 100644 Applications/ParaView/Testing/XML/NormalGlyphs.xml create mode 100644 Applications/ParaView/Testing/XML/ObjectInspectorSphere.xml create mode 100644 Applications/ParaView/Testing/XML/OpenHelp.xml create mode 100644 Applications/ParaView/Testing/XML/OpenSaveData.xml create mode 100644 Applications/ParaView/Testing/XML/Plot3DReader.xml create mode 100644 Applications/ParaView/Testing/XML/PlotEdges.xml create mode 100644 Applications/ParaView/Testing/XML/PlotEdges2.xml create mode 100644 Applications/ParaView/Testing/XML/PropertyLink.xml rename Applications/{Client => ParaView}/Testing/XML/ReadXMLPolyDataFileSeries.xml (70%) create mode 100644 Applications/ParaView/Testing/XML/RectilinearFractal.xml create mode 100644 Applications/ParaView/Testing/XML/RepresentationSelector.xml create mode 100644 Applications/ParaView/Testing/XML/SPTimeseries.xml rename Applications/{Client => ParaView}/Testing/XML/SaveAnimationGeometry.xml (62%) create mode 100644 Applications/ParaView/Testing/XML/SaveCSV.xml rename Applications/{Client => ParaView}/Testing/XML/SaveColorMap.xml (92%) create mode 100644 Applications/ParaView/Testing/XML/SelectReader.xml create mode 100644 Applications/ParaView/Testing/XML/SimpleInteraction.xml create mode 100644 Applications/ParaView/Testing/XML/Slice.xml create mode 100644 Applications/ParaView/Testing/XML/StreamTracerUpdates.xml rename Applications/{Client => ParaView}/Testing/XML/TemporalInterpolator.xml (81%) create mode 100644 Applications/ParaView/Testing/XML/TemporalShiftScale.xml create mode 100644 Applications/ParaView/Testing/XML/Tessellate.xml create mode 100644 Applications/ParaView/Testing/XML/Threshold.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo1.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo2.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo3.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo4.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo5.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo6.xml create mode 100644 Applications/ParaView/Testing/XML/UndoRedo7.xml rename Applications/{Client => ParaView}/Testing/XML/UnstructuredOutline.xml (61%) rename Applications/{Client => ParaView}/Testing/XML/VariableSelector.xml (64%) rename Applications/{Client => ParaView}/Testing/XML/ViewSettingsDialog.xml (60%) create mode 100644 Applications/ParaView/Testing/XML/XdmfGridAttributes.xml create mode 100644 Applications/ParaView/Testing/XML/XdmfRead.xml create mode 100644 Applications/ParaView/Testing/XML/XdmfReadImageData.xml create mode 100644 Applications/ParaView/Testing/XML/XdmfReadImageDataCollection.xml create mode 100644 Applications/ParaView/Testing/XML/XdmfReadRectilinearGrid.xml create mode 100644 Applications/ParaView/Testing/XML/XdmfReadRectilinearGridCollection.xml create mode 100644 Applications/ParaView/Testing/XML/XdmfReadStructuredGrid.xml create mode 100644 Applications/ParaView/Testing/XML/XdmfReadStructuredGridCollection.xml rename Applications/{Client/paraqlogo.ico => ParaView/WinIcon.ico} (100%) delete mode 100644 Applications/StreamingParaView/pqExtraResources.qrc.in create mode 100644 CMake/ParaViewBranding.cmake create mode 100644 CMake/ParaViewMacros.cmake create mode 100644 CMake/branded_paraview_main.cxx.in create mode 100644 CMake/branded_splash.png create mode 100644 Documentation/GenerateQHP.cmake delete mode 100644 Documentation/LookmarkBrowser.png delete mode 100644 Documentation/LookmarkButton.png delete mode 100644 Documentation/LookmarkInspector.png delete mode 100644 Documentation/Lookmarks.html create mode 100644 Documentation/paraview.qhp.in delete mode 100644 Documentation/pqClient.adp delete mode 100644 Documentation/pqClient.qch delete mode 100644 Documentation/pqClient.qhp create mode 100644 Examples/CustomApplications/CMakeLists.txt create mode 100644 Examples/CustomApplications/Clone1/CMakeLists.txt create mode 100644 Examples/CustomApplications/Clone1/ParaViewFilters.xml create mode 100644 Examples/CustomApplications/Clone1/ParaViewReaders.xml create mode 100644 Examples/CustomApplications/Clone1/ParaViewSources.xml create mode 100644 Examples/CustomApplications/Clone1/ParaViewWriters.xml create mode 100644 Examples/CustomApplications/Clone1/myMainWindow.cxx create mode 100644 Examples/CustomApplications/Clone1/myMainWindow.h create mode 100644 Examples/CustomApplications/Clone1/myMainWindow.ui create mode 100644 Examples/CustomApplications/Clone2/CMakeLists.txt create mode 100644 Examples/CustomApplications/Clone2/ParaViewFilters.xml create mode 100644 Examples/CustomApplications/Clone2/ParaViewReaders.xml create mode 100644 Examples/CustomApplications/Clone2/ParaViewSources.xml create mode 100644 Examples/CustomApplications/Clone2/ParaViewWriters.xml create mode 100644 Examples/CustomApplications/Clone2/myMainWindow.cxx create mode 100644 Examples/CustomApplications/Clone2/myMainWindow.h create mode 100644 Examples/CustomApplications/Clone2/myMainWindow.ui create mode 100644 Examples/CustomApplications/Demo0/CMakeLists.txt create mode 100644 Examples/CustomApplications/Demo0/DemoApp0.cxx create mode 100644 Examples/CustomApplications/Demo1/CMakeLists.txt create mode 100644 Examples/CustomApplications/Demo1/DemoApp1.cxx create mode 100644 Examples/CustomApplications/Demo1/myMainWindow.cxx create mode 100644 Examples/CustomApplications/Demo1/myMainWindow.h create mode 100644 Examples/CustomApplications/Demo1/myMainWindow.ui create mode 100644 Examples/CustomApplications/ParticlesViewer/CMakeLists.txt rename Applications/Client/ProcessModuleGUIHelper.h => Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.cxx (60%) create mode 100644 Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.h create mode 100644 Examples/CustomApplications/ParticlesViewer/ParticlesViewerMainWindow.ui create mode 100644 Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.cxx create mode 100644 Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.h create mode 100644 Examples/CustomApplications/ParticlesViewer/README.txt create mode 100644 Examples/CustomApplications/ParticlesViewer/SupportedReader.xml create mode 100644 Examples/CustomApplications/Spreadsheet/CMakeLists.txt create mode 100644 Examples/CustomApplications/Spreadsheet/README.txt create mode 100644 Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.cxx create mode 100644 Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.h create mode 100644 Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.ui create mode 100644 Examples/CustomApplications/Spreadsheet/SupportedReader.xml create mode 100644 Examples/Plugins/DockWidget/CMakeLists.txt create mode 100644 Examples/Plugins/DockWidget/ExampleDockPanel.cxx create mode 100644 Examples/Plugins/DockWidget/ExampleDockPanel.h create mode 100644 Examples/Plugins/DockWidget/ExampleDockPanel.ui create mode 100644 Qt/ApplicationComponents/CMakeLists.txt create mode 100644 Qt/ApplicationComponents/Resources/UI/pqAxesToolbar.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqCameraToolbar.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqColorToolbar.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqDefaultMainWindow.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqEditMenuBuilder.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqFileMenuBuilder.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqMainControlsToolbar.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqPipelineBrowserContextMenu.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqSelectionToolbar.ui create mode 100644 Qt/ApplicationComponents/Resources/UI/pqVCRToolbar.ui create mode 100644 Qt/ApplicationComponents/Resources/pqApplicationComponents.qrc create mode 100644 Qt/ApplicationComponents/pqAboutDialogReaction.cxx create mode 100644 Qt/ApplicationComponents/pqAboutDialogReaction.h create mode 100644 Qt/ApplicationComponents/pqAlwaysConnectedBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqAlwaysConnectedBehavior.h create mode 100644 Qt/ApplicationComponents/pqAnimationTimeToolbar.cxx create mode 100644 Qt/ApplicationComponents/pqAnimationTimeToolbar.h create mode 100644 Qt/ApplicationComponents/pqApplicationComponentsExport.h.in create mode 100644 Qt/ApplicationComponents/pqApplicationSettingsReaction.cxx create mode 100644 Qt/ApplicationComponents/pqApplicationSettingsReaction.h create mode 100644 Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.h create mode 100644 Qt/ApplicationComponents/pqAxesToolbar.cxx create mode 100644 Qt/ApplicationComponents/pqAxesToolbar.h create mode 100644 Qt/ApplicationComponents/pqCameraLinkReaction.cxx create mode 100644 Qt/ApplicationComponents/pqCameraLinkReaction.h create mode 100644 Qt/ApplicationComponents/pqCameraReaction.cxx create mode 100644 Qt/ApplicationComponents/pqCameraReaction.h create mode 100644 Qt/ApplicationComponents/pqCameraToolbar.cxx create mode 100644 Qt/ApplicationComponents/pqCameraToolbar.h create mode 100644 Qt/ApplicationComponents/pqCameraUndoRedoReaction.cxx create mode 100644 Qt/ApplicationComponents/pqCameraUndoRedoReaction.h create mode 100644 Qt/ApplicationComponents/pqCategoryToolbarsBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqCategoryToolbarsBehavior.h create mode 100644 Qt/ApplicationComponents/pqChangePipelineInputReaction.cxx create mode 100644 Qt/ApplicationComponents/pqChangePipelineInputReaction.h create mode 100644 Qt/ApplicationComponents/pqColorToolbar.cxx create mode 100644 Qt/ApplicationComponents/pqColorToolbar.h create mode 100644 Qt/ApplicationComponents/pqCommandLineOptionsBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqCommandLineOptionsBehavior.h create mode 100644 Qt/ApplicationComponents/pqCrashRecoveryBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqCrashRecoveryBehavior.h create mode 100644 Qt/ApplicationComponents/pqCreateCustomFilterReaction.cxx create mode 100644 Qt/ApplicationComponents/pqCreateCustomFilterReaction.h create mode 100644 Qt/ApplicationComponents/pqDataTimeStepBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqDataTimeStepBehavior.h create mode 100644 Qt/ApplicationComponents/pqDefaultMainWindow.cxx create mode 100644 Qt/ApplicationComponents/pqDefaultMainWindow.h create mode 100644 Qt/ApplicationComponents/pqDefaultViewBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqDefaultViewBehavior.h create mode 100644 Qt/ApplicationComponents/pqDeleteBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqDeleteBehavior.h create mode 100644 Qt/ApplicationComponents/pqDeleteReaction.cxx create mode 100644 Qt/ApplicationComponents/pqDeleteReaction.h create mode 100644 Qt/ApplicationComponents/pqEditCameraReaction.cxx create mode 100644 Qt/ApplicationComponents/pqEditCameraReaction.h create mode 100644 Qt/ApplicationComponents/pqEditColorMapReaction.cxx create mode 100644 Qt/ApplicationComponents/pqEditColorMapReaction.h rename Applications/Client/ProcessModuleGUIHelper.cxx => Qt/ApplicationComponents/pqEditMenu.cxx (63%) create mode 100644 Qt/ApplicationComponents/pqEditMenu.h create mode 100644 Qt/ApplicationComponents/pqExportReaction.cxx create mode 100644 Qt/ApplicationComponents/pqExportReaction.h create mode 100644 Qt/ApplicationComponents/pqFiltersMenuReaction.cxx create mode 100644 Qt/ApplicationComponents/pqFiltersMenuReaction.h create mode 100644 Qt/ApplicationComponents/pqHelpReaction.cxx create mode 100644 Qt/ApplicationComponents/pqHelpReaction.h create mode 100644 Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.cxx create mode 100644 Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.h create mode 100644 Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.h create mode 100644 Qt/ApplicationComponents/pqLoadDataReaction.cxx create mode 100644 Qt/ApplicationComponents/pqLoadDataReaction.h create mode 100644 Qt/ApplicationComponents/pqLoadStateReaction.cxx create mode 100644 Qt/ApplicationComponents/pqLoadStateReaction.h create mode 100644 Qt/ApplicationComponents/pqMainControlsToolbar.cxx create mode 100644 Qt/ApplicationComponents/pqMainControlsToolbar.h create mode 100644 Qt/ApplicationComponents/pqManageCustomFiltersReaction.cxx create mode 100644 Qt/ApplicationComponents/pqManageCustomFiltersReaction.h create mode 100644 Qt/ApplicationComponents/pqManageLinksReaction.cxx create mode 100644 Qt/ApplicationComponents/pqManageLinksReaction.h create mode 100644 Qt/ApplicationComponents/pqManagePluginsReaction.cxx create mode 100644 Qt/ApplicationComponents/pqManagePluginsReaction.h create mode 100644 Qt/ApplicationComponents/pqPVAnimationWidget.cxx create mode 100644 Qt/ApplicationComponents/pqPVAnimationWidget.h create mode 100644 Qt/ApplicationComponents/pqPVApplicationCore.cxx create mode 100644 Qt/ApplicationComponents/pqPVApplicationCore.h create mode 100644 Qt/ApplicationComponents/pqPVNewSourceBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqPVNewSourceBehavior.h create mode 100644 Qt/ApplicationComponents/pqParaViewBehaviors.cxx create mode 100644 Qt/ApplicationComponents/pqParaViewBehaviors.h create mode 100644 Qt/ApplicationComponents/pqParaViewMenuBuilders.cxx create mode 100644 Qt/ApplicationComponents/pqParaViewMenuBuilders.h create mode 100644 Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.h create mode 100644 Qt/ApplicationComponents/pqPluginActionGroupBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqPluginActionGroupBehavior.h create mode 100644 Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.h create mode 100644 Qt/ApplicationComponents/pqPluginPathBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqPluginPathBehavior.h create mode 100644 Qt/ApplicationComponents/pqProxyGroupMenuManager.cxx create mode 100644 Qt/ApplicationComponents/pqProxyGroupMenuManager.h create mode 100644 Qt/ApplicationComponents/pqPythonShellReaction.cxx create mode 100644 Qt/ApplicationComponents/pqPythonShellReaction.h create mode 100644 Qt/ApplicationComponents/pqReaction.cxx create mode 100644 Qt/ApplicationComponents/pqReaction.h create mode 100644 Qt/ApplicationComponents/pqRepresentationToolbar.cxx create mode 100644 Qt/ApplicationComponents/pqRepresentationToolbar.h create mode 100644 Qt/ApplicationComponents/pqResetScalarRangeReaction.cxx create mode 100644 Qt/ApplicationComponents/pqResetScalarRangeReaction.h create mode 100644 Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.cxx create mode 100644 Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.h create mode 100644 Qt/ApplicationComponents/pqSaveAnimationReaction.cxx create mode 100644 Qt/ApplicationComponents/pqSaveAnimationReaction.h create mode 100644 Qt/ApplicationComponents/pqSaveDataReaction.cxx create mode 100644 Qt/ApplicationComponents/pqSaveDataReaction.h create mode 100644 Qt/ApplicationComponents/pqSaveScreenshotReaction.cxx create mode 100644 Qt/ApplicationComponents/pqSaveScreenshotReaction.h create mode 100644 Qt/ApplicationComponents/pqSaveStateReaction.cxx create mode 100644 Qt/ApplicationComponents/pqSaveStateReaction.h create mode 100644 Qt/ApplicationComponents/pqScalarBarVisibilityReaction.cxx create mode 100644 Qt/ApplicationComponents/pqScalarBarVisibilityReaction.h create mode 100644 Qt/ApplicationComponents/pqSelectionInspectorWidget.cxx create mode 100644 Qt/ApplicationComponents/pqSelectionInspectorWidget.h create mode 100644 Qt/ApplicationComponents/pqSelectionToolbar.cxx create mode 100644 Qt/ApplicationComponents/pqSelectionToolbar.h create mode 100644 Qt/ApplicationComponents/pqServerConnectReaction.cxx create mode 100644 Qt/ApplicationComponents/pqServerConnectReaction.h create mode 100644 Qt/ApplicationComponents/pqServerDisconnectReaction.cxx create mode 100644 Qt/ApplicationComponents/pqServerDisconnectReaction.h create mode 100644 Qt/ApplicationComponents/pqSourcesMenuReaction.cxx create mode 100644 Qt/ApplicationComponents/pqSourcesMenuReaction.h create mode 100644 Qt/ApplicationComponents/pqStandardViewFrameActionGroup.cxx create mode 100644 Qt/ApplicationComponents/pqStandardViewFrameActionGroup.h create mode 100644 Qt/ApplicationComponents/pqStatusBar.cxx create mode 100644 Qt/ApplicationComponents/pqStatusBar.h create mode 100644 Qt/ApplicationComponents/pqTestingReaction.cxx create mode 100644 Qt/ApplicationComponents/pqTestingReaction.h create mode 100644 Qt/ApplicationComponents/pqTimerLogReaction.cxx create mode 100644 Qt/ApplicationComponents/pqTimerLogReaction.h create mode 100644 Qt/ApplicationComponents/pqUndoRedoBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqUndoRedoBehavior.h create mode 100644 Qt/ApplicationComponents/pqUndoRedoReaction.cxx create mode 100644 Qt/ApplicationComponents/pqUndoRedoReaction.h create mode 100644 Qt/ApplicationComponents/pqVCRToolbar.cxx rename Qt/{Widgets/pqLookmarkToolbar.h => ApplicationComponents/pqVCRToolbar.h} (56%) create mode 100644 Qt/ApplicationComponents/pqViewFrameActionsBehavior.cxx create mode 100644 Qt/ApplicationComponents/pqViewFrameActionsBehavior.h create mode 100644 Qt/ApplicationComponents/pqViewMenuManager.cxx create mode 100644 Qt/ApplicationComponents/pqViewMenuManager.h create mode 100644 Qt/ApplicationComponents/pqViewSettingsManager.cxx create mode 100644 Qt/ApplicationComponents/pqViewSettingsManager.h create mode 100644 Qt/ApplicationComponents/pqViewSettingsReaction.cxx create mode 100644 Qt/ApplicationComponents/pqViewSettingsReaction.h delete mode 100644 Qt/Components/Resources/Icons/pqLookmark16.png delete mode 100644 Qt/Components/Resources/Icons/pqLookmarkThumbnail.png delete mode 100644 Qt/Components/Resources/UI/pqClientMainWindow.ui delete mode 100644 Qt/Components/Resources/UI/pqLookmarkBrowser.ui delete mode 100644 Qt/Components/Resources/UI/pqLookmarkDefinitionWizard.ui delete mode 100644 Qt/Components/Resources/UI/pqLookmarkInspector.ui delete mode 100644 Qt/Components/Resources/XML/ParaViewFilters.xml delete mode 100644 Qt/Components/Resources/XML/ParaViewReaders.xml delete mode 100644 Qt/Components/Resources/XML/ParaViewSources.xml delete mode 100644 Qt/Components/Resources/XML/ParaViewWriters.xml create mode 100644 Qt/Components/Resources/XML/Placeholder.xml create mode 100644 Qt/Components/pqActiveObjects.cxx create mode 100644 Qt/Components/pqActiveObjects.h delete mode 100644 Qt/Components/pqClientMainWindow.cxx delete mode 100644 Qt/Components/pqClientMainWindow.h delete mode 100644 Qt/Components/pqClientProcessModuleGUIHelper.cxx delete mode 100644 Qt/Components/pqClientProcessModuleGUIHelper.h create mode 100644 Qt/Components/pqComponentsTestUtility.cxx create mode 100644 Qt/Components/pqComponentsTestUtility.h delete mode 100644 Qt/Components/pqExtraResources.qrc.in delete mode 100644 Qt/Components/pqLookmarkBrowser.cxx delete mode 100644 Qt/Components/pqLookmarkBrowser.h delete mode 100644 Qt/Components/pqLookmarkBrowserModel.cxx delete mode 100644 Qt/Components/pqLookmarkBrowserModel.h delete mode 100644 Qt/Components/pqLookmarkDefinitionWizard.cxx delete mode 100644 Qt/Components/pqLookmarkDefinitionWizard.h delete mode 100644 Qt/Components/pqLookmarkInspector.cxx delete mode 100644 Qt/Components/pqLookmarkInspector.h delete mode 100644 Qt/Components/pqLookmarkManagerModel.cxx delete mode 100644 Qt/Components/pqLookmarkManagerModel.h delete mode 100644 Qt/Components/pqLookmarkModel.cxx delete mode 100644 Qt/Components/pqLookmarkModel.h delete mode 100644 Qt/Components/pqLookmarkSourceDialog.cxx delete mode 100644 Qt/Components/pqLookmarkSourceDialog.h delete mode 100644 Qt/Components/pqLookmarkStateLoader.cxx delete mode 100644 Qt/Components/pqLookmarkStateLoader.h delete mode 100644 Qt/Components/pqMainWindowCore.cxx delete mode 100644 Qt/Components/pqMainWindowCore.h delete mode 100644 Qt/Components/pqObjectInspectorDriver.cxx delete mode 100644 Qt/Components/pqObjectInspectorDriver.h delete mode 100644 Qt/Components/pqPipelineBrowserStateManager.cxx create mode 100644 Qt/Components/pqPipelineBrowserWidget.cxx create mode 100644 Qt/Components/pqPipelineBrowserWidget.h delete mode 100644 Qt/Components/pqSourceHistoryModel.cxx delete mode 100644 Qt/Components/pqSourceHistoryModel.h delete mode 100644 Qt/Components/pqSourceInfoFilterModel.cxx delete mode 100644 Qt/Components/pqSourceInfoFilterModel.h delete mode 100644 Qt/Components/pqSourceInfoGroupMap.cxx delete mode 100644 Qt/Components/pqSourceInfoGroupMap.h delete mode 100644 Qt/Components/pqSourceInfoIcons.cxx delete mode 100644 Qt/Components/pqSourceInfoIcons.h delete mode 100644 Qt/Components/pqSourceInfoModel.cxx delete mode 100644 Qt/Components/pqSourceInfoModel.h delete mode 100644 Qt/Components/pqSourceProxyInfo.cxx delete mode 100644 Qt/Components/pqSourceProxyInfo.h delete mode 100644 Qt/Components/pqStateLoader.cxx delete mode 100644 Qt/Components/pqStateLoader.h create mode 100644 Qt/Core/Resources/pqTestingServers.pvsc.in create mode 100644 Qt/Core/Testing/BasicApp.h create mode 100644 Qt/Core/pqBrandPluginsLoader.cxx create mode 100644 Qt/Core/pqBrandPluginsLoader.h rename Applications/Client/main.cxx => Qt/Core/pqCoreUtilities.cxx (52%) create mode 100644 Qt/Core/pqCoreUtilities.h create mode 100644 Qt/Core/pqHelperProxyStateLoader.cxx rename Qt/{Components/pqPipelineBrowserStateManager.h => Core/pqHelperProxyStateLoader.h} (52%) create mode 100644 Qt/Core/pqProxyModifiedStateUndoElement.cxx create mode 100644 Qt/Core/pqProxyModifiedStateUndoElement.h delete mode 100644 Qt/Core/pqReaderFactory.cxx delete mode 100644 Qt/Core/pqReaderFactory.h delete mode 100644 Qt/Widgets/pqLookmarkToolbar.cxx rename Applications/Client/Testing/Cxx/pvTestDriver.cxx => Servers/Executables/vtkSMTestDriver.cxx (79%) rename Applications/Client/Testing/Cxx/pvTestDriver.h => Servers/Executables/vtkSMTestDriver.h (84%) rename Applications/Client/Testing/Cxx/pvTestDriverConfig.h.in => Servers/Executables/vtkSMTestDriverConfig.h.in (64%) delete mode 100644 Servers/ServerManager/Testing/SMStates/Animation.pvsm create mode 100644 Servers/ServerManager/vtkSMReaderFactory.cxx create mode 100644 Servers/ServerManager/vtkSMReaderFactory.h create mode 100644 Servers/ServerManager/vtkSMWriterFactory.cxx create mode 100644 Servers/ServerManager/vtkSMWriterFactory.h diff --git a/Applications/CMakeLists.txt b/Applications/CMakeLists.txt index 2c0d8fa2d9..991998ddf4 100644 --- a/Applications/CMakeLists.txt +++ b/Applications/CMakeLists.txt @@ -16,20 +16,9 @@ INCLUDE(${QT_USE_FILE}) INCLUDE_DIRECTORIES( ${VTK_INCLUDE_DIR} ${PARAVIEW_INCLUDE_DIRS} - ${ParaView_SOURCE_DIR}/VTK/GUISupport/Qt - ${pqComponents_SOURCE_DIR} - ${pqComponents_BINARY_DIR} - ${pqCore_SOURCE_DIR} - ${pqCore_BINARY_DIR} - ${QtWidgets_SOURCE_DIR} - ${QtWidgets_BINARY_DIR} - ${QtTesting_SOURCE_DIR} - ${QtTesting_BINARY_DIR} - ${QtPython_SOURCE_DIR} - ${QtPython_BINARY_DIR} + ${PARAVIEW_GUI_INCLUDE_DIRS} ) - MACRO(paraview_build_optional_application name comment subdirectory default) OPTION(PARAVIEW_BUILD_${name} "Build ${comment}" ${default}) MARK_AS_ADVANCED(PARAVIEW_BUILD_${name}) @@ -41,7 +30,7 @@ MACRO(paraview_build_optional_application name comment subdirectory default) ENDIF(PARAVIEW_BUILD_${name}) ENDMACRO(paraview_build_optional_application) -paraview_build_optional_application(Client "Standard ParaView Client" Client ON) +paraview_build_optional_application(ParaView "Standard ParaView Client" ParaView ON) paraview_build_optional_application(OverView "OverView Informatics Client" OverView OFF) IF(BUILD_SHARED_LIBS) diff --git a/Applications/Client/CMakeLists.txt b/Applications/Client/CMakeLists.txt deleted file mode 100644 index d360b1ace2..0000000000 --- a/Applications/Client/CMakeLists.txt +++ /dev/null @@ -1,540 +0,0 @@ -PROJECT(pqClient) - -MACRO(GET_IMAGE_THRESHOLD_ARG variable testname) -# Macro used to obtain the command argument to set the image threshold. - SET (${variable}) - IF (${testname}_THRESHOLD) - SET (${variable} --image-threshold=${${testname}_THRESHOLD}) - ENDIF (${testname}_THRESHOLD) -ENDMACRO(GET_IMAGE_THRESHOLD_ARG) - -MACRO(GET_REVERSE_CONNECT_ARG variable testname) -# Macro used to obtain when this test must use reverse connection - SET (${variable}) - IF (${testname}_REVERSE_CONNECT) - SET (${variable} --test-rc) - ENDIF (${testname}_REVERSE_CONNECT) -ENDMACRO(GET_REVERSE_CONNECT_ARG) - -SET(QT_USE_QTUITOOLS TRUE) -INCLUDE(${QT_USE_FILE}) - -IF(VTK_USE_MPI) - INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH}) -ENDIF(VTK_USE_MPI) - -INCLUDE_DIRECTORIES( - ${pqClient_SOURCE_DIR} - ${pqClient_BINARY_DIR} -) - -# Reduce the number of dirs that get included on moc command line -# since it causes issues on Windows 2000. -GET_DIRECTORY_PROPERTY(include_dirs_tmp INCLUDE_DIRECTORIES) -SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${MOC_INCLUDE_DIRS}") - -SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${include_dirs_tmp}") - -IF(WIN32) - SET(EXE_ICON pqClient.rc) -ENDIF(WIN32) - -SOURCE_GROUP("Resources" FILES - ${EXE_ICON} -) - -IF(WIN32) - LINK_DIRECTORIES(${QT_LIBRARY_DIR}) -ENDIF(WIN32) - -IF(Q_WS_MAC) - SET(apple_bundle_sources "MacIcon.icns") - SET_SOURCE_FILES_PROPERTIES( - "MacIcon.icns" - PROPERTIES - MACOSX_PACKAGE_LOCATION Resources - ) - SET(MACOSX_BUNDLE_ICON_FILE MacIcon.icns) - SET(MAKE_BUNDLE MACOSX_BUNDLE) -ENDIF(Q_WS_MAC) - -# Add main server executables. -IF(NOT Q_WS_MAC) - SET(PV_EXE_LIST paraview) -ENDIF(NOT Q_WS_MAC) - -SET(MACOSX_BUNDLE_BUNDLE_NAME "ParaView") -IF(NOT Q_WS_MAC) - SET(PV_EXE_NAME paraview${PV_EXE_SUFFIX}) -ELSE(NOT Q_WS_MAC) - SET(PV_EXE_NAME paraview) -ENDIF(NOT Q_WS_MAC) - -ADD_EXECUTABLE(${PV_EXE_NAME} WIN32 ${MAKE_BUNDLE} - main.cxx - ProcessModuleGUIHelper.cxx - ProcessModuleGUIHelper.h - ${EXE_ICON} - ${apple_bundle_sources} -) - -TARGET_LINK_LIBRARIES(${PV_EXE_NAME} - pqComponents - pqCore - pqWidgets - QtTesting - ${QT_LIBRARIES} -) - -IF(WIN32) - TARGET_LINK_LIBRARIES(${PV_EXE_NAME} ${QT_QTMAIN_LIBRARY} ) -ENDIF(WIN32) - -IF(BUILD_TESTING) - IF(Q_WS_MAC) - SET(TEST_BINARY ${EXECUTABLE_OUTPUT_PATH}/paraview.app/Contents/MacOS/paraview --test-directory=${PARAVIEW_TEST_DIR}) - ELSE(Q_WS_MAC) - SET(TEST_BINARY ${EXECUTABLE_OUTPUT_PATH}/paraview --test-directory=${PARAVIEW_TEST_DIR}) - ENDIF(Q_WS_MAC) - - SET(TEST_XML ${pqClient_SOURCE_DIR}/Testing/XML) - SET(TEST_PYTHON ${pqClient_SOURCE_DIR}/Testing/Python) - SET(TEST_IMAGE ${PARAVIEW_DATA_ROOT}/Baseline) - - SET (XML_TESTS_WITH_BASELINES - # ColorEditor3 doesn't work in client/server mode - ColorEditor3 -# LoadStateSelection - OpenFile -# SelectionUndo - ) - - SET (TESTS_WITHOUT_BASELINES - AboutDialog - ChartOptions - ) - IF(PARAVIEW_DATA_ROOT) - SET (TESTS_WITHOUT_BASELINES - ${TESTS_WITHOUT_BASELINES} -# FIXME: Enable after Plots are converted to new style and backwards -# compatibility issues are fixed. -#LoadStateHistogram - ) - ENDIF(PARAVIEW_DATA_ROOT) - - IF(QT_TESTING_WITH_PYTHON) - SET(XML_TESTS_WITH_BASELINES ${XML_TESTS_WITH_BASELINES} - PythonProgrammableFilter - ) - SET(PYTHON_TESTS - OpenHelp - ToolBarAndMenus - TestContourWidget - ) - IF(PARAVIEW_DATA_ROOT) - SET(PYTHON_TESTS ${PYTHON_TESTS} - #HistogramChart - LoadStateMultiView - FileSeries - SaveLargeScreenshot - #SaveAnimationMultiView -- need to fix race condition on Mac - ) - # Set image threshold overrides for the tests. - SET(SaveLargeScreenshot_THRESHOLD 10000) - - SET(PYTHON_TESTS_REMOTE_ONLY - DisconnectAndSaveAnimation) - ENDIF(PARAVIEW_DATA_ROOT) - ENDIF(QT_TESTING_WITH_PYTHON) - - FOREACH(test ${TESTS_WITHOUT_BASELINES}) - ADD_TEST(pqClient${test} - ${TEST_BINARY} -dr - --test-directory=${PARAVIEW_TEST_DIR} - --run-test=${TEST_XML}/${test}.xml --exit) - ENDFOREACH(test) - - IF(PARAVIEW_DATA_ROOT) - FOREACH(test ${XML_TESTS_WITH_BASELINES}) - GET_IMAGE_THRESHOLD_ARG(THRESHOLD_CMD ${test}) - ADD_TEST(pqClient${test} - ${TEST_BINARY} -dr --run-test=${TEST_XML}/${test}.xml - --test-directory=${PARAVIEW_TEST_DIR} - --compare-view=${TEST_IMAGE}/${test}.png - ${THRESHOLD_CMD} - --exit) - ENDFOREACH(test) - ENDIF(PARAVIEW_DATA_ROOT) - - FOREACH(test ${PYTHON_TESTS}) - GET_IMAGE_THRESHOLD_ARG(THRESHOLD_CMD ${test}) - ADD_TEST(pqClient${test}-Python - ${TEST_BINARY} -dr --run-test=${TEST_PYTHON}/${test}.py - --test-directory=${PARAVIEW_TEST_DIR} - ${THRESHOLD_CMD} - --exit) - ENDFOREACH(test) - - # test the plugins - IF(BUILD_SHARED_LIBS AND BUILD_EXAMPLES) - SET(DOLLAR "$") - IF(CMAKE_CONFIGURATION_TYPES) - SET(TEST_BINARY ${EXECUTABLE_OUTPUT_PATH}/${DOLLAR}{CTEST_CONFIGURATION_TYPE}/paraview --test-directory=${PARAVIEW_TEST_DIR}) - SET(RUN_PATH ${EXECUTABLE_OUTPUT_PATH}/${DOLLAR}{CTEST_CONFIGURATION_TYPE}) - ELSE(CMAKE_CONFIGURATION_TYPES) - SET(RUN_PATH ${EXECUTABLE_OUTPUT_PATH}) - IF(Q_WS_MAC) - SET(TEST_BINARY ${EXECUTABLE_OUTPUT_PATH}/paraview.app/Contents/MacOS/paraview --test-directory=${PARAVIEW_TEST_DIR}) - ELSE(Q_WS_MAC) - SET(TEST_BINARY ${EXECUTABLE_OUTPUT_PATH}/paraview --test-directory=${PARAVIEW_TEST_DIR}) - ENDIF(Q_WS_MAC) - ENDIF(CMAKE_CONFIGURATION_TYPES) - - - IF (QT_TESTING_WITH_PYTHON) - # Since these tests need python, it's essential to verify that testing - # with python is enabled. - SET(PLUGIN_TESTS - ToolBarPlugin - ObjectPanelPlugin - ) - IF (PARAVIEW_BUILD_PLUGIN_pvblot) - SET(PLUGIN_TESTS ${PLUGIN_TESTS} PVBlotTest1) - ENDIF (PARAVIEW_BUILD_PLUGIN_pvblot) - - FOREACH(test ${PLUGIN_TESTS}) - ADD_TEST(pqClient${test} - ${CMAKE_COMMAND} -E chdir ${RUN_PATH} - ${TEST_BINARY} -dr --run-test=${TEST_PYTHON}/${test}.py - --exit) - ENDFOREACH(test) - ENDIF (QT_TESTING_WITH_PYTHON) - - ENDIF(BUILD_SHARED_LIBS AND BUILD_EXAMPLES) - - -# Now we add tests that use the pvTestDriver for running. - SET(XML_TESTS_WITH_BASELINES - 3DWidgetInCustomFilter - AnimatePipelineTime - CalcParens - Calculator - CameraLink - Clip - ColorEditor1 - ColorEditor2 - ColorEditor4 - Contour - ContourRange -# CreateAndLoadLookmark -- disabling since it fails with Qt 4.5 - # and we are going to deprecate lookmarks anyways. - CustomFilter - CustomSourceProbe -# CutMulti -Randomly failing test. - D3SmallCells - DualSphereAnimation - ExodusIIPanel - ExodusModeShapes -# ExodusWriter -- ENABLE WHEN WRITER IS ADDED - ExodusXML - ExTimeseries - ExTimeseries2 - ExtractBlock - ExtractLevel - FFTOverTime - Flow - Flow2 - Fractal2D - Fractal3D - GlobalProperties - LinePlot - LoadSaveStateAnimation - LoadState - NormalGlyphs - ObjectInspectorSphere - OpenSaveData - Plot3DReader - PlotEdges - PlotEdges2 - PropertyLink - ReadXMLPolyDataFileSeries - RectilinearFractal - RepresentationSelector - SaveAnimationGeometry - SaveColorMap - SaveCSV - SelectReader - #Selection - SimpleInteraction - Slice - SPTimeseries - StreamTracerUpdates - TemporalInterpolator - TemporalShiftScale - Tessellate - Threshold - UndoRedo - UndoRedo1 - UndoRedo2 - UndoRedo3 - #UndoRedo4 -- disabled since AnimationPanel was removed. We need to create a - #new test to test animation undo-redo using the animation view. - UndoRedo5 - UndoRedo6 - UndoRedo7 - UnstructuredOutline - VariableSelector - ViewSettingsDialog - XdmfRead - XdmfReadImageData - XdmfReadImageDataCollection - XdmfReadRectilinearGrid - XdmfReadRectilinearGridCollection - XdmfReadStructuredGrid - XdmfReadStructuredGridCollection - XdmfGridAttributes - ) - - # Add image threshold overrides for tests. - # Generally all tests with wireframes need higher thresholds. - SET (Flow2_THRESHOLD 15) - SET (UndoRedo4_THRESHOLD 15) - - # These Xdmf tests have wireframes, hence the increased thresholds. - SET (XdmfReadImageData_THRESHOLD 20) - SET (XdmfReadRectilinearGrid_THRESHOLD 20) - SET (XdmfReadRectilinearGridCollection_THRESHOLD 20) - SET (XdmfReadStructuredGrid_THRESHOLD 20) - SET (XdmfReadStructuredGridCollection_THRESHOLD 20) - SET (XdmfReadImageDataCollection_THRESHOLD 20) - - # This test renders points and they are offsetted a bit differently on - # different platforms so just increase the threshold - SET (SaveCSV_THRESHOLD 40) - - # Disable some testing configurations for these tests. - ## Disable ClientRenderServer tests for FFTOverTime. This is done since - ## selection is not supported in render server mode esp. when number of render - ## server processess is not same as the data server processes - SET (FFTOverTime_DISABLE_CRS TRUE) - - # Make these tests use reverse connection. - SET (CutMulti_REVERSE_CONNECT TRUE) - - # Test compositing for a few client server and client render server tests. - SET(COMPOSITING_XML_TESTS_WITH_BASELINES - Calculator - CameraLink - ColorEditor1 - ContourRange - D3SmallCells - Fractal3D - StreamTracerUpdates - UndoRedo2 - ) - - SET(TEST_BINARY ${EXECUTABLE_OUTPUT_PATH}/pvTestDriver) - - IF(PARAVIEW_DATA_ROOT) - OPTION(PARAVIEW_CLIENT_RENDER_SERVER_TESTS - "Turn on/off client tests that involve separate data and render servers." - ON) - MARK_AS_ADVANCED(PARAVIEW_CLIENT_RENDER_SERVER_TESTS) - FOREACH(test ${XML_TESTS_WITH_BASELINES}) - GET_IMAGE_THRESHOLD_ARG(THRESHOLD_CMD ${test}) - GET_REVERSE_CONNECT_ARG(REVERSE_CONNECTION_CMD ${test}) - - ADD_TEST(pqClient${test}-Builtin - ${TEST_BINARY} - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_XML}/${test}.xml - --compare-view=${TEST_IMAGE}/${test}.png - ${THRESHOLD_CMD} - --exit) - - ADD_TEST(pqClient${test}-ClientServer - ${TEST_BINARY} --test-server - ${REVERSE_CONNECTION_CMD} - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_XML}/${test}.xml - --compare-view=${TEST_IMAGE}/${test}.png - ${THRESHOLD_CMD} - --exit) - - IF (PARAVIEW_CLIENT_RENDER_SERVER_TESTS) - IF (NOT ${test}_DISABLE_CRS) - ADD_TEST(pqClient${test}-ClientRenderServer - ${TEST_BINARY} --test-render-server - ${REVERSE_CONNECTION_CMD} - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_XML}/${test}.xml - --compare-view=${TEST_IMAGE}/${test}.png - ${THRESHOLD_CMD} - --exit) - ENDIF (NOT ${test}_DISABLE_CRS) - ENDIF (PARAVIEW_CLIENT_RENDER_SERVER_TESTS) - ENDFOREACH(test) - - FOREACH(test ${COMPOSITING_XML_TESTS_WITH_BASELINES}) - GET_IMAGE_THRESHOLD_ARG(THRESHOLD_CMD ${test}) - ADD_TEST(pqClient${test}-ClientServerRemoteRender - ${TEST_BINARY} --test-server --test-remote-rendering - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_XML}/${test}.xml - --compare-view=${TEST_IMAGE}/${test}.png - ${THRESHOLD_CMD} - --exit) - - IF (PARAVIEW_CLIENT_RENDER_SERVER_TESTS) - ADD_TEST(pqClient${test}-ClientRenderServerRemoteRender - ${TEST_BINARY} --test-render-server --test-remote-rendering - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_XML}/${test}.xml - --compare-view=${TEST_IMAGE}/${test}.png - ${THRESHOLD_CMD} - --exit) - ENDIF (PARAVIEW_CLIENT_RENDER_SERVER_TESTS) - ENDFOREACH(test) - - FOREACH(test ${PYTHON_TESTS_REMOTE_ONLY}) - GET_IMAGE_THRESHOLD_ARG(THRESHOLD_CMD ${test}) - ADD_TEST(pqClient${test}-ClientServer-Python - ${TEST_BINARY} --test-server - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_PYTHON}/${test}.py - ${THRESHOLD_CMD} - --exit) - - #FIXME - #IF (PARAVIEW_CLIENT_RENDER_SERVER_TESTS) - # ADD_TEST(pqClient${test}-ClientRenderServer-Python - # ${TEST_BINARY} --test-render-server - # --test-directory=${PARAVIEW_TEST_DIR} - # -dr - # --run-test=${TEST_PYTHON}/${test}.py - # --exit) - #ENDIF (PARAVIEW_CLIENT_RENDER_SERVER_TESTS) - ENDFOREACH(test) - - ADD_TEST(StructuredVolumeRender-ClientServerRemoteRender - ${TEST_BINARY} --test-server --test-remote-rendering - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_XML}/StructuredVolumeRender.xml - --compare-view=${TEST_IMAGE}/StructuredVolumeRender.png - --exit) - ADD_TEST(UnstructuredVolumeRender-ClientServerRemoteRender - ${TEST_BINARY} --test-server --test-remote-rendering - --test-directory=${PARAVIEW_TEST_DIR} - -dr - --run-test=${TEST_XML}/UnstructuredVolumeRender.xml - --compare-view=${TEST_IMAGE}/UnstructuredVolumeRender.png - --exit) - - ENDIF(PARAVIEW_DATA_ROOT) - - ADD_SUBDIRECTORY(Testing/Cxx) - - # Do the link forwarding for the test driver as well. - SET(PV_EXE_LIST ${PV_EXE_LIST} pvTestDriver) -ENDIF(BUILD_TESTING) - -# Add shared link forwarding executables if necessary. -IF(PV_NEED_SHARED_FORWARD) - FOREACH(pvexe ${PV_EXE_LIST}) - SET(PV_FORWARD_EXE ${pvexe}${PV_EXE_SUFFIX}) - CONFIGURE_FILE( - ${ParaView_SOURCE_DIR}/Servers/Executables/pv-forward.c.in - ${CMAKE_CURRENT_BINARY_DIR}/${pvexe}-forward.c - @ONLY IMMEDIATE) - ADD_EXECUTABLE(${pvexe} ${CMAKE_CURRENT_BINARY_DIR}/${pvexe}-forward.c) - ADD_DEPENDENCIES(${pvexe} ${pvexe}${PV_EXE_SUFFIX}) - INSTALL(TARGETS ${pvexe} DESTINATION ${PV_INSTALL_BIN_DIR} COMPONENT Runtime) - ENDFOREACH(pvexe) -ENDIF(PV_NEED_SHARED_FORWARD) - -IF(NOT Q_WS_MAC) - INSTALL(TARGETS ${PV_EXE_NAME} - DESTINATION ${PV_EXE_INSTALL} - COMPONENT Runtime) -ENDIF(NOT Q_WS_MAC) - -# Install system libraries on Linux (will not work on any other Unix -# yet) -FOREACH(fmpglib avcodec avformat avutil) - IF(FFMPEG_${fmpglib}_LIBRARY) - GET_FILENAME_COMPONENT(FFMPEG_LIB_DIR_tmp ${FFMPEG_${fmpglib}_LIBRARY} PATH) - GET_FILENAME_COMPONENT(FFMPEG_LIB_NAME_tmp ${FFMPEG_${fmpglib}_LIBRARY} NAME) - FILE(GLOB FFMPEG_LIB_LIST RELATIVE ${FFMPEG_LIB_DIR_tmp} "${FFMPEG_${fmpglib}_LIBRARY}*") - INSTALL(CODE " -MESSAGE(STATUS \"Installing \${CMAKE_INSTALL_PREFIX}/${PV_INSTALL_LIB_DIR}/${FFMPEG_LIB_NAME_tmp}\") -EXECUTE_PROCESS (WORKING_DIRECTORY ${FFMPEG_LIB_DIR_tmp} - COMMAND tar c ${FFMPEG_LIB_LIST} - COMMAND tar -xC \${CMAKE_INSTALL_PREFIX}/${PV_INSTALL_LIB_DIR}) - " COMPONENT Runtime) - #INSTALL(FILES ${FFMPEG_${fmpglib}_LIBRARY} DESTINATION ${PV_INSTALL_LIB_DIR}) - - ENDIF(FFMPEG_${fmpglib}_LIBRARY) -ENDFOREACH(fmpglib) - -SET (QTLIBLIST QTCORE QTGUI QTNETWORK QTXML QTTEST QTSQL QTOPENGL QTHELP QTCLUCENE) - -IF (VTK_USE_QVTK_QTOPENGL) - SET (QTLIBLIST ${QTLIBLIST} QTOPENGL) -ENDIF (VTK_USE_QVTK_QTOPENGL) - -IF(NOT Q_WS_MAC) - FOREACH(qtlib ${QTLIBLIST}) - IF (NOT WIN32) - #INSTALL(FILES ${QT_${qtlib}_LIBRARY_RELEASE} DESTINATION ${PV_INSTALL_LIB_DIR}) - GET_FILENAME_COMPONENT(QT_LIB_DIR_tmp ${QT_${qtlib}_LIBRARY_RELEASE} PATH) - GET_FILENAME_COMPONENT(QT_LIB_NAME_tmp ${QT_${qtlib}_LIBRARY_RELEASE} NAME) - FILE(GLOB QT_LIB_LIST RELATIVE ${QT_LIB_DIR_tmp} "${QT_${qtlib}_LIBRARY_RELEASE}*") - INSTALL(CODE " -MESSAGE(STATUS \"Installing \${CMAKE_INSTALL_PREFIX}/${PV_INSTALL_LIB_DIR}/${QT_LIB_NAME_tmp}\") -EXECUTE_PROCESS (WORKING_DIRECTORY ${QT_LIB_DIR_tmp} - COMMAND tar c ${QT_LIB_LIST} - COMMAND tar -xC \${CMAKE_INSTALL_PREFIX}/${PV_INSTALL_LIB_DIR}) - " COMPONENT Runtime) - ELSE (NOT WIN32) - GET_FILENAME_COMPONENT(QT_DLL_PATH_tmp ${QT_QMAKE_EXECUTABLE} PATH) - INSTALL(FILES ${QT_DLL_PATH_tmp}/${qtlib}4.dll DESTINATION ${PV_INSTALL_BIN_DIR} COMPONENT Runtime) - ENDIF (NOT WIN32) - ENDFOREACH(qtlib) - - # Now install the plugins for sqldrivers. - INSTALL(DIRECTORY ${QT_PLUGINS_DIR}/sqldrivers - DESTINATION ${PV_INSTALL_LIB_DIR} - COMPONENT Runtime - FILES_MATCHING - PATTERN "*.so" - PATTERN "*.dll") -ENDIF(NOT Q_WS_MAC) - -# Hard-coded install rules for anything left to install. These should -# probably go to a local cmake file. Change to match the build system's -# libraries -# INSTALL(FILES /usr/lib/libstdc++.so.5 /lib/libgcc_s.so.1 /usr/lib/libpng.so.3 /usr/lib/libexpat.so.0 /usr/lib/libfontconfig.so.1 /usr/lib/libfreetype.so.6 /lib/libz.so.1 DESTINATION ${PV_INSTALL_LIB_DIR} COMPONENT Runtime) - - -# Call this last so the install script runs after the above targets are installed: -# -IF(Q_WS_MAC) - SET(OSX_MAKE_STANDALONE_BUNDLE_CMAKE_SCRIPT "${ParaView_BINARY_DIR}/${PV_EXE_NAME}_OSX_MakeStandAloneBundle.cmake") - SET(OSX_MAKE_STANDALONE_BUNDLE_BASH_SCRIPT "${ParaView_BINARY_DIR}/${PV_EXE_NAME}_OSX_MakeStandAloneBundle.sh") - - SET (QT_SQLLITE_PLUGINS_DIR ${QT_PLUGINS_DIR}/sqldrivers) - - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/CompleteBundle.cmake.in" - "${OSX_MAKE_STANDALONE_BUNDLE_CMAKE_SCRIPT}" @ONLY IMMEDIATE) - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/CreateBundle.sh.in" - "${OSX_MAKE_STANDALONE_BUNDLE_BASH_SCRIPT}" @ONLY IMMEDIATE) - - INSTALL(SCRIPT "${OSX_MAKE_STANDALONE_BUNDLE_CMAKE_SCRIPT}" COMPONENT Bundle) -ENDIF(Q_WS_MAC) diff --git a/Applications/Client/CompleteBundle.cmake.in b/Applications/Client/CompleteBundle.cmake.in deleted file mode 100644 index d317137de1..0000000000 --- a/Applications/Client/CompleteBundle.cmake.in +++ /dev/null @@ -1,115 +0,0 @@ -# Make sure this CMake has BundleUtilities.cmake: -# -if(NOT EXISTS "${CMAKE_ROOT}/Modules/BundleUtilities.cmake") - message(FATAL_ERROR "error: BundleUtilities.cmake not found. Use CMake 2.6.4 or later.") -endif(NOT EXISTS "${CMAKE_ROOT}/Modules/BundleUtilities.cmake") - - -# Avoid following symlinks encountered during FILE GLOB_RECURSE calls: -# -if(COMMAND CMAKE_POLICY) - cmake_policy(SET CMP0009 NEW) -endif(COMMAND CMAKE_POLICY) - -# Allow include to do cmake_policy push/pops: -# -if(COMMAND CMAKE_POLICY) - cmake_policy(SET CMP0011 NEW) -endif(COMMAND CMAKE_POLICY) - - -# gp_item_default_embedded_path_override item default_embedded_path_var -# -# Return the path that others should refer to the item by when the item -# is embedded inside a bundle. -# -# This is a project-specific override of BundleUtilities.cmake's -# gp_item_default_embedded_path -# -function(gp_item_default_embedded_path_override item default_embedded_path_var) - - # By default, embed items as set by gp_item_default_embedded_path: - # - set(path "${${default_embedded_path_var}}") - - # But for ParaView... - # - # ...embed *.dylib in the Libraries folder: - # - if(item MATCHES "\\.dylib$") - set(path "@executable_path/../Libraries") - endif(item MATCHES "\\.dylib$") - - # ...embed *Plugin.dylib in the Plugins folder: - # - if(item MATCHES "Plugin\\.dylib$") - set(path "@executable_path/../Plugins") - endif(item MATCHES "Plugin\\.dylib$") - - # ...embed *.so in the Plugins folder: - # - if(item MATCHES "\\.so$") - set(path "@executable_path/../Plugins") - endif(item MATCHES "\\.so$") - - # ...embed *Python.so in the Libraries folder: - # - if(item MATCHES "Python\\.so$") - set(path "@executable_path/../Libraries") - endif(item MATCHES "Python\\.so$") - - set(${default_embedded_path_var} "${path}" PARENT_SCOPE) -endfunction(gp_item_default_embedded_path_override) - - -# Copy the .app bundle from the build tree to the install tree. -# Set up the InstallPrefix ENV var and execute the shell script: -# -if("$ENV{ParaView_CPACK_GENERATOR}" STREQUAL "DragNDrop") - set(InstallPrefix "${CMAKE_INSTALL_PREFIX}") -else() - set(InstallPrefix "$ENV{DESTDIR}/Applications") -endif() - -set(ENV{InstallPrefix} "${InstallPrefix}") - -execute_process(COMMAND "@OSX_MAKE_STANDALONE_BUNDLE_BASH_SCRIPT@") -set(bundle "${InstallPrefix}/ParaView @PARAVIEW_VERSION_MAJOR@.@PARAVIEW_VERSION_MINOR@.@PARAVIEW_VERSION_PATCH@.app") - -if(NOT EXISTS "${bundle}") - message(FATAL_ERROR "error: shell script did not put ParaView .app bundle in expected location: ${bundle}") -endif() - - -# Fixup the .app bundle in the install tree: -# -include(BundleUtilities) - -# Read the list of ParaView plugins from the file configured by ParaView: -# -file(READ "@ParaView_BINARY_DIR@/PluginList.txt" PluginList) - -# GLOB the list of Python.so files (treat them like plugins, too, for -# fixup_bundle purposes since they will not be pulled in automatically -# by dependency analysis) -# -file(GLOB PythonModules "@LIBRARY_OUTPUT_PATH@/*Python.so") - -# Additional libs may be found in: -# -set(libs_path "@LIBRARY_OUTPUT_PATH@") - -set(FFMPEG_avcodec_LIBRARY "@FFMPEG_avcodec_LIBRARY@") -if(FFMPEG_avcodec_LIBRARY) - get_filename_component(ffmpeg_lib_path "${FFMPEG_avcodec_LIBRARY}" PATH) - set(libs_path ${libs_path} ${ffmpeg_lib_path}) -endif() - - -# Fix it! -# -fixup_bundle( - "${bundle}" - "${PythonModules};${PluginList}" - "${libs_path}" - ) diff --git a/Applications/Client/CreateBundle.sh.in b/Applications/Client/CreateBundle.sh.in deleted file mode 100755 index 539e817e57..0000000000 --- a/Applications/Client/CreateBundle.sh.in +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh - -# InstallPrefix environment variable may be set by caller... -# If not, default to "$DESTDIR/Applications" -# -if [ "x$InstallPrefix" = "x" ]; then - InstallPrefix="$DESTDIR/Applications" - echo "info: Using default InstallPrefix value:" - echo " $InstallPrefix" -fi - -ParaViewBinaryDir="@ParaView_BINARY_DIR@" -ParaViewExeName="@PV_EXE_NAME@" -ParaView_App="@EXECUTABLE_OUTPUT_PATH@/$ParaViewExeName.app" - -# Remove the previous app package so we start with a clean bundle -# -echo "Remove previous bundle" -rm -rf "$InstallPrefix/ParaView @PARAVIEW_VERSION_MAJOR@.@PARAVIEW_VERSION_MINOR@.@PARAVIEW_VERSION_PATCH@.app" - - -# Copy paraview.app from the build tree to the install tree: -# -echo "Copy paraview.app from the build tree to $InstallPrefix/" -mkdir -p "$InstallPrefix" -cp -Rp "$ParaView_App" "$InstallPrefix/" -mv "$InstallPrefix/paraview.app" "$InstallPrefix/ParaView @PARAVIEW_VERSION_MAJOR@.@PARAVIEW_VERSION_MINOR@.@PARAVIEW_VERSION_PATCH@.app" - - -# Now operate on the bundle in the install tree: -# -ParaView_App="$InstallPrefix/ParaView @PARAVIEW_VERSION_MAJOR@.@PARAVIEW_VERSION_MINOR@.@PARAVIEW_VERSION_PATCH@.app" - -FrameworksDir="$ParaView_App/Contents/Frameworks" -LibrariesDir="$ParaView_App/Contents/Libraries" -PluginsDir="$ParaView_App/Contents/Plugins" -PythonDir="$ParaView_App/Contents/Python" -SupportDir="$ParaView_App/Contents/Support" - - -# Create directories in the install tree bundle -# -mkdir -p "$FrameworksDir" -mkdir -p "$LibrariesDir" -mkdir -p "$PluginsDir" -mkdir -p "$PythonDir" -mkdir -p "$SupportDir" - - -# Copy the documentation into the Support directory -# -echo "Copy Qt SQLite plugins for online documentation" -cp -Rp "@QT_SQLLITE_PLUGINS_DIR@" "$LibrariesDir/" - -# Copy the python scripts into the Python directory -# -echo "Copy python scripts" -cp -Rp "${ParaViewBinaryDir}/Utilities/VTKPythonWrapping/paraview" "$PythonDir/" - -# Remove unneeded build-byproduct files that were copied by the -# above recursive directory copies: -# -rm -rf "$PythonDir/paraview/pv_compile_complete" diff --git a/Applications/Client/ParaViewLogo.png b/Applications/Client/ParaViewLogo.png deleted file mode 100644 index 6591c62437831e72e5d3234821eb9aa34db42fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18008 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 a{M+usygKV@<bX%TFnGH9xvX<aXaWHLa*4G7 diff --git a/Applications/Client/Testing/Cxx/CMakeLists.txt b/Applications/Client/Testing/Cxx/CMakeLists.txt deleted file mode 100644 index 592a7d0f4c..0000000000 --- a/Applications/Client/Testing/Cxx/CMakeLists.txt +++ /dev/null @@ -1,81 +0,0 @@ - -INCLUDE_DIRECTORIES( - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} -) - -SET(PV_TEST_INIT_COMMAND "" CACHE STRING - "Command to run before a test begins. Multiple commands are separated by ';'.") -MARK_AS_ADVANCED(PV_TEST_INIT_COMMAND) - -SET(PV_TEST_CLEAN_COMMAND "" CACHE STRING - "Command to run after a failed test to cleanup processes. Example: \"killall -9 rsh paraview\"") -MARK_AS_ADVANCED(PV_TEST_CLEAN_COMMAND) - -SET(PV_TEST_SERVER_ROOT "localhost" CACHE STRING - "Node which serves as the root node for the cluster when testing in parallel") -MARK_AS_ADVANCED(PV_TEST_SERVER_ROOT) - -SET (PV_TEST_CLIENT "localhost" CACHE STRING - "Node which serves as the client node, used to connect from the server side in reverse connection mode.") -MARK_AS_ADVANCED(PV_TEST_CLIENT) - - -SET(ConnectionXMLs - ManualConnectCS - ManualConnectCS-rc - ManualConnectBuiltin - ManualConnectCRSDS - ManualConnectCRSDS-rc - ManualConnectCSRR - ManualConnectCRSDSRR - ) - -FOREACH(xml ${ConnectionXMLs}) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${xml}.xml.in - ${CMAKE_CURRENT_BINARY_DIR}/${xml}.xml - @ONLY IMMEDIATE ESCAPE_QUOTES) -ENDFOREACH(xml) - -SET(CONNECT_TO_SERVER_SCRIPT - ${CMAKE_CURRENT_BINARY_DIR}/ManualConnectCS.xml) - -SET(CONNECT_TO_SERVER_REVERSE_SCRIPT - ${CMAKE_CURRENT_BINARY_DIR}/ManualConnectCS-rc.xml) - -SET(CONNECT_TO_BUILTIN_SCRIPT - ${CMAKE_CURRENT_BINARY_DIR}/ManualConnectBuiltin.xml) - -SET(CONNECT_TO_RS_DS_SCRIPT - ${CMAKE_CURRENT_BINARY_DIR}/ManualConnectCRSDS.xml) - -SET(CONNECT_TO_RS_DS_REVERSE_SCRIPT - ${CMAKE_CURRENT_BINARY_DIR}/ManualConnectCRSDS-rc.xml) - -# client / server with remote rendering -SET(CONNECT_TO_SERVER_REMOTE_RENDER_SCRIPT - ${CMAKE_CURRENT_BINARY_DIR}/ManualConnectCSRR.xml) - -# client / data server / render server with remote rendering -SET(CONNECT_TO_RS_DS_REMOTE_RENDER_SCRIPT - ${CMAKE_CURRENT_BINARY_DIR}/ManualConnectCRSDSRR.xml) - -SET (PARAVIEW_CLIENT paraview) -SET (PARAVIEW_DATA_SERVER pvdataserver) -SET (PARAVIEW_SERVER pvserver) -SET (PARAVIEW_RENDER_SERVER pvrenderserver) -IF (APPLE) - SET (PARAVIEW_CLIENT paraview.app/Contents/MacOS/paraview) -ENDIF (APPLE) - -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/pvTestDriverConfig.h.in - ${CMAKE_CURRENT_BINARY_DIR}/pvTestDriverConfig.h @ONLY IMMEDIATE - ESCAPE_QUOTES) - -ADD_EXECUTABLE(pvTestDriver${PV_EXE_SUFFIX} pvTestDriver.cxx) -ADD_DEPENDENCIES(pvTestDriver${PV_EXE_SUFFIX} paraview${PV_EXE_SUFFIX}) -TARGET_LINK_LIBRARIES(pvTestDriver${PV_EXE_SUFFIX} vtksys) - -INSTALL(TARGETS pvTestDriver${PV_EXE_SUFFIX} - DESTINATION ${PV_EXE_INSTALL} - COMPONENT Runtime) diff --git a/Applications/Client/Testing/Cxx/ManualConnectBuiltin.xml.in b/Applications/Client/Testing/Cxx/ManualConnectBuiltin.xml.in deleted file mode 100644 index 952e9f7c7c..0000000000 --- a/Applications/Client/Testing/Cxx/ManualConnectBuiltin.xml.in +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- Start Disable LightKit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <!-- End Disable LightKit --> -</pqevents> diff --git a/Applications/Client/Testing/Cxx/ManualConnectCRSDS-rc.xml.in b/Applications/Client/Testing/Cxx/ManualConnectCRSDS-rc.xml.in deleted file mode 100644 index 893c809eb3..0000000000 --- a/Applications/Client/Testing/Cxx/ManualConnectCRSDS-rc.xml.in +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- - Connection script for Client-Server-Reverse Connection - --> - <!-- Start Disable LightKit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <!-- End Disable LightKit --> - - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionServerConnect" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/addServer" command="activate" arguments="" /> - <pqevent object="pqCreateServerStartupDialog/name" command="key" arguments="16777248" /> - <pqevent object="pqCreateServerStartupDialog/name" command="set_string" arguments="RenderServerDataServer-rc" /> - <pqevent object="pqCreateServerStartupDialog/type" command="set_string" arguments="Client / Data Server / Render Server (reverse connection)" /> - <pqevent object="pqCreateServerStartupDialog/dataServerHost" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/renderServerHost" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqEditServerStartupDialog/type" command="set_string" arguments="Manual" /> - <pqevent object="pqEditServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="mousePress" arguments="1,1,0,67,5,/0:0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="mouseRelease" arguments="1,0,0,67,5,/0:0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/connect" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/Cxx/ManualConnectCRSDS.xml.in b/Applications/Client/Testing/Cxx/ManualConnectCRSDS.xml.in deleted file mode 100644 index a24c2775c4..0000000000 --- a/Applications/Client/Testing/Cxx/ManualConnectCRSDS.xml.in +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- Start Disable LightKit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <!-- End Disable LightKit --> - - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionServerConnect" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/addServer" command="activate" arguments="" /> - <pqevent object="pqCreateServerStartupDialog/name" command="set_string" arguments="RenderServerDataServer" /> - <pqevent object="pqCreateServerStartupDialog/type" command="set_string" arguments="Client / Data Server / Render Server" /> - <pqevent object="pqCreateServerStartupDialog/dataServerHost" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/renderServerHost" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqEditServerStartupDialog/type" command="set_string" arguments="Manual" /> - <pqevent object="pqEditServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="currentChanged" arguments="/0|0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/connect" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/Cxx/ManualConnectCRSDSRR.xml.in b/Applications/Client/Testing/Cxx/ManualConnectCRSDSRR.xml.in deleted file mode 100644 index 50f8716bee..0000000000 --- a/Applications/Client/Testing/Cxx/ManualConnectCRSDSRR.xml.in +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- Start Disable LightKit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <!-- End Disable LightKit --> - - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionServerConnect" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/addServer" command="activate" arguments="" /> - <pqevent object="pqCreateServerStartupDialog/name" command="set_string" arguments="RenderServerDataServer" /> - <pqevent object="pqCreateServerStartupDialog/type" command="set_string" arguments="Client / Data Server / Render Server" /> - <pqevent object="pqCreateServerStartupDialog/dataServerHost" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/renderServerHost" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqEditServerStartupDialog/type" command="set_string" arguments="Manual" /> - <pqevent object="pqEditServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="currentChanged" arguments="/0|0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/connect" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditSettings" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mousePress" arguments="1,1,0,-13,10,/1:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mouseRelease" arguments="1,0,0,-13,10,/1:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mousePress" arguments="1,1,0,36,8,/1:0/2:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mouseRelease" arguments="1,0,0,36,8,/1:0/2:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqGlobalRenderViewOptions/stackedWidget/Server/compositingParameters/compositeThreshold" command="set_int" arguments="0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/Cxx/ManualConnectCS-rc.xml.in b/Applications/Client/Testing/Cxx/ManualConnectCS-rc.xml.in deleted file mode 100644 index 8d7f2e099e..0000000000 --- a/Applications/Client/Testing/Cxx/ManualConnectCS-rc.xml.in +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- - Connection script for Client-Server-Reverse Connection - --> - <!-- Start Disable LightKit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <!-- End Disable LightKit --> - - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionServerConnect" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/addServer" command="activate" arguments="" /> - <pqevent object="pqCreateServerStartupDialog/name" command="set_string" arguments="ConnectCS-rc" /> - <pqevent object="pqCreateServerStartupDialog/type" command="set_string" arguments="Client / Server (reverse connection)" /> - <pqevent object="pqCreateServerStartupDialog/host" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqEditServerStartupDialog/type" command="set_string" arguments="Manual" /> - <pqevent object="pqEditServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="mousePress" arguments="1,1,0,67,5,/0:0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="mouseRelease" arguments="1,0,0,67,5,/0:0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/connect" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/Cxx/ManualConnectCS.xml.in b/Applications/Client/Testing/Cxx/ManualConnectCS.xml.in deleted file mode 100644 index 2baebe8df3..0000000000 --- a/Applications/Client/Testing/Cxx/ManualConnectCS.xml.in +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- Start Disable LightKit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <!-- End Disable LightKit --> - - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionServerConnect" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/addServer" command="activate" arguments="" /> - <pqevent object="pqCreateServerStartupDialog/name" command="set_string" arguments="ConnectCS" /> - <pqevent object="pqCreateServerStartupDialog/host" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqEditServerStartupDialog/type" command="set_string" arguments="Manual" /> - <pqevent object="pqEditServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="currentChanged" arguments="/0|0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/connect" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/Cxx/ManualConnectCSRR.xml.in b/Applications/Client/Testing/Cxx/ManualConnectCSRR.xml.in deleted file mode 100644 index 7432c951e2..0000000000 --- a/Applications/Client/Testing/Cxx/ManualConnectCSRR.xml.in +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- Start Disable LightKit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,35,11,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,14,11" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,15,6" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <!-- End Disable LightKit --> - - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionServerConnect" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/addServer" command="activate" arguments="" /> - <pqevent object="pqCreateServerStartupDialog/name" command="set_string" arguments="ConnectCS" /> - <pqevent object="pqCreateServerStartupDialog/host" command="set_string" arguments="@PV_TEST_SERVER_ROOT@" /> - <pqevent object="pqCreateServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqEditServerStartupDialog/type" command="set_string" arguments="Manual" /> - <pqevent object="pqEditServerStartupDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/startups" command="currentChanged" arguments="/0|0" /> - <pqevent object="pqClientMainWindow/ServerStartupBrowser/connect" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditSettings" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mousePress" arguments="1,1,0,-13,10,/1:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mouseRelease" arguments="1,0,0,-13,10,/1:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mousePress" arguments="1,1,0,36,8,/1:0/2:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mouseRelease" arguments="1,0,0,36,8,/1:0/2:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqGlobalRenderViewOptions/stackedWidget/Server/compositingParameters/compositeThreshold" command="set_int" arguments="0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/Python/HistogramChart.py b/Applications/Client/Testing/Python/HistogramChart.py deleted file mode 100644 index 40da59b641..0000000000 --- a/Applications/Client/Testing/Python/HistogramChart.py +++ /dev/null @@ -1,25 +0,0 @@ -#/usr/bin/env python - -import QtTesting -import QtTestingImage - -object1 = 'pqClientMainWindow/menubar/menuFile' -QtTesting.playCommand(object1, 'activate', 'actionFileLoadServerState') -object2 = 'pqClientMainWindow/ServerStartupBrowser/connect' -QtTesting.playCommand(object2, 'activate', '') -object3 = 'pqClientMainWindow/FileLoadServerStateDialog' -QtTesting.playCommand(object3, 'filesSelected', '$PARAVIEW_DATA_ROOT/Data/LoadStateHistogram.pvsm') -object4 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView' -QtTesting.playCommand(object4, 'currentChanged', '/0/0/0|0') -object5 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0' -QtTesting.playCommand(object5, 'set_tab', '1') -QtTesting.playCommand(object5, 'set_tab', '0') -object6 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BinCount' -QtTesting.playCommand(object6, 'set_string', '1') -QtTesting.playCommand(object6, 'set_string', '16') -object7 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept' -QtTesting.playCommand(object7, 'activate', '') - -object8 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/PlotWidget' -QtTestingImage.compareImage(object8, 'HistogramChart.png', 400, 200) - diff --git a/Applications/Client/Testing/Python/OpenHelp.py b/Applications/Client/Testing/Python/OpenHelp.py deleted file mode 100644 index 263b60d939..0000000000 --- a/Applications/Client/Testing/Python/OpenHelp.py +++ /dev/null @@ -1,13 +0,0 @@ -#/usr/bin/env python - -import QtTesting -import time - -object1 = 'pqClientMainWindow/menubar/menuHelp' -QtTesting.playCommand(object1, 'activate', 'actionHelpHelp') - -# since this starts a new process, we'll wait for a bit -# before finishing the test, to give the other process -# time to report an error condition -time.sleep(5) - diff --git a/Applications/Client/Testing/Python/ToolBarAndMenus.py b/Applications/Client/Testing/Python/ToolBarAndMenus.py deleted file mode 100644 index 8cbdbcbbc7..0000000000 --- a/Applications/Client/Testing/Python/ToolBarAndMenus.py +++ /dev/null @@ -1,27 +0,0 @@ - -import QtTesting - -exceptionsList = [ 'pqClientMainWindow/variableToolbar/QWidgetAction0', - 'pqClientMainWindow/representationToolbar/QWidgetAction0', - 'pqClientMainWindow/mainToolBar/QAction1', - 'pqClientMainWindow/mainToolBar/QAction2', - 'pqClientMainWindow/currentTimeToolbar/QWidgetAction0', - 'pqClientMainWindow/currentTimeToolbar/QWidgetAction1', - 'pqClientMainWindow/currentTimeToolbar/QWidgetAction2', - 'pqClientMainWindow/actionEditColorMap', - 'pqClientMainWindow/actionResetRange' - ] - -# test that all actions in the tool bars are in the menus -missingActionsString = QtTesting.invokeMethod('pqClientMainWindow', 'findToolBarActionsNotInMenus') -missingActions = missingActionsString.split(',') -numMissing = 0 -for str in missingActions: - str = str.strip() - if str not in exceptionsList: - numMissing = numMissing + 1 - print 'missing action: ' + str - -if numMissing != 0: - raise ValueError('Some actions are missing from the menu') - diff --git a/Applications/Client/Testing/XML/CalcParens.xml b/Applications/Client/Testing/XML/CalcParens.xml deleted file mode 100644 index 18f5dd8ebb..0000000000 --- a/Applications/Client/Testing/XML/CalcParens.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="key" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="set_string" arguments="-s" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="set_string" arguments="-si" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="set_string" arguments="-sin" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LeftParentheses" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> - <pqevent object="1QMenu0" command="activate" arguments="RTData" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/RightParentheses" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Result" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="DataSetTriangleFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Calculator.xml b/Applications/Client/Testing/XML/Calculator.xml deleted file mode 100644 index 64135f6800..0000000000 --- a/Applications/Client/Testing/XML/Calculator.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Calculator" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> - <pqevent object="1QMenu0" command="activate" arguments="Normals_X" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/iHat" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Plus" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/sqrt" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LeftParentheses" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> - <pqevent object="1QMenu0" command="activate" arguments="Normals_Y" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/RightParentheses" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/jHat" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Plus" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> - <pqevent object="1QMenu0" command="activate" arguments="Normals_Z" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/kHat" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="WarpVector" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SelectInputVectors" command="set_string" arguments="Result" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Result" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewZoomToData" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ChartOptions.xml b/Applications/Client/Testing/XML/ChartOptions.xml deleted file mode 100644 index 41c423f041..0000000000 --- a/Applications/Client/Testing/XML/ChartOptions.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/DataAnalysis" command="activate" arguments="ProbeLine" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="set_string" arguments="m" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="set_string" arguments="my " /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="key" arguments="32" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="set_string" arguments="my ch" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="set_string" arguments="my ch" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="set_string" arguments="my char" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="set_string" arguments="my char" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/ChartTitle" command="set_string" arguments="my chart" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/LegendLocation" command="set_string" arguments="Bottom" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/General/LegendFlow" command="set_string" arguments="Left to Right" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/PageNames" command="mousePress" arguments="1,1,0,46,9,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/PageNames" command="mouseRelease" arguments="1,0,0,46,9,/1:0" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/Axis/LabelPrecision" command="spin" arguments="up" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/Axis/LabelNotation" command="set_string" arguments="Exponential" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/Axis/ShowAxisGrid" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/PageNames" command="mousePress" arguments="1,1,0,60,7,/2:0" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/PageNames" command="mouseRelease" arguments="1,0,0,60,7,/2:0" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/Axis/ShowAxis" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/Axis/ShowAxis" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/Axis/ShowAxisLabels" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/Stack/pqChartOptionsWidget/ChartPages/Axis/ShowAxisLabels" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveChartOptions/CloseButton" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Clip.xml b/Applications/Client/Testing/XML/Clip.xml deleted file mode 100644 index 59b8483451..0000000000 --- a/Applications/Client/Testing/XML/Clip.xml +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- - This test tests different aspects of using the Clip panel/filter including: - * undo/redo - * clip plane linking - --> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton6" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton7" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton5" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Common" command="activate" arguments="Clip" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="ACCL" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Components" command="set_string" arguments="X" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton2" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/InsideOut" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsManageLinks" /> - <pqevent object="pqClientMainWindow/pqLinksManager/addButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mousePress" arguments="1,1,0,-10,16,/1:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mouseRelease" arguments="1,0,0,-10,16,/1:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mousePress" arguments="1,1,0,-13,8,/1:0/1:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mouseRelease" arguments="1,0,0,-13,8,/1:0/1:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mousePress" arguments="1,1,0,16,7,/1:0/1:0/0:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mouseRelease" arguments="1,0,0,16,7,/1:0/1:0/0:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mousePress" arguments="1,1,0,-13,12,/1:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mouseRelease" arguments="1,0,0,-13,12,/1:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mousePress" arguments="1,1,0,-9,10,/1:0/3:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mouseRelease" arguments="1,0,0,-9,10,/1:0/3:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mousePress" arguments="1,1,0,10,9,/1:0/3:0/0:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mouseRelease" arguments="1,0,0,10,9,/1:0/3:0/0:0" /> - <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/buttonBox/1QPushButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pqLinksManager/buttonBox/1QPushButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,49,13,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,49,13,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useXNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/show3DWidget" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,51,12,/0:0/1:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,51,12,/0:0/1:0/0:0" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ColorEditor2.xml b/Applications/Client/Testing/XML/ColorEditor2.xml deleted file mode 100644 index 961798a661..0000000000 --- a/Applications/Client/Testing/XML/ColorEditor2.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SuperquadricSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.503536,0.334944,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.506365,0.47182,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.506365,0.47182,1,0,0)" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="TextureCoords" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.483734,0.690821,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.483734,0.648953,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.483734,0.648953,1,0,0)" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/ColorSpace" command="set_string" arguments="Wrapped HSV" /> - <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/UseAutoRescale" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/RescaleButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqRescaleRangeDialog/MinimumScalar" command="key" arguments="46" /> - <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqRescaleRangeDialog/MinimumScalar" command="set_string" arguments=".5" /> - <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqRescaleRangeDialog/RescaleButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pqColorScaleDialog/CloseButton" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Contour.xml b/Applications/Client/Testing/XML/Contour.xml deleted file mode 100644 index 6f8639aa26..0000000000 --- a/Applications/Client/Testing/XML/Contour.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_2.vts" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="false" /> - - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Contour" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ContourRange.xml b/Applications/Client/Testing/XML/ContourRange.xml deleted file mode 100644 index dadd4590b2..0000000000 --- a/Applications/Client/Testing/XML/ContourRange.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_2.vts" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Contour" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup1/pqSampleScalarWidget/NewRange" command="activate" arguments="" /> - <pqevent object="pqSampleScalarAddRangeDialog/from" command="set_string" arguments="." /> - <pqevent object="pqSampleScalarAddRangeDialog/from" command="set_string" arguments=".2" /> - <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments="" /> - <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments="." /> - <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments=".6" /> - <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="" /> - <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="10" /> - <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="10" /> - <pqevent object="pqSampleScalarAddRangeDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Momentum" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/CreateAndLoadLookmark.xml b/Applications/Client/Testing/XML/CreateAndLoadLookmark.xml deleted file mode 100644 index 527495c001..0000000000 --- a/Applications/Client/Testing/XML/CreateAndLoadLookmark.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_2.vts" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Threshold" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="100" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="36" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractEdges" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsCreateLookmark" /> - <pqevent object="pqClientMainWindow/pqLookmarkDefinitionWizard/InputFrame/LookmarkName" command="set_string" arguments="My New Lookmark" /> - <pqevent object="pqClientMainWindow/pqLookmarkDefinitionWizard/InputFrame/FinishButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,57,13,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,57,13,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Lookmark Inspector" /> - <pqevent object="pqClientMainWindow/lookmarkInspectorDock/lookmarkInspector/ButtonFrame/LoadButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/lookmarkInspectorDock/lookmarkInspector/ButtonFrame/DeleteButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/lookmarkInspectorDock/1QDockWidgetTitleButton1" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/CustomSourceProbe.xml b/Applications/Client/Testing/XML/CustomSourceProbe.xml deleted file mode 100644 index becb6cf0df..0000000000 --- a/Applications/Client/Testing/XML/CustomSourceProbe.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/disk_out_ref.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton5" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton7" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton6" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton2" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,117,44," /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,117,44," /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,95,12,/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,95,12,/0:0/0:0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Probe" /> - <pqevent object="pqClientMainWindow/SelectInputDialog/InputFrame/qt_scrollarea_viewport/InputContainer/Source" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/SelectInputDialog/Sources" command="mousePress" arguments="1,1,0,33,10,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/SelectInputDialog/Sources" command="mouseRelease" arguments="1,0,0,33,10,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/SelectInputDialog/OkButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="V" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/CutMulti.xml b/Applications/Client/Testing/XML/CutMulti.xml deleted file mode 100644 index 1822066a46..0000000000 --- a/Applications/Client/Testing/XML/CutMulti.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Outline" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Cut" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqSampleScalarWidget/NewRange" command="activate" arguments="" /> - <pqevent object="pqSampleScalarAddRangeDialog/from" command="set_string" arguments="-" /> - <pqevent object="pqSampleScalarAddRangeDialog/from" command="set_string" arguments="-." /> - <pqevent object="pqSampleScalarAddRangeDialog/from" command="set_string" arguments="-.5" /> - <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments="" /> - <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments="." /> - <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments=".5" /> - <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="" /> - <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="20" /> - <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="20" /> - <pqevent object="pqSampleScalarAddRangeDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/show3DWidget" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/D3SmallCells.xml b/Applications/Client/Testing/XML/D3SmallCells.xml deleted file mode 100644 index 28fe9c2e79..0000000000 --- a/Applications/Client/Testing/XML/D3SmallCells.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" ?> - -<!-- Small cells increase the potential of D3 resolving two distinct points - as the same point. This test creates a simple unstructured grid with - small cells and runs it through D3, making sure it creates ghost cells - to see if any points are mistakenly resolved (and thus cells become - degenerate and the surface gets mangled). --> - -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="0.001" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="D3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="PointDataToCellData" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/DualSphereAnimation.xml b/Applications/Client/Testing/XML/DualSphereAnimation.xml deleted file mode 100644 index 4ed4e1a7ca..0000000000 --- a/Applications/Client/Testing/XML/DualSphereAnimation.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/dualSphereAnimation.pvd" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRFirstFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRNextFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRNextFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRNextFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRNextFrame" /> - <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="set_int" arguments="1" /> - <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="key" arguments="16777221" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ExTimeseries.xml b/Applications/Client/Testing/XML/ExTimeseries.xml deleted file mode 100644 index 4fada7f2b4..0000000000 --- a/Applications/Client/Testing/XML/ExTimeseries.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/ExRestarts/blow.ex-timeseries" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.597285,0.519305,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.369532,0.540541,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.369532,0.540541,1,0,0)" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="THICKNESS" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton2" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ExodusIIPanel.xml b/Applications/Client/Testing/XML/ExodusIIPanel.xml deleted file mode 100644 index 16944ad4f7..0000000000 --- a/Applications/Client/Testing/XML/ExodusIIPanel.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/tube.exii" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="ObjectId" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="cellNormals" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="ObjectId" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ExodusModeShapes.xml b/Applications/Client/Testing/XML/ExodusModeShapes.xml deleted file mode 100644 index 47dabed7eb..0000000000 --- a/Applications/Client/Testing/XML/ExodusModeShapes.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/modeShapesGroup/HasModeShapes" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/modeShapesGroup/ModeShapeOptions/ModeSelectSlider" command="set_int" arguments="36" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="ObjectId" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ExodusWriter.xml b/Applications/Client/Testing/XML/ExodusWriter.xml deleted file mode 100644 index 9345a6accf..0000000000 --- a/Applications/Client/Testing/XML/ExodusWriter.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton5" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileSaveData" /> - <pqevent object="pqClientMainWindow/FileSaveDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/junk.ex2" /> - <pqevent object="pqWriterDialog/PropertyFrame/WriteAllTimeSteps" command="set_boolean" arguments="true" /> - <pqevent object="pqWriterDialog/buttonBox/1QPushButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/junk.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ExodusXML.xml b/Applications/Client/Testing/XML/ExodusXML.xml deleted file mode 100644 index 487b17a76d..0000000000 --- a/Applications/Client/Testing/XML/ExodusXML.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/tube.exo" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="ObjectId" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> - - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="1.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="2.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="2.0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="3.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="3.0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="0.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="0.0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_2/Materials" command="setCheckState" arguments="0.0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_2/Materials" command="setCheckState" arguments="0.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ExtractBlock.xml b/Applications/Client/Testing/XML/ExtractBlock.xml deleted file mode 100644 index 3d8d92ecbe..0000000000 --- a/Applications/Client/Testing/XML/ExtractBlock.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.ImageData.Collection.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractBlock" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.0,0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0,0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.1,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.2,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.4,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.6,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Contour" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqContourControls/ComputeScalars" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,14,13,/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,14,13,/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="Solid Color" /> -</pqevents> - diff --git a/Applications/Client/Testing/XML/ExtractLevel.xml b/Applications/Client/Testing/XML/ExtractLevel.xml deleted file mode 100644 index d37df7fd29..0000000000 --- a/Applications/Client/Testing/XML/ExtractLevel.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="HierarchicalFractal" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GhostLevels" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractHierarchicalLevel" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.5,0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0,0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.3,0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.4,0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.5,0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.4,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface With Edges" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="Depth" /> - <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/FFTOverTime.xml b/Applications/Client/Testing/XML/FFTOverTime.xml deleted file mode 100644 index b09baf0336..0000000000 --- a/Applications/Client/Testing/XML/FFTOverTime.xml +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionTesting_Window_Size" /> - <pqevent object="pqClientMainWindow/selectionToolbar/1QToolButton1" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.433333,0.666667,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.433333,0.666667,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.433333,0.666667,1,0,0)" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="FFTSelectionOverTime" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Selection/pushButtonCopySelection" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TableToPolyData" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CoordinateResults" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> - <pqevent object="1QMenu0" command="activate" arguments="EQPS_X" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/iHat" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Plus" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> - <pqevent object="1QMenu0" command="activate" arguments="EQPS_Y" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/jHat" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton7" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="EQPS" /> - <pqevent object="pqClientMainWindow/axesToolbar/1QToolButton0" command="set_boolean" arguments="false" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Flow.xml b/Applications/Client/Testing/XML/Flow.xml deleted file mode 100644 index d0d1a7d2ec..0000000000 --- a/Applications/Client/Testing/XML/Flow.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_1.vts" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton5" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_0" command="set_int" arguments="22" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_1" command="set_int" arguments="31" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_2" command="set_int" arguments="21" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_3" command="set_int" arguments="29" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_4" command="set_int" arguments="14" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_5" command="set_int" arguments="19" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewZoomToData" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/show3DWidget" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="SurfaceVectors" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Glyph" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Solid Color" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Flow2.xml b/Applications/Client/Testing/XML/Flow2.xml deleted file mode 100644 index 4aa2251f14..0000000000 --- a/Applications/Client/Testing/XML/Flow2.xml +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/RectGrid2.vtk" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originX" command="set_string" arguments="-0.08" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originX" command="set_string" arguments="-0.088" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originX" command="set_string" arguments="-0.0889" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="key" arguments="16777219" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="key" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="key" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.17" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.171" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.0171" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originZ" command="set_string" arguments="0.435" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalZ" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="IntegrateFlowThroughSurface" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton6" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LockScaleFactor" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="key" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="set_string" arguments="0.5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="IntegrateAttributes" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton6" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Source/1QComboBox0" command="set_string" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LockScaleFactor" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="key" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="set_string" arguments="0.5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleMode" command="set_string" arguments="off" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0/1/0|0" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0" command="contextMenu" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter" command="contextMenu" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame" command="contextMenu" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager" command="contextMenu" arguments="" /> - <pqevent object="pqClientMainWindow" command="contextMenu" arguments="" /> - - <!-- hide orientation axes since on some dashboards it's not resized correctly --> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditViewSettings" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,47,5,/2:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,47,5,/2:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mousePress" arguments="1,1,0,14,13" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mouseRelease" arguments="1,0,0,14,13" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Fractal2D.xml b/Applications/Client/Testing/XML/Fractal2D.xml deleted file mode 100644 index 0aa52a1a50..0000000000 --- a/Applications/Client/Testing/XML/Fractal2D.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="HierarchicalFractal" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumLevel/Slider" command="set_int" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent - object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="vtkAMRLevel" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Fractal Volume Fraction" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/GlobalProperties.xml b/Applications/Client/Testing/XML/GlobalProperties.xml deleted file mode 100644 index 61ffdb0ab1..0000000000 --- a/Applications/Client/Testing/XML/GlobalProperties.xml +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0" ?> -<!-- - This test sets up some global property links and the changes the global - property values (does some undo/redo) and saves state. - Then changes the global property values and reloads the state. - We see that global links are indeed loaded correctly from the state file as - well! ---> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TransformFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/scaleX" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/show3DWidget" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionX" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector" command="mousePress" arguments="1,1,0,62,29" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector" command="mouseRelease" arguments="1,0,0,62,29" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector" command="mousePress" arguments="1,1,0,62,28" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector" command="mouseRelease" arguments="1,0,0,62,28" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,9,13,/0:0/0:1" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,9,13,/0:0/0:1" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionX" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/axesToolbar/1QToolButton0" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_hcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,126,8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_hcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,199,9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_hcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,199,9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="TextAnnotationColor" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="EdgeColor" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="ForegroundColor" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="SelectionColor" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="ForegroundColor" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditSettings" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mousePress" arguments="1,1,0,34,8,/1:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mouseRelease" arguments="1,0,0,34,8,/1:0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/ForegroundColor" command="setChosenColor" arguments="0,85,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/SelectionColor" command="setChosenColor" arguments="255,255,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/EdgeColor" command="setChosenColor" arguments="0,0,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/TextAnnotationColor" command="setChosenColor" arguments="0,0,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> - - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditSettings" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/BackgroundColor" command="setChosenColor" arguments="255,255,255" /> - - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditSettings" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/BackgroundColor" command="setChosenColor" arguments="85,85,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileSaveServerState" /> - <pqevent object="pqClientMainWindow/FileSaveServerStateDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/GlobalProperties.state.pvsm" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditSettings" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/ForegroundColor" command="setChosenColor" arguments="255,255,255" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/BackgroundColor" command="setChosenColor" arguments="0,0,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/SelectionColor" command="setChosenColor" arguments="170,0,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/EdgeColor" command="setChosenColor" arguments="0,0,0" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/1QMessageBox0/qt_msgbox_buttonbox/1QPushButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileLoadServerState" /> - <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/GlobalProperties.state.pvsm" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ImageShrink.xml b/Applications/Client/Testing/XML/ImageShrink.xml deleted file mode 100644 index d795166f7e..0000000000 --- a/Applications/Client/Testing/XML/ImageShrink.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Hierarchical Fractal" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Wireframe" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ImageShrink" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ShrinkFactors_0" command="set_int" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ShrinkFactors_0" command="set_int" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ShrinkFactors_0" command="set_int" arguments="4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ShrinkFactors_1" command="set_int" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ShrinkFactors_1" command="set_int" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ShrinkFactors_1" command="set_int" arguments="4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/LinePlot.xml b/Applications/Client/Testing/XML/LinePlot.xml deleted file mode 100644 index fb7e2de984..0000000000 --- a/Applications/Client/Testing/XML/LinePlot.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" - command="activate" arguments="ProbeLine" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.474684,0.122288,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.474684,0.122288,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.474684,0.122288,1,0,0)" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/LoadStateHistogram.xml b/Applications/Client/Testing/XML/LoadStateHistogram.xml deleted file mode 100644 index f400586e10..0000000000 --- a/Applications/Client/Testing/XML/LoadStateHistogram.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileLoadServerState" /> - <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/LoadStateHistogram.pvsm" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BinCount/LineEdit" command="set_string" arguments="91" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BinCount/LineEdit" command="set_string" arguments="91" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/NormalGlyphs.xml b/Applications/Client/Testing/XML/NormalGlyphs.xml deleted file mode 100644 index 78259706ef..0000000000 --- a/Applications/Client/Testing/XML/NormalGlyphs.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- Turn off orientation axis annotation --> - <pqevent object="pqClientMainWindow/axesToolbar/1QToolButton0" command="set_boolean" arguments="false" /> - - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,23,4,/2:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,23,4,/2:0" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mousePress" arguments="1,1,0,32,7" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mouseRelease" arguments="1,0,0,32,7" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - - <!-- Create a simple multiblock source --> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CubeSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton9" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - - <!-- Add normal glyphs --> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="NormalGlyphs" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - - <!-- Add a second box with glyphs in non-random masking --> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,50,8,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,50,8,/0:0/0:0/0:0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TransformFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionX" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionY" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,10,6,/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,10,6,/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="NormalGlyphs" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Glyph Random Mode" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - - <!-- Adjust the camera to see all glyphs --> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.567213,0.652655,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.686885,0.705752,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.686885,0.705752,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.654098,0.475664,2,2,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.654098,0.621681,2,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.654098,0.621681,2,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0" command="contextMenu" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter" command="contextMenu" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame" command="contextMenu" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/ObjectInspectorSphere.xml b/Applications/Client/Testing/XML/ObjectInspectorSphere.xml deleted file mode 100644 index 21f8b00ec4..0000000000 --- a/Applications/Client/Testing/XML/ObjectInspectorSphere.xml +++ /dev/null @@ -1,79 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="179" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="178" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="177" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="176" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="175" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="174" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="173" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="172" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="171" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="170" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="169" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="168" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="167" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="166" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="165" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="164" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="163" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="162" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="161" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="160" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="159" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="158" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="157" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="359" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="358" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="357" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="356" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="355" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="354" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="353" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="352" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="351" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="350" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="349" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="348" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="347" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="346" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="345" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="344" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="343" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="342" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="341" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="340" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="7" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="11" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="12" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="13" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="14" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="15" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="16" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="17" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="18" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="7" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="11" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="12" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/OpenFile.xml b/Applications/Client/Testing/XML/OpenFile.xml deleted file mode 100644 index eff61191b4..0000000000 --- a/Applications/Client/Testing/XML/OpenFile.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/box.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="PedigreeNodeId" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/OpenSaveData.xml b/Applications/Client/Testing/XML/OpenSaveData.xml deleted file mode 100644 index c9ff989b8d..0000000000 --- a/Applications/Client/Testing/XML/OpenSaveData.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_0.vts" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileSaveData" /> - <pqevent object="pqClientMainWindow/FileSaveDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/junk.pvd" /> - <pqevent object="pqWriterDialog/buttonBox/1QPushButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionDelete_All" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/junk.pvd" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Plot3DReader.xml b/Applications/Client/Testing/XML/Plot3DReader.xml deleted file mode 100644 index 27b76973e8..0000000000 --- a/Applications/Client/Testing/XML/Plot3DReader.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/combxyz.bin" /> - <pqevent object="pqSelectReaderDialog/listWidget" command="currentChanged" arguments="/1|0" /> - <pqevent object="pqSelectReaderDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/QFileName/FileButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/QFileName/pqFileDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/combq.bin" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Density" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/PlotEdges.xml b/Applications/Client/Testing/XML/PlotEdges.xml deleted file mode 100644 index 2e7bbd36b8..0000000000 --- a/Applications/Client/Testing/XML/PlotEdges.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="DataSetSurfaceFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" - command="activate" arguments="PlotOnSortedLines" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.0355487,0.345144,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.0355487,0.345144,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.0355487,0.345144,1,0,0)" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,15,13,/0:0/0:0/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,15,13,/0:0/0:0/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="arc_length" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/PlotEdges2.xml b/Applications/Client/Testing/XML/PlotEdges2.xml deleted file mode 100644 index e6fe5cbe14..0000000000 --- a/Applications/Client/Testing/XML/PlotEdges2.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CylinderSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="20" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="set_string" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CylinderSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="20" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="20" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="key" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="set_string" arguments="-3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,48,3,/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,48,3,/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="keyEvent" arguments="6,16777248,33554432,,0,1" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,33554432,55,9,/0:0/1:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,33554432,55,9,/0:0/1:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="keyEvent" arguments="7,16777248,0,,0,1" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="AppendPolyData" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="DataSetSurfaceFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" - command="activate" arguments="PlotOnSortedLines" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView/qt_scrollarea_vcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,10,64" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,10,93" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,10,93" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.327666,0.251969,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.327666,0.251969,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.327666,0.251969,1,0,0)" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,10,8,/0:0/2:0/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,10,8,/0:0/2:0/0:0/0:0/0:1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="arc_length" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/PropertyLink.xml b/Applications/Client/Testing/XML/PropertyLink.xml deleted file mode 100644 index 64484125e5..0000000000 --- a/Applications/Client/Testing/XML/PropertyLink.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileLoadServerState" /> - <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/PropertyLink.pvsm" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="0.4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/PythonProgrammableFilter.xml b/Applications/Client/Testing/XML/PythonProgrammableFilter.xml deleted file mode 100644 index 014fc8477d..0000000000 --- a/Applications/Client/Testing/XML/PythonProgrammableFilter.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Programmable Filter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Script" command="set_string" arguments="pdi = self.GetPolyDataInput()
pdo = self.GetPolyDataOutput()
newPts = vtk.vtkPoints()
numPts = pdi.GetNumberOfPoints()
for i in range(0, numPts):
 coord = pdi.GetPoint(i)
 x,y,z = coord[:3]
 x = x * 2
 y = y * 0.5
 z = 1
 newPts.InsertPoint(i, x,y,z)
pdo.SetPoints(newPts)" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.159357,0.247148,2,2,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.159357,0.095057,2,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.159357,0.095057,2,0,0)" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/RectilinearFractal.xml b/Applications/Client/Testing/XML/RectilinearFractal.xml deleted file mode 100644 index c39ada413f..0000000000 --- a/Applications/Client/Testing/XML/RectilinearFractal.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="HierarchicalFractal" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumLevel/Slider" command="set_int" arguments="4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumLevel/Slider" command="set_int" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TwoDimensional" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Asymetric" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/RectilinearGrids" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Fractal Volume Fraction" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/RepresentationSelector.xml b/Applications/Client/Testing/XML/RepresentationSelector.xml deleted file mode 100644 index 851a51358b..0000000000 --- a/Applications/Client/Testing/XML/RepresentationSelector.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cone" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="key" arguments="16777220" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Plane" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/XResolution" command="set_string" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/YResolution" command="set_string" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Wireframe" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Outline" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Points" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/1|0" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Wireframe" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/SPTimeseries.xml b/Applications/Client/Testing/XML/SPTimeseries.xml deleted file mode 100644 index 351f74caba..0000000000 --- a/Applications/Client/Testing/XML/SPTimeseries.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/SPCTH/restarted/sample.spcth-timeseries" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_vcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,12,89" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,9,206" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,9,206" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus/qt_scrollarea_vcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,4,69" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,7,166" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,7,166" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus" command="mousePress" arguments="1,1,0,11,7,/11:0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus" command="mouseRelease" arguments="1,0,0,11,7,/11:0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="CTHPart" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton2" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/SaveCSV.xml b/Applications/Client/Testing/XML/SaveCSV.xml deleted file mode 100644 index 46535a0d33..0000000000 --- a/Applications/Client/Testing/XML/SaveCSV.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton5" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileSaveData" /> - <pqevent object="pqClientMainWindow/FileSaveDialog" command="remove" arguments="$PARAVIEW_TEST_ROOT/SaveCSV0.csv" /> - <pqevent object="pqClientMainWindow/FileSaveDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/SaveCSV.csv" /> - <pqevent object="pqWriterDialog/buttonBox/1QPushButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/SaveCSV0.csv" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TableToPolyData" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/XColumn" command="set_string" arguments="Points:0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/YColumn" command="set_string" arguments="Points:1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ZColumn" command="set_string" arguments="Points:2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,9,13,/0:0/0:1" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,9,13,/0:0/0:1" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Points" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/SelectReader.xml b/Applications/Client/Testing/XML/SelectReader.xml deleted file mode 100644 index c618c99bfa..0000000000 --- a/Applications/Client/Testing/XML/SelectReader.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/blow data.myvtk" /> - <pqevent object="pqSelectReaderDialog/listWidget" command="currentChanged" arguments="/1|0" /> - <pqevent object="pqSelectReaderDialog/okButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="displacement2" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Selection.xml b/Applications/Client/Testing/XML/Selection.xml deleted file mode 100644 index 01b0b0a109..0000000000 --- a/Applications/Client/Testing/XML/Selection.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton5" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionTesting_Window_Size" /> - <pqevent object="pqClientMainWindow/selectionToolbar/1QToolButton1" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.31,0.463333,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.743333,0.93,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.743333,0.93,1,0,0)" /> - <pqevent object="pqClientMainWindow/selectionToolbar/1QToolButton4" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.606667,0.0933333,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.85,0.27,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.85,0.27,1,0,0)" /> - <pqevent object="pqClientMainWindow/selectionToolbar/1QToolButton2" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.163333,0.176667,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.35,0.386667,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.35,0.386667,1,0,0)" /> - <pqevent object="pqClientMainWindow/selectionToolbar/1QToolButton1" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.576667,0.706667,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.71,0.89,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.71,0.89,1,0,0)" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/selectionToolbar/1QToolButton1" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.686667,0.693333,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.94,0.996667,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.94,0.996667,1,0,0)" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/SimpleInteraction.xml b/Applications/Client/Testing/XML/SimpleInteraction.xml deleted file mode 100644 index 5c503f54cf..0000000000 --- a/Applications/Client/Testing/XML/SimpleInteraction.xml +++ /dev/null @@ -1,92 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <!-- Tests mouse interaction and interaction with text source --> - <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionTesting_Window_Size" /> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cone" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Wireframe" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.673846,0.555874,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.28,0.386819,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.28,0.386819,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.343077,0.234957,2,2,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.363077,0.530086,2,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.363077,0.530086,2,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.378462,0.510029,2,2,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.361538,0.17765,2,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.361538,0.17765,2,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.555385,0.647564,4,4,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.48,0.530086,4,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.48,0.530086,4,0,0)" /> - <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface" /> - - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="TextSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Text" command="key" arguments="16777220" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Text" command="key" arguments="16777248" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Text" command="set_string" arguments="Text
This is a testing" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent - object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/buttonColor/StandardColorMenu" - command="activate" arguments="EdgeColor" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="25" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="26" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="27" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="28" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="29" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="30" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboTextAlign" command="set_string" arguments="Center" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboTextAlign" command="set_string" arguments="Right" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboFontFamily" command="set_string" arguments="Courier" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonBold" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonItalic" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.7" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.28" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.33" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.72" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.67" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.62" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonUC" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonUR" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonLR" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonLC" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonUC" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.25" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.15" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.95" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.95" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.85" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.75" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.7" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.65" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.55" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.7" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboTextAlign" command="set_string" arguments="Center" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboFontFamily" command="set_string" arguments="Arial" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonBold" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonItalic" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="31" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="32" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="33" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="34" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="35" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="50" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="key" arguments="16777221" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Slice.xml b/Applications/Client/Testing/XML/Slice.xml deleted file mode 100644 index 2e78956e08..0000000000 --- a/Applications/Client/Testing/XML/Slice.xml +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/iron protein.vtk" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Slice" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorMapScalars" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="7" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="9" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="11" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="12" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="13" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="15" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="16" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="20" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="21" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="22" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="23" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="25" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="26" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="27" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="29" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="30" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="31" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="32" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="34" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="35" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="37" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="39" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="40" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="41" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="42" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="47" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="49" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="52" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="54" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="55" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="57" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="66" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="65" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="61" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="60" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="59" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="57" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="56" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="55" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="54" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="52" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="51" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="50" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="49" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="48" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/SliceDirection" command="set_string" arguments="YZ Plane" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="47" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="44" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="42" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="41" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="39" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="38" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton2" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/StreamTracerUpdates.xml b/Applications/Client/Testing/XML/StreamTracerUpdates.xml deleted file mode 100644 index 02342b57f7..0000000000 --- a/Applications/Client/Testing/XML/StreamTracerUpdates.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_2.vts" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Outline" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="StreamTracer" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/pqStreamTracerPanel/streamTracerGroup/MaximumPropagation" command="set_string" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/pqStreamTracerPanel/streamTracerGroup/IntegrationDirection" command="set_string" arguments="FORWARD" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/StructuredVolumeRender.xml b/Applications/Client/Testing/XML/StructuredVolumeRender.xml deleted file mode 100644 index a4c1eda083..0000000000 --- a/Applications/Client/Testing/XML/StructuredVolumeRender.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent - object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorInterpolateScalars" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Volume" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.174487,0.536122,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.285924,0.60076,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.285924,0.60076,1,0,0)" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/TemporalShiftScale.xml b/Applications/Client/Testing/XML/TemporalShiftScale.xml deleted file mode 100644 index 4cd33b30f4..0000000000 --- a/Applications/Client/Testing/XML/TemporalShiftScale.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/dualSphereAnimation.pvd" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TemporalShiftScale" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/PostShift" command="key" arguments="16777219" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/PostShift" command="set_string" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scale" command="key" arguments="16777217" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scale" command="key" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scale" command="set_string" arguments=".5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Tessellate.xml b/Applications/Client/Testing/XML/Tessellate.xml deleted file mode 100644 index 63b41019a9..0000000000 --- a/Applications/Client/Testing/XML/Tessellate.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TessellatorFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/OutputDimension/Slider" command="set_int" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/OutputDimension/Slider" command="set_int" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="7" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/Threshold.xml b/Applications/Client/Testing/XML/Threshold.xml deleted file mode 100644 index 1aab653df9..0000000000 --- a/Applications/Client/Testing/XML/Threshold.xml +++ /dev/null @@ -1,141 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqLineWidget/xAxis" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqLineWidget/yAxis" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqLineWidget/zAxis" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Common" command="activate" arguments="Threshold" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="11" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="14" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="16" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="21" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="24" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="29" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="32" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="37" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="42" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="48" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="51" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="54" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="56" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="57" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="59" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="61" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="62" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="64" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="67" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="70" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="73" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="75" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="78" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="81" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="83" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="86" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="88" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="89" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="93" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="96" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="97" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="99" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="11" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="13" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="16" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="19" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="22" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="24" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="27" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="30" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="34" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="35" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="38" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="42" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="43" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="48" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="50" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="97" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="96" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="94" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="93" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="91" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="48" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="43" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="42" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="40" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="38" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="35" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="34" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="32" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="30" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="29" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="27" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="26" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="24" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="22" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="21" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="19" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="18" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="16" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="14" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="13" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="11" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="10" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="3" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="89" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="88" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="86" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="85" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="83" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="81" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="80" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="78" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="77" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="75" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="73" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="72" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="70" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="69" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="67" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="65" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="64" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="62" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="61" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="59" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="57" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="56" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="54" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="53" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="50" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="48" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="43" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/LineEdit" command="set_string" arguments="0.08" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/LineEdit" command="set_string" arguments="0.44" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo.xml b/Applications/Client/Testing/XML/UndoRedo.xml deleted file mode 100644 index 109e403e5f..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cylinder" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_1" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Height" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo1.xml b/Applications/Client/Testing/XML/UndoRedo1.xml deleted file mode 100644 index d124f04c31..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo1.xml +++ /dev/null @@ -1,126 +0,0 @@ -<?xml version="1.0" ?> -<!-- -Performs following actions: -* Create sphere source. -* Accept. -* Create histogram filter. -* Accept. -* Split the histogram view. -* Create another histogram filter connected to the same sphere source. -* Accept. -* Close most recent histogram view. -* Close the remaining histogram view. - -On every action, we undo to start and redo to end. -Before test ends we undo a couple times to undo the closing of the 2 histogram views and make -the renderview active. That's the final state. ---> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractHistogram" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractHistogram" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:1/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.562092,0.437393,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.562092,0.437393,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.562092,0.437393,1,0,0)" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,39,5,/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,39,5,/0:0/0:0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent - object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/AnnotationGroup/ShowCubeAxes" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent - object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/AnnotationGroup/EditCubeAxes" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/xtab/CubeAxesXGridLines" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/xtab/CubeAxesXAxisMinorTickVisibility" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/xtab/CubeAxesXAxisTickVisibility" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/CubeAxesFlyMode" command="set_string" arguments="Static Edges" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/CubeAxesTickLocation" command="set_string" arguments="Both" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ytab/CubeAxesYGridLines" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ytab/CubeAxesYAxisMinorTickVisibility" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ytab/CubeAxesYAxisTickVisibility" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ztab/CubeAxesZAxisMinorTickVisibility" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ztab/CubeAxesZAxisTickVisibility" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ztab/CubeAxesZGridLines" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/Ok" command="activate" arguments="" /> - - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo2.xml b/Applications/Client/Testing/XML/UndoRedo2.xml deleted file mode 100644 index 9ecec16163..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo2.xml +++ /dev/null @@ -1,161 +0,0 @@ -<?xml version="1.0" ?> -<!-- -This test is to test that creation/deletion of render views -is undoable. -At the same time it tests that the animation playing does not affect the undo stack. ---> - -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="RTData" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="cellNormals" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="RTData" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRFirstFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPlay" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Wireframe" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="RTData" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton0" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo3.xml b/Applications/Client/Testing/XML/UndoRedo3.xml deleted file mode 100644 index c79d2a6e4c..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo3.xml +++ /dev/null @@ -1,157 +0,0 @@ -<?xml version="1.0" ?> -<!-- -This test tests undo-redo for exodus reader and -cut/clip filters i.e. filters that need 3d widgets and have "helper" proxies. ---> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/tube.exo" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - - - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Cut" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="nan" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="nan" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="nan" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="nan" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalY" command="set_string" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalY" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalZ" command="set_string" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalZ" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Clip" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalZ" command="set_string" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="ObjectId" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo4.xml b/Applications/Client/Testing/XML/UndoRedo4.xml deleted file mode 100644 index 1a2ee4ed2d..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo4.xml +++ /dev/null @@ -1,114 +0,0 @@ -<?xml version="1.0" ?> -<!-- -This test tests animation key frame undo/redo. ---> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Clip" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Animation Inspector" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Object Inspector" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Pipeline Browser" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/addKeyFrame" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="01" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="010" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="2" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="5" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.0691318,0.926244,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.28135,0.912521,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.28135,0.912521,1,0,0)" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/deleteKeyFrame" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/deleteKeyFrame" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Pipeline Browser" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/0pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Pipeline Browser" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> - <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRLastFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> - <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo5.xml b/Applications/Client/Testing/XML/UndoRedo5.xml deleted file mode 100644 index d66f9e4c23..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo5.xml +++ /dev/null @@ -1,165 +0,0 @@ -<?xml version="1.0" ?> -<!-- -Tests undo-redo for changing of inputs and deletion of sources. ---> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="set_string" arguments="0.2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="set_string" arguments="0.4" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="set_string" arguments="0.6" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="set_string" arguments="0.8" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="key" arguments="16777221" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="ConeSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/1|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView/qt_scrollarea_viewport" command="contextMenu" arguments="" /> - <pqevent object="PipelineObjectMenu" command="activate" arguments="actionChangeInput" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/ChangeInputDialog/Sources" command="currentChanged" arguments="/0/1|0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/ChangeInputDialog/OkButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/1/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo6.xml b/Applications/Client/Testing/XML/UndoRedo6.xml deleted file mode 100644 index 38839783c0..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo6.xml +++ /dev/null @@ -1,76 +0,0 @@ -<?xml version="1.0" ?> -<!-- -This tests undo of creation of a custom filter as well as -undo for changes in the "Application Settings" dialog. ---> - -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CubeSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsManageCustomFilters" /> - <pqevent object="pqClientMainWindow/pqCustomFilterManager/ImportButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pqCustomFilterManager/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Baseline/filters.xml" /> - <pqevent object="pqClientMainWindow/pqCustomFilterManager/CustomFilterList" command="currentChanged" arguments="/0|0" /> - <pqevent object="pqClientMainWindow/pqCustomFilterManager/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="MyElevation" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.5,0.38422,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.451768,0.468268,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.451768,0.468268,1,0,0)" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditViewSettings" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/General/parallelProjection" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/ApplyButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/undoRedoToolbar/1QToolButton1" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UndoRedo7.xml b/Applications/Client/Testing/XML/UndoRedo7.xml deleted file mode 100644 index 6a51d02267..0000000000 --- a/Applications/Client/Testing/XML/UndoRedo7.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SuperquadricSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.573677,0.518033,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.505007,0.665574,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.505007,0.665574,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/BackButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/ForwardButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.397711,0.6,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.58083,0.613115,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.58083,0.613115,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/BackButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/BackButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/ForwardButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/ForwardButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditCameraUndo" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditCameraRedo" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditCameraUndo" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/UnstructuredVolumeRender.xml b/Applications/Client/Testing/XML/UnstructuredVolumeRender.xml deleted file mode 100644 index 97aebd9832..0000000000 --- a/Applications/Client/Testing/XML/UnstructuredVolumeRender.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton2" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalX" command="key" arguments="46" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="0.526" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="key" arguments="16777217" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="key" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="set_string" arguments="-0.287" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalZ" command="key" arguments="16777217" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalZ" command="key" arguments="45" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalZ" command="set_string" arguments="-0.801" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Volume" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfGridAttributes.xml b/Applications/Client/Testing/XML/XdmfGridAttributes.xml deleted file mode 100644 index 779d37a72b..0000000000 --- a/Applications/Client/Testing/XML/XdmfGridAttributes.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/RodPlate/RodPlate.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/cameraToolbar/1QToolButton4" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="1.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="1.0,2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="0.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0/1pqCheckableHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0/1pqCheckableHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="1.0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfRead.xml b/Applications/Client/Testing/XML/XdmfRead.xml deleted file mode 100644 index c180271340..0000000000 --- a/Applications/Client/Testing/XML/XdmfRead.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Test1.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ShrinkFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.456724,0.439909,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.640479,0.671202,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.640479,0.671202,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.508655,0.44898,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.496671,0.435374,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.496671,0.435374,1,0,0)" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfReadImageData.xml b/Applications/Client/Testing/XML/XdmfReadImageData.xml deleted file mode 100644 index ccec0f3fec..0000000000 --- a/Applications/Client/Testing/XML/XdmfReadImageData.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.ImageData.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="Solid Color" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> - - <!-- turn on light kit --> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,15,10" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,15,10" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,13,8" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,13,8" /> - <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfReadImageDataCollection.xml b/Applications/Client/Testing/XML/XdmfReadImageDataCollection.xml deleted file mode 100644 index 38953a2628..0000000000 --- a/Applications/Client/Testing/XML/XdmfReadImageDataCollection.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.ImageData.Collection.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mousePress" arguments="1,1,0,63,4,/0:0/0:0" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="mouseRelease" arguments="1,0,0,63,4,/0:0/0:0" /> <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="vtkCompositeIndex" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfReadRectilinearGrid.xml b/Applications/Client/Testing/XML/XdmfReadRectilinearGrid.xml deleted file mode 100644 index 3397bf0a57..0000000000 --- a/Applications/Client/Testing/XML/XdmfReadRectilinearGrid.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.RectilinearGrid.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfReadRectilinearGridCollection.xml b/Applications/Client/Testing/XML/XdmfReadRectilinearGridCollection.xml deleted file mode 100644 index 63e9c34a8c..0000000000 --- a/Applications/Client/Testing/XML/XdmfReadRectilinearGridCollection.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.RectilinearGrid.Collection.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfReadStructuredGrid.xml b/Applications/Client/Testing/XML/XdmfReadStructuredGrid.xml deleted file mode 100644 index e5a078314f..0000000000 --- a/Applications/Client/Testing/XML/XdmfReadStructuredGrid.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.StructuredGrid.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> -</pqevents> diff --git a/Applications/Client/Testing/XML/XdmfReadStructuredGridCollection.xml b/Applications/Client/Testing/XML/XdmfReadStructuredGridCollection.xml deleted file mode 100644 index eb35ca6ae1..0000000000 --- a/Applications/Client/Testing/XML/XdmfReadStructuredGridCollection.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" ?> -<pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> - <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.StructuredGrid.Collection.xmf" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> -</pqevents> diff --git a/Applications/Client/paraq.iss b/Applications/Client/paraq.iss deleted file mode 100644 index c18dcce11d..0000000000 --- a/Applications/Client/paraq.iss +++ /dev/null @@ -1,106 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! - -#define ParaViewBuildDir "C:\projects\build\ParaQ2" -#define ParaViewSourceDir"C:\projects\ParaQ2" -#define QtInstallDir "C:\Qt\4.1.3" -#define MSDEVHomeDir "c:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin" -#define ParaViewVersion "3.0b" - -[Setup] -AppName=ParaView -AppVerName=ParaView {#ParaViewVersion} -AppPublisher=Kitware Inc -AppPublisherURL=http://www.paraview.org -AppSupportURL=http://www.paraview.org -AppUpdatesURL=http://www.paraview.org -DefaultDirName={pf}\ParaView {#ParaViewVersion} -DefaultGroupName=ParaView {#ParaViewVersion} -InfoAfterFile={#ParaViewSourceDir}\Applications\Client\README -OutputBaseFilename=ParaView-{#ParaViewVersion}_setup -OutputDir=C:\projects\release\paraq\{#ParaViewVersion}\win32 -Compression=lzma -SolidCompression=yes - -[Languages] -Name: english; MessagesFile: compiler:Default.isl - -[Tasks] -Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked -Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked - -[Files] -Source: {#ParaViewBuildDir}\bin\release\pqClient.exe; DestDir: {app}; Flags: ignoreversion -Source: {#QtInstallDir}\bin\QtGui4.dll; DestDir: {app} -Source: {#QtInstallDir}\bin\QtCore4.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\QtPython.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\QtTesting.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\pqWidgets.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\QVTK.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\pqWidgets.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\pqPython.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\KWCommon.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkPVServerManager.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkPVFiltersCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkPVFilters.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkPVServerCommonCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkPVServerCommon.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkXdmfCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkWidgetsCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkParallelCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkParallel.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkHybridCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkHybrid.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkVolumeRenderingCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkVolumeRendering.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkRenderingCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkRendering.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkGenericFilteringCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkGenericFiltering.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkGraphicsCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkGraphics.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkImagingCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkImaging.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkIOCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkIO.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkFilteringCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkFiltering.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkCommonCS.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkCommon.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtksys.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkDICOMParser.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkpng.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtktiff.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkjpeg.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkzlib.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkexpat.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkMPEG2Encode.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkzlib.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkexoIIc.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkfreetype.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkftgl.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkClientServer.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkCommonPython.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkhdf5.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkNetCDF.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkPVServerCommonPython.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkPVServerManagerPython.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkWidgets.dll; DestDir: {app} -Source: {#ParaViewBuildDir}\bin\release\vtkXdmf.dll; DestDir: {app} -Source: {#MSDEVHomeDir}\msvcp71.dll; DestDir: {app} -Source: {#MSDEVHomeDir}\msvcr71.dll; DestDir: {app} -Source: README; DestDir: {app}; Flags: ignoreversion - -[Icons] -Name: {group}\ParaView; Filename: {app}\pqClient.exe; WorkingDir: {app} -Name: {userdesktop}\ParaView; Filename: {app}\pqClient.exe; Tasks: desktopicon; WorkingDir: {app} -Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\ParaView; Filename: {app}\pqClient.exe; Tasks: quicklaunchicon; WorkingDir: {app} - -[Registry] -; remove settings for all versions ... -; beta settings -Root: HKCU; SubKey: Software\Kitware Inc; Flags: uninsdeletekeyifempty - - -[Run] -Filename: {app}\pqClient.exe; Description: {cm:LaunchProgram,ParaView}; Flags: nowait postinstall skipifsilent diff --git a/Applications/Client/pqClient.rc b/Applications/Client/pqClient.rc deleted file mode 100644 index 4f43713c77..0000000000 --- a/Applications/Client/pqClient.rc +++ /dev/null @@ -1,4 +0,0 @@ -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON1 ICON "paraqlogo.ico" - diff --git a/Applications/Client/pvIcon.svg b/Applications/Client/pvIcon.svg deleted file mode 100644 index f62831868e..0000000000 --- a/Applications/Client/pvIcon.svg +++ /dev/null @@ -1,83 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - version="1.0" - width="130" - height="100" - id="svg2539"> - <defs - id="defs2541"> - <clipPath - id="XMLID_22_"> - <use - id="use224" - x="0" - y="0" - width="510" - height="400" - xlink:href="#XMLID_7_" /> - - </clipPath> - </defs> - <g - id="layer1"> - <g - transform="translate(-103.64431,-328.24855)" - id="g2527"> - <g - transform="translate(-247.61905,-12.698413)" - id="g218"> - <defs - id="defs220"> - <path - d="M 449.502,350.4 L 427.632,432.504 L 454.3,432.504 L 476.17,350.4 L 449.502,350.4 z M 415.104,350.4 L 393.234,432.504 L 419.902,432.504 L 441.772,350.4 L 415.104,350.4 z M 379.941,350.4 L 358.071,432.504 L 384.739,432.504 L 406.609,350.4 L 379.941,350.4 z " - id="XMLID_7_" /> - - </defs> - - <clipPath - id="clipPath2553"> - <use - id="use2555" - x="0" - y="0" - width="510" - height="400" - xlink:href="#XMLID_7_" /> - - </clipPath> - - <g - transform="translate(5.106547e-6,-2.084017e-5)" - clip-path="url(#XMLID_22_)" - id="g226"> - - <image - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABjAAAATICAIAAAA9Wxv0AAAACXBIWXMAABcSAAAXEgFnn9JSAAAA B3RJTUUH1wQLDwAhplvwlQAAIABJREFUeNrsvW2MndV1/r3WPTMGbCCEQDAGg1/AGAzYvBjbENNW bdqoT9WnVSJF7V+q1A9pq6pqVFWR+uFRP7ZSpbRSpeaJ1G952kqNqBq1UltVjZLyEkKcBEpISMAm kBfKSxIbYuyZc++1rufD2nvf+z4zBhuYw9hcvzjHZ845c+ace899nH3luq6lAIQQQgghhBBCCCGE kFnR8RAQQgghhBBCCCGEkFlCQYoQQgghhBBCCCGEzBQKUoQQQgghhBBCCCFkplCQIoQQQgghhBBC CCEzhYIUIYQQQgghhBBCCJkpFKQIIYQQQgghhBBCyEyhIEUIIYQQQgghhBBCZgoFKUIIIYQQQggh hBAyUyhIEUIIIYQQQgghhJCZQkGKEEIIIYQQQgghhMwUClKEEEIIIYQQQgghZKZQkCKEEEIIIYQQ QgghM4WCFCGEEEIIIYQQQgiZKRSkCCGEEEIIIYQQQshMoSBFCCGEEEIIIYQQQmYKBSlCCCGEEEII IYQQMlMoSBFCCCGEEEIIIYSQmUJBihBCCCGEEEIIIYTMFApShBBCCCGEEEIIIWSmUJAihBBCCCGE EEIIITOFghQhhBBCCCGEEEIImSkUpAghhBBCCCGEEELITKEgRQghhBBCCCGEEEJmCgUpQgghhBBC CCGEEDJTKEgRQgghhBBCCCGEkJlCQYoQQgghhBBCCCGEzBQKUoQQQgghhBBCCCFkplCQIoQQQggh hBBCCCEzhYIUIYQQQgghhBBCCJkpFKQIIYQQQgghhBBCyEyhIEUIIYQQQgghhBBCZgoFKUIIIYQQ QgghhBAyUyhIEUIIIYQQQgghhJCZQkGKEEIIIYQQQgghhMwUClKEEEIIIYQQQgghZKZQkCKEEEII IYQQQgghM4WCFCGEEEIIIYQQQgiZKRSkCCGEEEIIIYQQQshMoSBFCCGEEEIIIYQQQmYKBSlCCCGE EEIIIYQQMlMoSBFCCCGEEEIIIYSQmUJBihBCCCGEEEIIIYTMFApShBBCCCGEEEIIIWSmUJAihBBC CCGEEEIIITOFghQhhBBCCCGEEEIImSkUpAghhBBCCCGEEELITKEgRQghhBBCCCGEEEJmCgUpQggh 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 fXr27NmzZ8+jjjqqrYW4jRkz5pFHHvG3LFmy5PPPP29Ea2rarzdixIgcvN6qqqqPP/547ty569ev 37hxY4cOHfb10K5du53o5NlVJ0U4UE1BWVnZBx98sGLFinXr1q1du5aI9txzz+7du++zzz7Dhg3r 2LFjDnZg4cKFixcvXrJkyfLly4uKivbcc88hQ4YMGTKkpKSktQ7LokWL5s6d628ZNmxYYaGJSYFj jjmmuLi4srLS/8D/73//e+TIkS29VwsXLlyxYsWKFSs2bNiwxx577L333vvuu++xxx5bXFy8qz51 S59+M2bMWL169fr169etW7dly5YePXr07NnTvLH26tWroVMgXD3C1WM3IqSM7mZIcaGtvWL3lxaX FBNVKDdAJC1dbiZxulE+sHScueE9Is6nEbmT4jU0WNkUOHIKszgpdGFSQpIoG9/sos2Re+kRiJfd RARKIWqwYeBmAR0TkOZDEWsiolhrL9F8Vq769YzupsP+HaMCZUgoLdooyfAy3izSKMHZVngDRFx2 ZjY0jDzE7DhzJ3RC593zuvZs2rVNmlKALMPxJVERGiegSyKytXrmX0BlrIYixNFgVDjGswfKVEES gAYt4wPACildXuv161VrWFaVG92NmVCq28HCG7qRAkIAUwSIAJ590oySVAYAUsOoqCyQpaUiAlQ8 dYTpE6kUSOyXZQDRlgHwhOH7MMubFSxl5VEm2E3J8AMQoRK9JIjvlwVithuAyPQEQBxTrHVVbfDr 7azIz8/v0KHD1q1bE2/q2zw7iT766KMJEyb861//WrZs2faprlNOOeXyyy8/+OCD678/J510kv/s Z5555q233mp/ra2tfeaZZx5++OFNmzY5wj2K6iSkWnpXWxFENHny5FdeeWXKlCnl5eV1vz8rddJJ J1188cUjR47My8trC7s9evToBCEFAG+++WZDCal0+ToAnHvuudu/17hx4z755BN/y9lnn/3Tn/60 nk+6evXqn//856+99lpNTU3d77OIw4YNO+ecc84777yioqLtPNS3v/3tqqoqf8udd9552mmnNegg jBo1qrS01N9y880379C02DYnRf2HZubMmT/84Q+b8akfeuihY489NmcH6ic/+YlvNU1P3rVr1w4d OrTO+xYVFaVrJZt+Yhts3br1z3/+85QpUz788MN0V4C90g4dOvTkk0++6KKLOnXq1KDH11onrtJj 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 +pYjR44sKSnxFS4VFRVTpkw566yzGvSMicSfzZs3v/TSS/6Z06FDhxtvvHHs2LGJt0simj59+v33 35/2dMdxfN1117333nvbbzprxafOGcrLyy+55JI62agBAwbccMMNI0eO3NZJ9fnnn7/wwguTJ08e NmxYji+zbeTSEa4ebR+tY9kzNMegosKIrwgAmsiEJRm2idAE34iriOOJRehB6NbCDVlDW7+eybmR /CFnK7JWPsdmuPAbz0CGTkgl3iPr7EOXdA7sNlPKSHYocp1jChzLQiQCLRJrImmKNcs5YtJbnV9v E+ivlC4pKTnyyCNbdJis7qZj/07kBopJMxkLZjbI0YccaY5ZaqkGUIeRDe8SQY0S9s7zeXHGl59H rsAdW4UIhrXgYWBHnhcRZZyUyuvX89gRMtMDVcQDApzGhAAQA4AkZANATNqwUTHpqrjGI6Qqcskb Rt0PApCR0GYyoaWbCMn2AHCDJTUyh82joiQTDSDf0EZOHuXCv5hFQowsLWULA7KLAczwKL8T0eqk DFeofHEcIJDp2iMmncCMnKlJtJSpJtDajBefw2WVjt6NKtao2vK99957d6ix2AVQXV191VVXpSMh 0mYESxU98MADRn2zrTIX/0Gee+65BE1QW1v7xBNP7OCqFUUJQuqhhx6yv7Zr1+6BBx6YM2fOc889 d/PNN5977rnf//73082budnVnGHlypWJQhkAuOmmm5544okEG+XjW9/61uuvv574XnH27Nlvvvlm 676ctGuPiP75z3/W577pMBeoR79e4/Dcc8+lGcAf/vCH28pDLS4uvuiii6ZOndoG/Xq7zKRo3779 4Q3HkiVLEmwUANxxxx11lvbuYlePNFatWnXFFVcknL+I+OCDD/7hD3/YVndYXl7ed7/73bfeeitt SiotLb3iiit2aH1KXNs3b978xhtvWJrjxRdffP755xPrSQDYa6+9Hnjggbvvvjv9gBs2bPjd737X 0oernvIoACgpKRk1atQO777jj+7ZByqTyfgOozPPPHPmzJnXX399Oi4dEYcPHz5hwoQ6JTYrVqxI v4+0nafOGW644YYvvvgiffV+8MEH33nnnbPPPns7JMWAAQPuvffeGTNmbOsrkHD1CFeP3ZqQGlxS aAkl0hplMQ1kI5gdGWUSb5C9bRwI3jAfmPXrKZ9OqkseJSwVKKBkhlQW64TKNxopoaWUmMCUWPZY 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 do6zFibHWcbsnGN1zrmMXcbOsWthR47tbfso+/D4aZ19WiXKnM1Hd17VMQsRkauJJ6aaeCLuk5oq 9Um/qPbkfblqT62nX/ym/s4/dL7U7cNQc7lnk/z8lTPPPPPyyy8f18N05513nnXWWTRjj+z4v0nz k/pth2OR+KjNTLNB4GG8FIXZX6HrVLno2wtz3LQYTW+poQuRUyuzc9xClBFlzC6cai5jypgyZ8cu nEYZ2VnFxVllbzO7LPyVY86ccxln7Jwj55yzTr/MZY7tvGTHGTMxZc4Rk3Osqi5jJXKOvAgR56rM VPNEpH1elKgv9yLaXctFqLOnlntdt7H7hVe3pIxu13sucb7vwQcf3GefffDqv7MRkQceeODmm29e s2bN+vXr8zzfZ5999t133/nz57/1rW+dUL8R3YEe6uh47++7775Vq1atX7/+lVdeeeWVV4ioo6Nj xowZM2fOnD9//uLFixcvXjyhRnjscJ6LXnjhheeff37t2rWtra2zZ8+eM2fOYYcddtRRRy1atGjb a0V7e3vvueeeu+6666mnnnrttddaW1sXLly4cOHCAw44YOnSpXPmzMFJsTO8ejzxxBO///3vH330 0UcffbSrq2vu3Llz5szZf//9jzvuuEMOOSTLsnH9krds2XLbbbetXLny5Zdffvnllzdu3Dhr1qy5 c+fOmzfv6KOPPvbYY6tcLLDTOuuss+68887yLeXR+8nKlStvv/32tWvX/vGPf3z11Vdnz549b968 /fbb76STThr173S3411PkH9M77nnnpdeeumVV15Zv359f3//rFmzZs6cOXfu3CVLlhx88MEHH3zw MOfbVv/qsX1fOvDqsbMEUj/84Q8vuuiik6dO+X+zZ4bKJCGqibXFkWfyQkzqiS3hIKZSEQVJnGRu 08+JSgveinyKHFOmYVB2RuyILHjKwta8sLktc+yIM7v2tVyp7ro53MhMLY4zR8ycZcTsLJBqcUxs aQllIUKhzPITxy4jJnKZkmPnSJmdUyJmR16VHXtVJuoXZUd9NVKS3horS0+veJWefq35fMPm2msb 85detS9wHctfTO3aZZddnnjiiZEW4Y9IrVZbtGhRV1fXQRcf0jKz1Q5ALtJPSmK9b2pHLHQxhjeK 2eYx5gjpIodDF9OpWM3klJxzmYV2GrMJDovXWsI0L9dC7NiRZX7MmR0MYucyx66FbSmbszTKWQ5F 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 TWQDAAAAAACA0RmbQOrhhx/esGEDEfXRGA5Obr7KnOQHo7KJ5qSkfYLv/gl7mO6+++48z4mIpYbz Y9ROPPFEPAkAAAAAAAATE4/JRPA8z3t6evBsbqOOjo7xvouurq7JMQN+O2pra2traxvXu6jVan19 fXiqt9GMGTPwJAAAAAAAAExMjHgCAAAAAAAAAACq5PAUAAAAAAAAAABAlRBIAQAAAAAAAABApRBI AQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABA pRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAA AABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAA AAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBI AQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABA pRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAA AABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAA AAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBI AQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABA pRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAA AABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAA AAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBI AQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABA pRBIAQCFzalmAAAgAElEQVQAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAA AABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAA AAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBI AQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABA pRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAA AABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAA AAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBI AQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABA pRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAA AABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAA AAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBI AQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABApRBIAQAAAAAAAABA pRBIAQAAAAAAAABApRBIAQAAAAAAAMD/Z+++45q62jiAn5uQQNhbloobByKuuveq1r7uUUdrW622 VqvWaq2vVqvVtlrtcLTat1q3dSvVImLdouJC0SIIyF6yk5D5/hGBEMK9lyyS8Pt++vLC5dxzb869 Ccnjc54DYFIISAEAAAAAAAAAgEkhIAUAAAAAAAAAACaFgBQAAAAAAAAAAJgUAlIAAAAAAAAAAGBS CEgBAAAAAAAAAIBJISAFAAAAAAAAAAAmhYAUAAAAAAAAAACYFAJSAAAAAAAAAABgUghIAQAAAAAA AACASSEgBQAAAAAAAAAAJoWAFAAAAAAAAAAAmBQCUgAAAAAAAAAAYFIISAEAAAAAAAAAgEkhIAUA AAAAAAAAACaFgBQAAAAAAAAAAJgUAlIAAAAAAAAAAGBSCEgBAAAAAAAAAIBJISAFAAAAAAAAAAAm hYAUAAAAAAAAAACYFAJSAAAAAAAAAABgUghIAQAAAAAAAACASSEgBQAAAAAAAAAAJoWAFAAAAAAA AAAAmBQCUgAAAAAAAAAAYFI2GAIzJJVKRSKRUCgUi8UikaisrEwsFpeVk6iRlpPJZKqvcrlcJpPJ ZDKFQiGXy+VyuUKhUCgUSqVS9bVCxeEoilJ9VeFwqoQpKxpX7KLRXrULh8Phcrmqb2xsbLhcLpfL tSnH4/F4PJ6NjQ2fz+fxeHw1dnZ2qq+2trZ2dnZ2dnYCgUAgEPD5fNwJAAAAAAAAAFYJASljUSqV RUVFBQUFxcXFRUVF6l+LiopK1ZSUlKi+EQqFqiCUXC7HAHI4HIFAYG9vr4pPOTg4ODo6OlTl7Ozs 5OSk/lX1jb29PQYQAAAAAAAAwGxR6pkywIZMJsvLy8vLy3v58mVubm5eufz8/IKCgvz8/MLCQtVX jG1d4fP5rq6uLi4urq6ubm5uFd94enq6u7t7eHh4eHi4u7u7u7vzeDwMFwAAAAAAAICJISClRWlp aUZGRkZGRnZ2dla57Oxs1Y8FBQUYIqvh7Ozs5eXlXU79e19fXy8vL9X8RAAAAAAAAAAwoHodkMrJ yXn+/HlSUlJaWlpaWlp6enp6enpaWlphYSHuDCCE2NjY+Pj4+Pr6+vn5+fr6+vr6+vv7BwYGNm3a 1MnJCeMDAAAAAAAAoJv6FZAqKSmJioq6cePG/fv3Y2JiXr58iTsAdOPv7x8cHBwaGtq9e/eOHTva 2tpiTAAAAAAAAABYqhcBqaSkpLCwsPDw8KioKNQLB4Ozs7Pr06fPkCFDhg8f7uXlhQEBAAAAAAAA oGfNAamioqI///zz8OHDd+/exZUGE+BwOH379p04ceLIkSP5fD4GRE9CoVAikcjlch6PZ2dnhyEF AAAAAACwGtYZkEpKSvrpp5/+/PNPkUiEawym5+HhMX369NmzZ7u7u2M02FAoFDExMVFRUY8ePUpI SHjx4kVeXp5UKlVv4+Dg4O3t3bhx46CgoJCQkJ49e/r6+mLoAAAAAAAALJG1BaTi4uI2bdp07Ngx hUKBqwt1y8HBYcaMGR9++CHm8dG4efPmwYMHz549q0NNt7Zt244ZM2by5MkYYQAAAAAAAMtiPQGp 1NTUVatWnTx5sj6vGwhmSCAQzJgxY/HixY6OjhgNdRcvXly7du2DBw/07IfP50+dOnXJkiXIRzOx bdu2vXjxgqbBhAkTQkNDNTYeP378zJkzNHs1b978888/x/ACAAAAAFg3awhISSSSrVu3fv/995ig B2arQYMGa9asGTVqFIaCEJKZmbls2bLTp08bsE8PD4+1a9eOHTsWw2syw4cPv337Nk2DLVu2TJgw QWPj119/vWnTJpq9OnfufPbsWQwvAAAAAIB141j6A7h06VKfPn3Wrl2LaBSYs6ysrJkzZ44bNy4h IaGeD0V0dPSgQYMMG40ihOTl5c2ePXvZsmWYrgsAAAAAAGD+LDggJZFIVqxYgU/4YEEuXbrUv3// /fv319sRiIyMfPPNN7OysozU/44dO2bOnImYFAAAAAAAgJmz1IBUfHz8sGHDtm3bhksIlkUkEs2f P3/27NklJSX17bFHR0fPmDFDIpEY9SinTp368ssvcacBAAAAAACYM4sMSB07dmzgwIExMTG4fmCh jh49OnDgwNjY2PrzkAsLC999912hUGiCY23bti0sLAy3GQAAAAAAgNmyvIDUxo0bP/jgA9N8rAUw nufPn48YMeKff/6pJ4932bJl6enpJjvckiVLioqKcJsBAAAAAACYJ0sKSEml0rlz565fvx6XDaxD SUnJ5MmTDxw4YPWP9OHDh4cPH2bZ2MHBYdKkSTt37rx+/XpcXFxiYuK9e/dOnz69fPnyDh06sOwk Kytr+/btuMcAAAAAAADMk42lnKhQKJw6deqVK1dwzcCayGSyefPmpaenL1q0yIof5saNG1m2nD59 +tKlS728vNQ3Ojo6BgQEdOvWbf78+ZcvX/7kk09SUlIYu9qxY8eHH37o6OiI2wwAAAAAAMDcWEaG lEgkmjJlCqJRYK3Wr1+/YcMGa310GRkZ586dY34x4nC+//77jRs3akSjNPTp0+fChQshISGMHRYU FKCSVN2iKAqDAAAAAAAA2j8Dmv8pisXiqVOnXr16FVcLrNg333zz888/W+VDO3XqlEKhYGz22Wef TZs2jU2Hbm5uu3fvdnd3Z2x59OhR3FoAALWSVprP+2kExgEAAACMzdyn7Eml0mnTpl2+fBmXCqze qlWr+Hz+rFmzrOxxhYeHM7YJCQlZsGAB+z79/f0//vjjVatW0Te7du2aWCy2s7PD3WU+goKCRo4c SdOgefPmGCWAOjQqbLNMIb2cFNsnsA1GAwAAAIzH3ANSn376af1Zhgzgiy++8PPze+ONN6zmESkU iujoaMZm8+fP53Bql7D59ttvr1+/vqysjKaNRCKJjo7u2bMnbi3zMWbMmDFjxmAcAMyQRCHrcOCL Jzl3CSGnEh8gIAUAAABGZdZT9n7++ef9+/fjIkG98tFHHz169MhqHs7z589LS0vp2zg6Og4fPry2 PTs5OXXq1Imx2YMHD3BTAQCw0eXgF09y76q+P5EcjgEBAAAAozLfgNTZs2dXr16NKwT1jWpByZyc HOt4OAkJCYxtunfvzuVydeicTUDq6dOnuKkAAOjJlYrg/cseZt8lyldbsoX5L8UlGBkAAAAwHjMN SD1//nzOnDlKpRJXCOqhtLS0GTNmyOVyK3gsWVlZjG2CgoJ069zb25uxTXJyMu4oAAB6w06uf5Rz R32LUCYWysQYGQAAADAecwxISaXSDz74gHGaD4AVi4qK2rRpkxU8kOLiYsY2bNbL08rNzY2xTWZm Jm4nAICalMmlwfuXRSRdJFX/FVCukJ9+ehvjAwAAAMZjjgGp9evX379/H9cG6rkNGzbcvXvX4j/q 0BYdV9F5FTw2O758+RL3EgCAVjde/Nv2j1kauVEVtv57CUMEAAAAxmN2Aalr16799NNPuDAAcrl8 zpw59SFVsLCwULcd2QSkioqKcC/VFYqiMAgAZut+ZuKg058mFKaSGiokPMqJlirkGCgAAAAwEvMK SEkkkkWLFqF0FIDK8+fP161bZ/UPMz09XbcdbW1tGdsoFAqJRIJ7qbbkcjnGDcCKXU1+MvTkEqGU oUrU5lvnMFYAAABgJDZmdTY//vgjmzW56hUej2dnZ2dnZ2dra2tra1vxDY/Hq/hqY2PD4/FUX3k8 HpfLtbGx4XK5XC6Xw+FUfKWqUj+KKgioVEPKsxsqWqq+UQ8XKhQKpVKpqEoul8vlcplMpvoqlUrV v0qqKisrKysrE4vFYrFY9Q3CkRp27tz51ltvtWnTxkLPXyAQMLbReYouy7l+EomEz+ez7zYxMfHx 48fPnj3LyMjIzc0ViURlZWWqZ6Knp6e/v39QUFBoaKivr68JBjA+Pj48PPzevXuJiYk5OTkikYii KHt7e29v7yZNmnTo0GHgwIEtWrTQ/0A5OTnnzp27cuXK48eP09LSVKl5XC7X09OzWbNmHTt2HDx4 cPfu3c0z6amkpOThw4dPnjxJSUnJysoqLi4uKytTKBR2dnZOTk5+fn6BgYEhISFt2rTh8Xh4VQG4 n5nY+/g8Ni23xB5Y3G0ERgwAAACMgTKfz//Jycm9evUSi61wSRcbGxs3NzdnZ2cnJydnZ2f1bxwc HBwcHBwdHSu+CgQCgUBgb29vb28vEAi4XG69uiMlEolQKBSJRBVfhUJhabmSkhLV1+Li4qKiItXX oqKikpKSgoICNuWKLFH37t1PnTploSe/Z8+ehQsXMrwMUdSDBw90iO/IZLLCwkJVVFRZVcUWhULR uHFjDoc5GzQqKurQoUMREREZGRlsjt6yZcs33nhj2rRpAQEBbNorFIqOHTvKZDKaNjt27Ojevbvq +4iIiI0bN965c4ex55CQkLlz544aNUq3a/TixYtvv/326NGj9OdGCGnWrNnixYvHjh2r+nH48OG3 b9PVPN62bdu4ceM0Nm7atGnXrl00e/Xt2/fHH39kc+Y5OTl//vlnWFhYdHQ0m1UpHR0dBw4cOHHi xEGDBmE6IdRbT3PSxp9d9ehlIpvG3vZuSe/uFdjwMW4AAABg+FCJ+ZzK8uXLLS4aRVGUm5ubp6en p6enl5eX+jeuahwcHHCrscTn8/l8vqurqw77isXigoKCwsLCgnK55fLy8nJycvLy8lQJL5Y1Jjdu 3Dh69GhFFMCyeHt7M7ZRKpX79+9ftGhRrV+/bGw8PDz0P8nIyMi1a9c+fPiwVnvFxcV9//33mzdv njBhwhdffOHj40PfnsPhcDicrKwsmjbZ2dmEkKKiooULF548eZLlmTx48GDmzJm///779u3baxvX 27Fjx+rVq1m+9iYkJMyePXvv3r1btmzx8/PTbbSLioroJ2nm5eUxdpKdnb1x48Y9e/ZIpVL2hy4p KTl58uTJkyebNWu2cuXK119/HS+5UN88zUlrve8d9u1FMolIJkFACgAAAIzBXAJSd+/ePXfOTOsU uLq6Nm3atHHjxn5+fj4+Pl5eXhWxJw8Pj/qWwWTO7OzsfHx8GOMCQqFQPUSVk5OTmpqampr64sWL 1NRU8ywivnbt2jfffNMSZxs1bdqUTbOtW7fOmDHD3d3dxKdXUlKyePHiI0eO6NyDQqE4ePBgWFjY 999/z5ij5Ofnl5KSQtMgJycnPj5+ypQpz58/r+2ZXL9+fciQIceOHWM5g0+hUCxYsGD//v21PdDV q1f79u27atUqxmCQkbKQzpw5s3Dhwvz8fJ17SEhImD59+qhRozZu3Ojs7IwXT6gnnuakjTu7qla7 FEtKiyWl7naOGD0AAAAwOHMJSH3zzTfmMygNGjTo2rVr+/btg4ODg4OD2aR4gAWxt7dv1KhRo0aN tP42JSXl8ePHjx49iomJuXnz5suXL83hnFNSUg4cODB9+nSLG+1mzZo5ODgwhvmKioqWLl3666+/ mvLccnNzJ06cWNvEKO2f2YqLZ86cmZiYuGDBAppmXl5e9P2cPHly/fr1Oi87mJmZOWHChPPnz3t6 ejI2/vTTT3WIRqkUFBTMnz/fSNeFfiL5li1bvvzyS4Mc6MSJE3FxcYcPH27QoAFeGMHqhcXff+PM Yh12XH7pyJ6RH2EAAQAAwODMIiB1+/btyMjIuj0HLpfbp0+f/v379+/fPygoCHdGvdWwYcOGDRsO GzZM9cH48ePHV65cOX/+/NWrV+u24NrmzZsnT55scUlSHA6nd+/ebPIfjx8/3q5du3nz5pnmxEQi 0VtvvWWQaFSFr7/+2tHRcebMmTU1YJxgePPmTT3PITU1dfHixb///jt9s127du3Zs8finp579+41 VDRKJTY2dsKECWFhYY6OSAABa/bDg/NLr27Vbd+Yl08xgAAAAGCUT4vmcBIbNmyow6O3b99+zZo1 MTExhw8fnjNnDqJRUIGiqHbt2s2ZM+fYsWMxMTFr164NDg6uq5NJSUk5ePCgJQ7jf/7zH5Ytv/rq qx9++ME0Z7V69ep79+4ZvNvly5fTlCF3c3MzwUM7c+bMtWvX6O+llStXWtyNFBcXt2TJEoN3Gxsb q0P9MgDLsvlBuFhaotu+D/IRkAIAAACjqPuAVEJCQl2lR/Xt2/fEiRMXLlz44IMPGKfSQD3XoEGD WbNmRUZGHj16dMCAAXVyDtu3b7fEoRsxYgT74lBr1qyZPXt2SUmJUU/p8ePHO3fuZNnY09PT19fX ycmJTWOFQjFv3ryaVnxj2Yk6Pz+/0NDQNm3auLi4sN+LPq63Zs0aoVDI8rF37dp1wIAB3bt3N000 jcbSpUslEgmblg4ODr6+vl5eXmxWVySEHDt2LDw8HK9yYMV+7jFFn92XXzqCMQQAAACDq/uA1O7d u01/0JCQkLNnzx45cqRnz564CaBW+vTpc+jQodOnT7dr187Eh46Li7t+/brFjZhAIJg9ezb79keP Hu3Xr9/58+eNd0rff/89Y5vevXsfPnz4xYsXT548efjw4fPnzx8/frxp06bAwED6HZ89e3bo0CGt v2I/L4zH4y1atOjevXsPHjwIDw+/dOnSs2fPzpw5M2TIEDa7//PPPxkZGVp/9fz58+PHjzP20K1b t7Nnzz558iQsLOzQoUOnTp2Ki4s7d+7cmDFj6uQuun379pUrV+jbuLm5qRLfkpKSHj58GBsbm5KS cvr0aTbnvHbt2rqdkwtgVCOad3AV+Oi8+96EExhDAAAAMLg6DkiJRCKdq+rqxsHBYd26deHh4Z07 d8blB51169btwoUL69ats7W1NeVx6ySAq7/Zs2c3bNiQffvk5OS33nrrrbfeio2NNfjJ5Ofnnz17 lr7NlClTjh071r9/f4FAULHR29t76tSpFy9eZHz1+OWXX7Rut7e3Z/kyFRYWtnTp0oCAgIqNFEW9 9tpr+/btW7WKeZEspVJZU0Tvjz/+YIy8DB069Pjx49UfZqdOnX755Zddu3YZtZaZ1tNj/Evh5uZ2 /vz5OXPmqA8an8/v1q3bL7/8snnzZvrdY2Nj6ec5Ali61zyb6LyvTCEXySQYQwAAADCsOg5InTp1 Suf1pHTQokWL8+fPv//++yzncQDQPXk4nPfff//vv/9u1qyZyQ56+vTp3NxcixsrgUDAJilJw/nz 5/v16/fRRx+lpKQY8GQuXLgglUppGqgSbWr6raOj45YtW+gjMrGxsY8ePaq+nWX48ttvvw0NDa3p tx9++CGb9RZrCq/89ddf9Ds6OTn98MMPNjY1LnkxYsQI06+LyhhD/Oyzzxo3blzTb6dMmTJixAj6 Hiy0RhsAS0Ob6Z4SXiQRpRa/xBgCAACAgT9T1+3hT5wwXRL4kCFDwsPDW7RogasOBtS2bdvz5893 797dNIeTSqWnT5+2xIHq16/f/Pnza7uXUqk8fPhwt27d/vvf/758aZiPQzdu3KBvMHjwYGdnZ5oG TZs2ZawjpjVBic/nM55es2bNxo8fT99m+fLl6qlbWmmNiCUkJCQmJtLvOGXKFMbVAKdNm2bKKavP nj3Ly8ujaUBRFOO8vPfff5++wYULFzBrD6xYNy/d/+2kWFKaXpqNMQQAAADDqsuAVHFx8aVLl0xz rBEjRuzatQsLe4MxODk5HTp0qF+/fqY53JkzZyx0oJYtWzZy5EgddpRIJNu3b+/UqdOmTZtEIpGe p/H0KcOKUZ06dWLspH///vQNoqKiqm/kcrmMPb/55psURdG3cXNze/311+nbJCQkKBQKjY00KwBW YHmNJk+ebLI758mTJ/QNmjRpwlg4v3v37vQZarm5uQkJCXhBA4smkkl6HPzk72f3tTwF/Js3ctV9 odgbL/7F8AIAAIBh1WVAKjw8nH7ijKEMGTJk586dRi16AvWcQCDYs2dPhw4dTHCsa9euFRQUWOTL DYezdevWQYMG6bZ7SUnJ119/3a1bt8OHD+uTyZKcnEzfwN/fn7GTVq1a0TfQmqDEZrIwy7uoW7du 9A3kcnn12Z2M6VF2dnZs4nFsToAQwhhZ06r6xX3x4gX9Ln5+fozdcrlcxtm1Wq8agKV4KSpZcfmP G5mP/3iq/V/7PmkzROfOz6c+wQgDAACAgT8h1uGxTZPo0axZs+3bt9PUQwEwCDs7uz179jRo0MDY B5LL5X///bfljtLu3bvffPNNnXtIT0//6KOPBg0adPXqVd16YAzn0c/XU/HxYVivKisrSywWa77g sghIsQmHEUJo6iVVfjqtNskxJyeHfpfWrVuzSeMihDCuNmhA+fn59A1cXFzY9OPr60vfgDHyBWC2 RDJJxwNzNjw8RAg5+SLipaikepsFXYe52Hnr1v8/GdcxyAAAAGBYdRaQUiqVOn+eZE+Vt+Lk5IQr DSbg4+NT0/JqhhUZGWm5o8Tn83fu3Pnpp5/q08nDhw9Hjx49ZcqU2s6xUigUZWVl9G3YrIXHWGWJ EJKVlaXDQ3NwcGDTjM1JVn+kjItINGnCdh0uU86AZpynyXL5QsarlpmZidcxsESq3Kjkolc3sFAm +bcwQ2tLnStJKZTyfTFXMNQAAABgQHWWNxQXF2eCaUdLliyx1irmMplMLBaLRKKychKJRCwWSySS ii0ymUwqlaq+SqVSuVyu+lEmkynKKZVKpVJZ8aOqc9VEG4qiOGq4XK6NjY3qqwqfz1d95fF4fD6f z+fb2tqqvtra2tpVVU+S1Hr27Dlt2rQ9e/YY9Sha6xNZEIqilixZ0qFDh/nz59MXq6YXHh5+6dKl BQsWzJs3j+WcXDY5SmyiG2yyqIRCoW6DY6hmEonmMu0lJSX0uzRs2JDleZpyrVLGpC3GEu8qjIlU paWleFsAFkcsk/Q+vCA2P6lii1Kp2HbnXPc3tLz/6ebf/O+UG7od6G52yhQMNwAAABhOncUITPCJ ul27dh988IGlXImYmJjr16+LRCKhUCgUClXfVHzVIBaL5XK5Bd1nU6dO3bRpUz15Un355ZdhYWGG WhJOq7S0tLS0NJZzu8zW0KFDL1++vHDhQn1mIJaVla1fvz4sLOzXX39t3rw5m122bt1avdq3OsaJ XYQQLpfr4OBAH79gTMUyturFmBhjZJ6engY8AUPVkBo3bhz9on4tW7Zk0zNjGLH6LEsAMyeSSn64 fUI9GqVyLuOh1vbdvUMJ0fGfTH6LO7xx4FsYcwAAADCUOgtI3bx509iHWLFihQVl5QiFwuXLl1vr fdamTZv686RydnaeO3fu6tWrjXqUqKgoxnXuzZ+3t/fevXv/+uuvZcuWpaWl6dxPTEzMgAEDNm3a NHbsWMbG48ePN8jJOzo60gek6MNedfPZlWnuG+NadXUiJCQkJCRE/34wfRusjFgm6bz/o+rRKEJI TmnSmqsnl/f6j8b2AY11/3MsU8jzRSVuAixYDAAAAIZRZzWkHj58aNT+O3XqxLguu1np1KmTFa8D GBwcXK+eV++++y6bGkP6uH//vtUM1/Dhw69du7Zo0SI7OzudOxGJRLNnz16zZo3JTptl3SKzUn0S nwbrDtkwzuzTZ/VGABNLLy3YfOuE1miUyoHkG4pqtzSPy13QboZuR5Qq5NmiYow8AAAAGErdBKSU SmVSUpJRD7FgwQLLuhI2Njbe3t7Wep8xrrZuZRwcHN5++22jHuL58+dWNmJLly69ceOGnmlfP/zw w4IFC0yTmsRY2MgMoxuMASmWJdVZ0m3KXh1eMgBLcS/3RdPf3/781g6aNgkvYxILtCysuabvOB1f QBTSLFEuBh8AAAAMpW4CUmlpaUatrtKgQYNBgwZZ3MWQyWTWep+Z4dwlY3vrLeMW2rCygJRKQEDA L7/88tdff3Xs2FHnTvbu3bt48WITnC1jvSEzDEgxvsjY2trW+Ukab9wYL1k9fKUCS5ReWjD0+Fdl MoaScGVySXxhSvXt9jy+l71OJQiVpLBMiPEHAAAAQ6mbEku1Xam9tiZNmmSJ/xJeVFRkrfdZPVy7 qnHjxr169bp69aqR+k9KSlIoFKZc6cxkunTpcu7cuWPHjn311Ve6FZb6448//P39Fy5cqP/JKBSK 1M8q9+4AACAASURBVNTUlJSU1NTUjIyMnJycvLy8goKC4uLi9PR0xn3NbWwZA1L6zJo0H4WFhcnJ yampqWlpaVlZWbm5ufn5+YWFhYx/ejBlD8zfvdwX3Q9+zBiNUvntwaWhgZ2qb3+3Te9v7hzU4ei/ 3b80sulruAoAAABgEHUTkEpOTjZq/+PGjbO4KyGVShnrDVuu+rmY+siRI40XkJJKpRkZGZa+0F5N KIoaO3bsiBEjtm3b9sMPP+hw/6xfvz40NFSHQnJyufzevXvR0dH37t178uRJQkKCzumcZhiQYjwl w4byTTZlLz09PSoq6t69ew8ePHj27FlOTo7VXDIAdcVS8esn1rKMRhFC/kw8K1XM53E0n9eOfB1D zzdfJuAqAAAAgKHUTUAqMzPTeJ03bNgwKCjI4q5EYWGhFd9n9TMgNWTIkCVLlhiv/6ysLGsNSKnY 2dktWLBgypQp33zzzd69e2sVLFAqlfPmzbt27ZqzszOb9nK5/Pz580ePHo2MjDRUrqIZptswjqEF rUxKCElKStq/f/+5c+eePHlirZcMoEJsfnq3g/OLywpqtdf666f/22uUxsY3GvX87/VduvzdKXmO CwEAAACGUjfzfbKysowaBbDEK2HdASmhsD5WnQgICGjdurXx+s/Ozq4Pw+jt7b1x48bLly8PHz68 VjtmZmauW7eOsZlMJvvtt99CQ0OnTZt24sQJA86cNcN0G8aAi2EngeqWIcUmKvTo0aPJkyd36dJl 06ZNhopGEULkcjneFoB5KpaKBxxdVdtoFCFkY8yu6hs7+ARyODqmQy66sB+XAwAAAAyibgJSRv0g 3adPH4t8r1lszUsp188MKUJIjx49LPR5ZG5atWq1e/fuc+fOtWnThv1eu3btop8gfP/+/V69ei1d ujQjI8Pg52yJ87/MbV286sRi8eLFiwcMGBAREYFLBvVEbH66/85pumUnlcllqcUvq28f3+RNDCwA AADULSvMkOrcubMlXglM2bNKXbp0sdDnkXnq1KlTRETEnDlzWLaXyWTbt2+v6bf79+8fMWKE8dZY sMQMKcMGpAwe3kpPTx8xYsSuXbuMNLcOU/bADB15fKPt7rd1yI1SKZPLUkvzq28/OPJD3Tr8Le4w LgoAAAAYhLUFpBo3buzt7W2JVwIBKatk1IBUvcqQqsDj8VavXr127VqW7Q8dOiQWi7V8xjtyZP78 +RKJxHinaobzv8w/AYpGfn7+uHHjHj58WK8uGUCIXxN9dlcq5XtjLmr9VZBLM12eJkpFYZkQ1wUA AAD0VzcBKZ2XQGLUoUMHC70SqCFllRo1asSyqLYO6mdASmXWrFmffPIJm5bFxcUXL2p+GIuKivr4 44/1OQE2kR0zzJBiPG2zzZBSKBTTp09/9uyZXn/wmCpkISAFZqiFm8+YwKH69HAk+bbW7W62uvx5 kshl2cIiXBcAAADQXx0sqPTy5UupVGqkzlu1amWhV8KApZTNUL3NkFLdk7dv3zZGz/U5IEUI+fzz z69cuRIdHc3YMiIi4vXXX6/4USqVzps3TyaTsTyQr69vaGhocHBwkyZN/P39fX19XV1dnZ2dO3fu /OLFC5odLTFDyhxSqLTOm9uxY8fNmzdZ9mBraxsSEtK+ffugoCB/f39/f38PDw9XV9ddu3Z98cUX NDuihhSYp5kdBh9PPq9U6nh/ZpU833Tr3IKuwzS2j23d92bOg9p2K1cqiqRiXBQAAADQXx0EpIz6 KTooKMhCrwSm7FmroKAgBKSMgcPhrFu3js2qmhrjv3fv3ufPmWsD29vbv/POO2PGjAkJCdHaQCAQ 0PdghtENxhQh88yQKi0t3bBhA5uWPXr0mDFjxqBBgxwdHXW4ZMiQAvPU2bupwIYv1CMM9Cw/U8uf J2d/HocrkdcyIKWQl0iQIQUAAAAGUAcBqdzcXON13qJFCwu9EsiQslbNmzc3Us95eXnm/MDj4+Pv 3r3L2Kx///5eXl66HSI0NLRHjx7Xr19n+CT27JlCoaiIxfzyyy+MPQ8ZMmTTpk30BemaN2/O5/Np GphhwSYbG4bXfMNW9TbUCPz5558FBQwVnV1cXLZu3UofoHRycgoODqZp4Ovri7cFYIY87Z2GNBx8 4vlpnXvY9mTf6t5jPe2d1De+5tvMlsuTyGudtH4jLb5vQHtcFwAAAND344npD2nUgFTDhg0t9Eog Q8paBQQEGG9UxWKxnZ2deT7wixcvLlu2jLHZiRMndA5IEULGjRvHGJCSyWQZGRn+/v6EkAcPHjAu qzd+/PiffvqJy+XSN0tLS4uJiaFpYIbpNowBKcNmdRkqIHX06FH6Bm5ubmfOnGnZsiV9M7lcTn/J HBwc8LYAzNPxN+dRm0/r00NURsKIZlXqbHraOwW6tY/Julnbrm6mxeOKAAAAgP7qoKi58dI63Nzc LPfjBDKkrJVRg6TmnCTFGPtQYV/LSavevXuzaZaSkqL6JjIykr6ln5/fxo0bGaNRbJhhhhTj4zKH DCmNcygpKbl16xb9Ll9//TVjNIrVX0QOhwDUEYlC9sH5LV33Lqqpwbruc/Tp/06OlmjsrOa9dOjq 38LnuF4AAABggM+Mpj+k8TKkjJeKYgLIkLJWRr0tc3NzVYk/ZoixXo+KWKxXcdzAwEAHBwfGG6y4 uFj1DWM9r3feeYflmdvY2Dg5OXG5XA6Ho/GVoigul8vj8cztotDPMSRmmSEVHR1Nf1be3t6jR49m 05VCoXB0dFS/UqpvKrZ4enribQHUlRZ/fPaiIIYQEpZwXyOVSaV/YAdOFFeh0DH1Miz+/spu0zQ2 zu0y9ONrG2rb1dPCBFwvAAAA0J9VBaR8fHws90qYeT0gPdXngJSnpyeXyzXS7C1zvm1cXFzYNKsI FenM19c3Pp5h/khF2Ovp06f0LVmmXBFCCgsL6U/eDKfsMcbIzPCcGS9Zjx49WGa0iUSikpISa/0j ApZLopC9dmipKhpFCNn/73mtAalg9wAHG9tiiVC3o8QUaE9r6uTdOTr7Tm17i8tLb+nhh2sHAAAA +rCqKXv6VKKpW8XFxYmJiVZ8n9XngBRFUcZLuzDngJSHhwebZvpHqNkkNKkmBioUivT0dPqW7IvQ M97Vhp3+ZhCMFcdqlbBmmjmJaWlphrpk9NEogLrS4o/P7mc9qPhxf1y41mb2PP7MVhN1PopYVnLi iZbZr6Mbd9Cht1/u/4MLBwAAAHqyqgwpy51tERERoTUxgaIoQTl7e/uKr+pbVGQy2XfffWe2D1Ao FNbnp5mnp2dWVpZlPZv0xzLZhDFCxIhNFSpbW1tCSH5+Pn0GkKOjo6urK8vjvnz50uJuRcbgXa2e qowRN4OE5HJycugbsC/TZomXDKybXKkYdnJ9RW5UhUmntx4c+WH19hsHvvVz7EGJXKTb4Q7G3xnV uqvGxl6NW5Pbte4qXyLE5QMAAAA9ISBlFtq0aXPkyJHqkSb2C6glJSWZc0CqPmdIGfXONOcMKX9/ fzZzFVNTU/U8EJsogyogJRIxfIpr0KABy4MWFRUxJhOZYYYU47IPBQUFLLuSSqVGOkmNcWO8at7e 3ix7ZowLm+ElA+sWcmD54xwt0aA/E099lTe6hYdv9V8t7TBxdfQu3Q73Z+Kpg0QzzuVj78Xn8iTy 2j2jTySf/R95H1cQAAAA9FEHU/by8/ON1LPlTtlr1apV3759u3btGhwc3Lx5cz8/Pzc3N/bRKEJI WVmZOT9ABKQs7tmkPy6X27RpU8Zmz5/rtVqTSCRizKCpeHFgzKVinx6VlJTE2MawBcINgrGwF/t/ MGDzmmOQilSMkS83NzeWXSUnJ1vcJQNrJVHIBp/4+nH2baLUeivKDybc0LrjsOYddZ4tq1DIwxLu a2x04NlyKC4htetToZTjIgIAAICe6iAgxf5f4GvLcgNS+tNzqTKjv/OWSNjMq7JW7DM4asucA1KE kJCQEMY2z5490+fuffToEZsggmr+oCpPigZjgwqxsbGMbcywQDhjQIqxYFMFNnFAg4wA40VhXDqQ /VUzw0sG1irkwLKI5Is0DX68f0rr9td8gpz59jof917eY40tAU7utlxVvjxV9T/adx0yaUJBNq4j AAAA6MPUAamSkhLjBSbq84rdZh6QIvW7jFT9zJAihLRv356xjUQiuXXrls6HuHDhAmMbFxcXVUyQ MbTBfhranTvMi1KZYXSD8VZkXK+wApuAlEFe7RmvGsujxMfHFxYWWtwlA+uTWJDttm3M05x7hHaG aK4w7ff7WiJWHIrq27C/zkfPLi2qvvG9FuO1taULSymJUqFERiEAAADoxdQBKaPWlEVAypzV51l7 xrszjZdvaBCdO3dm0+zo0aO69S+Xy48cOcLYrF27dqpvGKfBsnyBUiqVf//9N2MzM5z/5evrS98g JiaGZVfGyxHTKORkb8+QDMKyktq5c+cs8ZKBlYlMiGm7992CsmI2jWdf0V4a8sjwuTqfwM00LUHn Xn4tat5De86UTKlAXXMAAADQk6kDUkZN6EBAypwhIGVxTyj9dezY0cnJibHZkSNHdFtr7/Dhw4xV gQghvXv3Vn1jb29Pfz5JSUlskqQuXbqUmZnJ2MwMp6kGBgbSN0hOTmZZZj46OpqxjUEKnzNWmn/2 7BljJ0ql8tChQ6Y5YYCaJBZkjw1fKZKxrfkokUsPPrlWfTuPw53afKRu53A792H1jaPbdGG3d2VY SqGQi6QluKYAAACgD1MHpIyX0OHu7s7lcuvthURAypwZr7qZmWdIcbncoUOHMn/okkgWL15c2wXO 0tPTV65cyablkCFDKr739/enaSmXy9nMxduwYQOb45phdKNVq1aMbU6cOMHYRiaTRUZGmmYE/Pz8 6BvcvHmTsZPTp08/ffqUzePC2wIwkstJsV0OfMgyN6rC1oentW5/r8NgitLxLdzyS1oSS4f69WRZ PYp1MwAAAAAG1jNlrz6nRxGzX2WPIEPKaKNq5jkdY8eOZdMsPDz8yy+/ZN9tVlbWxIkT2SSIBQcH BwcHV/wYEBBA3/63336jb/DTTz9FRUWxOUkzjG44OjoyxqR27tzJ+Hpy5MiR7GzmesYGeV1ivGTh 4eEpKSk0DTIyMpYsWWKhlwysQ05p0ZhzK/LKCmu744P8F0KppPr2xk6e/FeVyGstuSir+kYfe3e1 n1iFnDbdOmeeo51XUqbbf/nCMtyrAAAApmRj4uMZL6GjngekkCFlzox6c+bn5xtvFT/9DRgwIDAw MCkpibHl1q1bk5OT169fr1oRj8bFixc/+eQTlrP8Zs6cqf5j27ZtIyIiaNqfPHlyxIgRo0eP1vrb bdu2rVmzhuVjN89YYZ8+ff7991+aBmlpaevWraOJD6amprLMTZNIJPqfcNu2bekbyGSyuXPnHj58 WGv58/j4+OnTp+fm5lruJQNLdzkpdsxZXaJRhJAicU6vo1/fnaT5fGzi4tXMLTg2J1qHPvcmnNhD PtLYOKND393xYWobVCmrVLUt5uvi44QTd9JP3k/IK62IK6mdv+pbqnqU7VXobXznFm38XD8d3h53 LAAAgMmYOkOKcZEjnRlvVpRFEIlEZn6G9TkgJRAIHBwcjNR5UVGRWb/EcDgff/wxy8ZhYWFdu3ad P3/+X3/9VT37KTs7+88//xw1atSECRNYRqNatGgxYcIE9S1dujCXSpk9e/bKlSvVDyGRSCIjI8eN G7dixQr2da/NM7oxciRz6ZktW7asX79ea7rQ7du3R44cyTLXVbfXJY3Jm15eXoylr65fvz5ixIhL ly6pl1FPTEz89ttvBw0axKbIVMWFxtsCMCChVJJYkK1bblSFe5nXiiRankqTG3fXuc+w+PsaWxz5 zlyOjVoEp3qGlOYWoazu33gIy6S5xeLdlx6M/v7sgHVhP164n5xXXCKWlIilJWJpiVhSIpaUlJX/ J5FWfi+WCCUyQigPR7vZ/YLPLxryv/f7IBoFAABgYqbOkDLeh2cPD4/6fCHNf8qeUFivl+Px8PAw UkjOzANShJC33nprx44dbCr4qEIY+/fv379/PyHExcXFx8dHtTRednZ2RkZGbQ+9bt06jdJyvXr1 srW1pX++KBSKrVu3bt261cfHx93dXSQSpaSk6DCZyzyjG926dWvWrFlCQgJ9s40bNx47dmzcuHHB wcHOzs6lpaXx8fERERFXrlwx/evSoEGDdu7cSd/mwYMH48aNc3Bw8PPz43A42dnZOpT8R4YUGFbg /6ZK5bICSbGe/Uz6a+1fozRzM5f3+s/d7LjjL8J16PBh/tMRpIP6FheegEtx5URjZczqGVKVW86n X6vb4X3/18hT9+KFEkWp6pnLoTTPuXKDZnBtymut103sYs/neTja4kYFAACoK6YOSBkvQ8rNza0+ X0hM2TNzrq6uL168sKznlMFeZWxsfv7552HDhtU2plNYWKjPo3vvvff69u2rsdHBwWHEiBHHjh1j 00NmZiab1fRqYp4BKYqi5s2bN3/+fMaWiYmJ3333nT7HMlTm5vjx4xkDUhWvM+zzoaoz/8g+WJYA lzYlkqKClzF69vO8MEOikPE5mu/ZRjfvfPzFeUJIbefTlUg1n5vN3RoIbGwkcvWngEY0iqp2oDqo ay6TK9MKSn6JuP9N2L3KdFUOpeWU1OfoUYQQYsPlutvbvt87+J3eTVr4eOD+BAAAqHOmnrJXXFxs pJ5dXFzq84VEQMrMubq6Gqln88+QIoSEhIRs3rzZlEfs3LnzqlWrtP7qgw8+MM05mG10Y9KkSSEh ISY4kKECUh07dmQz11J/mLIHhnV17LLDQ+c78Oz17CeuIEUk0/J68nqLzuWdU7Va/C4yKVbb5lot sUcRQr6+etJkg/ksI2/4xrOBn/wW+Mn/1p2+p1AQwqFe/ad+8pUnSFVUjOJxOevGdE7aOD1pw/S1 4zsjGgUAAGAmrKeGFDKkzPwMEZAyUs8WEZAihEycOHHz5s0aE+iMJDAwcPfu3VpLXBNCOnbsyKaO Er2GDRsytjHbgBSHw9m+fbujo6M+nfTs2ZMxqqXbs16jhpTKihUr9HzUFEUxLtgnlUq1Hh1AN/Y8 focGjfs26q9nP0ql8oO/dlTf7sCzdeBVf6FjjivFFqVV3/hhq3GEogjFIYSj1oOyWvpVRf9UQZkp /rK/LBFvC7/TbdWJs/fi0vJLiZIiRD0rilSebWWmFEUowrXh+rjafzSgg2TnnKUjX/N3sRfwubgt QUXn1RhV/2EAAQAMwnpqSBnvA79FMP+AVD2vIYWAFCFkypQpfn5+7777bklJifGO0qZNm8OHD9Ov PLhu3bpbt25lZWXpdogmTZqcOnVq1qxZN27csNBnZfPmzXfv3j116lTdkphef/31HTt2bNy48cGD B6Z51nfr1m3OnDnbtm3TuYdvv/3Wy8vrnXfeoW9WVlamKlsGYCh7Br0flPkopzRZn04OJYV9kTk6 2Kex+kaBDf8/jfrveKp1DjLdAnlF4pzqO4R4Nay2u9aZejUdxfCSsvNXnHhwISY+Pb/0VSBMVRCK qnZ09VAUIYSQZg28fp7SvXOgh6eTPW5C0HD4Rvwn+y7p00P6z+9hGAEA9Gc9NaQQkDLzM6znGVLG y+CzoIAUIaR///6XL1/++OOPr10zSjXcSZMmrV271tnZmb5ZgwYN9u3bN27cuIKCgtoeIiQkZO/e vT4+Pr1796YPSJl5QaI+ffocPXp05syZaWlptdrxww8/XLlyJYfDadu2LX1Lw0YeV65c+eLFi7Cw sNruyOfzN23aNGHCBDZPFrFYjIAUGJa7wPH2pK8D/zeV6Jd/t+b+mUPDPtLYOKFFzx1PjxNCaMtI qac7lT+R/961deg76o0mBvecFFm1ecV3qqQkotDo5J+sWCMNWplMfuhqzMJD0XnFJZVnojUriqiV i6IIh6KcBPwfJr32du9glseSyhVSmUIqVyz442rlVo5mrE1ZGQh7FamjKA4hhENRdjybwa1d/9Ol Ne52S5GcW5xRoPtfqCnd2mAMAQAMAhlSVgIBKTOHDKkKDRs2PH78+L59+7777rv09HRDddu+ffsv vvhiwIABLNuHhISEhYW99957LJf/U3n33XdXrVqlCli0b9/e0p+VXbp0uXz58nfffbdr1y42ZxsY GPjNN99UDHKTJk3o2xs2IMXlcn/77bdVq1bVKk+qefPmW7duDQ0NJYQ4Ozs3btw4OTnZoq8aWCJ/ B48O3h3vZ0Xr00l0xp0yucyWW+Wd26BmwUP9evydfp0+JapcZZuTL85vJe9o/HqAT8fIzHs198BR +5WSEBJXaJSA1Den7u68HBOfWaBWGYo+FPXqf639Gmyb3rOdv6uHo4DNgS7FJu6/kXTtWUp2sTSn RFj+oKtPAKy2UUkRQo3p2Gx6r+Z+7i5NPR2xWp9lufBEr3Vm2gU4YwwBAAzC1AEp403VqedFzc1/ cah6HpBizNkxw+eU8VAUNXXq1PHjxx84cGDv3r30077o2draDho0aOrUqYMGDartvi1btoyIiNix Y8eWLVtyc3PpG/fo0eOLL77o2rVrxZYWLVrQ72Kokt7GvjO/+uqrefPmnThx4syZM/fv368+z87G xqZr166TJ08eO3Ysj8er2O7r60vfucFXseByuatXrx45cuTXX3999epV+sbu7u5z586dNWuWejWx li1b0gekLOKqgeW92eJwN3adMvjMfYVSrnMnqaX5JdIyjYAUIWRii55/p6uyNSuiSPTz7AghJL00 R65UcKkqtUS97NwJobTM1KuSLUQRUpEzZUgyuaJIJOm56uDTjMIqR6UvF8WhCCG2NjY/T3nt/X4d WL0hKZPJ5IqxP56/8Cihxv7V/mKpDwafy7Xj2czqE7z0jWAPTAa0TFK54kVugT49TO6FDCkAAAN9 MDRlAVelUklf2EUfiYmJetbotWhjxoy5cuWKOZ9hjx49Tp48WW8v0PHjx2fNmmWMnt94443ff//d ogfn6dOnERERV65cuXv3Lps5dAKBoGXLll27du3evXu/fv2cnJz0fW8qlUZGRkZERERHRyckJFRE ZGxtbYOCgnr37j169Ojq+VAKhYI+tCEQCHx8fNS3CIXCzMxM+pNp2LChetCnJmKxmDG/zM/Pr7az z5RKZWJiYkZGRnFxsVAodHJy8vLyCgoK0tqPUqmMj4+n+xBuY1M9iyo3Nzc/P59+3BirjxNC4uPj T58+HRUVFRMTk52dXbE9ICAgNDT0jTfeGDZsmL295sfFnJwc+hhuQEAAm/EH0MHyywfW3v2fPj0s Cn5nw8ApGhvTSl4G/u9tmUKq8QSl/ZEQQiJGbRoYWGXi7YGnl9/6+9sadlRW3+zIF8RO+bWhiwEW rSuTyUd8d/zGsxyhRKItFFVjVhSXyzk4Z2jHxp5NvRj+4UeuUPx5I277P48evsjPLxW9yrqqPj+x emIURQghTXwabJ7QpbWfW6CnI4/Lwf1suUQSebOFu3Sesudgy0va/K6nEyZ3AwAYgEkzpIyXI8Ph cOpzNIpgyp7ZQ4YUjaCgoKCgoLlz56riBc+fP8/Nzc3LyxMKhapVz/h8vkAgcHd39/T0DAgICAgI oChD/uM8j8cbOnTo0KFDVT8WFhaWlZXZ2Ni4uLjQLAvI4XAY56xpsLe3b9q0qUHO2c7OzlBdqaMo qmnTpix7piiKMU2sOk9PT09PT/1PtXnz5gsWLFB9L5FI8vPzuVyuQCBwcHCg2cvLy8vLywt/+6FO LOr65k+PDhdJdH/R3hiza33/STacKq9L9ja29ja2RRIZIaTmJCktOVOlEs13Dn5O7q/CNK8aKmus bk4RQohULo/NTdM/IHX2Xvy8fdHxr+L15TEgiiYaRam+OAv4h2f3H9K+KWMA4uKj5/P3343PzNQS eKqhHJWKgM91t7d7uGayu4O5T8oTSeT67E5RxI7HNfOTpPssQBFbducvkcn1KSDF5VBcDoUXNAAA gzBpQMp4n5z1T5GwdJiyZ+YQkGLJHOIF9Xz+ryXi8/kNGjTAOICZc7NzmNh06I6nR/XpZNfDK+93 6KfRbQfPNpfTb6miCuWblVV/JGpBpVc/3n0Z+ybppN6Vt50rj2MjVciqLGOnVGpkDamXkdLzc/n9 xIxvzz05GhUrkckry0WxyFry93BfPrz1rAEd6CMDZTL5lC3nrj3LzC4qVSiIqhQ5bSiqcuOg1o2H tPWe2rOtr6uD+d9dOyNjVxy7oU8PzRs4XVg2zqjJX08zCoasPy6TK4zR+ajOrba+04tNyy1/x+j1 RHawdXNAyTAAAMOwkoCUQT7t9+3b193d3c/PTyAQKJVKU05m1B/91CFzkJGRsXDhQgsaUlUOTnFx cXJycmho6Pr16+v8FjXx0woAAAzr12Gzz2Y8TS18rHMPe+NPawSkCCEDfTtcTr9DiLJqDpTW4FRl ztSTnDSpQs5Ty7ey5fA5FJcQeZV+quRMkaqBLUqfiJSwTDple3hsmlrxcpo5emrH8nV1eLZugoDP kA7zfdj9RQcuVemFvhyV2iS+DeN7Lxre3oJurcTsIn2yfgghLX1djD0Vcei3YSl5RlmJpaWfL8to FCEkPkuvJb+b+eLfPwAADMZKpuwZ5NN+SkpKbGws7gnjXf09e/ZY6Mk3btzYHG5REz+tAADA4PYM fH/gicUKRcXEpdr961dcQaZIJhHY8NU3rug9ZmX0zvKwjkbVJ6pqKKoyIpNYlCdTKNQDUm4CBxvK poxIq3Sj+k49q0ip2kjJlIqU0mwdBkEqV+y+GrfkwLWXJaXV5uhVDXGpzdEjhNjYcBcPC53VtxVN NEokkW0+d+/wzYT7L7KqRJ1q6l8tK6pDI++pPVrOH9zehss20iaTK889eHEnObPaSdNtqNhka8P9 ZEgIY3CN0b6b+r6D7do0wHi3fVq+sNuXR1Lz8o3R+Rsdmh39ZDj79qceJOlzuPGhAXgdAwAwqP/8 3AAAIABJREFUFEzZU3sHg8WVoAb6B32MN6sUGVIAABakq29LD1vnHFHFJ3PmFfHUZZRkS+RSjYAU IeT9Fm/ujD/1qkNlRc/Kaj1XHu52ToxELhHYVFbxd7NzsOFw1JqpdVMlZ+rVUeRKRaowR4dB2Hnh 7od/XGNXvLxKHlPEwqF929AV7/vr7r/zDtxLyMiq3Id+jh7RPStKJJH3Xx8WFZfE/vzLo4IUIVS7 xgH/fDrEw9EAk79yikqFZVI9O/FxNmKV7h6rjxspGrX7/b7T2a2uqHLpcWKefivAzh4SgtcxAABD sZIMKfoqtmxIpVKZTIYbArS/6dQ7WFl9tS/zf1oBAIDB2fP477cdv+7Or1U31yIsNfrUj5HjP9fY +Fa7njvjT2vLZtLImdI6p69SI3uvGKmQEKVakpRaYhGlJEplzXszKxZL39xw+p+nKdXKORH12NCr H6nKH8d2CVoxol37xjXOlrrwKPXHc3fOPHyhUKilhlE06+i9+q2bk8PY0IZbpvXn2zBPWJPJlbuu PkvKztt95VnqywLCoTSjUTUdTkkIIc0auE/s2qR7U7+Bbf31z4qqkF8qE0n1Lcy0cEQHY9zw6fnC 14yWG7V4eMjUvrULD0Un6TVfLzjAjJbFiE3NDvL34lCosA4AFsykAamKxdQNTv8l9ox3bmAF9L89 OByOvb29MW4ziUSiUCg4HCxBDQBgGb7uNe7As2tJWipJadQg1+5iWiQhmgGpIM+GfI6tRFGmuW95 NpNa/xWRC+XSC/u3DZ+p3s/4Rr1iYpKrxFaU5UEuJSFKVZRHqbYMX+2E/vd4QkYmIRT7ck5ESWb1 af/Lu71put0WfufDP66Vd1FzOSpSNXGJIuM7B+6b/Tqb2knCMukXB29uPn+3MvGqpkNonD8hhJDO LZpcXjzUgEEodRkFJSViiT49BAX4Gelu7242uVEqp+7H63PQ9uYRkPr25O0lf17vFOhzZcU4I91U AACmYdKAlPHmxOmfIYWAFBj79nBwcDDSbSYUCvWPyQIAgMn8PuC9wac+l8krggjVIztUzb8in146 uKHvJPUtbrYObraOWSLVvC31ZBmNnClClJyK7Smilxo9KwkhhKN2XGX5pLOqOVOvvqfyhGynjV+P S5m45WJqXgHtOnoaOU3E3cnpqzeDPxwUWlO3dxLSJ26JfJ6dpzZy2kqtV0u86tTEe+XIriNDmWtE Hrv1/Idz9x6lF7yqeEW/DqDaQ7Dhcke2D+jZMmD+4BD2Ral0cCMuU88eZvRobPCzuv08Z/iG07lF xQbv2dPZ6df3+o/u1KS2OyqUSj3nNq6d1K1OXjEUSuWNuPSIx6nX/k07/zhFtbGlrwuPi/QoALBs yJAy+rmBFTBILNXR0TEnJ8cYp1daWoqAFACABenq17KVS8Djl4k1LIGnTkva1J2c24RUCUjZ2fDs eDwiVjXhaOut6lQ7JUUICUu5RMgS9UYr+o1f+eggUSqrzNQjCs35aEql6vt7mYlsHu/J27GjfojQ MsFN/VtK83zdnZ3zfpxGN4xfnrgdn1xlZ3blnP6c3W/ca20ZT3vP5Ycf/nGtRCxh1z9RH6VZvRmy ugzoxjN9A1KfvdnV4GdlvGhUztZ3ddu3TKpIfan7G34el8vjmjodSSSR9193JupZUvVftfR1teEi QR4ALBsypIx+bmAFDHJ76H+X4u4FALAO9jz+G036PX5Z8SGTMSxF1BtklhRI5DI+t8q7uA9ajFx2 9ze1PrRFlIhmBahCsdDFrlqVQ1XspqJclEbOlHoDFvkZD5KzJm27SDtHj6oekxLY2u6Y0bemPuMz C78+caMyGkWpxZs0OqKIetZSGz/Xr8b2GtORLiEot6g0OjF30YGbj1Mzq54eU7SLIn6uDi0auHw9 tkePFg1MdjtFJer1z12OdnzDnk9afmmP1SeMEY3ydXXcMmOAzrtLFYqXwjLdn7Z8rr1J5scplORB cl52UenCfTdi02qMNga4u+K1FAAsnZVkSOn/UV8sFuNuAKPeusYLSCG/DwDA4qztOe54fFRc4RPa VtpzpuIKU0XyMo2A1MJuI5bd+195aEtZtY+KiJJGjXNy8PG1DzoNVu/nNdcWUQXPCKka4qnMmVI7 MRbVlMPu/jtuywWxTDWLsOasoqq/cHNySv52kpMdT2ufd5Nye60+JJLIqpWLIjSJURyKeqdX6+1v 96WvGPXj2TvLj94qLZMpKh4ym3JXhLg7OW6a0GF8t7YCnknfXYdFP80q1KtQdysfd8Oe0mtfHknL KzD4Ix3dMXDf3Df0KZmkVCjLJLpP2XN1sHV1sDXq1cwvLfvP5vCHSaklZVK5gqFGm1EXRgQAMA0r WWVP/yXMkGMCNAwSrzTeQnu4ewEALA6Xw/2x97Thfy1XKOTl2yqCNMqqOVNEIzKlVCr33L86t+tQ 9Y22Njx/O880UR6hlKoZeVUKSNWQM1X9Q+9rni2iChLUDlo1JapqLhNFmyL1IDlr3JYLYqlc8xfq cahqaWGdG3se+WiI1miUVK7YeCbq8z9vvarlRJiylsq3BXo6Lhrcae6QdjRn+yjl5VfHbh2+/W9l LzSJV5UNiK+rw4C2Tdf+p31jrzrIWIl4nKtnD8ENXQx1MqrcKGNEo9r4u26a1lfPAt4L/riqz+7e zkb5l0WZXPngRV5afvGi/TfjM7PZ7/hGx0C8kAKApTNpQMp4WUgCgUDPHpBjAjSkUqlcLufqVzhA /7vU9M8sAAAwngFN2we5NIrNTy4vQ14RlaGqpjJpUBJCFt38SSMgRQhZ1WnS+1e3EGVl0fHKFfGo qr2VlzY/kXLlwy5D1H9DEUIojlrsqSIspayWM0XnVW6UVE5XzqnKLyhCyOevt101tldNSUwdlh+J Ta15kb4a+g9t0ujG58NteTX+Ec8rFrb/fF9OcZlULn/VS02hqGqJUXP6hWyc3L0OVzrbdzNWzx46 Nm1oqJMxXm7UofkjeXrXS9JzrAa3MXDpd1U+1IOk1JIyqUJRuzUrZ/QKxksoAFgBkwakysrKjNSz /h/1kWMCjHeInoXDkSEFAADqeBzumGb9YqN3E8IhSqIxmY4QohYSUo8NUYQQiUKSWJjTxKXKIvSD W3TkXreRK+WvokUUKU+VqghwaZY2lyhkGmfVv0nbHxLCKxfXI1Tl4nqvtlTmTF3Jear1oSXnFtYQ jVJbR0+p9guKIoR0buyx5I2uWuMOcVkFo74Pf5KWqbEMn/b+ScVkO2rB4NANk7vXdAnySsoep+ZN +Ck8q1BYfiasylHZ8nitfZ1Pzx8Z4O5Qh7eQVK4ok8n17KSJhwEewtP0gqHfhRk8GmXH443v3uaP Wf3076qgVCTRb6xGdvQ34EML/vzwo5QMnXdv4GJLAAAsH4qav4IcE2C8e802IIW7FwDAQn3ZY9ya 6N3lP6nPPlNWm7inUcWJzIr83/nRVdbIc+IJ/ATuKcIc9RXlCKk+1a486YkiSYU5YpnUzqZyflwH v2aaE/RUgRilUu3cVBQ1zdgbujFcLK22Nl/NiVGEIq+3Czw5f6jWaNTJ27ETtlyUyOQsyzlV2Pte 70k9a0wkOXkrdt7+Oy9y8yt7YZd4Zc+3ebRmYoC7E6+u1zhLyikWS/QNSA0NaaRnDyViabcvDxUK DfxuhMOhzi4Z3S/I1yC97b4cp8/uTRt4d2vZ0ICPLiUvT5/dV0/ojtdPALACyJDCR3ow0R1ivCl7 xntmAQCAUXE53I3d5iy6ua1aZIdSqwOlrLL91UbqSd4jmUJhw6mMifA4XHuebXkJc6KRzaSKQKkV kyKEEEW1mXccisOhOAqlaoKesnJqnmbOlFLtQJXSCoSDvgn7Ny1L7XypamlN5RvLo1HO9vYb3+qh Nb7z1/34UT9EEIqmuHh52Est2uYsENxcMba1j/bqSDlFpX9cefbpgUtVToZiXgfQwc52dt+2NClX JpZXWiZVKPTpwd6Wr2dY7Wl6wZBvzhg8GuXhKBjXrY2holGEkL5B3hsn99V593YBTgZ8dHEZhSI9 IomOdvw6D4YCABgEaki9gklPYOy713gBKdy9AACWa06noRseHM0Q5WqbskfU6klpRo6KJKIiicjd rjJJ3JFv5+Pk/m9RBiEV+U2U5jS9ipwpiiJKUiwrkyurRDScbOycbASFUpGWpfS050xV8fnBK0/T s9QOpzUriqgnT/m6u9757yg/Fy1/Jf+69++EnyPVQlHVspZI9VAXCfDyilr+hp+L9sTkZxm5PVcf fVkiqdyTQ1sZvdx/OjTbOqOPj7PAfG6eMolUWcvaQxomdG6lz+7Hbz2Ztet6blGJgd/Y87lXVoxt 7edhwD47NPHt0MTXTC5cdlGpRK57QMrgCyMCANQVKwlI2dnZme25gXXQP+ij/11a4/tRs8yQiouL u3fvng47Dh482N29du+0jh8/LpFIaBq0bNkyNDTUWm/OtLS0f/75h77NlClT8Cw2H0lJSXfv3qVv 07Zt21atWmGs6gOBDb+tZ6OMlDy1wJMqWFM9LFWlDlSxpKRYUqIekCKETGvU+1LaY0Kqr4tH1IJT FeXJlQXSYplSRoit2pEotTpMVWura8+ZqrTtfPSe688qk5WoqlP21B9I+XYbDvfsJ8O0RqOux6WO 2BRedd+q31acqVo5qqZeztGrRrna86t3KJXJc4rLXlt9Ir9YXD7I6usEUloPRShiw+W293c78OEg Ad/GrG6e78Pu69nD+Nd0r4t0/NbTMT+GG/xBuQr4h+YOMmw0ytyUiqVEj0DiGx0bEwAAq2AlU/YQ kAJj0/8OMV5Ayjzv3sjIyP/+97867Lhx48bp06fXapfPPvusoICukOqsWbOsOCD1+PHjTz75hL4N AlJm5cqVKwsXLqRvs3TpUgSk6o/PQsZGpKoi+FRlGfLK5e1ITTlTP0Sd/X7wO+pdTQzu9f6NHepV oqqoLE9ebdU8dRSlLZ5FasiZemX3tfgP995gXEdPIwC0feprIQFu1U/hr3tx47deUG+p9i2lrXYV RQi1ZlTIwmFdBLa86r+WyRUf/R6x6+ozqVxRJeym3r+2clTuDrY3V4xv4e1ihndObGaRnj0M76jj 68yRm4/f2h5p8Eck4HOj10xq2sDNup/yOyP1Wu/PXb+qpgAA5sOk04/pUxj0YWur70oTCEgBPf3D qfUtQ0pnFy5cwP0GAPXK4GYhvbw6vPqBUqtbVPkzVaVSkqrgEcU5k6aZaufIF7jw7dXacaq82auI NFX+irP6n8PqPbjY2bvYOaglEGlUVuJUOSXqVefCMun3f9151YaitK2FVz0aRX0zttN7/UKqD8j1 uNQRm/4WlsmI+j4VfXKqDEnFebb2cV34elet0ajcYvGUn87vuPSvVK4ghBBODYlRGudPke4tGx+Z M8A8o1HCMml8ZrY+PXQK9NFhLyUhx289Hf9zhFSmMOwj6tTUX/i/uVYfjSKE3EjM1Wf3pp4ISAGA lTBpQMqcM6RQFhro6R+y1D9sWhPjhXrrxOXLl2UyGW45AKhX9o74uCJCVFkFXBUPoirCQBy1YAwh hDwrjL+W/ESjq9lNB5bvyCGUqj1XrXO1bin1slJqKE7l0VVRJ832lQGhzddPE0ICF+1+mJZXNe2I VDlnqqIAuapP0q1V40+Gdqo+FEeiYgd/d1pbGI7SFiB7NThrRoVEfzlO65S60jJZ6yX7Dt/591Vl 9CoVo6r3X7njrhm9rywd0b9tU/O8Z746elvPHga2C9Bhrz2XH0zcet7gD6dnUJPrK8bUk+d72suX +uw+QKcLBwBghqwkQwoBKTA2ZEiZTElJye3bt3HLAUC90sDerbFDA7WoDedVMEjl1RpwWuJB5xJj NLrq0yioInGJEFIZnKrML6ry2xKptiKJr4JZasGaGnKmCsXCDedickrKtGRFUVUrqb8KRVGEojwc 7W4sGca30XwjeuZe/PgtF4RlcvVuXh2XaFR4rxyE1r415kYdv/3U8b2tuUWllZ1UdlS1f7XEK3tb /h/v9Xm7T3suhzLbeyavRN+//o7aRoyGkpA9lx++/es/hs2NoijSMyjw6vI3q98PVmnBH1f1ump2 fHszq2UGAKAzTNl7BVP2wNh3iPEypKRSqZWNdmRkJG45AKhX7Gx4wwI6qoVsCFGqzbl7lamkkTPF IYRzKElzmnPPwLavPuVrZEJp5ky9Spv6NTFCo4fezo3KYzNqqVXqR6+aM7Xy+HWNCENlJpd6YlR5 FMjBlndv5bjqg1BaJnvntyvaJidS2vunCKHIqNBm0Su150YdiXo8cUvEq6wojno4j67/Rt4NkjZM m9Yr2MzvmcN3nurZQ3CAV63a77n84J2d/xj8gex6v//lL/5Tf57sd1Ly9dl9Src2eMEEAKth0oCU 8T428/l8PXtAhhTQ0z8gpf9dWhMrm7JHEJBSg9mLAPVHP792ajPy1DKkKoJTmjlThBCqoKxUKK3y HsaOwwu099JS7Kki7KI5+U7z3WA3rxbVQmBqOVOkSs7Ul5djhBK1V6qKA1WeLEfj5AcGN2norlkE RyyRtfviWJ4qlUn9KFoSryon1jna2W1/p09NuVHjf7ogVWjUg6/y/9VOlfi4ujxePcrL0c7M75as wtJX9bD04CRgmyFVkRulUCgN+Cg4HGr3rH7T+7Y340Q0A1MolTHJqfr08GZHH7xaAoDVsIYMKS6X y+Ho+0AQkAJj370ISLH38OHDnJyc+ny/iUSiffv2DRw48NKlS3j2AdQTk4J7TWvcpzyQRCrjQeXT 3IhSLTeqPGBUIhOXSMVVP+Rz7Pl25QEgjZroVLXMKYoQztl/ozVOhqelmXrOlFq4SqlRJZ1ULxdV OS2OohYMbP2/ad00DidXKCZvPZuUna1WFYrSUm68SoEt4u/hfmXZqAbOWoJHZ+/HT91+sWpWFHPi 1efDg2/9d7SjrQXMh0orEJfpPW+OfQ2p41FP3/vN8H+PNkzsNrV3+3r1NE/OKRZL5Trv7mJvr/PC iAAAZsikf3GNlCFlkM/5CEiBse8Q4wWkrG/KHiHkn3/+GT9+fD28054/f75r1679+/cXFhbieQdQ 30xv3XfPiyuEqKI8SrWIjJIQZXkARVmeM0UIRURySbFU6E0ql4HjcbheDi6kMP3V3sqKlBZOeVek Sm+EZJZqvOBwOITiU0pCKImqOUURoiRKQihlZSUnpVpJJkoj+UgtpkYqeiB8G+7iEV08HAUaDzyj QHTiXrJmuaiKk9XWP4eiHq8e7SLQ8rf16M3YcVsvkKo7qJ9U5YlVpvtQnRt7rh7Ty4ZrGWWMioVi uX4ZUh/068Cy5dGbseN+NnAVczu+zfPvZ/i62te357hEplAqdc8ya+HtjNdJALAm1jBlzyCf860v xwQM/AbCjDOkrHJWV32btadQKP7+++8JEya89tpr27ZtQzQKoH4a1CI0xKWJZrkoilKryqQlZ2rH Hc1gwXDvtmo9cKqWfKKqZjNRhNLMFBrVpiuhKIriUISypShbiuJRhEdRlMYpqZdL/z971x0fRbW2 3/fM7G56QkIgISH0FgKE3iGAFKWoqAgI9g5exe613E+v9aqIXvXavSoKFxEVQaQkFEEglCQkBEgI BEiAhPS+bc73x+xutiRbZmYr8/z46WZ3zpkzZ87MnPPM8z4vWgmjoDWwzkyL9K8bh8ZHWrNR6w6c 7vvMDwCmSEBzmB+4hR3Vp0vHRrTFRm3IPLno051gVqD1I9oKrwxd8dx1KdufmucvbBQArNt/WmQN w7tHOrPZhoMnF/0nXdrGd42JOfB/C69CNgoALtc2akRI28b2keP1ZMiQEVAIBIWUJF7RskJKhrtH iByy5xJ27dpFKbVZJQUgKioqvv/++//+978lJSXyhSZDhoz5/cbkZJ5v1THxH/iboSG1HBh/MgiX 0ktzrCpJCO5gfOnIGaVAJnUV2mqmcquLLYpHxAQB0QHVGTVWBBAAFEgBUEv5hhibZMHwYGtrDV+0 fu7bNe7RmcOsJ4d67h+/HGjWqFsJLDPVkoVaqvUTDu6RcG9aG6FeRm0UtmEXZW5TZCm8GtEtxo+0 UTzOVdSLrOG+axwopCjABjdoo6LDQvLfujUsSHF1XuArN2eLKd4xIghkyHAOHAW1Vg8AGr0eLGV5 +06eW595ITUp4g7LGylDkCGEIKoU5Krqq2aNXsdxHEe1Ov3H27KLK5ofmNavf0Ks8TmGCoYQBJWC cWszKECLRk8pNbcI3J5z+vecyy/OHxFtaW6oZBkACFIy/r5Y8hwhRSkVo1C1dwysBEchK6RkuHuE KBTumnsFpEKqoqLi2LFjQ4YMCexx9fXXX7/wwgsiRxfLsqGhofJFKkNGYGBUdC+DioeCDS1lOW81 /A8P156xqmTegFFw8CsAAMrPnnlairYSRq2VA1A4Ul9q/cxCYCiqAHVAOUQKoAOKgECpEvkaKQDo EThTyyyC9axoKQhWsr/cP9H2eJd8vvvk5RpLYVRrZJ1NnQCAw7rFZv59tm1VGzJPLvp0lzUVZVWD zQ/PXTfw6etG+RcbBQDpJ86LKd4vLtrhNl+kZy/79k9pm/3c7NSHZgy/atkoADh9pUFM8YEJsSBD RvvYdKSw4HLjgeIr5TW1zWr9haoGACiva9S3k47g0R/2mf8ZHqQMC1IGKUhSx/B+cdH94qLnj+zW vVOHQO0utU6/4vv9eecvnS6rq23SNJlNyL/em9v6QGSZmLDgpJiwPS/erGLdwkmt3Jy9JfdMk1pX XNGg1esr6pusiBPz9vAP2LjIMETs3jFMwZJ5qb0fn53qp2fBc4SU+9bMkqzzZUJKhrtHiExIuYqM jIyAJ6QKCwvFD62pU6cWFxfLF6kMGYGBWb2HsttZHaczhqeB0U8KjP/lDLNRaOWU3t7761MTrm9d VKiCgxhlC6czklkEwGQmZWKQjLRUG/beQAAJAgdUCQgAOgCWoh5AixxfFTFWoTGziWqdKVt+AUi6 xUQMiLde1WzNOb3uYL6RIDOWsS1uVqeSZd6/dQRjk5WtQa194sdjrW+V27OjQjT/fumYnn6njQKA n/YfbxEXdtAh1J7QhgKs3Zt7/9cSu5iP6NHxlQUTPdzb/83I3lNQJbj4kvHdpw7qaW9Bq9U/5Ird e37pZTGH80l6/uajLj/xbxzeZe7I/rbfN2t0y77aI7gxMeFBb982zhMncWfWnlPVIisJUjJv3zYu VOV2MrSqQf3k6n3CyyO+fdu4mDCnAoC0ek6npxqdfsW3e7PPl2edLxPZ+PoWTX2LBgDOXqnbfaIU AJ5YA7eNGZic2OGRWYODFYwnr9+7PxFq34Hw0V2TgpWsnX6ramh+ef2h/+zMcaqfdfrLNQ0sAQnV NVo9p9bqNxw4vvbghS25Z1wtTilcqmkAgIvV9QCw+0TpE2t2pyZ1WjFjwPwxKWFBfpCaw4RAIKRk hZQMD0D8CJFkoHr44vIuMjIyVqxYIY89GTJkXG34dNSd9xz8qpVtauWjzKU9rcokAPjlYuZTcL15 JU/1nPpm0TZA1LbyWXwljFlxg2aqXtOipxyDrSsNBSGUUgpIgXIUlAAcUgZASYkOgCLlACiAvlW6 ZROsZ2g8AYCkmKh9T1trmioa1Ld/tddiDQFtOaObValUKvY/d/2wpBjbqvo/u6ayrsGWHLOsH8x9 1hM7xvznjql+x0YBwN5CsYvzWUOS7Pz6RXr2g9/skbbNz81OfXqeF5Roz6w/XF7XKLh4StfoqYPs bfDRtlwr5YJbseN4kYBS01Padp7S6Dgxje8Qqnpx/og2rdwkRPbZS8u+O9Akeh4eFqT854IxoSq3 n6OBz6y+XCtcB5fQIeyz4DSHm63dd/KTXXmVDS2V9WqemHAfvj9wHABe25jZJz5s0eiBz8wb5oGh fqDgguDB2Ski5EOY1N6vFQ0t099cf+pifbOLg6pX58ggiUL2nl5zYHP2qQuVTTz9J9nFcr78ji/K l63eP7xH7Ojeia/fMoohfvCA8xwhpdfr3VSzrJCS4QGId0CTFVKu4tChQ/X19eHh4fLwkyFDxlWF u4dPv+fg1xbCHgOHYhD5AABQ85R5XGlzpU01hABS4CPsUENNbBGvITLXTEFVc4NOr2fY1pnr3UkT vz7/JwBwFAgCBQoUCQCHVAkAgHoAPQUGUG1qUlvCKP7/r83uG22TWe/HA3nldY0GY6xWSsv0ext2 VL1jQwcltBE88uP+vMq6BvMtrVsC1iqw6IiIC/9a4KcjRDwD0jGi3Wfrr5n5kmujlk4a8vqiyV7p KzFsFDhh/Z5dWuP7A2bRhOQ2v1eyzPDucUeKBYq2tHqq1VN3N37l9lNN/rNMW7k5WwwbBQB3jB/I tm8K1KzRT3lj08HCYs8fWpNGk3OuKufcn+9vyypaeWew0r1uSr8dLRVcliEEoe0+fH7tgdc3HRRW bVJsR/HHtelo8dyVv7q16xpaNLtPlO4+UfrLkfOf3TFy8sAePn7VeI4z83FCyk2G6zICBr6skOI4 LiD7XK/X79mzRx57MmTIuAoxL2Go8aNZUjzzJHcWKfOYBo22QdNiXsMTE+YRJAwSPjcenyyPAWDQ ph7DXiyAiApAFkCByBIkQBRIGAQWkUVEQBZQiaDgiSS0jLNrzb4HANCnU9SCMSlW9e84XvLw9weM ZaE1T59Zuj6zOhEQO4SFfnH7FIWNxGbZfzMe/m5/axI9NEvJR3lZGdrmAfz90Zl+Ojaa1FpOdNxI t+i2nQd/zzp9y8dS5tRTsMw7t0359v40r/TVJ9tFOYjHhIfbX8txlJ4sueTjA2Zwoh/bTjVrdOm5 p/2ltTo99/XePDE1LB2f/NrCMW3+tP5gUeLfvgm5+0OvsFHmuFTTEHL3h2mvbjh6xo2Dv6SmWXDZ xOgQW1P2wosV8979+c3fMwVXm5oQJWZsfJaRN+KF/7mbjTJHwcVL09/ePP+9X/YXXPYE3TmuAAAg AElEQVTlCycQCCmGkYCglQkpGfYhh+y5A926dbO/QUZGhjz2ZMiQcRViaEIvIARM5FHrtI0Y6RWL fzrK6TiLiRYCBCMqgKiAYfl6wEAnKRGVPJnFf9/Oy2REIIgEkKGoRGQJMkhYJARQgcgiKBBZK8sn K0YJAACWTRqgZC0mnE0a7eJPt5ptiW0YopvMnoz1n33jlrG9O1k1srSm6bM/T7VLRZloO7Ro4o8P TBrdo6Ofjo2Sqia1VuyLqDnD2nj+/pqZP/vdzVqdlG+5Fo5LeeLawd7qqwuVLWKKzxvS3f4Gai1X UtXk4wNmkD8TUj/+lXexulGSqhpaNA0t7lVaNap1eRcqBRdXMMybC8e39+vvWedKq3xIjrf75IXh L637/egpt9V/VnDZEJWCWEpiD525MvC5tb9lnec44Wy+YNfw3cfPKu749wNfpQtWIwqnOHT6n4+c u+atn1fvyfHZyzwQCClJ1vkyISXDPsSTPu4jpNx3cbkbaWlp9jdIT0+Xx54MGTKuQtzQJdWCdeLJ KQPMNVMGxqpW11yrtVgYqxi2e3CMClGBoEIMBqJCwiAhiJaaKWQAdVTHWWUFN8mcEAkiIBAABSDL s1EECRAChLUWRhGrfHkjusY+OmOg1dEdKLxY2aC1VS211gNgZbV+96SBtm7EJ0uvXPuvjTq93gEV ZV4/wKs3jrx5dLL/jo2KhmatuOf+iO5xbS13JdZGDUzo8OGd072ljeLx/YF8McVn2nXaAgA9x9W3 +Ho02Z2Te7f3U7CSaZOadBLupniKy6sf/99Rf5rWvrpBTPF+XTrGRrSbbSDrfLkPHvLcVVtf3Sj9 OdLqudYMFa5jXqrFmP9s14npb/4i8rY5NKmzgFL7Cy7Pf++X6W9v9u5palJrln6265Fv0ps1vihi kBVSxnEvE1Iy3DxC5JC9Np7cjgip0tLSwsJCefjJkCHjakNql56APAlFDLM1hLY0U2jSTO05Yx0q wouYlMizSKBEDEYMwjY0U2Waeo2VwIoaE/RRfr6IBBARCIJJM6UgyPI0GeED9CxlVkgAcceT19oe 3T2rD3OU2thFgTEI0co6CgDhiWl9WZvMemNe/Tn3YmUr68S31pqKgtY6EXsndnl+7nD/npDo9CIj 9obbEFLr9+dJro1at3zWsmu8SfxVNqgrG9RiapjlmJCiDb5NSCkYJjmxs58O9Zd+yamsr/eX1q7c nJ0tLsld7hsLFe27/meLzqDnnjUIfXHdn9PekphwqWvW1jULX3mZW78dOnPloa+21zaJVTKmJnVy tUh9i/aat37++cg5rc4npAMfbs8b9Px6HxxFniOkKHWX6Z1MSMnwAMQrpIjb0hz4LyE1evTooKAg +9vIIikZMmRcnXg4cayZSIoBZMzcmtpwkjp6udi8uIpRdI/qxCAyiAqCCiQsEAaABVAiBCEGI1ER hkVCEInNhBAJEIIEEQGRIhqs1REB0ej7RCiwYJZiz1Cy1UBqUGIHW1nTvFV/FF8ut4ihaz0Km8g7 BAD8bdm1yQnWYUff7z9V16KzpKKglRezsjNHBICBXSILX5nn7wNj5eZskTX8beYA8z//sz3rlo8k 1kYdf2NRctdO3u0oPcfpRUyQOoQFO8wJ+P5mX9fvqBSMym5esN6dY3x04q2nWWdL/eWqrGpoefeP w2JqWLtstp1ffdwDaNfxotc2ZklYoUan14ggcUzWb5/vOjn9zV/EhOmZ8MDUfq60n3vg8x0R937c pPYtwrroUlmfJ7+vb/Et3sNzWfZ8mZDiOM59zZMRGBBPWUrCnLY3gP20V4OCgsaMGbNr1y4722Rk ZDz44IPeaiHHccXFxaWlpWVlZfX19S0tLZTSoKCg8PDwLl26dO/ePSEh4eq5CngnNaVS6a0GFBQU HD169OzZsxUVFU1NTYgYHBzcuXPnnj17pqam9u7dW9rd1dXVFRUVXb58+cqVK2q1WqPRKBSKoKCg Tp06JSQk9OnTxyGdKkOGGHw0+8EvPj+ooUZmhXKGqD2Dtsj6zr+qaPt7cJf5NwSABQRAisABcEg5 SgCAAtVTIAAUKEXkAG0n/veNmrn2/D5qpHv0PMNDKeWlR0b6iBp4ICNMcYUIAHD/6H5WsqbKBvXO U6UWHBbafDD9iAiAC4YlzUntats/Sz7bYbm9xa5bPxmrVbLMmzePD4CBIT6tmzlVtH5/3sPfSJk/ pH9il3XLJycndvJ6RzVrdGLiU+IjVVbeZ7b4/tB5Hx8tMWGqmDCVnQ2igkXlhvr96KmHZoxwR8sb 1dq8CxX+clX+T5zXVXxU2Lzh9uzz9xf6NCHFcfSFdXuamtTtObK7POEUQUj17RLPfzh05sqDX22T hI0CgP6ueLEN+vv6gos+mu7g9OWKoS/+dPrthb7TJNaDI9Vda2bxwhP/9YSW4TGIHyQyIdUm0tLS 7BNS+/fvb2lp8fDK/8SJE5s3b969e/exY8ea7Kp8Y2JixowZM2vWrDlz5oSFhdnZct26dX/99ZfV l4cPO3if9umnn/7222+238+ePXv69On85/z8/M8//9xOJcHBwa+//rpLPaDX6w8dOrR///68vLyi oqLKysra2trm5mb+lhscHBweHt61a9d+/foNGTJk4sSJvXr1cmnEPv744/bH7bJly/r1M7yMqq6u /vLLL9euXXvu3Dk7RRITE2+55Za77747Li5O8Klvamr6448/0tPT9+/ff+HCBftXdHJy8tSpU+fO nTtkyBD5JinDHUgJ7ZzXWAYAWgqAhIKJjTLxLxaMUG1LY2RQa/a0GxJGZJYV8lsxAASRAnIAHKUE KQeUowgAeqCMras5BYbywiOkCCwgBapHPpSP8nF81JyaArMqEAAgXMUun2EdsXWspLJBrWmrCFrT SUZu6/qh1lyzVs8N+b+fDZ5X1vos8/9Z1H9daq85Q7r6+5C4Utd4/oqoVbq5u8rvWael1UaN6JVw 6OWbfaSvzpTXiSkeGxGqcKSQ8tk1Z+sEwNE7pCCFqGXUvoLqh2a4peWL/71V8jqfX3tg9fLpkldb Wd/02qYTYmpYMjE5WGlvmXDw7BXfvzt9nJF1/7QB3WIjvXvxju/ZEQAq6hrnvrtZKjZqePc4JevU Ou5MWfW897YVXPRpArHoUtl7mzMfvW6klfW7tyArpKThGmQEPMSboLmPkPJrfZ9DG6mWlpa//vpr 6tSpnmnPH3/8sXLlyqwsZ4XHlZWVmzdv3rx587PPPrtkyZIVK1bExLStfj9w4MD333/vant27tzZ 5vdJSUkmQqqkpGT16tV2KgkPD3eekDpz5swXX3zx008/VVVVtUcnNTY2NjY2Xr58+dChQ/yu+/bt u3Dhwttvvz0y0vFEhBCyY8eOsjJ7bggzZszgCam1a9e++OKLNTWOFQElJSXvvffeJ5988sQTTzzy yCOuvqsoLy9///33f/jhh4aGBifvCbm5ubm5ue+//35qaupTTz01Y8YMkCFDUtzYd8yp7E06oEqg wJNPiBqKYGKhDPwUT0txq7N3LxtzndnjAZEnjRAoUJ66IRQAkUOkQDkKHKUMIAD8dfb4rH4jLOeI qDeaSFEADpAAckB58kjPV0jBkK3Pik4C/OCmNojaWe9uAkBLMZStMKr14h0YH3vrSGvhQM6F6lOl 5cYCVkyWKV7PQnh1bXK3dfdPDoAh8fJPR0TWsGzGIP7Dr5n50rJRfbvE73txvu/01ZcZohzNrx3U 0/4GH27N9f0BMy/VweuiKQN9kaV95adDv+ee8Zerculne0rbmTI5g95xca/fPNr+NmW1tb7fDzVN mie/3//jY7O8e/G+vnBsZX1T8jOrr9S3SHVos4Yk2WcMeWzLLrzhg22+aRxuhWd/zFw4PiU+KsQX GhMIHlLiFVL+m6RMhscgPmQP3UZC+7VCKjk5OTbWgQg2IyPDAy25cOHCjTfeuHTpUufZKHM0NjZ+ +umnI0eOXLduna91spO33/r6+qeeemrcuHGff/55lYtTq4KCgldeeWXIkCHvv/8+H9lnHw5DHSsr K9Vq9SOPPPLII484w0aZ0Nzc/Oqrry5atKjJFQPLr7/+euTIkZ999pmTbJQVsrOzb7vttkWLFpWX l4MMGdIhVhWmMpo9ESS8n7kSQWnycTJ4kxtsm+o1FsN+eJeeiIgUkILR98mYtY8CQ5FFVBDCIEHA w6VFls8sQDRYniNFpMhQYChleBN1RBYJg2id+o//hNghWHXLaOvkevd+tVujp22zUdgGGxWhUn68 cAhj42X+6Hd/cpSzdpsyfDJzRjfWz7LkzVtHOVS7+AUuVIrzeEYIVrEAsCWr6IYPtovJY2U5Fccb RvY/9a8FDmPcPAmRKfY6hDqIZatqVPv+gLlxRKL9DWyvL5dQ5wYzGp2efrbrmL9cknXNmgMFxWKu nVWLh9l3K9Po9JeqG/yiN9YfPnX6sgTc2S6hnlkKlglWMRknLldIenkGKx2LeM6UVd/68Q6/YKP4 QXXHx9sr65t8oTEyIQUgK6RkeGqQuImT8muFFCJOnuzgrbUHCKmDBw9OnTp17969Iuupr69ftmzZ M88843csYW5u7sSJE//73/+KIegbGxtfffXVWbNmFRUV2d+yc2cHSX+OHDkyf/78tWvXCmtJRkbG nXfe6cyxaDSahx566Omnn24SnYFlx44dU6ZMycvLk2+YMqTC9C4DVYhKQCVACGIQYYKQUSDDIqNE VKKBnDKm3iNflGaaF+8dm8AAMkgYI5nFU0tIkSASRAJgtDlHYrMuJUAIED5bHu+pzgAqABkAFigD lACyhvx7RrbDGCWXkhgdqmKtVu/rjhRZxOhZ0UmGrIKteOSagZMGdLdq1aS3t/515qIhtyCaxFDm 5uhgZvcOAHD/+ORBCR0CY0hszD4tpriSIZ0iQn7NzL/+/d8lbNXq+6dseHSmT3XUtmyxKXrvThvo YM188pzvD5gxfR0LoO6aMEhw/ZuPnZa8zaXVDaV+wr8AwP/25VWL4D7G9YmfPayP/W30HNS3+I14 Ytwr/5NgDAhVnKUkdNyeXXDbR79TTsrF0aDEjg5vOCnP/VDTpAH/wfb84qWf7fGFlgTCyyIf4Rpk BDYk4RfQNyJ1fQ0Oo/YKCwtLSkrc14Ds7OwFCxa4JMOxj6+++urJJ5/0o1OQmZk5d+7c0lJp0tnk 5uZee+219oVmHTs6eLSvWbMmMzNTTDN27tz57rvv2t+GUrps2bL16yVLglteXn799defOnVKvq5l SIKeMfEd2BAFogKRBVQAKBFUiEGIKsIoCWOlmdJyeh1nsW6JYoP45HwMEgb5jHqIwFtBWWTNswUv hmIAWeS34QEsImOmmeLD9gwCLCMzdd8o6zi7C1UNTRq9cUv7VBQCEEAyNyXJppL6Q4XnbPLogXUY oKkahBG9u3y0dFxgPH2PnhHrS8Iy5LfDJ2/4YLtWJ5k26rO7Ji+aMMjXenj3yUoxxUf0TLIvWmlo 0ZRW1fv4gLltTLIzmzlpjtPO9Fj6d6L3feau15DldRLrQSrrm17eeFxMDY9cM9ThNlqOq2oSq/dh CMZHhfH/OkWEum/UVTeq8y5Uianh+bUHhN+REJ9dn6uVOvgpNjzYzq+1TWr3aaPCglT8WQsLUkle +YGC4rpm75NogeAhJYfsyfAAJBkkhBB3CGf8PUekQ4UUAGRkZNx+++3u2Httbe2SJUvEq2Os8N13 3/Xv3//+++/3/f4vLi5etGhRY2OjhHVWV1cvWLBgy5Yt7WW+69DBE2qFVatW3XLLLT16tJu55sMP P/zll1+k3WldXd3ixYt37doVHh4u3zlliMft3SZ8ciYdEChQLUcBgAVKAQilAMAQhgLoDMnvOI22 5VJ9ddfIVsL3hsRR3xf/SYCCjQkUBcoBUErRZAFu9XAx5K6jAECMif0oXwMAw29iUieZ1TCmc+Ti cdbv/G/9cq+eUmvzcrSZwvHfIDw4uv/oXtYB3d/+mdei09txLjerh3/ssu/fMjpgBsPBs9Uia2jS 6J75MVOq9nSNiXnrliELRehr3IcfD4t6MTCoiwM/RLWO+r5oZUyvKL8b5K/8dGh7frGbKpe8ZpHu UbeNGbhgrOMEwZSjao1roZEjeyaldInsHRdp8owDBKXJzZaCRq8HgH0nz63PvLAl98zlWskmgTo9 9+uhEyldhac0PXxe+I3uQnVTRb30TPHYvvay5Ux+fZO02qi7Jgwa0yvq1vEpAEAYZJEAgI5ynJ4C wIpv90p1yqob1f/bl3ffNcO8e9V7jpBynzZEfM1+bcEjwzOQhJCSFVJtIi4urn///idPnrSzjfsI qZdfftm+u7Zg/POf/7zmmmt69uzp9R62Q1lyHHfffffV1dVJvtOampo77rgjPT29zQyJERERHjhw rVb7wQcfvPfee23+Wlxc/Oabb7pjv+fPn//HP/6xcuVK+eqWIR7PTL75s7PplAICKglSAD1HeV9y CoA8LYUIADpkGCRWCimWEBaBV0TxSiZidChHRAQKCHrgc+lZP7IIIADlDEFxPC3F14AUQW8yVq+J tkx1hwtG9WEs1SWny+tOlZQBWLJe1mxUq3JKxZDbxlo7zZ0uq3t/15nWjcEyNSCibf19O0WM6xUb MIOhvFb0vZoCJ9FLrMiQoG3Pzukf74uUh05Pm9Si1Arv3T7B/gbNGi0AxEeFOVNbQ4umvkX4ejVI oegQKkQcccPoAc5s9sm9kz/dlS24ed/syr0jbZBUJ+7qcY+KDgv+9L40Z7Zc8a0DQ4n4qLC+8ZH9 4qL7xUVPTe6c2iPeYZ3BwADAdcP6XDesD8BUtU6/4vv9u/OLCsvqtTqxS56MExXPiyh+SkTySglu kjZ4IC21/fuAPu21jTnFEoRxKFlmdK/OS8cNuHtKMtO22sbAJ3714FSAqW//lvXTkVMHT4tdwvyY eeEqIqQCnmsQgP79+999990iK8nLy/v222/9pasfeughO2oFJ/H000/76SCRCan2kJaWZp+Q2rNn j06nY1mJb1nFxcU//PCDw82mTp06Z86cfv36RUREaLXaS5cuHTp0aO3atZcv24ueaGlpef3117/4 4gtf7vlvvvkmO9upaWh0dHTXrl1ZltVoNBcvXqysdBwNUVBQ8M4777zwwgu2P7mkHho6dOiSJUtG jx7dqVMntVpdWlq6ffv27777zhkH8Q0bNvzzn/8MC2tjzbBy5UqH/uuxsbGLFi0aPXp0fHy8QqGo q6srKCjYsmXLtm3b7BdcvXr1Aw88wCcKlCFDJGZ3HvZ7WRYYcukBn6eZImOrmdLoWi6ra3tAq0db Suck5iyhABxQk6aJAuWMmikKSAA4oFYPKARg0Li1kekxvb4jQE2aKWhUmRdLCg+6b1p/q0MY98av rWxRG6ootIrCmzsofkL/btaVvLbhSkNzu1SUORuFBACSYiKPvnRjII2EP3LO+0hLusbEHH/r1vAg hW92VG2zplZEHEqwSkkcWX0nRIcVrbzTyQpf+zXztV+FC9M2PDY7bUCigIJBSsYDvZ19vvYOiaq6 qtyjrk3tY2W0JwAv3zDq0euGK1kmWNy5VrHMx3dM0OrHZZ+9vOSzvQUiKCEQZ69W3aiu9rF0AWn9 o9v76b3NBzKLJLgt3zZm4Mf3TI4IduGO+tTcoSuuG3K5trnvU982q4Xf7rbnF7/y06GXbhrpxR6W FVIA3lNI9erV66677hJZyYYNG/yIkJo+ffrEiRNFVvKPf/yjubnZwy2XZXTuvdenpX3yySd2Nqiv rz906NDYsWOl3e/q1avtU40sy37++edz5swx/3LQoEEzZsxYsWLFihUrNmzYYKf4r7/++sILL3Tv 3h0Abr755iFDrJOg//LLL/ad1O+9997+/fu3ydGIP3ytVtueesgcN9100/Lly1NSUsy/PH/+/IYN G95//337aek++eSTe+65Jz7e+mVdSIiziWZfeOGFv/3tb+b3+bi4uOHDhz/44IPLly/funWr/eJN TU3p6enXX3+91fd1dXX2zx0ATJgw4ZtvvrESc40aNWrJkiX79u1bunRpffuycErpv//97w8//FC+ umWIR4egEJ5KMlwIvJbJTDOl4wCA8popK/XLhJ6DyAGeq0GKBkYJAQlQzmj/xAEygEcrrXMRMICU IseLqyhQg0KKcsZoPgRKzLkoBADo2znKKp/dpZrGhhZtu2yUiUkyXuUsIdcPts5Vv+FwcU2zxtCE 9mP0zOt/ZFKPYAUTSCOhReMTMWIJHUJ/e/I6n2WjAKBFq2vRCldIxYQqHeZkRADnKYCt4pjEUBUb 7GZqqXOHiLLqOq+fuMe++dNfLsZmtfa1308KLq5gmOVTezm58dd7c81HXkyIKixY+dzsYQ9MT5X2 oBQMGdm7y6l/Lbj2zV/+yBNOKnGUrt2Xt3B8iqAFF3WHMZkYtBeVfKmm6fmfDousPDY8aMnEwSsX C1ngsAxJjA59cFrqh1uPiLHNSj91+SWv9rCskPIm16BSSWBO1tLS4k9zKSlaq1KpPE9I+bJPUwAI r8aOHatUKu3LVXbu3Ck5IfXrr7/a3+Dee++1YqPMKZUPPvggNze3sNBeKp81a9Y899xzADBu3Lhx 48ZZ/Xrq1Cn7hNQ111wzbdo0N3X7pk2bLl1y8BLs7bffvvPOO22/T0pKeuyxx+bMmTN37tyKior2 iqvV6i+//NJWJNVmHJ8tHnzwwUcffbTNn6Kior766qv58+cfPHjQfiV79uyxJaS2bt2qVtt7BRca Gvqf//ynvdDC8ePHv/HGG8uXL7dTw8aNG9988802xVkyZLiEOcmj/3d+P/8sAgAdbaVijJop/jOh CJvzM8fF9bVcOSNn8AmnjJkVFADlw/cYoABwot466IAAcAiMkS2iFPRIoZUQM35EC0po0fBuKtZi MV9YXt+s07VrF2VeAyAAhKoUC0dbBzuv2n5My3FmYih7VBQABCvYJWMHBNhIyC254vU2vDp/xOOz RwWrFL7cUTo9p9MLn9v36BQRJCmVWVIjfNaqZElnd1pQ80iMDPE6IfX2b1m/ZBW6ey///OnQi1KI QRZ/svNcufDr8dgbS/p3cS3clRCcPaT3v++cGBMSFBbs3gtw45Nzv8jIevjbfYJrOFhUs1CQi1SD Wtug1nps1PG9GmF2Q/v+QL75BoMS2w76rmpoTn5arCJk9pCu6/42N0Tc7XTl4rFPXjsk4ZHPBdeQ c7bkbHldj04R3rr2iQfPt+9m9PMWIRUcHOwjFI/HIElrnVzKBsYgcQYBQEiFhISMGjXK/jYZGRJn Xbl48WJxcbH9be677z47v6pUqscee8x+DX/88YfPdrvD7HKLFy9uk40yoXfv3qtWrbJfyffff297 +ThDx0dFRT3zzDP2pulK5TvvvONw/Ofk5Nh+uW+fg2nW3Llz4+LseVjeeuut3bp1s7NBc3Pz7t27 ZTJFhnjEB3UIJkrGkBEPWYKskYIyS5OHBJFQbNZZMK0IyCJDAAkgBTT6lAMDwCASs/R5LFplrQMC yAAyJsIHgQVkKGGBEOQT45lS65li6LBfZ+tV1hubj9kxL7eQOyEAwvPTBlklOGvSaHMv17Vuah6j 147wamrfxLio0EAaBt/tOaanXp6KDIiPenzOaB9no0Bcli4ACFUpJWxMk1p7uaZWcHEFQ2IjVO7u MQUjfCZpod8RPM2m8O8dWS4VEZYcsEqKcLCGFs2fJ84ILp4UE9491lnjgpWbs8ODlGP7Jm154tqN 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 TLG905OOf6isryYgBg4gAEDGgACAgQNAkmho9/5qNRYRrps46NN1+/KK64AI+CuBRk0WIwTGHDlF ZQOD49J6RW/Zn+8ABsi5JkAkQCbnCARAgLXb8+ZMDosKsfTrGnHgdJEsjAKmJB4EztIBImP4/fZj N04eLB6IAgICAgICgpBqhAjZE4QUdKaQvbq6usrKSo0qFyF7TVBbW/vZZ599+OGHO3bscHNG6urq CgoKdu7c+fnnnwNAQkLCDTfccOONN7b87tSqNXN+fv5rr722fPlyN/eofv36zZo1a+7cuUFBQZ4v v5cvX7569eqdO3c2NDS4L2wymUaMGJGRkXHVVVe1fDi9/vrrS5cudVNgz549Xbp0cf1m3759//jH P7777ju73c6/6dOnj5saDh48+O67737xxRelpaXnLWC326uqqqqqqo4fP75hwwYAkCRpwoQJN998 86WXXuqm5n/84x//+9//WturjzzyyHm/f/jhhy/0kyt++eWXL7/88scff3RP9HDEx8dPmDBh+vTp Y8eOJaIWjvyxY8e6KTBv3ryXX365yU34rbfeeuONN3Jzc/k3V199NSekduzYMWPGDDe16fV651bN 4tSpU5988sl33323b9++ZiWKwcHBY8eOnTZt2tSpUz1MgbJ///7PPvvs22+/PXXqVEuu6JSUlKlT p86ePTsuLs6nn572BgTGU+MxmYpyAIBJbzDo9ACQV16ITodyJofs8T8m9RrGP52prkREBImrRvn9 jIGDAHqGq0+OXzN+4IqN+3OL64lQuX8yQsYDCgFh68G8I1mlM8b2jQyWVm7OJWDOcEJeAhF49F5+ afUv+46np/ScN3nA/77bfeR0OTrtzEEmsnj9AHA0u/rT9QeumzBAPBwFBAQEBAR8Ex0qZK8lE/2O RHOI9vsFcnJytKtcEFKueO+994YNG/bggw+6YaMudOt48cUXhw0btnjx4mYZnFbBZrP94x//GDZs 2NKlS90z5ocOHXrqqaeGDh36wQcftHl3WVlZd955Z1pa2sKFC7du3dqSY6mrq9uwYcOf//znQYMG 3XfffVlZWS3ZUWJiovsCmZmZzs+Mseeff37SpEmrVq1yslEA0L179/Num5eXd+utt44bN+6dd965 EBt1Xtjt9rVr115//fUZGRm7d+/2kWG5cuXK0aNHX3311e+++24LH1I5OTnvv//+tddeO3z48GXL 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 FhUVLVy40E3kIxG5OqMvWbKkJQHXoaGh48ePv+6662bPnp2RkdGtW7fmV+8Ox4MPPqiu8Mo9lixZ smfPHi1qttlst99++4WUd82elC1btixcuND9leJhC/Pz85988klNWBiH4+67777QsR87duyVV17R Yr+7du1qCS/s1XkbYuN/QAQkISbFyKnx8iuLeQ4+4roiIEAghKTQWEkiACirr+LxbXJqOrkkIMC0 gWO8dhRRYUHXTBgQFmIgQkKQCCWSjZ9QApTAarPvzyxOSw7hiiggzjgxXlJCRARCtm5n1hcbD1+V npwxLE4i5KooACIkSekCCZEQtxws3nbopJj3CwgICAgI+BTaId7HaDSGhISUl5drUXlLnF87BoRC yi9QUVGhXZY9Tbldv8A777zj3uoIAGbMmPHUU0818Xuuqqr673//+8ILL7ine1544YWJEyd63s7+ /fvPnTt37NixPXv2lCSpqqpq//79n3zyyQcffOCeKDl16tSnn346Z86cCxV46aWXmk1DJknSlClT Jk6cmJSUZDAYrFZrfn7+vn37vvnmm2YTkD311FOXX355QEBAk+/1er1Op3Pjnr5582b3Spz4+Hi9 Xs8/19bWvvnmm+5bEhYW9vzzz1911VVNGL29e/c+/vjj7lVy+/btW7Vq1dSpU+WVcFRUjx49mpQp Li52710VExNjsVjO/b5J9OKZM2daQpLGxsb+4Q9/GDp0KN+8qqrq9OnTGzdu/OGHH9yT9VlZWUuW LHn00UfP/em8zXOFG8kbh+ceUosXL242UjUkJGTmzJkjRoyIi4sjosrKyqNHj65fv/6nn35yv2F2 dvZrr7328MMPn/dCaNZzrV+/ftdee+3AgQPDw8MdDkdOTs7333//6aefNqvLe++99yZPnuwjN70j Oafks8R4xB7jn/WSDgAczOFwOAi4/ok5gJ8mAoCULsm8hryyQgTgwiEGjAEAYwioJ51Rb/DmsZiM +itGD1i341hBabUcfsij8wCIp8pjUFJWMzolcsvBMw4H419yrygA2eAcAcuq6iprrSMGdNtyuLiq 1kHAAAkREJicSBAQEZgDN+8v6dklMiIkUMz+BQQEBAQEfATtY0ATHR2tHSFVW1trNps7/JkThJRf YPv27ZpeR538/vXpp5+6LzB16tTXX3/93O8DAwPvvvvupKSkm266yc3mu3bt2rNnT2pqaptbaDQa n3vuuXnz5jXZ+8iRI0eOHDl58uQbb7zRvQHzf//73wsRUoWFhR9//LH7BvTs2XPZsmXJyclNvp85 c+YTTzyxZMmSv/3tb242LygoWLZs2YIFC879yWw2V1ZWtq1bIiIiRo0a5fxzzZo1zVb10UcfDR06 9NzvBw0atGLFiunTp//222/uu9FJSD3yyCOPPPJIkwJPPvnka6+95qaGl19+uSWsREtI0ttvv/2v f/2rwdB08X/TTTdlZ2ffcsstO3fudLP5a6+9dvvtt58boHcub9gKasBkioqKaoly0A1KSko++OAD 92UmTJjwxhtvNAn5vOSSS+64445t27Y1G+r4n//8584772xypMXFxc2mZbznnnsef/xxokZVeFpa 2rRp02666aZrrrnGPRe5bt0635lX1NhqCQkAGDIA4DcPvUQ8Nd7veac5qwMAwJAAABgDCDcHGw16 ALA22MrqqgiRU4qIyECmbULMgdrl17sQEHHi0F75Zyo37T1pczAJAYkrtnijAIlyS2u7RhmyC+s5 rUTIFOIUJWSIwBh8tfHggKTIeZcN+Gz9wTNVdgBGyJVhAACSJMcn2uyO1Vsz51yWImb/AgICAgIC PgJql71qF2rU0NDgfirfYSBC9vwCbgxffPk68gscO3as2QyG7gOUpk2bdtlll7mvYcWKFZ408u23 327CRrkiIyPjzjvvdF/D3r17MzMzL9Q29wqv8PDwL7744lw2CuRFmnTPPfecS82cy7Cc9/vWkhcR ERG33377ihUrTpw4cfjw4SVLlrgu+N1vO3369POyURx6vd6NdTrHxo0bi4uLvTAsm6UI582b9/TT T5/LRnEkJCR8/vnn7kMRq6urz7uXC9XpBmPHjn3llVe2bt166tSpnTt39uzZ05NjX758ufsB2bdv 32XLll3IgGz48OEffvih+0QNFRUV53JPq1atcq9yGj58+BNPPOHKRjmRlpb27LPPNjuv8LINmRuU 11XKpk882o6QCPU6PVdInS4vaAzmk7PoEQEG6E18833ZR1w8o2SahmfjSwrv0i5HhIhxEcHTx/Q3 6YkkbrXOZGNyiYBIAqY3SPFRBqcfFm+8RAwVc3e7nR04UWwy6OZclsoD9LilO68HlC4jgMKy+g9/ 2C1m/wICAgICAj6C9iGkNFV2aO3YKggdVdBJFFJa+G070ckJqW3btrkv0KdPnyZ53M7Fdddd577A +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 7dixI/0nTSaT/f8zzRXTVq1adf311991110Oh6P/bz/55JNrr7029SOcdtppB6umfNFFF91zzz0p 6vKsXbv2mmuuuffeeweMUVRVfeCBB+6+++7UGzBr1izL8WiH4oQTTvjHP/6Rus1NN9302muvff/7 358+fbrL5QoGg1u2bHnttdeef/75Qa19lqKxZY3wcDj8k5/8ZOnSpSkK6guCcOGFF/7xj39M8TiL Fi36wx/+cM455wz42507d/7gBz9oaGhIvTH5MI6y/4F39tlnl5SUpChJ7vf7L7vssr/97W8DrhG5 d+/ehQsXpp4MK4riggULDniD3HHHHak3ddGiRU8//fSAIw3NfX7ppZemfoQ5c+bgQwoAAAAg48TD YivNTOqHP/xh6j+EAhymfvGLX9xwww3YD+kTBGH+/PmWk906OjruuOMOy+vV1AYMpMLhcJp3X7Fi xcaNG6+++upTTjmlvr7eZrOFw+Evv/zy73//+xNPPGFZi2rhwoUH+1Vtbe15552Xeie8+OKL69ev v+SSS+bOnVtbW+vxeEKhUHNz8/r161euXJlOMHfddddltSu/9a1v/eIXv7Bstnbt2nTqgqWWYt1D y0XWCCGrVq1at27dtGnT9h+dNGbMmP1H21177bV//etfBzxmTPF4/Morr5w9e/Z555137LHHFhUV KYrS3t6+bdu21atXP//88ynua6qvrz/77LPz8F1ps9l+/OMf33LLLSnafPzxx3Pnzl20aNG8efNq a2tlWQ6FQjt27Hj99dcfe+yxWCyW+inOP//80tLS/f9n+vTp48aNS30k9/T0nHXWWeeff/555513 5JFHlpaWMsbi8fhXX3318ssvL1u2zPJ5v/Od7+CsCwAAAJBxNJ1Vb/IE5/zWW29dunQpug1GDEmS 7r777osvvnjkvbQ//elPljOPBuutt97qK53z9ttvf+9738vBC5k5c2b/4Zn19fXpZ1L7Y4ylU0nd NHXq1LfffjvFjL/GxsYTTjjB8nJ6yE466aSD1f2ZOXNm6ipd11xzzW9+85t0nuW8885Ls9r3IXr8 8cfPOuusAX8Vj8cnTJiQzkzMA0yZMmXdunX7/8+dd9553333Ze9VPPnkkwNO+nvyySd/9rOfpb7v 7t27Bxysd4D169eff/75qds0Nzf3H7unquq8efPSX+FxUBRF+ec//9l/6tyzzz472NhUlmXL4K9P TU3N+++/f7CBigAAAAAwZOww2lZK6a9//ev77rtPFEX0HIwAPp/v+eefH5FpVA7MnTv3iCOOyMET 9R9Wo6rq0NIoQkj6aRQh5P/9v/+XIo0yL5Vvu+22LL3wgoKChx56KAd7+Kc//WlujpkUeZPNZjvY NLrBWrJkyYwZM7L0Er7//e+nLkE1vCRJ+vOf/2y327Px4LfccsuAhZwuuOCCg9VZO5j00yhCyO23 3440CgAAACAb2GG3xf/xH//x3HPPHTBoH+CwM3Xq1DVr1lguywUpHOJcPELIhAkTLLOD/oFUOmvn zZw58xC37cILLzz11FMtm11++eWXXXZZxvetoih/+9vfqqqqctCPc+fOPfSQxXJED7GKIZYsWZKR SuGKojz++OMDlkk6RLNnz77rrrvy5N13sOHVU6ZM+ctf/mK5auFgXXTRRVdfffXA32MYe+yxx7Kx wwkhV1555cFG1QEAAADAIWKH40afeOKJ69aty+e/EgOkdu21165ZsyartaJHg+OOO+7GG28c8t3H jRu3cuVKyzSn/7Catra21HepqKhYtWrVoVSePuqoo+655540G991112ZzaS8Xu9zzz03a9asnHXl fffddyjh18033/w///M/lm+o1DPyxo8ff+edd2bk5dTU1Lz44ouZXZfttNNOW758uaIo+f/GPP30 0x977DGbzZapB1y4cOH999+fokF5efkLL7wwduzYzL6QBQsWHHrqDQAAAAAHww7T7fb5fE8++eTd d9+dwa+8ADlQWVn5wgsv3HbbbYfFhWX+u/nmm6+66qoh3HHWrFmvvPJKZWWl5SC1/iOk9u7dm/ou M2fOFEXx4Ycf/vnPf556zt2ATjrppJUrV6Z/cmOM3XPPPZk6Hx5//PFvvfVWLtMoQkhpaemzzz5b UVEx2DtKknTvvffedNNNhJDjjjsudWPLElGXXnrpQw89lJEZZ+PHj1+9evW8efMO/aEkSfrlL3/5 5JNPplP+KU+cccYZr7322oQJEw7xcRRFueOOOx566CHLqfoTJkxYvXp1BquPX3fdddkY6gUAAAAA /76QOay3/vLLL1+3bt23vvUtdCQcBm82xi677LL169efeOKJ2BuZQin93e9+d++99zqdzvQv73/+ 858///zzxcXFZnCQeqJW/5Lhu3btSv0UEydONG/ceOONL7zwQn19fZrb5nQ6b7nllueee87lcg3h fLhhw4ZDKYQ0bty4P/zhDy+//HJmh/akaeLEiWvWrBlUgjNt2rT//d//vfTSS81/9hW8P5h0apYv XLhww4YNF1988aGnPyUlJStWrPjTn/405LGQjLFzzz13w4YNixcvZuww+7yeNm3a22+//ctf/tLj 8Qztrb1gwYINGzYcbKZefwUFBY888sjLL788e/bsQ9nyGTNm/OMf//j1r3992O1zAAAAgMPLYV8d vL6+/qmnnnrjjTf++7//O50lzAGGxZw5c26//fapU6eOnpfscDjMxCeTJ6yDjJK49NJLzzjjjKVL l65YsSJFgSebzXbBBRcsXry4rq6u7z8FQZg1a1aKjKn/k7a2thYWFqY+L/XdPuGEEzZu3Pj0008/ +uijX3755cHuMmnSpHPPPfeqq65K/cip1dXVLVu2bNu2bU888cSLL77Y0tKSzr28Xu+pp576ve99 b968eelfgXu93mAwmKLBEMYZlZeXr1ix4o033nj44YfffffdFIvAjh8//ic/+cn3vve9/Xtn6tSp +/fsgAdAOptRW1v7wAMP/Pa3v92wYcOHH364Y8eOpqamUCgUj8d1XT+gcUlJSepH++53v3vuuee+ 8sorK1aseOedd9Ispz158uQFCxZceOGF6YdZiqJ4vd7UbdIcr6coSkbKh8myvHjx4iuvvPLZZ599 5plnNm3alObH+ne+852FCxcObQrerFmzXnrppe3bt69YseLNN9/87LPP0ryj0+k8/fTTFy5cOHfu XHxmAQAAAOQATfGN//CSTCaXLVu2dOnS1tZW9Cvkj8mTJ//Xf/3XmWeeiV2RA5qmvf/++x9++OFX X33V3NwcDAZFUXS73VOnTj366KNPP/30IYw8yqCdO3d+/PHH27dv9/v9mqa53e6CgoKJEydOnz49 G4OStm7d+tFHH23evLmxsbGjoyMajaqqqiiK0+ksLi6urq6eOHHijBkzZsyYkYcjQVpbW9evX//x xx/v3r27tbVV13VJkmpra6dNmzZ//vwjjzzycDw+Y7HYBx988MUXX2zdurW1tbWrq0tVVcMwHA6H 2+2urKw0X+DMmTOzVKJ72Pv0/fff/+yzz3bv3t3W1tZ3QLpcrrKystra2ilTphx99NGZfS90d3d/ 8cUXX375pfmknZ2dsVgsmUwKgmC324uKiqqqqiZMmPDNb37ziCOOwGp6AAAAALk0cgIpUzKZfPbZ Zx9++GGMloJhN3v27B//+Mfz588fQhUhAAAAAAAAgBFspAVSJsMwVq1a9be//e2dd94ZkS8Q8pnT 6TzrrLMWLVo0c+ZM7A0AAAAAAACA/ujIzmuamppeeOGFl156Kc3SFQBDJorivHnzLrjggjPOOCMj q3QBAAAAAAAAjFR0lAwgamlpWbt27TvvvPPee++hyBRk0Pjx42fNmnXKKaecdNJJlhWFAQAAAAAA AICMnkBqf42NjZ9//vkXX3yxY8eOhoaGxsbGzs5OHApgSRTFsrKyurq6urq6yZMnT5069Ygjjigq KsKeAQAAAAAAABgUihJLhBBVVdva2lr3aWlpaW1tbW9v7+jo6Ozs7Ozs7L/UN4xIHo+npKSkuLi4 uLi4rKysrKysvLy876fP50N5cgAAAAAAAIBDh0DKGue8p6ens7Ozo6Ojo6Oju7u7u7u7p6fngJ+h UAg7M0+Pcko9Ho/X6y0sLCwqKiosLDRvFBQUFBUV+Xy+4uLikpISn8+HNb8BAAAAAAAAcnGpjgwl UzjnwWAwEAgEAoH9b4RCoXA4HA6H+26Ew+FIJBKJRKLRaDQa1TQNey9NDofD6XQ69nE6nS6Xy+12 u1yuvhtut9vj8ZgJlMnlcmFkEwAAAAAAAED+QCA1/DRNi0QisVgsEonE4/FEIhGLxeL7SSaTiURi /5+apiWTSVVVVVXVNE3TNFVVdV3XNM38aRiGruvmT865YRh9P03/5yCg1PxJKWWMmTfMX+3ffv97 9bUx25s3GGOCIPTdEARBFEXzp3lDkiRJkkRRlGVZkiTzp6IosizbbDZZlvtu2+122z7mbbvd7nA4 cLQAAAAAAAAAjAAIpAAAAAAAAAAAIKcYdgEAAAAAAAAAAOQSAikAAAAAAAAAAMgpBFIAAAAAAAAA AJBTCKQAAAAAAAAAACCnEEgBAAAAAAAAAEBOIZACAAAAAAAAAICcQiAFAAAAAAAAAAA5hUAKAAAA AAAAAAByCoEUAAAAAAAAAADkFAIpAAAAAAAAAADIKQRSAAAAAAAAAACQUwikAAAAAAAAAAAgpxBI AQAAAAAAAABATiGQAgAAAAAAAACAnEIgBQAAAAAAAAAAOYVACgAAAAAAAAAAcgqBFAAAAAAAAAAA 5BQCKQAAAAAAAAAAyCkEUgAAAAAAAAAAkFMIpAAAAAAAAAAAIKcQSAEAAAAAAAAAQE4hkAIAAAAA AAAAgJxCIAUAAAAAAAAAADmFQAoAAAAAAAAAAHIKgRQAAAAAAAAAAOQUAikAAAAAAAAAAMgpBFIA AAAAAAAAAJBTCKQAAAAAAAAAACCnEEgBAAAAAAAAAEBOIZACAAAAAAAAAICcQiAFAAAAAAAAAAA5 hUAKAAAAAAAAAAByCoEUAAAAAAAAAADkFAIpAAAAAAAAAADIKQRSAAAAAAAAAACQUwikAAAAAAAA AAAgpxBIAQAAAAAAAABATiGQAgAAAAAAAACAnEIgBQAAAAAAAAAAOYVACgAAAAAAAAAAcgqBFAAA AAAAAAAA5BQCKQAAAAAAAAAAyCkEUgAAAAAAAAAAkFMIpAAAAAAAAAAAIKcQSAEAAAAAAAAAQE4h kAIAAAAAAAAAgJxCIAUAAAAAAAAAADmFQAoAAAAAAAAAAHIKgRQAAAAAAAAAAOQUAikAAAAAAAAA AMgpBFIAAAAAAAAAAJBTCKQAAAAAAAAAACCnEEgBAAAAAAAAAEBOIZACAAAAAAAAAICcQiAFAAAA AAAAAAA5hUAKAAAAAAAAAAByCoEUAAAAAAAAAADkFAIpAAAAAAAAAADIKQRSAAAAAAAAAACQUwik AAAAAAAAAAAgpxBIAQAAAAAAAABATiGQAgAAAAAAAACAnEIgBQAAAAAAAAAAOYVACgAAAAAAAAAA cgqBFAAAAAAAAAAA5BQCKQAAAAAAAAAAyCkEUgAAAAAAAAAAkFMIpAAAAAAAAAAAIKcQSAEAAAAA AAAAQE4hkAIAAAAAAAAAgJxCIAUAAAAAAAAAADmFQAoAAAAAAAAAAHIKgRQAAAAAAAAAAOQUAikA AAAAAAAAAMgpBFIAAAAAAAAAAJBTCKQAAAAAAAAAACCnEEgBAAAAAAAAAEBOIZACAAAAAAAAAICc QiAFAAAAAAAAAAA5hUAKAAAAAAAAAAByCoEUAAAAAAAAAADkFAIpAAAAAAAAAADIKQRSAAAAAAAA AACQUwikAAAAAAAAAAAgpxBIAQAAAAAAAABATiGQAgAAAAAAAACAnEIgBQAAAAAAAAAAOYVACgAA AAAAAAAAckrELgAAAAAAAACAQ8Q54YQbnHBOKCGMEUYpdgscDAIpAAAAAAAAADhklFBODW7EVYNz IotUFhiliKVgYAikAAAAAAAAAOBQUUI4JbrB46qhGQYhokC5wChBHgUDQSAFAAAAAAAAABlACREY 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 efz3ORfSk57nWWufeiDl9jpCSBTHaZpevnz5u9/7/uUrl3u9HucnLBSN41h63nA02t6+MBwOb9+k qmmnn3TfWCA1a2jFCWZNIpACAAAAAHiWcEY540TyE09Q2dFTRM4Z58R74JcpJYydfAuCU3JSCyB3 UyeeF3P+qJMuzinnRGtjjPE90U39Tuqd3ex2O2EQeA85zabz+3IZGOeUL5TecEq5x/wH/loKLsWJ 59WUMf5Ah5np7TzuK88ZP7n858ggsYe9Gu4xPOL2pXx06yX+kBfqhNeB8+P3JDh7/NolT3LvpAfD KSWz27CEGG3DQJzdSDlj5850l/sxR3kUAHwtFB3gAQAAAADgm+ACqRu3hr+8frAYSGGF1z9QdaPK ojkclff2ssVAiqGBFAB8dQikAAAAAAAAAADgVOHSBAAAAAAAAAAAnCoEUgAAAAAAAAAAcKoQSAEA AAAAAAAAwKlCIAUAAAAAAAAAAKcKgRQAAAAAAAAAAJwqBFIAAAAAAAAAAHCqEEgBAAAAAAAAAMCp QiAFAAAAAAAAAACnCoEUAAAAAAAAAACcKgRSAAAAAAAAAABwqhBIAQAAAAAAAADAqUIgBQAAAAAA AAAApwqBFAAAAAAAAAAAnCoEUgAAAAAAAAAAcKoQSAEAAAAAAAAAwKlCIAUAAAAAAAAAAKcKgRQA AAAAAAAAAJwqBFIAAAAAAAAAAHCqEEgBAAAAAAAAAMCpQiAFAAAAAAAAAACnCoEUAAAAAAAAAACc KgRSAAAAAAAAAABwqhBIAQAAAAAAAADAqUIgBQAAAAAAAAAApwqBFAAAAAAAAAAAnCoEUgAAAAAA AAAAcKoQSAEAAAAAAAAAwKlCIAUAAAAAAAAAAKcKgRQAAAAAAAAAAJwqBFIAAAAAAAAAAHCqEEgB AAAAAAAAAMCpQiAFAAAAAAAAAACnCoEUAAAAAAAAAACcKgRSAAAAAAAAAABwqhBIAQAAAAAAAADA qUIgBQAAAAAAAAAApwqBFAAAAAAAAAAAnCoEUgAAAAAAAAAAcKoQSAEAAAAAAAAAwKlCIAUAAAAA AAAAAKcKgRQAAAAAAAAAAJwqBFIAAAAAAAAAAHCqEEgBAAAAAAAAAMCpQiAFAAAAAAAAAACnCoEU AAAAAAAAAACcKgRSAAAAAAAAAABwqhBIAQAAAAAAAADAqUIgBQAAAAAAAAAApwqBFAAAAAAAAAAA nCoEUgAAAAAAAAAAcKoQSAEAAAAAAAAAwKlCIAUAAAAAAAAAAKcKgRQAAAAAAAAAAJwqBFIAAAAA AAAAAHCqEEgBAAAAAAAAAMCpQiAFAAAAAAAAAACnCoEUAAAAAAAAAACcKgRSAAAAAAAAAABwqhBI AQAAAAAAAADAqUIgBQAAAAAAAAAApwqBFAAAAAAAAAAAnCoEUgAAAAAAAAAAcKoQSAEAAAAAAAAA wKlCIAUAAAAAAAAAAKcKgRQAAAAAAAAAAJwqBFIAAAAAAAAAAHCqEEgBAAAAAAAAAMCpQiAFAAAA AAAAAACnCoEUAAAAAAAAAACcKgRSAAAAAAAAAABwqhBIAQAA/P/t2LEAAAAAwCB/61nsKowAAICV kAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIA AABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABg JaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQA AAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAA WAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkp AAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAA AFZCCgAAAICVkAIAAABgJaQAAAAAWAkpAAAAAFZCCgAAAICVkAIAAABgFRJb1m3m8eZNAAAAAElF TkSuQmCC" - width="1584" - height="1224" - transform="matrix(0.2466,0,0,0.2466,352.0674,332.9487)" - id="image228" /> - - </g> - -</g> - <g - transform="translate(-247.61905,-12.698413)" - id="g230"> - <g - id="g232"> - <path - d="M 449.502,350.4 L 427.632,432.504 L 454.3,432.504 L 476.17,350.4 L 449.502,350.4 z M 415.104,350.4 L 393.234,432.504 L 419.12,432.504 L 440.99,350.4 L 415.104,350.4 z M 379.941,350.4 L 358.071,432.504 L 384.739,432.504 L 406.609,350.4 L 379.941,350.4 z " - style="fill:none;stroke:#000000;stroke-width:1.5" - id="path234" /> - - </g> - -</g> - </g> - </g> -</svg> diff --git a/Applications/OverView/Core/DisplayPolicy.h b/Applications/OverView/Core/DisplayPolicy.h index 87fd782607..83b483100a 100644 --- a/Applications/OverView/Core/DisplayPolicy.h +++ b/Applications/OverView/Core/DisplayPolicy.h @@ -84,7 +84,7 @@ public: /// </ul> /// or not of the type preferred by the source, it may create a new view and /// add the displayto new view. \c dont_create_view can be used to - /// override this behaviour. + /// override this behavior. virtual pqDataRepresentation* createPreferredRepresentation( pqOutputPort* port, pqView* view, bool dont_create_view) const; diff --git a/Applications/OverView/Core/MainWindow.cxx b/Applications/OverView/Core/MainWindow.cxx index 0171bec863..d3438828e7 100644 --- a/Applications/OverView/Core/MainWindow.cxx +++ b/Applications/OverView/Core/MainWindow.cxx @@ -43,6 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "ui_MainWindow.h" +#include <pqActiveObjects.h> #include <pqActiveView.h> #include <pqAnimationViewWidget.h> #include <pqApplicationCore.h> @@ -50,7 +51,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. //#include <pqLookmarkToolbar.h> #include <pqMainWindowCore.h> #include <pqObjectBuilder.h> -#include <pqObjectInspectorDriver.h> #include <pqObjectInspectorWidget.h> #include <pqObjectNaming.h> #include <pqPipelineBrowserContextMenu.h> @@ -622,8 +622,8 @@ MainWindow::MainWindow() : // Set up scalar bar visibility tool bar item. pqScalarBarVisibilityAdaptor* sbva = new pqScalarBarVisibilityAdaptor( this->Implementation->UI.actionScalarBarVisibility); - QObject::connect(this->Implementation->Core.getObjectInspectorDriver(), - SIGNAL(representationChanged(pqDataRepresentation*, pqView*)), + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(representationChanged(pqDataRepresentation*)), sbva, SLOT(setActiveRepresentation(pqDataRepresentation*))); // Set up Center Axes toolbar. diff --git a/Applications/OverView/Core/ProcessModuleGUIHelper.cxx b/Applications/OverView/Core/ProcessModuleGUIHelper.cxx index fe4edccde2..7b8456b6b1 100644 --- a/Applications/OverView/Core/ProcessModuleGUIHelper.cxx +++ b/Applications/OverView/Core/ProcessModuleGUIHelper.cxx @@ -48,7 +48,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <vtkObjectFactory.h> vtkStandardNewMacro(ProcessModuleGUIHelper); -vtkCxxRevisionMacro(ProcessModuleGUIHelper, "1.12"); +vtkCxxRevisionMacro(ProcessModuleGUIHelper, "1.13"); //----------------------------------------------------------------------------- ProcessModuleGUIHelper::ProcessModuleGUIHelper() @@ -92,8 +92,8 @@ QWidget* ProcessModuleGUIHelper::GetUserInterface() //----------------------------------------------------------------------------- QWidget* ProcessModuleGUIHelper::CreateMainWindow() { - pqApplicationCore::instance()->setApplicationName(OverView::GetBrandedApplicationTitle() + " " + OverView::GetBrandedVersion()); - pqApplicationCore::instance()->setOrganizationName("Sandia National Laboratories"); + QApplication::setApplicationName(OverView::GetBrandedApplicationTitle() + " " + OverView::GetBrandedVersion()); + QApplication::setOrganizationName("Sandia National Laboratories"); if(this->WindowType == "QMainWindow") { diff --git a/Applications/ParaView/CMakeLists.txt b/Applications/ParaView/CMakeLists.txt new file mode 100644 index 0000000000..15823b6455 --- /dev/null +++ b/Applications/ParaView/CMakeLists.txt @@ -0,0 +1,58 @@ +INCLUDE(${PARAVIEW_BRANDING_CMAKE_FILE}) +INCLUDE(${PARAVIEW_PLUGINS_CMAKE_FILE}) + +#------------------------------------------------------------------------------ +# Add extra library containing custom code for the client. +QT4_WRAP_CPP(MOC_BUILT_SOURCES + ParaViewMainWindow.h) + +QT4_WRAP_UI(UI_BUILT_SOURCES + ParaViewMainWindow.ui +) + +SOURCE_GROUP("Generated" FILES + ${MOC_BUILT_SOURCES} + ${UI_BUILT_SOURCES} +) + +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) + +SET(ParaView_SOURCE_FILES + ParaViewMainWindow.cxx + ParaViewMainWindow.h + ${MOC_BUILT_SOURCES} + ${UI_BUILT_SOURCES}) + +#------------------------------------------------------------------------------ +# Build the client +build_paraview_client(paraview + TITLE "ParaView ${PARAVIEW_VERSION_FULL}" + ORGANIZATION "Kitware" + VERSION_MAJOR ${PARAVIEW_VERSION_MAJOR} + VERSION_MINOR ${PARAVIEW_VERSION_MINOR} + VERSION_PATCH ${PARAVIEW_VERSION_PATCH} + SPLASH_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/PVSplashScreen.png" + PVMAIN_WINDOW ParaViewMainWindow + PVMAIN_WINDOW_INCLUDE ParaViewMainWindow.h + BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/MacIcon.icns" + APPLICATION_ICON "${CMAKE_CURRENT_SOURCE_DIR}/WinIcon.ico" + GUI_CONFIGURATION_XMLS + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewSources.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewFilters.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewReaders.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewWriters.xml + COMPRESSED_HELP_FILE "${ParaView_BINARY_DIR}/Documentation/paraview.qch" + SOURCES ${ParaView_SOURCE_FILES} +) + +# This ensure that the paraview.qch file is generated. +ADD_DEPENDENCIES(paraview + ParaViewOnlineHelp) + +IF (BUILD_TESTING) + SUBDIRS(Testing) +ENDIF (BUILD_TESTING) + + diff --git a/Applications/Client/MacIcon.icns b/Applications/ParaView/MacIcon.icns similarity index 100% rename from Applications/Client/MacIcon.icns rename to Applications/ParaView/MacIcon.icns diff --git a/Applications/ParaView/PVSplashScreen.png b/Applications/ParaView/PVSplashScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..fb129d8d9d18408a9a471fffffd79c35f5474fb3 GIT binary patch literal 113654 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�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�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 Dy@Ufy literal 0 HcmV?d00001 diff --git a/Applications/ParaView/ParaViewFilters.xml b/Applications/ParaView/ParaViewFilters.xml new file mode 100644 index 0000000000..c3d44b7fdd --- /dev/null +++ b/Applications/ParaView/ParaViewFilters.xml @@ -0,0 +1,163 @@ +<ParaViewFilters> + <Category name="Common" menu_label="&Common" preserve_order="1" + show_in_toolbar="1"> + <Proxy group="filters" name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> + <Proxy group="filters" name="Contour" icon=":/pqWidgets/Icons/pqIsosurface24.png"/> + <Proxy group="filters" name="Clip" icon=":/pqWidgets/Icons/pqClip24.png"/> + <Proxy group="filters" name="Cut" icon=":/pqWidgets/Icons/pqSlice24.png"/> + <Proxy group="filters" name="Threshold" icon=":/pqWidgets/Icons/pqThreshold24.png"/> + <Proxy group="filters" name="ExtractGrid" icon=":/pqWidgets/Icons/pqExtractGrid24.png"/> + <Proxy group="filters" name="Glyph" icon=":/pqWidgets/Icons/pqGlyph24.png"/> + <Proxy group="filters" name="StreamTracer" icon=":/pqWidgets/Icons/pqStreamTracer24.png"/> + <Proxy group="filters" name="WarpVector" icon=":/pqWidgets/Icons/pqWarp24.png"/> + <Proxy group="filters" name="GroupDataSets" icon=":/pqWidgets/Icons/pqGroup24.png"/> + <Proxy group="filters" name="ExtractHierarchicalLevel" icon=":/pqWidgets/Icons/pqGroupExtract24.png"/> + </Category> + + <Category name="DataAnalysis" menu_label="&Data Analysis"> + <Proxy group="filters" name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> + <Proxy group="filters" name="ExtractSelection" + icon=":/pqWidgets/Icons/pqExtractSelection24.png" /> + <Proxy group="filters" name="ExtractSelectionOverTime" + icon=":/pqWidgets/Icons/pqPlotCellOverTime24.png" /> + <Proxy group="filters" name="ExtractHistogram" + icon=":/pqWidgets/Icons/pqHistogram24.png"/> + <Proxy group="filters" name="IntegrateAttributes" /> + <Proxy group="filters" name="ExtractFieldDataOverTime" /> + <Proxy group="filters" name="ProbeLine" + icon=":/pqWidgets/Icons/pqPlotLineOverTime24.png" /> + <Proxy group="filters" name="ProbePoint" + icon=":/pqWidgets/Icons/pqProbeLocation24.png" /> + <Proxy group="filters" name="PlotAttributes" /> + <Proxy group="filters" name="PlotOnSortedLines" /> + <Proxy group="filters" name="PlotOnIntersectionCurves" /> + <Proxy group="filters" name="ProgrammableFilter" + icon=":/pqWidgets/Icons/pqProgrammableFilter24.png"/> + </Category> + + <Category name="Statistics" menu_label="&Statistics"> + <Proxy group="filters" name="ContingencyStatistics"/> + <Proxy group="filters" name="DescriptiveStatistics"/> + <Proxy group="filters" name="KMeans"/> + <Proxy group="filters" name="MulticorrelativeStatistics"/> + <Proxy group="filters" name="PCAStatistics"/> + </Category> + + <Category name="Temporal" menu_label="&Temporal"> + <Proxy group="filters" name="ParticleTracer" /> + <Proxy group="filters" name="ParticlePathLines" /> + <Proxy group="filters" name="TemporalCache" /> + <Proxy group="filters" name="TemporalInterpolator" /> + <Proxy group="filters" name="TemporalSnapToTimeStep" /> + <Proxy group="filters" name="TemporalShiftScale" /> + <Proxy group="filters" name="TemporalStatistics" /> + <Proxy group="filters" name="TimeToTextConvertor" /> + </Category> + + <Proxy group="filters" name="AMRDualContour" /> + <Proxy group="filters" name="Append" /> + <Proxy group="filters" name="AppendAttributes" /> + <Proxy group="filters" name="AppendPolyData" /> + <Proxy group="filters" name="ArbitrarySourceGlyph" /> + <Proxy group="filters" name="ArbitrarySourceStreamTracer" /> + <Proxy group="filters" name="BlockIdScalars" /> + <Proxy group="filters" name="BrownianPoints" /> + <Proxy group="filters" name="Calculator" /> + <Proxy group="filters" name="CellCenters" /> + <Proxy group="filters" name="CellDataToPointData" /> + <Proxy group="filters" name="CellDerivatives"/> + <Proxy group="filters" name="CleanPolyData" /> + <Proxy group="filters" name="CleanUnstructuredGrid" /> + <Proxy group="filters" name="Clip" /> + <Proxy group="filters" name="Contour" /> + <Proxy group="filters" name="CTHFragmentConnect"/> + <Proxy group="filters" name="CTHFragmentIntersect"/> + <Proxy group="filters" name="CTHPart" /> + <Proxy group="filters" name="Curvatures" /> + <Proxy group="filters" name="Cut" /> + <Proxy group="filters" name="D3" /> + <Proxy group="filters" name="DataSetSurfaceFilter" /> + <Proxy group="filters" name="DataSetTriangleFilter" /> + <Proxy group="filters" name="DecimatePro" /> + <Proxy group="filters" name="Delaunay2D" /> + <Proxy group="filters" name="Delaunay3D" /> + <Proxy group="filters" name="ElevationFilter" /> + <Proxy group="filters" name="ExtractBlock" /> + <Proxy group="filters" name="ExtractEdges" /> + <Proxy group="filters" name="ExtractGeometry" /> + <Proxy group="filters" name="ExtractGrid" /> + <Proxy group="filters" name="ExtractHistogram" /> + <Proxy group="filters" name="ExtractHierarchicalLevel" /> + <Proxy group="filters" name="ExtractSelection" /> + <Proxy group="filters" name="ExtractSelectionOverTime" /> + <Proxy group="filters" name="ExtractHierarchicalDataSets" /> + <Proxy group="filters" name="FeatureEdges" /> + <Proxy group="filters" name="FFTSelectionOverTime" /> + <Proxy group="filters" name="GenerateIdScalars"/> + <Proxy group="filters" name="Glyph" /> + <Proxy group="filters" name="Gradient" /> + <Proxy group="filters" name="GroupDataSets" /> + <Proxy group="filters" name="IntegrateAttributes" /> + <Proxy group="filters" name="IntegrateFlowThroughSurface" /> + <Proxy group="filters" name="LevelIdScalars" /> + <Proxy group="filters" name="LinearExtrusionFilter" /> + <Proxy group="filters" name="LoopSubdivisionFilter" /> + <Proxy group="filters" name="MaskPoints" /> + <Proxy group="filters" name="Median" /> + <Proxy group="filters" name="MergeBlocks" /> + <Proxy group="filters" name="MeshQuality" /> + <Proxy group="filters" name="OctreeDepthLimit" /> + <Proxy group="filters" name="OctreeDepthScalars" /> + <Proxy group="filters" name="OutlineCornerFilter" /> + <Proxy group="filters" name="OutlineFilter" /> + <Proxy group="filters" name="ParticlePathLines" /> + <Proxy group="filters" name="ParticleTracer" /> + <Proxy group="filters" name="PlotAttributes" /> + <Proxy group="filters" name="PlotOnIntersectionCurves" /> + <Proxy group="filters" name="PlotOnSortedLines" /> + <Proxy group="filters" name="PointDataToCellData" /> + <Proxy group="filters" name="PolyDataNormals" /> + <Proxy group="filters" name="Probe" /> + <Proxy group="filters" name="ProbeLine" /> + <Proxy group="filters" name="ProbePoint" /> + <Proxy group="filters" name="ProcessIdScalars" /> + <Proxy group="filters" name="ProgrammableFilter" /> + <Proxy group="filters" name="PVConnectivityFilter" /> + <Proxy group="filters" name="PythonCalculator" /> + <Proxy group="filters" name="QuadraturePointInterpolator" /> + <Proxy group="filters" name="QuadraturePointsGenerator" /> + <Proxy group="filters" name="QuadraturePointStatistics" /> + <Proxy group="filters" name="QuadratureSchemeDictionaryGenerator" /> + <Proxy group="filters" name="QuadricClustering" /> + <Proxy group="filters" name="ReflectionFilter" /> + <Proxy group="filters" name="RibbonFilter" /> + <Proxy group="filters" name="RotationalExtrusionFilter" /> + <Proxy group="filters" name="ScatterPlot"/> + <Proxy group="filters" name="ShrinkFilter" /> + <Proxy group="filters" name="SmoothPolyDataFilter" /> + <Proxy group="filters" name="StreamTracer" /> + <Proxy group="filters" name="Stripper" /> + <Proxy group="filters" name="StructuredGridOutlineFilter" /> + <Proxy group="filters" name="Subdivide" /> + <Proxy group="filters" name="SurfaceVectors" /> + <Proxy group="filters" name="TemporalCache" /> + <Proxy group="filters" name="TemporalInterpolator" /> + <Proxy group="filters" name="TemporalSnapToTimeStep" /> + <Proxy group="filters" name="TemporalShiftScale" /> + <Proxy group="filters" name="TemporalStatistics" /> + <Proxy group="filters" name="TessellatorFilter" /> + <Proxy group="filters" name="TextureMapToCylinder" /> + <Proxy group="filters" name="TextureMapToPlane" /> + <Proxy group="filters" name="TextureMapToSphere" /> + <Proxy group="filters" name="Threshold" /> + <Proxy group="filters" name="TimeToTextConvertor" /> + <Proxy group="filters" name="TransformFilter" /> + <Proxy group="filters" name="TriangleFilter" /> + <Proxy group="filters" name="TubeFilter" /> + <Proxy group="filters" name="UnstructuredGradient" /> + <Proxy group="filters" name="WarpScalar" /> + <Proxy group="filters" name="WarpVector" /> + <Proxy group="filters" name="NormalGlyphs" /> + <Proxy group="filters" name="TableToPolyData" /> + <Proxy group="filters" name="TableToStructuredGrid" /> +</ParaViewFilters> diff --git a/Applications/ParaView/ParaViewMainWindow.cxx b/Applications/ParaView/ParaViewMainWindow.cxx new file mode 100644 index 0000000000..06bfbb520d --- /dev/null +++ b/Applications/ParaView/ParaViewMainWindow.cxx @@ -0,0 +1,117 @@ +/*========================================================================= + + Program: ParaView + Module: ParaViewMainWindow.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 "ParaViewMainWindow.h" +#include "ui_ParaViewMainWindow.h" + +#include "pqHelpReaction.h" +#include "pqObjectInspectorWidget.h" +#include "pqParaViewBehaviors.h" +#include "pqParaViewMenuBuilders.h" + +class ParaViewMainWindow::pqInternals : public Ui::pqClientMainWindow +{ +}; + +//----------------------------------------------------------------------------- +ParaViewMainWindow::ParaViewMainWindow() +{ + this->Internals = new pqInternals(); + this->Internals->setupUi(this); + + // Setup default GUI layout. + + // 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); + + this->Internals->animationViewDock->hide(); + this->Internals->statisticsDock->hide(); + this->Internals->selectionInspectorDock->hide(); + this->Internals->comparativePanelDock->hide(); + this->tabifyDockWidget(this->Internals->animationViewDock, + this->Internals->statisticsDock); + + // Enable automatic creation of representation on accept. + this->Internals->proxyTabWidget->setShowOnAccept(true); + + // Enable help for from the object inspector. + QObject::connect(this->Internals->proxyTabWidget->getObjectInspector(), + SIGNAL(helpRequested(QString)), + this, SLOT(showHelpForProxy(const QString&))); + + // Populate application menus with actions. + pqParaViewMenuBuilders::buildFileMenu(*this->Internals->menu_File); + pqParaViewMenuBuilders::buildEditMenu(*this->Internals->menu_Edit); + + // Populate sources menu. + pqParaViewMenuBuilders::buildSourcesMenu(*this->Internals->menuSources, this); + + // Populate filters menu. + pqParaViewMenuBuilders::buildFiltersMenu(*this->Internals->menuFilters, this); + + // Populate Tools menu. + pqParaViewMenuBuilders::buildToolsMenu(*this->Internals->menuTools); + + // setup the context menu for the pipeline browser. + pqParaViewMenuBuilders::buildPipelineBrowserContextMenu( + *this->Internals->pipelineBrowser); + + pqParaViewMenuBuilders::buildToolbars(*this); + + // Setup the View menu. This must be setup after all toolbars and dockwidgets + // have been created. + pqParaViewMenuBuilders::buildViewMenu(*this->Internals->menu_View, *this); + + // Setup the menu to show macros. + pqParaViewMenuBuilders::buildMacrosMenu(*this->Internals->menu_Macros); + + // Setup the help menu. + pqParaViewMenuBuilders::buildHelpMenu(*this->Internals->menu_Help); + + // Final step, define application behaviors. Since we want all ParaView + // behaviors, we use this convenience method. + new pqParaViewBehaviors(this, this); +} + +//----------------------------------------------------------------------------- +ParaViewMainWindow::~ParaViewMainWindow() +{ + delete this->Internals; +} + + +//----------------------------------------------------------------------------- +void ParaViewMainWindow::showHelpForProxy(const QString& proxyname) +{ + pqHelpReaction::showHelp( + QString("qthelp://paraview.org/paraview/%1.html").arg(proxyname)); +} diff --git a/Applications/ParaView/ParaViewMainWindow.h b/Applications/ParaView/ParaViewMainWindow.h new file mode 100644 index 0000000000..63654e0a0d --- /dev/null +++ b/Applications/ParaView/ParaViewMainWindow.h @@ -0,0 +1,59 @@ +/*========================================================================= + + Program: ParaView + Module: ParaViewMainWindow.h + + 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. + +========================================================================*/ +#ifndef __ParaViewMainWindow_h +#define __ParaViewMainWindow_h + +#include <QMainWindow> + +/// MainWindow for the default ParaView application. +class ParaViewMainWindow : public QMainWindow +{ + Q_OBJECT + typedef QMainWindow Superclass; +public: + ParaViewMainWindow(); + ~ParaViewMainWindow(); + +protected slots: + void showHelpForProxy(const QString& proxyname); + +private: + ParaViewMainWindow(const ParaViewMainWindow&); // Not implemented. + void operator=(const ParaViewMainWindow&); // Not implemented. + + class pqInternals; + pqInternals* Internals; +}; + +#endif + + diff --git a/Applications/ParaView/ParaViewMainWindow.ui b/Applications/ParaView/ParaViewMainWindow.ui new file mode 100644 index 0000000000..b22347d645 --- /dev/null +++ b/Applications/ParaView/ParaViewMainWindow.ui @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqClientMainWindow</class> + <widget class="QMainWindow" name="pqClientMainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>970</width> + <height>700</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout"> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="pqViewManager" name="MultiViewManager" native="true"/> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>970</width> + <height>27</height> + </rect> + </property> + <widget class="QMenu" name="menu_File"> + <property name="title"> + <string>&File</string> + </property> + </widget> + <widget class="QMenu" name="menuSources"> + <property name="title"> + <string>&Sources</string> + </property> + </widget> + <widget class="QMenu" name="menuFilters"> + <property name="title"> + <string>&Filters</string> + </property> + </widget> + <widget class="QMenu" name="menu_Edit"> + <property name="title"> + <string>&Edit</string> + </property> + </widget> + <widget class="QMenu" name="menu_View"> + <property name="title"> + <string>&View</string> + </property> + </widget> + <widget class="QMenu" name="menuTools"> + <property name="title"> + <string>&Tools</string> + </property> + </widget> + <widget class="QMenu" name="menu_Help"> + <property name="title"> + <string>&Help</string> + </property> + </widget> + <widget class="QMenu" name="menu_Macros"> + <property name="title"> + <string>&Macros</string> + </property> + </widget> + <addaction name="menu_File"/> + <addaction name="menu_Edit"/> + <addaction name="menu_View"/> + <addaction name="menuSources"/> + <addaction name="menuFilters"/> + <addaction name="menuTools"/> + <addaction name="menu_Macros"/> + <addaction name="menu_Help"/> + </widget> + <widget class="pqStatusBar" name="statusbar"/> + <widget class="QDockWidget" name="pipelineBrowserDock"> + <property name="allowedAreas"> + <set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Pipeline Browser</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="pqPipelineBrowserWidget" name="pipelineBrowser"> + <property name="contextMenuPolicy"> + <enum>Qt::ActionsContextMenu</enum> + </property> + </widget> + </widget> + <widget class="QDockWidget" name="proxyTabDock"> + <property name="allowedAreas"> + <set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Object Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="pqProxyTabWidget" name="proxyTabWidget"/> + </widget> + <widget class="QDockWidget" name="statisticsDock"> + <property name="allowedAreas"> + <set>Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Statistics Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>8</number> + </attribute> + <widget class="pqDataInformationWidget" name="statisticsView"/> + </widget> + <widget class="QDockWidget" name="animationViewDock"> + <property name="windowTitle"> + <string>Animation View</string> + </property> + <attribute name="dockWidgetArea"> + <number>8</number> + </attribute> + <widget class="pqPVAnimationWidget" name="animationView"/> + </widget> + <widget class="QDockWidget" name="selectionInspectorDock"> + <property name="windowTitle"> + <string>Selection Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>2</number> + </attribute> + <widget class="pqSelectionInspectorWidget" name="selectionInspector"/> + </widget> + <widget class="QDockWidget" name="comparativePanelDock"> + <property name="windowTitle"> + <string>Comparative View Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>2</number> + </attribute> + <widget class="pqComparativeVisPanel" name="comparativeVisPanel"/> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>pqPipelineBrowserWidget</class> + <extends>QWidget</extends> + <header>pqPipelineBrowserWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqProxyTabWidget</class> + <extends>QWidget</extends> + <header>pqProxyTabWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqViewManager</class> + <extends>QWidget</extends> + <header>pqViewManager.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqSelectionInspectorWidget</class> + <extends>QWidget</extends> + <header>pqSelectionInspectorWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqPVAnimationWidget</class> + <extends>QWidget</extends> + <header>pqPVAnimationWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqDataInformationWidget</class> + <extends>QWidget</extends> + <header>pqDataInformationWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqStatusBar</class> + <extends>QStatusBar</extends> + <header>pqStatusBar.h</header> + </customwidget> + <customwidget> + <class>pqComparativeVisPanel</class> + <extends>QWidget</extends> + <header>pqComparativeVisPanel.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/Applications/ParaView/ParaViewReaders.xml b/Applications/ParaView/ParaViewReaders.xml new file mode 100644 index 0000000000..0f828f101f --- /dev/null +++ b/Applications/ParaView/ParaViewReaders.xml @@ -0,0 +1,59 @@ +<ParaViewReaders> + <!-- + NOTE: Readers are tried in reverse order that they are present in this + list i.e. if two readers can read the same extension, then the reader + apperaring later will be tried first when reading the file. + --> + <Proxy group="sources" name="LSDynaReader" /> + <Proxy group="sources" name="PVDReader" /> + <Proxy group="sources" name="XMLPolyDataReader"/> + <Proxy group="sources" name="XMLUnstructuredGridReader" /> + <Proxy group="sources" name="XMLImageDataReader" /> + <Proxy group="sources" name="XMLStructuredGridReader" /> + <Proxy group="sources" name="XMLRectilinearGridReader" /> + <Proxy group="sources" name="XMLPPolyDataReader" /> + <Proxy group="sources" name="XMLPUnstructuredGridReader" /> + <Proxy group="sources" name="XMLPImageDataReader" /> + <Proxy group="sources" name="XMLPStructuredGridReader" /> + <Proxy group="sources" name="XMLPRectilinearGridReader" /> + <Proxy group="sources" name="XMLMultiBlockDataReader" /> + <Proxy group="sources" name="XMLHierarchicalBoxDataReader" /> + <Proxy group="sources" name="LegacyVTKFileReader" /> + <Proxy group="sources" name="pvtkfile" /> + <Proxy group="sources" name="ensight" /> + <Proxy group="sources" name="ensightMS" /> + <Proxy group="sources" name="TecplotReader" /> + <Proxy group="sources" name="netCDFReader" /> + <Proxy group="sources" name="byureader" /> + <Proxy group="sources" name="XdmfReader2" /> + <Proxy group="sources" name="pdbreader" /> + <Proxy group="sources" name="xyzreader" /> + <Proxy group="sources" name="P3DReader" /> + <Proxy group="sources" name="spcthreader" /> + <Proxy group="sources" name="SPCTHRestartReader" /> + <Proxy group="sources" name="DEMReader" /> + <Proxy group="sources" name="vrmlreader" /> + <Proxy group="sources" name="plyreader" /> + <Proxy group="sources" name="stlreader" /> + <Proxy group="sources" name="gaussiancubereader" /> + <Proxy group="sources" name="ImageReader" /> + <Proxy group="sources" name="popreader"/> + <Proxy group="sources" name="AVSucdSeriesReader" /> + <Proxy group="sources" name="Meta Image Proxy" /> + <Proxy group="sources" name="Facet Proxy" /> + <Proxy group="sources" name="PNGReader" /> + <Proxy group="sources" name="TIFFReader" /> + <Proxy group="sources" name="PhastaReader" /> + <Proxy group="sources" name="SESAMEReader" /> + <Proxy group="sources" name="CSVReader" /> + <Proxy group="sources" name="MFIXReader" /> + <Proxy group="sources" name="FLUENTReader" /> + <Proxy group="sources" name="OpenFOAMReader" /> + <Proxy group="sources" name="CosmoReader" /> + <Proxy group="sources" name="SiloReader"/> + <Proxy group="sources" name="ExodusIIReader" /> + <Proxy group="sources" name="ExodusRestartReader" /> + <Proxy group="sources" name="SLACReader" /> + <Proxy group="sources" name="SLACParticleReader" /> + <Proxy group="sources" name="ParticleReader" /> +</ParaViewReaders> diff --git a/Applications/ParaView/ParaViewSources.xml b/Applications/ParaView/ParaViewSources.xml new file mode 100644 index 0000000000..a2796a1180 --- /dev/null +++ b/Applications/ParaView/ParaViewSources.xml @@ -0,0 +1,27 @@ +<ParaViewSources> + <Proxy group="sources" name="GlyphSource2D" /> + <Proxy group="sources" name="VectorText" /> + <Proxy group="sources" name="TimeToTextConvertorSource" /> + <Proxy group="sources" name="ArrowSource" /> + <Proxy group="sources" name="Axes" /> + <Proxy group="sources" name="CubeSource" /> + <Proxy group="sources" name="ConeSource" /> + <Proxy group="sources" name="CylinderSource" /> + <Proxy group="sources" name="DataObjectGenerator" /> + <Proxy group="sources" name="DiskSource" /> + <Proxy group="sources" name="HierarchicalFractal" /> + <Proxy group="sources" name="LineSource" /> + <Proxy group="sources" name="ImageMandelbrotSource" /> + <Proxy group="sources" name="OctreeFractal" /> + <Proxy group="sources" name="OutlineSource" /> + <Proxy group="sources" name="PlaneSource" /> + <Proxy group="sources" name="PointSource" /> + <Proxy group="sources" name="ProgrammableSource" /> + <Proxy group="sources" name="SphereSource" /> + <Proxy group="sources" name="SplineSource" /> + <Proxy group="sources" name="SuperquadricSource" /> + <Proxy group="sources" name="TextSource" /> + <Proxy group="sources" name="TimeSource" /> + <Proxy group="sources" name="Ruler" /> + <Proxy group="sources" name="RTAnalyticSource" /> +</ParaViewSources> diff --git a/Applications/ParaView/ParaViewWriters.xml b/Applications/ParaView/ParaViewWriters.xml new file mode 100644 index 0000000000..7e02ed21c6 --- /dev/null +++ b/Applications/ParaView/ParaViewWriters.xml @@ -0,0 +1,26 @@ +<ParaViewWriters> + <Proxy group="writers" name="XMLPVDWriter" /> + <Proxy group="writers" name="XMLPolyDataWriter" /> + <Proxy group="writers" name="XMLUnstructuredGridWriter" /> + <Proxy group="writers" name="XMLStructuredGridWriter" /> + <Proxy group="writers" name="XMLRectilinearGridWriter" /> + <Proxy group="writers" name="XMLImageDataWriter" /> + <Proxy group="writers" name="XMLPPolyDataWriter" /> + <Proxy group="writers" name="XMLPUnstructuredGridWriter" /> + <Proxy group="writers" name="XMLPStructuredGridWriter" /> + <Proxy group="writers" name="XMLPRectilinearGridWriter"/> + <Proxy group="writers" name="XMLPImageDataWriter" /> + <Proxy group="writers" name="XMLMultiBlockDataWriter" /> + <Proxy group="writers" name="XMLHierarchicalBoxDataWriter" /> + <Proxy group="writers" name="DataSetWriter" /> + <Proxy group="writers" name="PDataSetWriter" /> + <Proxy group="writers" name="PPLYWriter" /> + <Proxy group="writers" name="PSTLWriter" /> + <Proxy group="writers" name="MetaImageWriter" /> + <Proxy group="writers" name="PNGWriter" /> + <Proxy group="writers" name="XdmfWriter2"/> + <Proxy group="writers" name="ExodusIIWriter" /> + <Proxy group="writers" name="EnSightWriter" /> + <Proxy group="writers" name="CSVWriter" /> + <Proxy group="writers" name="DataSetCSVWriter" /> +</ParaViewWriters> diff --git a/Applications/ParaView/Testing/CMakeLists.txt b/Applications/ParaView/Testing/CMakeLists.txt new file mode 100644 index 0000000000..df5eccf570 --- /dev/null +++ b/Applications/ParaView/Testing/CMakeLists.txt @@ -0,0 +1,101 @@ +# Set up some common testing environment. +SET (CLIENT_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/paraview) +IF (Q_WS_MAC) + SET(CLIENT_EXECUTABLE + ${EXECUTABLE_OUTPUT_PATH}/paraview.app/Contents/MacOS/paraview) +ENDIF (Q_WS_MAC) + + +MACRO (process_args out_extra_args) + SET (temp_args) + IF (ACT_BASELINE_DIR) + SET (temp_args "--test-baseline=${ACT_BASELINE_DIR}/${test_name}.png") + ENDIF (ACT_BASELINE_DIR) + IF (${test_name}_THRESHOLD) + SET (temp_args ${temp_args} "--test-threshold=${${test_name}_THRESHOLD}") + ENDIF (${test_name}_THRESHOLD) + SET (${out_extra_args} ${${out_extra_args}} ${temp_args}) +ENDMACRO (process_args) + + +#Determine how many tests are to be grouped. +SET (TEST_GROUP_SIZE 1) + +FUNCTION (add_pv_test prefix skip_test_flag_suffix) + PV_PARSE_ARGUMENTS(ACT "TEST_SCRIPTS;BASELINE_DIR;COMMAND" "" ${ARGN}) + while (ACT_TEST_SCRIPTS) + set (counter 0) + set (extra_args) + set (full_test_name) + while (${counter} LESS ${TEST_GROUP_SIZE}) + list(LENGTH ACT_TEST_SCRIPTS num_tests) + if (num_tests) + # pop test name from the top. + list(GET ACT_TEST_SCRIPTS 0 test) + list(REMOVE_AT ACT_TEST_SCRIPTS 0) + + GET_FILENAME_COMPONENT(test_name ${test} NAME_WE) + if (NOT ${test_name}${skip_test_flag_suffix}) + set (full_test_name "${full_test_name}.${test_name}") + set (extra_args ${extra_args} "--test-script=${test}") + process_args(extra_args) + endif (NOT ${test_name}${skip_test_flag_suffix}) + endif (num_tests) + math(EXPR counter "${counter} + 1") + if (${test_name}_BREAK) + set (counter 100000) # stop the group. + endif (${test_name}_BREAK) + endwhile (${counter} LESS ${TEST_GROUP_SIZE}) + + if (extra_args) + ADD_TEST("${prefix}${full_test_name}" + ${PARAVIEW_SMTESTDRIVER_EXECUTABLE} + ${ACT_COMMAND} + ${extra_args} + --exit + ) + endif (extra_args) + endwhile (ACT_TEST_SCRIPTS) + +ENDFUNCTION (add_pv_test) + + +FUNCTION (add_client_tests prefix) + add_pv_test(${prefix} "_DISABLE_C" + COMMAND --client ${CLIENT_EXECUTABLE} + -dr + --disable-light-kit + --test-directory=${PARAVIEW_TEST_DIR} + ${ARGN}) +ENDFUNCTION (add_client_tests) + +FUNCTION (add_client_server_tests prefix) + add_pv_test(${prefix} "_DISABLE_CS" + COMMAND + --server ${PARAVIEW_SERVER_EXECUTABLE} + --client ${CLIENT_EXECUTABLE} + -dr + --disable-light-kit + --server=testserver + --test-directory=${PARAVIEW_TEST_DIR} + ${ARGN}) +ENDFUNCTION (add_client_server_tests) + +FUNCTION (add_client_render_server_tests prefix) + add_pv_test(${prefix} "_DISABLE_CRS" + COMMAND + --data-server ${PARAVIEW_DATA_SERVER_EXECUTABLE} + --render-server ${PARAVIEW_RENDER_SERVER_EXECUTABLE} + --client ${CLIENT_EXECUTABLE} + -dr + --disable-light-kit + --server=testserver-dsrs + --test-directory=${PARAVIEW_TEST_DIR} + ${ARGN}) +ENDFUNCTION (add_client_render_server_tests) + +SUBDIRS(XML) + +IF (QT_TESTING_WITH_PYTHON) + SUBDIRS(Python) +ENDIF (QT_TESTING_WITH_PYTHON) diff --git a/Applications/ParaView/Testing/Python/CMakeLists.txt b/Applications/ParaView/Testing/Python/CMakeLists.txt new file mode 100644 index 0000000000..87aafddc84 --- /dev/null +++ b/Applications/ParaView/Testing/Python/CMakeLists.txt @@ -0,0 +1,38 @@ +SET (TESTS_WITHOUT_BASELINES + ${CMAKE_CURRENT_SOURCE_DIR}/TestContourWidget.py + ) + +SET (TESTS_WITH_BASELINES + ${CMAKE_CURRENT_SOURCE_DIR}/DisconnectAndSaveAnimation.py + ${CMAKE_CURRENT_SOURCE_DIR}/FileSeries.py + ${CMAKE_CURRENT_SOURCE_DIR}/LoadStateMultiView.py + ${CMAKE_CURRENT_SOURCE_DIR}/SaveLargeScreenshot.py + ) + +# Disable client test, only for remote connections. +SET (DisconnectAndSaveAnimation_DISABLE_C TRUE) +SET (DisconnectAndSaveAnimation_DISABLE_CRS TRUE) + +# Set image threshold overrides for the tests. +SET(SaveLargeScreenshot_THRESHOLD 10000) + +add_client_tests( + TEST_SCRIPTS ${TESTS_WITHOUT_BASELINES}) + +IF (PARAVIEW_DATA_ROOT) + add_client_tests("pypv" + TEST_SCRIPTS ${TESTS_WITH_BASELINES} + ) + + add_client_server_tests("pypvcs" + TEST_SCRIPTS ${TESTS_WITH_BASELINES} + ) + + add_client_render_server_tests("pypvcrs" + TEST_SCRIPTS ${TESTS_WITH_BASELINES} + ) + +# TODO: remote rendering tests and reverse connect tests. + +ENDIF (PARAVIEW_DATA_ROOT) + diff --git a/Applications/Client/Testing/Python/DisconnectAndSaveAnimation.py b/Applications/ParaView/Testing/Python/DisconnectAndSaveAnimation.py similarity index 75% rename from Applications/Client/Testing/Python/DisconnectAndSaveAnimation.py rename to Applications/ParaView/Testing/Python/DisconnectAndSaveAnimation.py index e16c90c328..97da228f04 100644 --- a/Applications/Client/Testing/Python/DisconnectAndSaveAnimation.py +++ b/Applications/ParaView/Testing/Python/DisconnectAndSaveAnimation.py @@ -5,21 +5,23 @@ import QtTestingImage object1 = 'pqClientMainWindow/menubar/menuSources' QtTesting.playCommand(object1, 'activate', 'SphereSource') -object2 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept' +object2 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept' QtTesting.playCommand(object2, 'activate', '') -object3 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton' +object3 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton' QtTesting.playCommand(object3, 'activate', '') QtTesting.playCommand(object1, 'activate', 'SphereSource') -object4 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0' +object4 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0' QtTesting.playCommand(object4, 'set_string', '1') QtTesting.playCommand(object2, 'activate', '') -object5 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView' +object5 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser' QtTesting.playCommand(object5, 'currentChanged', '/0/0|0') -object6 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar' +object6 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar' QtTesting.playCommand(object6, 'set_tab', '1') -object7 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData' +object7 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData' QtTesting.playCommand(object7, 'set_boolean', 'true') -object8 = 'pqClientMainWindow/menubar/menuView' +object8 = 'pqClientMainWindow/menubar' +QtTesting.playCommand(object8, 'activate', 'menu_View') +object8 = 'pqClientMainWindow/menubar/menu_View/Panels' QtTesting.playCommand(object8, 'activate', 'Animation View') object9 = 'pqClientMainWindow/animationViewDock/animationView/pqAnimationWidget/CreateDeleteWidget/PropertyCombo' QtTesting.playCommand(object9, 'set_string', 'Start Theta') @@ -29,7 +31,7 @@ QtTesting.playCommand(object10, "mouseRelease", "1,1,0,0,0,2") object11 = 'pqClientMainWindow/VCRToolbar/1QToolButton3' QtTesting.playCommand(object11, 'activate', '') QtTesting.playCommand(object11, 'activate', '') -object12 = 'pqClientMainWindow/menubar/menuFile' +object12 = 'pqClientMainWindow/menubar/menu_File' QtTesting.playCommand(object12, 'activate', '') QtTesting.playCommand(object12, 'activate', 'actionFileSaveAnimation') object13 = 'Dialog/checkBoxDisconnect' @@ -40,7 +42,7 @@ object14 = 'Dialog/spinBoxHeight' QtTesting.playCommand(object14, 'set_int', '300') object15 = 'Dialog/okButton' QtTesting.playCommand(object15, 'activate', '') -object16 = 'FileSaveAnimationDialog' +object16 = 'pqClientMainWindow/FileSaveAnimationDialog' # Remove old files. QtTesting.playCommand(object16, 'remove', '$PARAVIEW_TEST_ROOT/disconnectSave.0000.png') diff --git a/Applications/Client/Testing/Python/FileSeries.py b/Applications/ParaView/Testing/Python/FileSeries.py similarity index 84% rename from Applications/Client/Testing/Python/FileSeries.py rename to Applications/ParaView/Testing/Python/FileSeries.py index f5fa25b700..76bdac01d1 100644 --- a/Applications/Client/Testing/Python/FileSeries.py +++ b/Applications/ParaView/Testing/Python/FileSeries.py @@ -3,13 +3,13 @@ import QtTesting import QtTestingImage -object1 = 'pqClientMainWindow/menubar/menuFile' +object1 = 'pqClientMainWindow/menubar/menu_File' QtTesting.playCommand(object1, 'activate', 'actionFileOpen') object2 = 'pqClientMainWindow/FileOpenDialog' QtTesting.playCommand(object2, 'filesSelected', '$PARAVIEW_DATA_ROOT/Data/FileSeries/blow..vtk') -object3 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept' +object3 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept' QtTesting.playCommand(object3, 'activate', '') -object4 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport' +object4 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport' QtTesting.playCommand(object4, 'mousePress', '(0.539658,0.641618,1,1,0)') QtTesting.playCommand(object4, 'mouseMove', '(0.225505,0.603083,1,0,0)') QtTesting.playCommand(object4, 'mouseRelease', '(0.225505,0.603083,1,0,0)') @@ -18,14 +18,14 @@ QtTesting.playCommand(object5, 'set_boolean', 'false') object6 = 'pqClientMainWindow/variableToolbar/displayColor/Variables' QtTesting.playCommand(object6, 'set_string', 'cellNormals') QtTesting.playCommand(object6, 'set_string', 'thickness') -object7 = 'pqClientMainWindow/commonFilters/1QToolButton8' +object7 = 'pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/WarpVector' QtTesting.playCommand(object7, 'activate', '') QtTesting.playCommand(object3, 'activate', '') #object8 = 'pqClientMainWindow/menubar/menuTools' #QtTesting.playCommand(object8, 'activate', 'actionToolsRecordTestScreenshot') #object9 = 'pqClientMainWindow/RecordTestScreenshotDialog' #QtTesting.playCommand(object9, 'filesSelected', '$PARAVIEW_DATA_ROOT/Baseline/FileSeries1.png') -snapshotWidget = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport' +snapshotWidget = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport' QtTestingImage.compareImage(snapshotWidget, 'FileSeries1.png', 300, 300); object10 = 'pqClientMainWindow/currentTimeToolbar/qt_toolbar_ext_button' QtTesting.playCommand(object10, 'activate', '') diff --git a/Applications/Client/Testing/Python/LoadStateMultiView.py b/Applications/ParaView/Testing/Python/LoadStateMultiView.py similarity index 58% rename from Applications/Client/Testing/Python/LoadStateMultiView.py rename to Applications/ParaView/Testing/Python/LoadStateMultiView.py index 522cf3ea89..b7b2c0f755 100644 --- a/Applications/Client/Testing/Python/LoadStateMultiView.py +++ b/Applications/ParaView/Testing/Python/LoadStateMultiView.py @@ -3,33 +3,33 @@ import QtTesting import QtTestingImage -object1 = 'pqClientMainWindow/menubar/menuFile' +object1 = 'pqClientMainWindow/menubar/menu_File' QtTesting.playCommand(object1, 'activate', 'actionFileLoadServerState') ##object2 = 'pqClientMainWindow/ServerStartupBrowser/connect' #QtTesting.playCommand(object2, 'activate', '') object3 = 'pqClientMainWindow/FileLoadServerStateDialog' QtTesting.playCommand(object3, 'filesSelected', '$PARAVIEW_DATA_ROOT/Data/LoadStateMultiView.pvsm') -object4 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:0/0/MultiViewFrameMenu/MaximizeButton' +object4 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:0/0/MultiViewFrameMenu/MaximizeButton' QtTesting.playCommand(object4, 'activate', '') -object5 = 'pqClientMainWindow/MultiViewManager/MaximizeFrame/0/MultiViewFrameMenu/RestoreButton' +object5 = 'pqClientMainWindow/centralwidget/MultiViewManager/MaximizeFrame/0/MultiViewFrameMenu/RestoreButton' QtTesting.playCommand(object5, 'activate', '') -object6 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:0/0/MultiViewFrameMenu/CloseButton' +object6 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:0/0/MultiViewFrameMenu/CloseButton' QtTesting.playCommand(object6, 'activate', '') -object7 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/CloseButton' +object7 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/CloseButton' QtTesting.playCommand(object7, 'activate', '') -object8 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/CloseButton' +object8 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/CloseButton' QtTesting.playCommand(object8, 'activate', '') -object9 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton' +object9 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton' QtTesting.playCommand(object9, 'activate', '') -object10 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView' +object10 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser' QtTesting.playCommand(object10, 'currentChanged', '/0/2|0') #QtTesting.playCommand(object10, 'currentChanged', '/0/2|1') -object11 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0' +object11 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar' QtTesting.playCommand(object11, 'set_tab', '1') QtTesting.playCommand(object1, 'activate', 'actionFileSaveServerState') object13 = 'pqClientMainWindow/FileSaveServerStateDialog' QtTesting.playCommand(object13, 'filesSelected', '$PARAVIEW_TEST_ROOT/TestMultiView.pvsm') -object14 = 'pqClientMainWindow/mainToolBar/1QToolButton3' +object14 = 'pqClientMainWindow/MainControlsToolbar/actionServerDisconnect' QtTesting.playCommand(object14, 'activate', '') object14a ="pqClientMainWindow/1QMessageBox0/qt_msgbox_buttonbox/1QPushButton0" QtTesting.playCommand(object14a, 'activate', '') @@ -37,6 +37,6 @@ QtTesting.playCommand(object1, 'activate', 'actionFileLoadServerState') #QtTesting.playCommand(object2, 'activate', '') QtTesting.playCommand(object3, 'filesSelected', '$PARAVIEW_TEST_ROOT/TestMultiView.pvsm') -snapshotWidget = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport' +snapshotWidget = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport' QtTestingImage.compareImage(snapshotWidget, 'LoadStateMultiView.png', 200, 200); diff --git a/Applications/Client/Testing/Python/ObjectPanelPlugin.py b/Applications/ParaView/Testing/Python/ObjectPanelPlugin.py similarity index 75% rename from Applications/Client/Testing/Python/ObjectPanelPlugin.py rename to Applications/ParaView/Testing/Python/ObjectPanelPlugin.py index 428a8ed2f6..06d9628668 100644 --- a/Applications/Client/Testing/Python/ObjectPanelPlugin.py +++ b/Applications/ParaView/Testing/Python/ObjectPanelPlugin.py @@ -20,10 +20,10 @@ object4 = 'pqClientMainWindow/pqPluginDialog/buttonBox/1QPushButton0' QtTesting.playCommand(object4, 'activate', '') object5 = 'pqClientMainWindow/menubar/menuSources' QtTesting.playCommand(object5, 'activate', 'Cone') -object7 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept' +object7 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept' QtTesting.playCommand(object7, 'activate', '') -object8 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1QLabel0' +object8 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1QLabel0' text = QtTesting.getProperty(object8, 'text') print text diff --git a/Applications/Client/Testing/Python/PVBlotTest1.py b/Applications/ParaView/Testing/Python/PVBlotTest1.py similarity index 100% rename from Applications/Client/Testing/Python/PVBlotTest1.py rename to Applications/ParaView/Testing/Python/PVBlotTest1.py diff --git a/Applications/Client/Testing/Python/SaveAnimationMultiView.py b/Applications/ParaView/Testing/Python/SaveAnimationMultiView.py similarity index 75% rename from Applications/Client/Testing/Python/SaveAnimationMultiView.py rename to Applications/ParaView/Testing/Python/SaveAnimationMultiView.py index ad9c42c056..081a95b847 100644 --- a/Applications/Client/Testing/Python/SaveAnimationMultiView.py +++ b/Applications/ParaView/Testing/Python/SaveAnimationMultiView.py @@ -6,38 +6,38 @@ import time object1 = 'pqClientMainWindow/menubar/menuSources' QtTesting.playCommand(object1, 'activate', 'Wavelet') -object2 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept' +object2 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept' QtTesting.playCommand(object2, 'activate', '') -object6 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar' +object6 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar' QtTesting.playCommand(object6, 'set_tab', '1') -object24 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox' +object24 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox' QtTesting.playCommand(object24, 'set_string', 'Surface') -object25 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables' +object25 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables' QtTesting.playCommand(object25, 'set_string', 'RTData') QtTesting.playCommand(object6, 'set_tab', '0') -object3 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton' +object3 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton' QtTesting.playCommand(object3, 'activate', '') QtTesting.playCommand(object1, 'activate', 'Arrow') QtTesting.playCommand(object2, 'activate', '') -object4 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete' +object4 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Delete' QtTesting.playCommand(object4, 'activate', '') -object4 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/SplitVerticalButton' +object4 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/SplitVerticalButton' QtTesting.playCommand(object4, 'activate', '') QtTesting.playCommand(object1, 'activate', 'Sphere') QtTesting.playCommand(object2, 'activate', '') -object5 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:1/1/Viewport' +object5 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:1/1/Viewport' QtTesting.playCommand(object5, 'mousePress', '(0.533784,0.680147,1,1,0)') QtTesting.playCommand(object5, 'mouseMove', '(0.533784,0.680147,1,0,0)') QtTesting.playCommand(object5, 'mouseRelease', '(0.533784,0.680147,1,0,0)') QtTesting.playCommand(object6, 'set_tab', '1') -object8 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData' +object8 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData' QtTesting.playCommand(object8, 'set_boolean', 'false') QtTesting.playCommand(object8, 'set_boolean', 'false') QtTesting.playCommand(object8, 'set_boolean', 'false') QtTesting.playCommand(object8, 'set_boolean', 'false') -object9 = 'pqClientMainWindow/menubar/menuFile' +object9 = 'pqClientMainWindow/menubar/menu_File' QtTesting.playCommand(object9, 'activate', 'actionFileOpen') QtTesting.playCommand(object6, 'set_tab', '0') object10 = 'pqClientMainWindow/FileOpenDialog' @@ -47,7 +47,7 @@ object11 = 'pqClientMainWindow/menubar/menuView' QtTesting.playCommand(object11, 'activate', 'Animation View') -object15 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView' +object15 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser' QtTesting.playCommand(object15, 'currentChanged', '/0/1|0') #object12 = 'pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName' diff --git a/Applications/Client/Testing/Python/SaveLargeScreenshot.py b/Applications/ParaView/Testing/Python/SaveLargeScreenshot.py similarity index 76% rename from Applications/Client/Testing/Python/SaveLargeScreenshot.py rename to Applications/ParaView/Testing/Python/SaveLargeScreenshot.py index 88c93018fc..7be59df86e 100644 --- a/Applications/Client/Testing/Python/SaveLargeScreenshot.py +++ b/Applications/ParaView/Testing/Python/SaveLargeScreenshot.py @@ -5,27 +5,27 @@ import QtTestingImage object1 = 'pqClientMainWindow/menubar/menuSources' QtTesting.playCommand(object1, 'activate', 'RTAnalyticSource') -object2 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept' +object2 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept' QtTesting.playCommand(object2, 'activate', '') -object3 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton' +object3 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton' QtTesting.playCommand(object3, 'activate', '') object4 = 'pqClientMainWindow/menubar/menuFilters/DataAnalysis' QtTesting.playCommand(object4, 'activate', 'ProbeLine') QtTesting.playCommand(object2, 'activate', '') -object5 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/SplitVerticalButton' +object5 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/SplitVerticalButton' QtTesting.playCommand(object5, 'activate', '') -object6 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView' +object6 = 'pqClientMainWindow/pipelineBrowserDock/pipelineBrowser' QtTesting.playCommand(object6, 'mousePress', '1,1,0,51,13,/0:0/0:0') QtTesting.playCommand(object6, 'mouseRelease', '1,0,0,51,13,/0:0/0:0') QtTesting.playCommand(object4, 'activate', 'ExtractHistogram') QtTesting.playCommand(object2, 'activate', '') -object7 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton' +object7 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton' QtTesting.playCommand(object7, 'activate', '') -object8 = 'pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:0/0/MultiViewFrameMenu/WindowCaption' +object8 = 'pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:0/0/MultiViewFrameMenu/WindowCaption' QtTesting.playCommand(object8, 'mousePress', '1,1,0,42,4') QtTesting.playCommand(object8, 'mouseRelease', '1,0,0,42,4') -object9 = 'pqClientMainWindow/menubar/menuFile' +object9 = 'pqClientMainWindow/menubar/menu_File' QtTesting.playCommand(object9, 'activate', 'actionFileSaveScreenshot') object12 = 'pqClientMainWindow/SaveSnapshotDialog/selectedViewOnly' QtTesting.playCommand(object12, 'set_boolean', 'false') diff --git a/Applications/Client/Testing/Python/TestContourWidget.py b/Applications/ParaView/Testing/Python/TestContourWidget.py similarity index 67% rename from Applications/Client/Testing/Python/TestContourWidget.py rename to Applications/ParaView/Testing/Python/TestContourWidget.py index 6221db5cfe..12f29af013 100644 --- a/Applications/Client/Testing/Python/TestContourWidget.py +++ b/Applications/ParaView/Testing/Python/TestContourWidget.py @@ -4,17 +4,17 @@ import QtTesting object1 = 'pqClientMainWindow/menubar/menuSources' QtTesting.playCommand(object1, 'activate', 'RTAnalyticSource') -object2 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept' +object2 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept' QtTesting.playCommand(object2, 'activate', '') object3 = 'pqClientMainWindow/menubar/menuFilters/Common' QtTesting.playCommand(object3, 'activate', 'Contour') QtTesting.playCommand(object2, 'activate', '') -object5 = 'pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup1/pqSampleScalarWidget' +object5 = 'pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup1/pqSampleScalarWidget' QtTesting.setProperty(object5, 'samples', '120') QtTesting.playCommand(object2, 'activate', '') QtTesting.setProperty(object5, 'samples', '120;130;140;150') QtTesting.playCommand(object2, 'activate', '') -object1 = 'pqClientMainWindow/menubar/menuEdit' +object1 = 'pqClientMainWindow/menubar/menu_Edit' QtTesting.playCommand(object1, 'activate', 'actionEditUndo') # Need to wait a moment to allow the GUI to update. import time @@ -24,3 +24,5 @@ val = QtTesting.getProperty(object5, 'samples') if val != "120": import exceptions raise exceptions.RuntimeError, "Expecting 120, received: " + val +else: + print "Value comparison successful -- Test passed." diff --git a/Applications/Client/Testing/Python/ToolBarPlugin.py b/Applications/ParaView/Testing/Python/ToolBarPlugin.py similarity index 100% rename from Applications/Client/Testing/Python/ToolBarPlugin.py rename to Applications/ParaView/Testing/Python/ToolBarPlugin.py diff --git a/Applications/Client/Testing/XML/3DWidgetInCustomFilter.xml b/Applications/ParaView/Testing/XML/3DWidgetInCustomFilter.xml similarity index 59% rename from Applications/Client/Testing/XML/3DWidgetInCustomFilter.xml rename to Applications/ParaView/Testing/XML/3DWidgetInCustomFilter.xml index 32c19385c1..635d32e46e 100644 --- a/Applications/Client/Testing/XML/3DWidgetInCustomFilter.xml +++ b/Applications/ParaView/Testing/XML/3DWidgetInCustomFilter.xml @@ -1,9 +1,9 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Clip" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsCreateCustomFilter" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/PageStack/NamePage/CustomFilterName" command="set_string" arguments="CustomFilterClip" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/NextButton" command="activate" arguments="" /> @@ -13,18 +13,17 @@ <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/PageStack/PropertyPage/PropertyName" command="set_string" arguments="Clip Type" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/PageStack/PropertyPage/frame_3/AddPropertyButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/FinishButton" command="activate" arguments="" /> - <pqevent object="pqCustomFilterManager/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView/qt_scrollarea_viewport" command="contextMenu" arguments="" /> - <pqevent object="PipelineObjectMenu" command="activate" arguments="actionDelete" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="CustomFilterClip" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsManageCustomFilters" /> + <pqevent object="pqClientMainWindow/pqCustomFilterManager/CustomFilterList" command="mousePress" arguments="1,1,0,86,6,/0:0" /> + <pqevent object="pqClientMainWindow/pqCustomFilterManager/CustomFilterList" command="mouseRelease" arguments="1,0,0,86,6,/0:0" /> <pqevent object="pqClientMainWindow/pqCustomFilterManager/RemoveButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqCustomFilterManager/CloseButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface With Edges" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleLineWidth" command="set_double" arguments="5" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleLineWidth" command="key" arguments="16777220" /> - + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleLineWidth" command="set_double" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleLineWidth" command="key" arguments="16777220" /> </pqevents> diff --git a/Applications/Client/Testing/XML/AboutDialog.xml b/Applications/ParaView/Testing/XML/AboutDialog.xml similarity index 57% rename from Applications/Client/Testing/XML/AboutDialog.xml rename to Applications/ParaView/Testing/XML/AboutDialog.xml index 682f2a0cc6..53593afe57 100644 --- a/Applications/Client/Testing/XML/AboutDialog.xml +++ b/Applications/ParaView/Testing/XML/AboutDialog.xml @@ -1,5 +1,5 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuHelp" command="activate" arguments="actionHelpAbout" /> + <pqevent object="pqClientMainWindow/menubar/menu_Help" command="activate" arguments="actionAbout" /> <pqevent object="pqClientMainWindow/pqClientAboutDialog/OK" command="activate" arguments="" /> </pqevents> diff --git a/Applications/Client/Testing/XML/AnimatePipelineTime.xml b/Applications/ParaView/Testing/XML/AnimatePipelineTime.xml similarity index 73% rename from Applications/Client/Testing/XML/AnimatePipelineTime.xml rename to Applications/ParaView/Testing/XML/AnimatePipelineTime.xml index e104a79200..f37f5ee2a3 100644 --- a/Applications/Client/Testing/XML/AnimatePipelineTime.xml +++ b/Applications/ParaView/Testing/XML/AnimatePipelineTime.xml @@ -1,14 +1,15 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.524738,0.608,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.526237,0.36,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.526237,0.36,1,0,0)" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Animation View" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.524738,0.608,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.526237,0.36,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.526237,0.36,1,0,0)" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menu_View" /> + <pqevent object="pqClientMainWindow/menubar/menu_View/Panels" command="activate" arguments="Animation View" /> <pqevent object="pqClientMainWindow/animationViewDock/animationView/1pqAnimationWidget0/TrackHeader" command="mousePress" arguments="1,1,0,0,0,1" /> <pqevent object="pqClientMainWindow/animationViewDock/animationView/1pqAnimationWidget0/TrackHeader" command="mouseRelease" arguments="1,0,0,0,0,1" /> <pqevent object="pqClientMainWindow/animationViewDock/animationView/1pqAnimationWidget0/TrackHeader" command="mouseDblClick" arguments="1,1,0,0,0,1" /> diff --git a/Applications/ParaView/Testing/XML/CMakeLists.txt b/Applications/ParaView/Testing/XML/CMakeLists.txt new file mode 100644 index 0000000000..a9f9366ecd --- /dev/null +++ b/Applications/ParaView/Testing/XML/CMakeLists.txt @@ -0,0 +1,153 @@ +SET (TESTS_WITHOUT_BASELINES + ${CMAKE_CURRENT_SOURCE_DIR}/AboutDialog.xml + ${CMAKE_CURRENT_SOURCE_DIR}/OpenHelp.xml +) + +SET (TESTS_WITH_BASELINES + ${CMAKE_CURRENT_SOURCE_DIR}/3DWidgetInCustomFilter.xml + ${CMAKE_CURRENT_SOURCE_DIR}/AnimatePipelineTime.xml + ${CMAKE_CURRENT_SOURCE_DIR}/CalcParens.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Calculator.xml + ${CMAKE_CURRENT_SOURCE_DIR}/CameraLink.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Clip.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ColorEditor1.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ColorEditor2.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ColorEditor3.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ColorEditor4.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Contour.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ContourRange.xml + ${CMAKE_CURRENT_SOURCE_DIR}/CustomFilter.xml + ${CMAKE_CURRENT_SOURCE_DIR}/CustomSourceProbe.xml + ${CMAKE_CURRENT_SOURCE_DIR}/D3SmallCells.xml + ${CMAKE_CURRENT_SOURCE_DIR}/DualSphereAnimation.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ExodusIIPanel.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ExodusModeShapes.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ExodusXML.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ExTimeseries.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ExTimeseries2.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ExtractBlock.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ExtractLevel.xml + ${CMAKE_CURRENT_SOURCE_DIR}/FFTOverTime.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Flow.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Flow2.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Fractal2D.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Fractal3D.xml + ${CMAKE_CURRENT_SOURCE_DIR}/GlobalProperties.xml + ${CMAKE_CURRENT_SOURCE_DIR}/LinePlot.xml + ${CMAKE_CURRENT_SOURCE_DIR}/LoadSaveStateAnimation.xml + ${CMAKE_CURRENT_SOURCE_DIR}/LoadState.xml + ${CMAKE_CURRENT_SOURCE_DIR}/NormalGlyphs.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ObjectInspectorSphere.xml + ${CMAKE_CURRENT_SOURCE_DIR}/OpenSaveData.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Plot3DReader.xml + ${CMAKE_CURRENT_SOURCE_DIR}/PlotEdges.xml + ${CMAKE_CURRENT_SOURCE_DIR}/PlotEdges2.xml + ${CMAKE_CURRENT_SOURCE_DIR}/PropertyLink.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ReadXMLPolyDataFileSeries.xml + ${CMAKE_CURRENT_SOURCE_DIR}/RectilinearFractal.xml + ${CMAKE_CURRENT_SOURCE_DIR}/RepresentationSelector.xml + ${CMAKE_CURRENT_SOURCE_DIR}/SaveAnimationGeometry.xml + ${CMAKE_CURRENT_SOURCE_DIR}/SaveColorMap.xml + ${CMAKE_CURRENT_SOURCE_DIR}/SaveCSV.xml + ${CMAKE_CURRENT_SOURCE_DIR}/SelectReader.xml + ${CMAKE_CURRENT_SOURCE_DIR}/SimpleInteraction.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Slice.xml + ${CMAKE_CURRENT_SOURCE_DIR}/SPTimeseries.xml + ${CMAKE_CURRENT_SOURCE_DIR}/StreamTracerUpdates.xml + ${CMAKE_CURRENT_SOURCE_DIR}/TemporalInterpolator.xml + ${CMAKE_CURRENT_SOURCE_DIR}/TemporalShiftScale.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Tessellate.xml + ${CMAKE_CURRENT_SOURCE_DIR}/Threshold.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UndoRedo.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UndoRedo1.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UndoRedo2.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UndoRedo3.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UndoRedo5.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UndoRedo6.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UndoRedo7.xml + ${CMAKE_CURRENT_SOURCE_DIR}/UnstructuredOutline.xml + ${CMAKE_CURRENT_SOURCE_DIR}/VariableSelector.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ViewSettingsDialog.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfRead.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfReadImageData.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfReadImageDataCollection.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfReadRectilinearGrid.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfReadRectilinearGridCollection.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfReadStructuredGrid.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfReadStructuredGridCollection.xml + ${CMAKE_CURRENT_SOURCE_DIR}/XdmfGridAttributes.xml +) + +# Mark tests that change change state considerably requires a restart of the +# test suite when grouping tests together for faster playback. +SET (GlobalProperties_BREAK TRUE) + # <-- since this changes global colors. +SET (XdmfReadImageData_BREAK TRUE) + # <-- since this changes light kit. +SET (UndoRedo3_BREAK TRUE) +SET (UndoRedo6_BREAK TRUE) + # <-- since this changes view settings. +SET (ViewSettingsDialog_BREAK TRUE) +SET (UnstructuredOutline_BREAK TRUE) + # <-- since this changes view settings. + +set (ColorEditor1_BREAK TRUE) +set (ColorEditor2_BREAK TRUE) +set (ColorEditor3_BREAK TRUE) +set (ColorEditor4_BREAK TRUE) + +# Add image threshold overrides for tests. +# Generally all tests with wireframes need higher thresholds. +SET (Flow2_THRESHOLD 15) +SET (UndoRedo1_THRESHOLD 15) +SET (UndoRedo4_THRESHOLD 15) + +# These Xdmf tests have wireframes, hence the increased thresholds. +SET (XdmfReadImageData_THRESHOLD 20) +SET (XdmfReadRectilinearGrid_THRESHOLD 20) +SET (XdmfReadRectilinearGridCollection_THRESHOLD 20) +SET (XdmfReadStructuredGrid_THRESHOLD 20) +SET (XdmfReadStructuredGridCollection_THRESHOLD 20) +SET (XdmfReadImageDataCollection_THRESHOLD 20) + +# This test renders points and they are offsetted a bit differently on +# different platforms so just increase the threshold +SET (SaveCSV_THRESHOLD 40) + +# Disable some testing configurations for these tests. +## Disable ClientRenderServer tests for FFTOverTime. This is done since +## selection is not supported in render server mode esp. when number of render +## server processess is not same as the data server processes +SET (FFTOverTime_DISABLE_CRS TRUE) + +# ColorEditor3 does volume rendering of structrued data which required remote +# rendering in client-serve mode. +SET (ColorEditor3_DISABLE_CS TRUE) +SET (ColorEditor3_DISABLE_CRS TRUE) + +# Make these tests use reverse connection. +SET (CutMulti_REVERSE_CONNECT TRUE) + +add_client_tests("pv" + TEST_SCRIPTS ${TESTS_WITHOUT_BASELINES}) + +IF (PARAVIEW_DATA_ROOT) + add_client_tests("pv" + BASELINE_DIR ${PARAVIEW_DATA_ROOT}/Baseline + TEST_SCRIPTS ${TESTS_WITH_BASELINES} + ) + + add_client_server_tests("pvcs" + BASELINE_DIR ${PARAVIEW_DATA_ROOT}/Baseline + TEST_SCRIPTS ${TESTS_WITH_BASELINES} + ) + + add_client_render_server_tests("pvcrs" + BASELINE_DIR ${PARAVIEW_DATA_ROOT}/Baseline + TEST_SCRIPTS ${TESTS_WITH_BASELINES} + ) + +# TODO: remote rendering tests and reverse connect tests. + +ENDIF (PARAVIEW_DATA_ROOT) + diff --git a/Applications/ParaView/Testing/XML/CalcParens.xml b/Applications/ParaView/Testing/XML/CalcParens.xml new file mode 100644 index 0000000000..7f9ca825d8 --- /dev/null +++ b/Applications/ParaView/Testing/XML/CalcParens.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Calculator" command="activate" arguments="" /> + + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="key" arguments="45" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="set_string" arguments="-s" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="set_string" arguments="-si" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Function" command="set_string" arguments="-sin" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LeftParentheses" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> + <pqevent object="1QMenu0" command="activate" arguments="RTData" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/RightParentheses" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Result" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="DataSetTriangleFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Calculator.xml b/Applications/ParaView/Testing/XML/Calculator.xml new file mode 100644 index 0000000000..9df6fd6361 --- /dev/null +++ b/Applications/ParaView/Testing/XML/Calculator.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Calculator" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> + <pqevent object="1QMenu0" command="activate" arguments="Normals_X" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/iHat" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Plus" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/sqrt" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LeftParentheses" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> + <pqevent object="1QMenu0" command="activate" arguments="Normals_Y" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/RightParentheses" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/jHat" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Plus" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> + <pqevent object="1QMenu0" command="activate" arguments="Normals_Z" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/kHat" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="WarpVector" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SelectInputVectors" command="set_string" arguments="Result" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Result" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewZoomToData" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/CameraLink.xml b/Applications/ParaView/Testing/XML/CameraLink.xml similarity index 53% rename from Applications/Client/Testing/XML/CameraLink.xml rename to Applications/ParaView/Testing/XML/CameraLink.xml index 80a8368c5a..23f0fe3d42 100644 --- a/Applications/Client/Testing/XML/CameraLink.xml +++ b/Applications/ParaView/Testing/XML/CameraLink.xml @@ -1,10 +1,10 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cone" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cylinder" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsManageLinks" /> <pqevent object="pqClientMainWindow/pqLinksManager/addButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="currentChanged" arguments="/0/0|0" /> @@ -18,10 +18,10 @@ <pqevent object="pqClientMainWindow/pqLinksManager/editButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/buttonBox/1QPushButton0" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqLinksManager/buttonBox/1QPushButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.58885,0.376667,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.421603,0.503333,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.421603,0.503333,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/Viewport" command="mousePress" arguments="(0.414634,0.0233333,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/Viewport" command="mouseMove" arguments="(0.414634,0.0233333,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/1/Viewport" command="mouseRelease" arguments="(0.414634,0.0233333,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.58885,0.376667,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.421603,0.503333,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.421603,0.503333,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/Viewport" command="mousePress" arguments="(0.414634,0.0233333,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/Viewport" command="mouseMove" arguments="(0.414634,0.0233333,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/Viewport" command="mouseRelease" arguments="(0.414634,0.0233333,1,0,0)" /> </pqevents> diff --git a/Applications/ParaView/Testing/XML/Clip.xml b/Applications/ParaView/Testing/XML/Clip.xml new file mode 100644 index 0000000000..9d6f6653cd --- /dev/null +++ b/Applications/ParaView/Testing/XML/Clip.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" ?> +<pqevents> + <!-- + This test tests different aspects of using the Clip panel/filter including: + * undo/redo + * clip plane linking + --> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveZ" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionNegativeZ" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionNegativeY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Common" command="activate" arguments="Clip" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="ACCL" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Components" command="set_string" arguments="X" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Clip" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/InsideOut" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsManageLinks" /> + <pqevent object="pqClientMainWindow/pqLinksManager/addButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mousePress" arguments="1,1,0,-10,16,/1:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mouseRelease" arguments="1,0,0,-10,16,/1:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mousePress" arguments="1,1,0,-13,8,/1:0/1:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mouseRelease" arguments="1,0,0,-13,8,/1:0/1:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mousePress" arguments="1,1,0,16,7,/1:0/1:0/0:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy1" command="mouseRelease" arguments="1,0,0,16,7,/1:0/1:0/0:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mousePress" arguments="1,1,0,-13,12,/1:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mouseRelease" arguments="1,0,0,-13,12,/1:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mousePress" arguments="1,1,0,-9,10,/1:0/3:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mouseRelease" arguments="1,0,0,-9,10,/1:0/3:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mousePress" arguments="1,1,0,10,9,/1:0/3:0/0:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/stackedWidget/page/ObjectTreeProxy2" command="mouseRelease" arguments="1,0,0,10,9,/1:0/3:0/0:0" /> + <pqevent object="pqClientMainWindow/pqLinksManager/pqLinksEditor/buttonBox/1QPushButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pqLinksManager/buttonBox/1QPushButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,49,13,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,49,13,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useXNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/ColorEditor1.xml b/Applications/ParaView/Testing/XML/ColorEditor1.xml similarity index 88% rename from Applications/Client/Testing/XML/ColorEditor1.xml rename to Applications/ParaView/Testing/XML/ColorEditor1.xml index 1a4cc83a91..a29a997482 100644 --- a/Applications/Client/Testing/XML/ColorEditor1.xml +++ b/Applications/ParaView/Testing/XML/ColorEditor1.xml @@ -1,13 +1,13 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton3" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/show3DWidget" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Cut" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/show3DWidget" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/PresetButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqColorPresetDialog/CancelButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/TableSize" command="set_int" arguments="254" /> diff --git a/Applications/ParaView/Testing/XML/ColorEditor2.xml b/Applications/ParaView/Testing/XML/ColorEditor2.xml new file mode 100644 index 0000000000..080675127c --- /dev/null +++ b/Applications/ParaView/Testing/XML/ColorEditor2.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SuperquadricSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.503536,0.334944,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.506365,0.47182,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.506365,0.47182,1,0,0)" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="TextureCoords" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.483734,0.690821,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.483734,0.648953,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.483734,0.648953,1,0,0)" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/ColorSpace" command="set_string" arguments="Wrapped HSV" /> + <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/UseAutoRescale" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/RescaleButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqRescaleRangeDialog/MinimumScalar" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqRescaleRangeDialog/MinimumScalar" command="set_string" arguments=".5" /> + <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqRescaleRangeDialog/RescaleButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pqColorScaleDialog/CloseButton" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/ColorEditor3.xml b/Applications/ParaView/Testing/XML/ColorEditor3.xml similarity index 66% rename from Applications/Client/Testing/XML/ColorEditor3.xml rename to Applications/ParaView/Testing/XML/ColorEditor3.xml index d0beb70026..668639d6ab 100644 --- a/Applications/Client/Testing/XML/ColorEditor3.xml +++ b/Applications/ParaView/Testing/XML/ColorEditor3.xml @@ -1,22 +1,22 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/iron protein.vtk" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> - <pqevent object="pqClientMainWindow/commonFilters/1QToolButton5" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_0" command="set_int" arguments="32" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_1" command="set_int" arguments="35" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_2" command="set_int" arguments="32" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_3" command="set_int" arguments="35" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_4" command="set_int" arguments="32" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_5" command="set_int" arguments="35" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewZoomToData" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Volume" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/ExtractGrid" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_0" command="set_int" arguments="32" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_1" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_2" command="set_int" arguments="32" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_3" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_4" command="set_int" arguments="32" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_5" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewZoomToData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Volume" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/ColorScale" command="mousePress" arguments="(0.490019,0.522956,1,1,0)" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/ColorScale" command="mouseMove" arguments="(0.490019,0.522956,1,0,0)" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/ColorScale" command="mouseRelease" arguments="(0.490019,0.522956,1,0,0)" /> diff --git a/Applications/Client/Testing/XML/ColorEditor4.xml b/Applications/ParaView/Testing/XML/ColorEditor4.xml similarity index 53% rename from Applications/Client/Testing/XML/ColorEditor4.xml rename to Applications/ParaView/Testing/XML/ColorEditor4.xml index 2bfd3b3526..def11957ac 100644 --- a/Applications/Client/Testing/XML/ColorEditor4.xml +++ b/Applications/ParaView/Testing/XML/ColorEditor4.xml @@ -1,9 +1,9 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="OctreeFractal" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/PresetButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqColorPresetDialog/Gradients" command="currentChanged" arguments="/2|0" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqColorPresetDialog/OkButton" command="activate" arguments="" /> diff --git a/Applications/ParaView/Testing/XML/Contour.xml b/Applications/ParaView/Testing/XML/Contour.xml new file mode 100644 index 0000000000..c6bee946b9 --- /dev/null +++ b/Applications/ParaView/Testing/XML/Contour.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_2.vts" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="false" /> + + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Contour" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/ContourRange.xml b/Applications/ParaView/Testing/XML/ContourRange.xml new file mode 100644 index 0000000000..d44b018215 --- /dev/null +++ b/Applications/ParaView/Testing/XML/ContourRange.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_2.vts" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Contour" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/0pqCollapsedGroup1/pqSampleScalarWidget/NewRange" command="activate" arguments="" /> + <pqevent object="pqSampleScalarAddRangeDialog/from" command="set_string" arguments="." /> + <pqevent object="pqSampleScalarAddRangeDialog/from" command="set_string" arguments=".2" /> + <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments="" /> + <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments="." /> + <pqevent object="pqSampleScalarAddRangeDialog/to" command="set_string" arguments=".6" /> + <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="" /> + <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="10" /> + <pqevent object="pqSampleScalarAddRangeDialog/steps" command="set_string" arguments="10" /> + <pqevent object="pqSampleScalarAddRangeDialog/okButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Momentum" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/CustomFilter.xml b/Applications/ParaView/Testing/XML/CustomFilter.xml similarity index 79% rename from Applications/Client/Testing/XML/CustomFilter.xml rename to Applications/ParaView/Testing/XML/CustomFilter.xml index a7d1650157..5f77f91da0 100644 --- a/Applications/Client/Testing/XML/CustomFilter.xml +++ b/Applications/ParaView/Testing/XML/CustomFilter.xml @@ -1,14 +1,14 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cone" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="FeatureEdges" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="false" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QTabBar0" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsCreateCustomFilter" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/PageStack/NamePage/CustomFilterName" command="set_string" arguments="MyFeatureEdges" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/NextButton" command="activate" arguments="" /> @@ -49,19 +49,18 @@ <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/PageStack/PropertyPage/frame_3/PropertyUpButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/PageStack/PropertyPage/frame_3/PropertyUpButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqCustomFilterDefinitionWizard/InputFrame/FinishButton" command="activate" arguments="" /> - <pqevent object="pqCustomFilterManager/CloseButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView/qt_scrollarea_viewport" command="contextMenu" arguments="" /> - <pqevent object="PipelineObjectMenu" command="activate" arguments="actionDelete" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="MyFeatureEdges" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Guess3" command="set_boolean" arguments="true" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Guess3" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsManageCustomFilters" /> + <pqevent object="pqClientMainWindow/pqCustomFilterManager/CustomFilterList" command="mousePress" arguments="1,1,0,86,6,/0:0" /> + <pqevent object="pqClientMainWindow/pqCustomFilterManager/CustomFilterList" command="mouseRelease" arguments="1,0,0,86,6,/0:0" /> <pqevent object="pqClientMainWindow/pqCustomFilterManager/RemoveButton" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pqCustomFilterManager/ImportButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqCustomFilterManager/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Baseline/filters.xml" /> <pqevent object="pqClientMainWindow/pqCustomFilterManager/CloseButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="MyElevation" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> </pqevents> diff --git a/Applications/ParaView/Testing/XML/CustomSourceProbe.xml b/Applications/ParaView/Testing/XML/CustomSourceProbe.xml new file mode 100644 index 0000000000..d46f762344 --- /dev/null +++ b/Applications/ParaView/Testing/XML/CustomSourceProbe.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/disk_out_ref.ex2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Cut" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionNegativeY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionNegativeZ" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveZ" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveX" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,117,44," /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,117,44," /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,95,12,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,95,12,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Probe" /> + <pqevent object="pqClientMainWindow/SelectInputDialog/InputFrame/qt_scrollarea_viewport/InputContainer/Source" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/SelectInputDialog/Sources" command="mousePress" arguments="1,1,0,33,10,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/SelectInputDialog/Sources" command="mouseRelease" arguments="1,0,0,33,10,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/SelectInputDialog/OkButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="V" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/D3SmallCells.xml b/Applications/ParaView/Testing/XML/D3SmallCells.xml new file mode 100644 index 0000000000..12e03fea52 --- /dev/null +++ b/Applications/ParaView/Testing/XML/D3SmallCells.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" ?> + +<!-- Small cells increase the potential of D3 resolving two distinct points + as the same point. This test creates a simple unstructured grid with + small cells and runs it through D3, making sure it creates ghost cells + to see if any points are mistakenly resolved (and thus cells become + degenerate and the surface gets mangled). --> + +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="0.001" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="D3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="PointDataToCellData" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/DualSphereAnimation.xml b/Applications/ParaView/Testing/XML/DualSphereAnimation.xml new file mode 100644 index 0000000000..f1b26bd62c --- /dev/null +++ b/Applications/ParaView/Testing/XML/DualSphereAnimation.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/dualSphereAnimation.pvd" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRFirstFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRNextFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRNextFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRNextFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRNextFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="set_int" arguments="1" /> + <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="key" arguments="16777221" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/ExTimeseries.xml b/Applications/ParaView/Testing/XML/ExTimeseries.xml new file mode 100644 index 0000000000..2bfc3b306a --- /dev/null +++ b/Applications/ParaView/Testing/XML/ExTimeseries.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/ExRestarts/blow.ex-timeseries" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.597285,0.519305,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.369532,0.540541,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.369532,0.540541,1,0,0)" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton4" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="THICKNESS" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton2" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/ExTimeseries2.xml b/Applications/ParaView/Testing/XML/ExTimeseries2.xml similarity index 51% rename from Applications/Client/Testing/XML/ExTimeseries2.xml rename to Applications/ParaView/Testing/XML/ExTimeseries2.xml index b34eb42f75..85c5561a18 100644 --- a/Applications/Client/Testing/XML/ExTimeseries2.xml +++ b/Applications/ParaView/Testing/XML/ExTimeseries2.xml @@ -3,14 +3,14 @@ <!-- a different way. In this test you point to one of the files in the --> <!-- time series and the remaining file is automatically found. --> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/ExRestarts/blow.e" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.597285,0.519305,1,1,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.369532,0.540541,1,0,0)" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.369532,0.540541,1,0,0)" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.597285,0.519305,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.369532,0.540541,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.369532,0.540541,1,0,0)" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton4" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="THICKNESS" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> diff --git a/Applications/ParaView/Testing/XML/ExodusIIPanel.xml b/Applications/ParaView/Testing/XML/ExodusIIPanel.xml new file mode 100644 index 0000000000..686483cc79 --- /dev/null +++ b/Applications/ParaView/Testing/XML/ExodusIIPanel.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/tube.exii" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="ObjectId" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="cellNormals" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="ObjectId" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/ExodusModeShapes.xml b/Applications/ParaView/Testing/XML/ExodusModeShapes.xml new file mode 100644 index 0000000000..0c764546ec --- /dev/null +++ b/Applications/ParaView/Testing/XML/ExodusModeShapes.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/modeShapesGroup/HasModeShapes" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/modeShapesGroup/ModeShapeOptions/ModeSelectSlider" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="ObjectId" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/ExodusXML.xml b/Applications/ParaView/Testing/XML/ExodusXML.xml new file mode 100644 index 0000000000..4177902735 --- /dev/null +++ b/Applications/ParaView/Testing/XML/ExodusXML.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/tube.exo" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="ObjectId" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> + + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="1.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="2.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="2.0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="3.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="3.0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="0.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_3/Blocks" command="setCheckState" arguments="0.0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_2/Materials" command="setCheckState" arguments="0.0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/DisplayType/qt_tabwidget_stackedwidget/tab_2/Materials" command="setCheckState" arguments="0.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/ExtractBlock.xml b/Applications/ParaView/Testing/XML/ExtractBlock.xml new file mode 100644 index 0000000000..5f9951a5fc --- /dev/null +++ b/Applications/ParaView/Testing/XML/ExtractBlock.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.ImageData.Collection.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractBlock" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.0,0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0,0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.1,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.2,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.4,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/BlockIndices" command="setTreeItemCheckState" arguments="0.6,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Contour" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqContourControls/ComputeScalars" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,14,13,/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,14,13,/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="Solid Color" /> +</pqevents> + diff --git a/Applications/ParaView/Testing/XML/ExtractLevel.xml b/Applications/ParaView/Testing/XML/ExtractLevel.xml new file mode 100644 index 0000000000..d6c07ae179 --- /dev/null +++ b/Applications/ParaView/Testing/XML/ExtractLevel.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="HierarchicalFractal" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GhostLevels" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractHierarchicalLevel" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.5,0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0,0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.3,0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.4,0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.5,0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Levels" command="setTreeItemCheckState" arguments="0.4,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface With Edges" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="Depth" /> + <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/FFTOverTime.xml b/Applications/ParaView/Testing/XML/FFTOverTime.xml new file mode 100644 index 0000000000..3327d95a8a --- /dev/null +++ b/Applications/ParaView/Testing/XML/FFTOverTime.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionTesting_Window_Size" /> + <pqevent object="pqClientMainWindow/selectionToolbar/actionSelectionMode" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.433333,0.666667,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.433333,0.666667,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.433333,0.666667,1,0,0)" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="FFTSelectionOverTime" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Selection/pushButtonCopySelection" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TableToPolyData" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Calculator" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CoordinateResults" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> + <pqevent object="1QMenu0" command="activate" arguments="EQPS_X" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/iHat" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Plus" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scalars" command="activate" arguments="" /> + <pqevent object="1QMenu0" command="activate" arguments="EQPS_Y" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Multiply" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/jHat" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionNegativeZ" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="EQPS" /> + <pqevent object="pqClientMainWindow/axesToolbar/1QToolButton0" command="set_boolean" arguments="false" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Flow.xml b/Applications/ParaView/Testing/XML/Flow.xml new file mode 100644 index 0000000000..2fc26f22a8 --- /dev/null +++ b/Applications/ParaView/Testing/XML/Flow.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_1.vts" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/ExtractGrid" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_0" command="set_int" arguments="22" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_1" command="set_int" arguments="31" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_2" command="set_int" arguments="21" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_3" command="set_int" arguments="29" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_4" command="set_int" arguments="14" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/VOI_5" command="set_int" arguments="19" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewZoomToData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Cut" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/show3DWidget" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="SurfaceVectors" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Glyph" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Solid Color" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Flow2.xml b/Applications/ParaView/Testing/XML/Flow2.xml new file mode 100644 index 0000000000..7109f5aa22 --- /dev/null +++ b/Applications/ParaView/Testing/XML/Flow2.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/RectGrid2.vtk" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Cut" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originX" command="set_string" arguments="-0.08" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originX" command="set_string" arguments="-0.088" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originX" command="set_string" arguments="-0.0889" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="key" arguments="16777219" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="key" arguments="45" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.17" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.171" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originY" command="set_string" arguments="-0.0171" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/originZ" command="set_string" arguments="0.435" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/normalZ" command="set_string" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="IntegrateFlowThroughSurface" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Glyph" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LockScaleFactor" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="set_string" arguments="0.5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="IntegrateAttributes" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Glyph" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Source/1QComboBox0" command="set_string" arguments="Sphere" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/LockScaleFactor" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleFactor" command="set_string" arguments="0.5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/SetScaleMode" command="set_string" arguments="off" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ViewGroup/ViewData" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0/1/0|0" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0" command="contextMenu" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter" command="contextMenu" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame" command="contextMenu" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager" command="contextMenu" arguments="" /> + <pqevent object="pqClientMainWindow" command="contextMenu" arguments="" /> + + <!-- hide orientation axes since on some dashboards it's not resized correctly --> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditViewSettings" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,47,5,/2:0" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,47,5,/2:0" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mousePress" arguments="1,1,0,14,13" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mouseRelease" arguments="1,0,0,14,13" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Fractal2D.xml b/Applications/ParaView/Testing/XML/Fractal2D.xml new file mode 100644 index 0000000000..8704253079 --- /dev/null +++ b/Applications/ParaView/Testing/XML/Fractal2D.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="HierarchicalFractal" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumLevel/Slider" command="set_int" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent + object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="vtkAMRLevel" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Fractal Volume Fraction" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="4" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TimeStep/Slider" command="set_int" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/Fractal3D.xml b/Applications/ParaView/Testing/XML/Fractal3D.xml similarity index 61% rename from Applications/Client/Testing/XML/Fractal3D.xml rename to Applications/ParaView/Testing/XML/Fractal3D.xml index 192ff12840..343f21c668 100644 --- a/Applications/Client/Testing/XML/Fractal3D.xml +++ b/Applications/ParaView/Testing/XML/Fractal3D.xml @@ -1,5 +1,5 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileLoadServerState" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileLoadServerState" /> <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Fractal3D.pvsm" /> </pqevents> diff --git a/Applications/ParaView/Testing/XML/GlobalProperties.xml b/Applications/ParaView/Testing/XML/GlobalProperties.xml new file mode 100644 index 0000000000..111d4d0b4d --- /dev/null +++ b/Applications/ParaView/Testing/XML/GlobalProperties.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" ?> +<!-- + This test sets up some global property links and the changes the global + property values (does some undo/redo) and saves state. + Then changes the global property values and reloads the state. + We see that global links are indeed loaded correctly from the state file as + well! +--> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TransformFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/scaleX" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/show3DWidget" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionX" command="set_string" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector" command="mousePress" arguments="1,1,0,62,29" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector" command="mouseRelease" arguments="1,0,0,62,29" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector" command="mousePress" arguments="1,1,0,62,28" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector" command="mouseRelease" arguments="1,0,0,62,28" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,9,13,/0:0/0:1" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,9,13,/0:0/0:1" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionX" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/axesToolbar/1QToolButton0" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_hcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,126,8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_hcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,199,9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_hcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,199,9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="TextAnnotationColor" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="EdgeColor" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="ForegroundColor" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="SelectionColor" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/SolidColorPage/ColorActorColor/StandardColorMenu" command="activate" arguments="ForegroundColor" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditSettings" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mousePress" arguments="1,1,0,34,8,/1:0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mouseRelease" arguments="1,0,0,34,8,/1:0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/ForegroundColor" command="setChosenColor" arguments="0,85,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/SelectionColor" command="setChosenColor" arguments="255,255,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/EdgeColor" command="setChosenColor" arguments="0,0,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/TextAnnotationColor" command="setChosenColor" arguments="0,0,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> + + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditSettings" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/BackgroundColor" command="setChosenColor" arguments="255,255,255" /> + + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditSettings" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/BackgroundColor" command="setChosenColor" arguments="85,85,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/ApplyButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileSaveServerState" /> + <pqevent object="pqClientMainWindow/FileSaveServerStateDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/GlobalProperties.state.pvsm" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditSettings" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/ForegroundColor" command="setChosenColor" arguments="255,255,255" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/BackgroundColor" command="setChosenColor" arguments="0,0,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/SelectionColor" command="setChosenColor" arguments="170,0,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqApplicationOptions/stackedWidget/Colors/EdgeColor" command="setChosenColor" arguments="0,0,0" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/ApplyButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionServerDisconnect" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/1QMessageBox0/qt_msgbox_buttonbox/1QPushButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileLoadServerState" /> + <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/GlobalProperties.state.pvsm" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/LinePlot.xml b/Applications/ParaView/Testing/XML/LinePlot.xml new file mode 100644 index 0000000000..64f5ec6201 --- /dev/null +++ b/Applications/ParaView/Testing/XML/LinePlot.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" + command="activate" arguments="ProbeLine" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.474684,0.122288,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.474684,0.122288,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.474684,0.122288,1,0,0)" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/LoadSaveStateAnimation.xml b/Applications/ParaView/Testing/XML/LoadSaveStateAnimation.xml similarity index 78% rename from Applications/Client/Testing/XML/LoadSaveStateAnimation.xml rename to Applications/ParaView/Testing/XML/LoadSaveStateAnimation.xml index bf7de41f57..a496d538f4 100644 --- a/Applications/Client/Testing/XML/LoadSaveStateAnimation.xml +++ b/Applications/ParaView/Testing/XML/LoadSaveStateAnimation.xml @@ -1,8 +1,8 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/dualSphereAnimation.pvd" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> @@ -21,11 +21,11 @@ <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileSaveServerState" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileSaveServerState" /> <pqevent object="pqClientMainWindow/FileSaveServerStateDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/temp.pvsm" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileLoadServerState" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileLoadServerState" /> <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/temp.pvsm" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> diff --git a/Applications/Client/Testing/XML/LoadState.xml b/Applications/ParaView/Testing/XML/LoadState.xml similarity index 57% rename from Applications/Client/Testing/XML/LoadState.xml rename to Applications/ParaView/Testing/XML/LoadState.xml index cae17569c0..38693f410f 100644 --- a/Applications/Client/Testing/XML/LoadState.xml +++ b/Applications/ParaView/Testing/XML/LoadState.xml @@ -1,6 +1,6 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileLoadServerState" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileLoadServerState" /> <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/LoadState.pvsm" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> </pqevents> diff --git a/Applications/ParaView/Testing/XML/NormalGlyphs.xml b/Applications/ParaView/Testing/XML/NormalGlyphs.xml new file mode 100644 index 0000000000..0e9889e264 --- /dev/null +++ b/Applications/ParaView/Testing/XML/NormalGlyphs.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" ?> +<pqevents> + <!-- Turn off orientation axis annotation --> + <pqevent object="pqClientMainWindow/axesToolbar/1QToolButton0" command="set_boolean" arguments="false" /> + + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mousePress" arguments="1,1,0,23,4,/2:0" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/PageNames" command="mouseRelease" arguments="1,0,0,23,4,/2:0" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mousePress" arguments="1,1,0,32,7" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Annotation/OrientationAxes" command="mouseRelease" arguments="1,0,0,32,7" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> + + <!-- Create a simple multiblock source --> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CubeSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/GroupDataSets" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + + <!-- Add normal glyphs --> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="NormalGlyphs" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + + <!-- Add a second box with glyphs in non-random masking --> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,50,8,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,50,8,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TransformFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionX" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Transform/pqBoxWidget/positionY" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,10,6,/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,10,6,/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="NormalGlyphs" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Glyph Random Mode" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + + <!-- Adjust the camera to see all glyphs --> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.567213,0.652655,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.686885,0.705752,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.686885,0.705752,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.654098,0.475664,2,2,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.654098,0.621681,2,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.654098,0.621681,2,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0" command="contextMenu" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter" command="contextMenu" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame" command="contextMenu" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/ObjectInspectorSphere.xml b/Applications/ParaView/Testing/XML/ObjectInspectorSphere.xml new file mode 100644 index 0000000000..eb40eaf1e3 --- /dev/null +++ b/Applications/ParaView/Testing/XML/ObjectInspectorSphere.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="179" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="178" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="177" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="176" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="175" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="174" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="173" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="172" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="171" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="170" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="169" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="168" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="167" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="166" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="165" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="164" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="163" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="162" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="161" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="160" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="159" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="158" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndPhi/LineEdit" command="set_string" arguments="157" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="359" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="358" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="357" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="356" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="355" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="354" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="353" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="352" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="351" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="350" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="349" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="348" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="347" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="346" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="345" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="344" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="343" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="342" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="341" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/EndTheta/LineEdit" command="set_string" arguments="340" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="4" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="7" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="11" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="12" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="13" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="14" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="15" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="16" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="17" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartPhi/LineEdit" command="set_string" arguments="18" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="4" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="7" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="11" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/StartTheta/LineEdit" command="set_string" arguments="12" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/OpenHelp.xml b/Applications/ParaView/Testing/XML/OpenHelp.xml new file mode 100644 index 0000000000..e417722222 --- /dev/null +++ b/Applications/ParaView/Testing/XML/OpenHelp.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_Help" command="activate" arguments="actionHelp" /> + <pqevent object="pqClientMainWindow/pqHelpWindow/contentsDock/1QHelpContentWidget0" command="setCurrent" arguments="0.0" /> + <pqevent object="pqClientMainWindow/menubar/menu_Help" command="activate" arguments="actionHelp" /> + <pqevent object="pqClientMainWindow/pqHelpWindow/contentsDock/1QHelpContentWidget0" command="expand" arguments="0.0" /> + <pqevent object="pqClientMainWindow/pqHelpWindow/contentsDock/1QHelpContentWidget0" command="setCurrent" arguments="0.0.1.0" /> + <pqevent object="pqClientMainWindow/pqHelpWindow/contentsDock/1QHelpContentWidget0" command="setCurrent" arguments="0.0.1.0" /> + <pqevent object="pqClientMainWindow/pqHelpWindow/contentsDock/1QHelpContentWidget0" command="expand" arguments="0.0.1.0" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/OpenSaveData.xml b/Applications/ParaView/Testing/XML/OpenSaveData.xml new file mode 100644 index 0000000000..be891df7da --- /dev/null +++ b/Applications/ParaView/Testing/XML/OpenSaveData.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_0.vts" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileSaveData" /> + <pqevent object="pqClientMainWindow/FileSaveDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/junk.pvd" /> + <pqevent object="pqWriterDialog/buttonBox/1QPushButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionDelete_All" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/junk.pvd" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Plot3DReader.xml b/Applications/ParaView/Testing/XML/Plot3DReader.xml new file mode 100644 index 0000000000..b7df4131fc --- /dev/null +++ b/Applications/ParaView/Testing/XML/Plot3DReader.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/combxyz.bin" /> + <pqevent object="pqSelectReaderDialog/listWidget" command="currentChanged" arguments="/13|0" /> + <pqevent object="pqSelectReaderDialog/okButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/QFileName/FileButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/QFileName/pqFileDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/combq.bin" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Density" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/PlotEdges.xml b/Applications/ParaView/Testing/XML/PlotEdges.xml new file mode 100644 index 0000000000..4c932f959b --- /dev/null +++ b/Applications/ParaView/Testing/XML/PlotEdges.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="DataSetSurfaceFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Cut" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" + command="activate" arguments="PlotOnSortedLines" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.0355487,0.345144,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.0355487,0.345144,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.0355487,0.345144,1,0,0)" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,15,13,/0:0/0:0/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,15,13,/0:0/0:0/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="arc_length" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/PlotEdges2.xml b/Applications/ParaView/Testing/XML/PlotEdges2.xml new file mode 100644 index 0000000000..801d23e1e4 --- /dev/null +++ b/Applications/ParaView/Testing/XML/PlotEdges2.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CylinderSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="20" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="set_string" arguments="3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CylinderSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="20" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Resolution/LineEdit" command="set_string" arguments="20" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="key" arguments="45" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="set_string" arguments="-3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,48,3,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,48,3,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="keyEvent" arguments="6,16777248,33554432,,0,1" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,33554432,55,9,/0:0/1:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,33554432,55,9,/0:0/1:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="keyEvent" arguments="7,16777248,0,,0,1" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="AppendPolyData" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="DataSetSurfaceFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Cut" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useYNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" + command="activate" arguments="PlotOnSortedLines" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqLineChartDisplayPanel/SeriesGroup/SeriesList/1pqCheckableHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/qt_scrollarea_vcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,10,64" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,10,93" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,10,93" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.327666,0.251969,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.327666,0.251969,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.327666,0.251969,1,0,0)" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,10,8,/0:0/2:0/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,10,8,/0:0/2:0/0:0/0:0/0:1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="arc_length" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/PropertyLink.xml b/Applications/ParaView/Testing/XML/PropertyLink.xml new file mode 100644 index 0000000000..225e303e33 --- /dev/null +++ b/Applications/ParaView/Testing/XML/PropertyLink.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileLoadServerState" /> + <pqevent object="pqClientMainWindow/FileLoadServerStateDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/PropertyLink.pvsm" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Radius" command="set_string" arguments="0.4" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/ReadXMLPolyDataFileSeries.xml b/Applications/ParaView/Testing/XML/ReadXMLPolyDataFileSeries.xml similarity index 70% rename from Applications/Client/Testing/XML/ReadXMLPolyDataFileSeries.xml rename to Applications/ParaView/Testing/XML/ReadXMLPolyDataFileSeries.xml index 90b44044d2..c20a3cfef2 100644 --- a/Applications/Client/Testing/XML/ReadXMLPolyDataFileSeries.xml +++ b/Applications/ParaView/Testing/XML/ReadXMLPolyDataFileSeries.xml @@ -1,8 +1,8 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/mainToolBar/1QToolButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/singleSphereAnimation/singleSphereAnimation_source93T..vtp" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton2" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> diff --git a/Applications/ParaView/Testing/XML/RectilinearFractal.xml b/Applications/ParaView/Testing/XML/RectilinearFractal.xml new file mode 100644 index 0000000000..6982d25ad1 --- /dev/null +++ b/Applications/ParaView/Testing/XML/RectilinearFractal.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="HierarchicalFractal" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Dimensions/Slider" command="set_int" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumLevel/Slider" command="set_int" arguments="4" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumLevel/Slider" command="set_int" arguments="3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/TwoDimensional" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Asymetric" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/RectilinearGrids" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Cut" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CutFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="Fractal Volume Fraction" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/RepresentationSelector.xml b/Applications/ParaView/Testing/XML/RepresentationSelector.xml new file mode 100644 index 0000000000..c57a1891c0 --- /dev/null +++ b/Applications/ParaView/Testing/XML/RepresentationSelector.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cone" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="set_string" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="key" arguments="16777220" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Plane" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/XResolution" command="set_string" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/YResolution" command="set_string" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Wireframe" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Outline" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Points" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/1|0" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Wireframe" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/SPTimeseries.xml b/Applications/ParaView/Testing/XML/SPTimeseries.xml new file mode 100644 index 0000000000..dc72b6c14d --- /dev/null +++ b/Applications/ParaView/Testing/XML/SPTimeseries.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/SPCTH/restarted/sample.spcth-timeseries" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_vcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,12,89" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,9,206" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,9,206" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus/qt_scrollarea_vcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,4,69" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,7,166" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,7,166" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus" command="mousePress" arguments="1,1,0,11,7,/11:0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/CellArrayStatus" command="mouseRelease" arguments="1,0,0,11,7,/11:0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="CTHPart" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton2" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton1" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/SaveAnimationGeometry.xml b/Applications/ParaView/Testing/XML/SaveAnimationGeometry.xml similarity index 62% rename from Applications/Client/Testing/XML/SaveAnimationGeometry.xml rename to Applications/ParaView/Testing/XML/SaveAnimationGeometry.xml index e41be9f76a..b381dbe876 100644 --- a/Applications/Client/Testing/XML/SaveAnimationGeometry.xml +++ b/Applications/ParaView/Testing/XML/SaveAnimationGeometry.xml @@ -1,21 +1,23 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menu_View" /> + <pqevent object="pqClientMainWindow/menubar/menu_View/Panels" command="activate" arguments="Animation View" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Animation View" /> <pqevent object="pqClientMainWindow/animationViewDock/animationView/pqAnimationWidget/CreateDeleteWidget/PropertyCombo" command="set_string" arguments="Start Theta" /> <pqevent object="pqClientMainWindow/animationViewDock/animationView/1pqAnimationWidget0/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,2" /> <pqevent object="pqClientMainWindow/animationViewDock/animationView/1pqAnimationWidget0/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,2" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileSaveGeometry" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileSaveGeometry" /> <pqevent object="pqClientMainWindow/FileSaveAnimationDialog" command="remove" arguments="$PARAVIEW_TEST_ROOT/SaveAnimationGeometry.pvd" /> <pqevent object="pqClientMainWindow/FileSaveAnimationDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/SaveAnimationGeometry.pvd" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/SaveAnimationGeometry.pvd" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> diff --git a/Applications/ParaView/Testing/XML/SaveCSV.xml b/Applications/ParaView/Testing/XML/SaveCSV.xml new file mode 100644 index 0000000000..1cd573a4f3 --- /dev/null +++ b/Applications/ParaView/Testing/XML/SaveCSV.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/can.ex2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Variables/1QHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionNegativeY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileSaveData" /> + <pqevent object="pqClientMainWindow/FileSaveDialog" command="remove" arguments="$PARAVIEW_TEST_ROOT/SaveCSV0.csv" /> + <pqevent object="pqClientMainWindow/FileSaveDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/SaveCSV.csv" /> + <pqevent object="pqWriterDialog/buttonBox/1QPushButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_TEST_ROOT/SaveCSV0.csv" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TableToPolyData" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/XColumn" command="set_string" arguments="Points:0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/YColumn" command="set_string" arguments="Points:1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ZColumn" command="set_string" arguments="Points:2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,9,13,/0:0/0:1" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,9,13,/0:0/0:1" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Points" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/SaveColorMap.xml b/Applications/ParaView/Testing/XML/SaveColorMap.xml similarity index 92% rename from Applications/Client/Testing/XML/SaveColorMap.xml rename to Applications/ParaView/Testing/XML/SaveColorMap.xml index 0e553e9a28..9cd1dc94f8 100644 --- a/Applications/Client/Testing/XML/SaveColorMap.xml +++ b/Applications/ParaView/Testing/XML/SaveColorMap.xml @@ -1,11 +1,11 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface" /> <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="RTData" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorButtonStack/ColorMapPage/EditColorMapButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/ColorTabs/qt_tabwidget_stackedwidget/ScalePage/PresetButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqColorPresetDialog/Gradients" command="mousePress" arguments="1,1,0,125,7,/4:0" /> <pqevent object="pqClientMainWindow/pqColorScaleDialog/pqColorPresetDialog/Gradients" command="mouseRelease" arguments="1,0,0,125,7,/4:0" /> diff --git a/Applications/ParaView/Testing/XML/SelectReader.xml b/Applications/ParaView/Testing/XML/SelectReader.xml new file mode 100644 index 0000000000..3a4a2fafa4 --- /dev/null +++ b/Applications/ParaView/Testing/XML/SelectReader.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/blow data.myvtk" /> + <pqevent object="pqSelectReaderDialog/listWidget" command="currentChanged" arguments="/16|0" /> + <pqevent object="pqSelectReaderDialog/okButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="displacement2" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/SimpleInteraction.xml b/Applications/ParaView/Testing/XML/SimpleInteraction.xml new file mode 100644 index 0000000000..7b0500951b --- /dev/null +++ b/Applications/ParaView/Testing/XML/SimpleInteraction.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" ?> +<pqevents> + <!-- Tests mouse interaction and interaction with text source --> + <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionTesting_Window_Size" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cone" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Wireframe" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.673846,0.555874,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.28,0.386819,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.28,0.386819,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.343077,0.234957,2,2,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.363077,0.530086,2,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.363077,0.530086,2,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.378462,0.510029,2,2,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.361538,0.17765,2,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.361538,0.17765,2,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.555385,0.647564,4,4,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.48,0.530086,4,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.48,0.530086,4,0,0)" /> + <pqevent object="pqClientMainWindow/representationToolbar/displayRepresentation/comboBox" command="set_string" arguments="Surface" /> + + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="TextSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Text" command="key" arguments="16777220" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Text" command="key" arguments="16777248" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Text" command="set_string" arguments="Text
This is a testing" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent + object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/buttonColor/StandardColorMenu" + command="activate" arguments="EdgeColor" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="25" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="26" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="27" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="28" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="29" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="30" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboTextAlign" command="set_string" arguments="Center" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboTextAlign" command="set_string" arguments="Right" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboFontFamily" command="set_string" arguments="Courier" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonBold" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonItalic" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.7" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.4" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.28" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.33" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.72" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.67" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.62" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonUC" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonUR" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonLR" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonLC" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLocation/toolButtonUC" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.25" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="set_double" arguments="0.15" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1X" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.95" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.95" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.85" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.75" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.7" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.65" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="set_double" arguments="0.55" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPositionFrame/groupBoxLLC/Position1Y" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="set_double" arguments="0.7" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxOpacity" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboTextAlign" command="set_string" arguments="Center" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/comboFontFamily" command="set_string" arguments="Arial" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonBold" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/toolButtonItalic" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="31" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="32" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="33" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="34" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="set_int" arguments="50" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqTextDisplayPropertiesWidget/TextPropertyFrame/spinBoxSize" command="key" arguments="16777221" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Slice.xml b/Applications/ParaView/Testing/XML/Slice.xml new file mode 100644 index 0000000000..d4cb7104df --- /dev/null +++ b/Applications/ParaView/Testing/XML/Slice.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/iron protein.vtk" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Slice" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorMapScalars" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="7" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="9" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="11" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="12" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="13" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="15" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="16" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="20" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="21" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="22" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="23" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="25" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="26" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="27" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="29" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="30" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="31" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="32" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="34" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="37" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="39" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="40" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="41" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="42" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="47" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="49" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="52" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="54" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="55" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="57" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="66" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="65" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="61" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="60" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="59" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="57" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="56" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="55" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="54" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="52" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="51" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="50" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="49" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="48" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/SliceDirection" command="set_string" arguments="YZ Plane" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="47" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="44" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="42" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="41" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="39" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/SliceGroup/Slice/Slider" command="set_int" arguments="38" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveX" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/StreamTracerUpdates.xml b/Applications/ParaView/Testing/XML/StreamTracerUpdates.xml new file mode 100644 index 0000000000..cdd9b4fbbb --- /dev/null +++ b/Applications/ParaView/Testing/XML/StreamTracerUpdates.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/multicomb_2.vts" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Outline" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="StreamTracer" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/pqStreamTracerPanel/streamTracerGroup/MaximumPropagation" command="set_string" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/pqStreamTracerPanel/streamTracerGroup/IntegrationDirection" command="set_string" arguments="FORWARD" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/TemporalInterpolator.xml b/Applications/ParaView/Testing/XML/TemporalInterpolator.xml similarity index 81% rename from Applications/Client/Testing/XML/TemporalInterpolator.xml rename to Applications/ParaView/Testing/XML/TemporalInterpolator.xml index ccfcc11ced..f232aec362 100644 --- a/Applications/Client/Testing/XML/TemporalInterpolator.xml +++ b/Applications/ParaView/Testing/XML/TemporalInterpolator.xml @@ -1,19 +1,20 @@ <?xml version="1.0" ?> <pqevents> - <pqevent object="pqClientMainWindow/menubar/menuFile" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/singleSphereAnimation.pvd" /> <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="set_int" arguments="1" /> <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="set_int" arguments="2" /> <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="set_int" arguments="3" /> <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="set_int" arguments="4" /> <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTimeIndex" command="key" arguments="16777220" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TemporalCache" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TemporalInterpolator" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Animation View" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menu_View" /> + <pqevent object="pqClientMainWindow/menubar/menu_View/Panels" command="activate" arguments="Animation View" /> <pqevent object="pqClientMainWindow/animationViewDock/animationView/PlayMode" command="set_string" arguments="Real Time" /> <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTime" command="key" arguments="46" /> <pqevent object="pqClientMainWindow/currentTimeToolbar/CurrentTime" command="set_string" arguments="0.2" /> diff --git a/Applications/ParaView/Testing/XML/TemporalShiftScale.xml b/Applications/ParaView/Testing/XML/TemporalShiftScale.xml new file mode 100644 index 0000000000..14bb488c22 --- /dev/null +++ b/Applications/ParaView/Testing/XML/TemporalShiftScale.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/dualSphereAnimation.pvd" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TemporalShiftScale" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/PostShift" command="key" arguments="16777219" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/PostShift" command="set_string" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scale" command="key" arguments="16777217" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scale" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Scale" command="set_string" arguments=".5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton0" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/1QToolButton3" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Tessellate.xml b/Applications/ParaView/Testing/XML/Tessellate.xml new file mode 100644 index 0000000000..df10394dae --- /dev/null +++ b/Applications/ParaView/Testing/XML/Tessellate.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="TessellatorFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/OutputDimension/Slider" command="set_int" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/OutputDimension/Slider" command="set_int" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="4" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="7" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/MaximumNumberOfSubdivisions/Slider" command="set_int" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/Threshold.xml b/Applications/ParaView/Testing/XML/Threshold.xml new file mode 100644 index 0000000000..10d80395b1 --- /dev/null +++ b/Applications/ParaView/Testing/XML/Threshold.xml @@ -0,0 +1,141 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqLineWidget/xAxis" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqLineWidget/yAxis" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/1pqCollapsedGroup0/pqLineWidget/zAxis" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Common" command="activate" arguments="Threshold" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="11" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="14" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="16" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="21" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="24" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="29" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="32" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="37" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="42" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="45" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="48" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="51" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="54" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="56" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="57" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="59" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="61" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="62" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="64" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="67" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="70" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="73" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="75" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="78" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="81" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="83" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="86" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="88" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="89" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="93" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="96" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="97" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="99" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="11" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="13" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="16" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="19" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="22" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="24" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="27" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="30" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="34" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="38" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="42" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="43" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="45" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="48" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="50" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="97" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="96" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="94" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="93" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="91" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="48" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="45" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="43" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="42" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="40" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="38" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="35" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="34" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="32" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="30" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="29" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="27" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="26" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="24" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="22" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="21" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="19" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="18" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="16" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="14" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="13" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="11" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="10" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="6" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="3" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/Slider" command="set_int" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="89" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="88" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="86" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="85" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="83" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="81" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="80" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="78" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="77" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="75" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="73" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="72" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="70" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="69" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="67" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="65" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="64" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="62" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="61" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="59" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="57" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="56" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="54" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="53" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="50" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="48" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="45" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/Slider" command="set_int" arguments="43" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_0/LineEdit" command="set_string" arguments="0.08" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ThresholdBetween_1/LineEdit" command="set_string" arguments="0.44" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo.xml b/Applications/ParaView/Testing/XML/UndoRedo.xml new file mode 100644 index 0000000000..89f5dd6cb8 --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Cylinder" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_1" command="set_string" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Height" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/Center_0" command="set_string" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo1.xml b/Applications/ParaView/Testing/XML/UndoRedo1.xml new file mode 100644 index 0000000000..6fbe8379bc --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo1.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" ?> +<!-- +Performs following actions: +* Create sphere source. +* Accept. +* Create histogram filter. +* Accept. +* Split the histogram view. +* Create another histogram filter connected to the same sphere source. +* Accept. +* Close most recent histogram view. +* Close the remaining histogram view. + +On every action, we undo to start and redo to end. +Before test ends we undo a couple times to undo the closing of the 2 histogram views and make +the renderview active. That's the final state. +--> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractHistogram" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ExtractHistogram" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/MultiViewSplitter:1/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.562092,0.437393,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.562092,0.437393,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.562092,0.437393,1,0,0)" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,39,5,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,39,5,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent + object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/AnnotationGroup/ShowCubeAxes" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent + object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/AnnotationGroup/EditCubeAxes" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/xtab/CubeAxesXGridLines" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/xtab/CubeAxesXAxisMinorTickVisibility" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/xtab/CubeAxesXAxisTickVisibility" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/CubeAxesFlyMode" command="set_string" arguments="Static Edges" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/CubeAxesTickLocation" command="set_string" arguments="Both" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ytab/CubeAxesYGridLines" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ytab/CubeAxesYAxisMinorTickVisibility" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ytab/CubeAxesYAxisTickVisibility" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ztab/CubeAxesZAxisMinorTickVisibility" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ztab/CubeAxesZAxisTickVisibility" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/tabWidget/qt_tabwidget_stackedwidget/ztab/CubeAxesZGridLines" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/CubeAxesEditorDialog/Ok" command="activate" arguments="" /> + + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo2.xml b/Applications/ParaView/Testing/XML/UndoRedo2.xml new file mode 100644 index 0000000000..5bcf587f71 --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo2.xml @@ -0,0 +1,161 @@ +<?xml version="1.0" ?> +<!-- +This test is to test that creation/deletion of render views +is undoable. +At the same time it tests that the animation playing does not affect the undo stack. +--> + +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Surface" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="RTData" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="cellNormals" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="RTData" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="false" /> + <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitHorizontalButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/Form/ViewGroup/ViewData" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/1/MultiViewFrameMenu/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRFirstFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRPlay" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/SplitVerticalButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/StyleGroup/StyleRepresentation/comboBox" command="set_string" arguments="Wireframe" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/ColorGroup/ColorBy/Variables" command="set_string" arguments="RTData" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo3.xml b/Applications/ParaView/Testing/XML/UndoRedo3.xml new file mode 100644 index 0000000000..398036582e --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo3.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" ?> +<!-- +This test tests undo-redo for exodus reader and +cut/clip filters i.e. filters that need 3d widgets and have "helper" proxies. +--> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/tube.exo" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,43,5,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,43,5,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,51,3,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,51,3,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Clip" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,35,11,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,35,11,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalX" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalX" command="set_string" arguments=".5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="key" arguments="16777217" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="set_string" arguments=".5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalY" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalZ" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalZ" command="set_string" arguments=".5" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/normalZ" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,19,6,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,19,6,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="ObjectId" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo4.xml b/Applications/ParaView/Testing/XML/UndoRedo4.xml new file mode 100644 index 0000000000..aa764fd07d --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo4.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" ?> +<!-- +This test tests animation key frame undo/redo. +--> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Clip" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/ClipFunction/pqImplicitPlaneWidget/useZNormal" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/variableToolbar/1QToolButton0" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Animation Inspector" /> + <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Object Inspector" /> + <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Pipeline Browser" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/addKeyFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="01" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="010" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="2" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/SignalAdaptorKeyFrameValue/lineEdit" command="set_string" arguments="5" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.0691318,0.926244,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.28135,0.912521,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.28135,0.912521,1,0,0)" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/deleteKeyFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/deleteKeyFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Pipeline Browser" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/objectInspectorDock/0pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Delete" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0/0|0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/menubar/menuView" command="activate" arguments="Pipeline Browser" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/sourceName" command="set_string" arguments="Clip1" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/tracksGroup/propertyName" command="set_string" arguments="Clip Type - Offset" /> + <pqevent object="pqClientMainWindow/animationPanelDock/1pqAnimationPanel0/scrollArea/qt_scrollarea_viewport/AnimationPanel/keyFramePropertiesGroup/editorFrame/keyFrameIndex" command="set_int" arguments="1" /> + <pqevent object="pqClientMainWindow/VCRToolbar/actionVCRLastFrame" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> + <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> + <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> + <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> + <pqevent object="pqClientMainWindow/menubar/menuAnimation" command="activate" arguments="actionVCRPreviousFrame" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo5.xml b/Applications/ParaView/Testing/XML/UndoRedo5.xml new file mode 100644 index 0000000000..a2017cf4f4 --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo5.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" ?> +<!-- + Tests undo-redo for changing of inputs and deletion of sources. +--> +<pqevents> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menuSources" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SphereSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menuFilters" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ElevationFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_vcontainer/1QScrollBar0" command="mousePress" arguments="1,1,0,6,53" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseMove" arguments="1,0,0,6,241" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_vcontainer/1QScrollBar0" command="mouseRelease" arguments="1,0,0,6,241" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="key" arguments="46" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="set_string" arguments="0.8" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/1QScrollArea0/qt_scrollarea_viewport/1pqDisplayProxyEditorWidget0/pqDisplayProxyEditor/TransformationGroup/TranslateX" command="key" arguments="16777221" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menuSources" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="ConeSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,79,4,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,79,4,/0:0/0:0/0:0" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menu_Edit" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionChangeInput" /> + <pqevent object="pqClientMainWindow/ChangeInputDialog/Sources" command="mousePress" arguments="1,1,0,60,15,/0:0/1:0" /> + <pqevent object="pqClientMainWindow/ChangeInputDialog/Sources" command="mouseRelease" arguments="1,0,0,60,15,/0:0/1:0" /> + <pqevent object="pqClientMainWindow/ChangeInputDialog/OkButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo6.xml b/Applications/ParaView/Testing/XML/UndoRedo6.xml new file mode 100644 index 0000000000..2839ee2d69 --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo6.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" ?> +<!-- +This tests undo of creation of a custom filter as well as +undo for changes in the "View Settings" dialog. +--> +<pqevents> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menuSources" /> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="CubeSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.5,0.38422,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.451768,0.468268,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.451768,0.468268,1,0,0)" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menuTools" /> + <pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionToolsManageCustomFilters" /> + <pqevent object="pqClientMainWindow/pqCustomFilterManager/ImportButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pqCustomFilterManager/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Baseline/filters.xml" /> + <pqevent object="pqClientMainWindow/pqCustomFilterManager/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,34,6,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,34,6,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menuFilters" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="MyElevation" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar" command="activate" arguments="menu_Edit" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditViewSettings" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/General/parallelProjection" command="set_boolean" arguments="true" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionUndo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionRedo" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/UndoRedo7.xml b/Applications/ParaView/Testing/XML/UndoRedo7.xml new file mode 100644 index 0000000000..efdb5eb102 --- /dev/null +++ b/Applications/ParaView/Testing/XML/UndoRedo7.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="SuperquadricSource" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.573677,0.518033,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.505007,0.665574,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.505007,0.665574,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/BackButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/ForwardButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.397711,0.6,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.58083,0.613115,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.58083,0.613115,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/BackButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/BackButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/ForwardButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/ForwardButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditCameraUndo" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditCameraRedo" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditCameraUndo" /> +</pqevents> diff --git a/Applications/Client/Testing/XML/UnstructuredOutline.xml b/Applications/ParaView/Testing/XML/UnstructuredOutline.xml similarity index 61% rename from Applications/Client/Testing/XML/UnstructuredOutline.xml rename to Applications/ParaView/Testing/XML/UnstructuredOutline.xml index 6da465da5e..f42306bcd6 100644 --- a/Applications/Client/Testing/XML/UnstructuredOutline.xml +++ b/Applications/ParaView/Testing/XML/UnstructuredOutline.xml @@ -1,14 +1,14 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="RTAnalyticSource" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditSettings" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditSettings" /> <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mousePress" arguments="1,1,0,37,11,/1:0" /> <pqevent object="pqClientMainWindow/ApplicationSettings/PageNames" command="mouseRelease" arguments="1,0,0,37,11,/1:0" /> <pqevent object="pqClientMainWindow/ApplicationSettings/Stack/pqGlobalRenderViewOptions/stackedWidget/General/lodParameters/outlineThreshold" command="set_int" arguments="0" /> <pqevent object="pqClientMainWindow/ApplicationSettings/ApplyButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/ApplicationSettings/CloseButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="DataSetTriangleFilter" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> </pqevents> diff --git a/Applications/Client/Testing/XML/VariableSelector.xml b/Applications/ParaView/Testing/XML/VariableSelector.xml similarity index 64% rename from Applications/Client/Testing/XML/VariableSelector.xml rename to Applications/ParaView/Testing/XML/VariableSelector.xml index 085d32097a..6a2cafd451 100644 --- a/Applications/Client/Testing/XML/VariableSelector.xml +++ b/Applications/ParaView/Testing/XML/VariableSelector.xml @@ -1,10 +1,10 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Arrow" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser/PipelineView" command="currentChanged" arguments="/0/0|0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="currentChanged" arguments="/0/0|0" /> <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="Normals" /> <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="cellNormals" /> <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Components" command="set_string" arguments="X" /> diff --git a/Applications/Client/Testing/XML/ViewSettingsDialog.xml b/Applications/ParaView/Testing/XML/ViewSettingsDialog.xml similarity index 60% rename from Applications/Client/Testing/XML/ViewSettingsDialog.xml rename to Applications/ParaView/Testing/XML/ViewSettingsDialog.xml index 8d7cac484e..3aa40c40ad 100644 --- a/Applications/Client/Testing/XML/ViewSettingsDialog.xml +++ b/Applications/ParaView/Testing/XML/ViewSettingsDialog.xml @@ -1,10 +1,10 @@ <?xml version="1.0" ?> <pqevents> <pqevent object="pqClientMainWindow/menubar/menuSources" command="activate" arguments="Sphere" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="Clip" /> - <pqevent object="pqClientMainWindow/objectInspectorDock/1pqProxyTabWidget0/1QStackedWidget0/objectInspector/Accept" command="activate" arguments="" /> - <pqevent object="pqClientMainWindow/menubar/menuEdit" command="activate" arguments="actionEditViewSettings" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menu_Edit" command="activate" arguments="actionEditViewSettings" /> <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/General/parallelProjection" command="set_boolean" arguments="true" /> <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/ApplyButton" command="activate" arguments="" /> <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> diff --git a/Applications/ParaView/Testing/XML/XdmfGridAttributes.xml b/Applications/ParaView/Testing/XML/XdmfGridAttributes.xml new file mode 100644 index 0000000000..c384d05729 --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfGridAttributes.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/RodPlate/RodPlate.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/cameraToolbar/actionPositiveY" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="1.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="1" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="1.0,2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="0.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="0.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0/1pqCheckableHeaderView0" command="mousePress" arguments="1,1,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0/1pqCheckableHeaderView0" command="mouseRelease" arguments="1,0,0,0,0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_tabbar" command="set_tab" arguments="2" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCurrent" arguments="1.0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/ScrollArea/qt_scrollarea_viewport/PanelArea/Editor/GridStatus/qt_tabwidget_stackedwidget/1pqTreeView0" command="setCheckState" arguments="1.0,0" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/XdmfRead.xml b/Applications/ParaView/Testing/XML/XdmfRead.xml new file mode 100644 index 0000000000..5b919b0de0 --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfRead.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Test1.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/Alphabetical" command="activate" arguments="ShrinkFilter" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.456724,0.439909,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.640479,0.671202,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.640479,0.671202,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.508655,0.44898,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.496671,0.435374,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.496671,0.435374,1,0,0)" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/XdmfReadImageData.xml b/Applications/ParaView/Testing/XML/XdmfReadImageData.xml new file mode 100644 index 0000000000..bf03637c17 --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfReadImageData.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.ImageData.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="Solid Color" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Contour" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> + + <!-- turn on light kit --> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/MultiViewFrameMenu/OptionsButton" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mousePress" arguments="1,1,0,15,10" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/DefaultLightSwitch" command="mouseRelease" arguments="1,0,0,15,10" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mousePress" arguments="1,1,0,13,8" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/Stack/pqRenderViewOptions/stackedWidget/Lights/UseLight" command="mouseRelease" arguments="1,0,0,13,8" /> + <pqevent object="pqClientMainWindow/ActiveRenderViewOptions/CloseButton" command="activate" arguments="" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/XdmfReadImageDataCollection.xml b/Applications/ParaView/Testing/XML/XdmfReadImageDataCollection.xml new file mode 100644 index 0000000000..61ff7f0948 --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfReadImageDataCollection.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.ImageData.Collection.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Contour" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mousePress" arguments="1,1,0,63,4,/0:0/0:0" /> + <pqevent object="pqClientMainWindow/pipelineBrowserDock/pipelineBrowser" command="mouseRelease" arguments="1,0,0,63,4,/0:0/0:0" /> <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="set_string" arguments="vtkCompositeIndex" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/XdmfReadRectilinearGrid.xml b/Applications/ParaView/Testing/XML/XdmfReadRectilinearGrid.xml new file mode 100644 index 0000000000..8985fb10f4 --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfReadRectilinearGrid.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.RectilinearGrid.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Contour" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/XdmfReadRectilinearGridCollection.xml b/Applications/ParaView/Testing/XML/XdmfReadRectilinearGridCollection.xml new file mode 100644 index 0000000000..a18336b30d --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfReadRectilinearGridCollection.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.RectilinearGrid.Collection.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Contour" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/XdmfReadStructuredGrid.xml b/Applications/ParaView/Testing/XML/XdmfReadStructuredGrid.xml new file mode 100644 index 0000000000..df291a809c --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfReadStructuredGrid.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.StructuredGrid.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Contour" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> +</pqevents> diff --git a/Applications/ParaView/Testing/XML/XdmfReadStructuredGridCollection.xml b/Applications/ParaView/Testing/XML/XdmfReadStructuredGridCollection.xml new file mode 100644 index 0000000000..7bb8863b20 --- /dev/null +++ b/Applications/ParaView/Testing/XML/XdmfReadStructuredGridCollection.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" ?> +<pqevents> + <pqevent object="pqClientMainWindow/menubar/menu_File" command="activate" arguments="actionFileOpen" /> + <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Data/Iron Xdmf/Iron_Protein.StructuredGrid.Collection.xmf" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/menubar/menuFilters/pqProxyGroupMenuManager0/Contour" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/proxyTabDock/proxyTabWidget/qt_tabwidget_stackedwidget/objectInspector/Accept" command="activate" arguments="" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mousePress" arguments="(0.364847,0.410431,1,1,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseMove" arguments="(0.462051,0.482993,1,0,0)" /> + <pqevent object="pqClientMainWindow/centralwidget/MultiViewManager/SplitterFrame/MultiViewSplitter/0/Viewport" command="mouseRelease" arguments="(0.462051,0.482993,1,0,0)" /> +</pqevents> diff --git a/Applications/Client/paraqlogo.ico b/Applications/ParaView/WinIcon.ico similarity index 100% rename from Applications/Client/paraqlogo.ico rename to Applications/ParaView/WinIcon.ico diff --git a/Applications/StreamingParaView/CMakeLists.txt b/Applications/StreamingParaView/CMakeLists.txt index c5013d4ad3..85b5571f0a 100644 --- a/Applications/StreamingParaView/CMakeLists.txt +++ b/Applications/StreamingParaView/CMakeLists.txt @@ -36,17 +36,10 @@ SET(CUSTOM_GUI_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CustomResources/CustomFilters.xml ${CMAKE_CURRENT_SOURCE_DIR}/CustomResources/CustomSources.xml ) - -SET(QT_COMPONENTS_CUSTOM_GUI_RESOURCES_CONTENTS) -FOREACH(RESOURCE ${CUSTOM_GUI_RESOURCES}) - GET_FILENAME_COMPONENT(ALIAS ${RESOURCE} NAME) - FILE(RELATIVE_PATH RESOURCE ${CMAKE_CURRENT_BINARY_DIR} "${RESOURCE}") - FILE(TO_NATIVE_PATH "${RESOURCE}" RESOURCE) - SET(QT_COMPONENTS_CUSTOM_GUI_RESOURCES_CONTENTS - "${QT_COMPONENTS_CUSTOM_GUI_RESOURCES_CONTENTS} <file alias=\"${ALIAS}\">${RESOURCE}</file>\n") -ENDFOREACH(RESOURCE) -CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/pqExtraResources.qrc.in" - "${CMAKE_CURRENT_BINARY_DIR}/pqExtraResources.qrc" @ONLY) +GENERATE_QT_RESOURCE_FROM_FILES( + "${CMAKE_CURRENT_BINARY_DIR}/pqExtraResources.qrc" + "/CustomResources" + ${CUSTOM_GUI_RESOURCES}) SET(UI_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/pqExtraResources.qrc" diff --git a/Applications/StreamingParaView/pqCustomDisplayPolicy.cxx b/Applications/StreamingParaView/pqCustomDisplayPolicy.cxx index f86bbba253..5d91757f7a 100644 --- a/Applications/StreamingParaView/pqCustomDisplayPolicy.cxx +++ b/Applications/StreamingParaView/pqCustomDisplayPolicy.cxx @@ -41,8 +41,7 @@ QString pqCustomDisplayPolicy::getPreferredViewType(pqOutputPort* opPort, return view_type; } - vtkPVDataInformation* datainfo = update_pipeline? - opPort->getDataInformation(true) : opPort->getCachedDataInformation(); + vtkPVDataInformation* datainfo = opPort->getDataInformation(); QString className = datainfo? datainfo->GetDataClassName() : QString(); // * Check if we should create the 2D view. diff --git a/Applications/StreamingParaView/pqExtraResources.qrc.in b/Applications/StreamingParaView/pqExtraResources.qrc.in deleted file mode 100644 index 168fa3e072..0000000000 --- a/Applications/StreamingParaView/pqExtraResources.qrc.in +++ /dev/null @@ -1,5 +0,0 @@ -<RCC> -<qresource prefix="/CustomResources"> -@QT_COMPONENTS_CUSTOM_GUI_RESOURCES_CONTENTS@ -</qresource> -</RCC> diff --git a/CMake/ParaViewBranding.cmake b/CMake/ParaViewBranding.cmake new file mode 100644 index 0000000000..d5d0c2dc3a --- /dev/null +++ b/CMake/ParaViewBranding.cmake @@ -0,0 +1,261 @@ +############################################################################### +# This file defines the macros that ParaView-based clients can use of creating +# custom ParaView client builds with custom branding and configuration. +# +# build_paraview_client( +# # The name for this client. This is the name used for the executable created. +# paraview +# +# # This is the title bar text. If none is provided the name will be used. +# TITLE "Kitware ParaView" +# +# # This is the organization name. +# ORGANIZATION "Kitware Inc." +# +# # PNG Image to be used for the Splash screen. If none is provided, default +# # ParaView splash screen will be shown. +# SPLASH_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/Splash.png" +# +# # Provide version information for the client. +# VERSION_MAJOR ${PARAVIEW_VERSION_MAJOR} +# VERSION_MINOR ${PARAVIEW_VERSION_MINOR} +# VERSION_PATCH ${PARAVIEW_VERSION_PATCH} +# +# # Icon to be used for the Mac bundle. +# BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/Icon.icns" +# +# # Icon to be used for the Windows application. +# APPLICATION_ICON "${CMAKE_CURRENT_SOURCE_DIR}/Icon.ico" +# +# # Name of the class to use for the main window. If none is specified, +# # default QMainWindow will be used. +# PVMAIN_WINDOW QMainWindow-subclass +# PVMAIN_WINDOW_INCLUDE QMainWindow-subclass-header +# +# # Next specify the plugins that are needed to be built and loaded on startup +# # for this client to work. These must be specified in the order that they +# # should be loaded. The name is the name of the plugin specified in the +# # add_paraview_plugin call. +# # Currently, only client-based plugins are supported. i.e. no effort is made +# # to load the plugins on the server side when a new server connection is made. +# # That may be added in future, if deemed necessary. +# REQUIRED_PLUGINS PointSpritePlugin +# +# # Next specify the plugin that are not required, but if available, should be +# # loaded on startup. These must be specified in the order that they +# # should be loaded. The name is the name of the plugin specified in the +# # add_paraview_plugin call. +# # Currently, only client-based plugins are supported. i.e. no effort is made +# # to load the plugins on the server side when a new server connection is made. +# # That may be added in future, if deemed necessary. +# OPTIONAL_PLUGINS ClientGraphView ClientTreeView +# +# # Extra targets that this executable depends on. Useful only if you are +# # building extra libraries for your application. +# EXTRA_DEPENDENCIES blah1 blah2 +# +# # GUI Configuration XMLs that are used to configure the client eg. readers, +# # writers, sources menu, filters menu etc. +# GUI_CONFIGURATION_XMLS <list of xml files> +# +# # The Qt compressed help file (*.qch) which provides the documentation for the +# # application. *.qch files are typically generated from *.qhp files using +# # the qhelpgenerator executable. +# COMPRESSED_HELP_FILE MyApp.qch +# +# # Additional source files. +# SOURCES <list of source files> +# ) +# +############################################################################### +MACRO(PV_PARSE_ARGUMENTS prefix arg_names option_names) + SET(DEFAULT_ARGS) + FOREACH(arg_name ${arg_names}) + SET(${prefix}_${arg_name}) + ENDFOREACH(arg_name) + FOREACH(option ${option_names}) + SET(${prefix}_${option} FALSE) + ENDFOREACH(option) + + SET(current_arg_name DEFAULT_ARGS) + SET(current_arg_list) + FOREACH(arg ${ARGN}) + SET(larg_names ${arg_names}) + LIST(FIND larg_names "${arg}" is_arg_name) + IF (is_arg_name GREATER -1) + SET(${prefix}_${current_arg_name} ${current_arg_list}) + SET(current_arg_name ${arg}) + SET(current_arg_list) + ELSE (is_arg_name GREATER -1) + SET(loption_names ${option_names}) + LIST(FIND loption_names "${arg}" is_option) + IF (is_option GREATER -1) + SET(${prefix}_${arg} TRUE) + ELSE (is_option GREATER -1) + SET(current_arg_list ${current_arg_list} ${arg}) + ENDIF (is_option GREATER -1) + ENDIF (is_arg_name GREATER -1) + ENDFOREACH(arg) + SET(${prefix}_${current_arg_name} ${current_arg_list}) +ENDMACRO(PV_PARSE_ARGUMENTS) + +MACRO(build_paraview_client BPC_NAME) + PV_PARSE_ARGUMENTS(BPC + "TITLE;ORGANIZATION;SPLASH_IMAGE;VERSION_MAJOR;VERSION_MINOR;VERSION_PATCH;BUNDLE_ICON;APPLICATION_ICON;REQUIRED_PLUGINS;OPTIONAL_PLUGINS;PVMAIN_WINDOW;PVMAIN_WINDOW_INCLUDE;EXTRA_DEPENDENCIES;GUI_CONFIGURATION_XMLS;COMPRESSED_HELP_FILE;SOURCES" + "" + ${ARGN} + ) + + # Version numbers are required. Throw an error is not set correctly. + IF (NOT DEFINED BPC_VERSION_MAJOR OR NOT DEFINED BPC_VERSION_MINOR OR NOT DEFINED BPC_VERSION_PATCH) + MESSAGE(ERROR + "VERSION_MAJOR, VERSION_MINOR and VERSION_PATCH must be specified") + ENDIF (NOT DEFINED BPC_VERSION_MAJOR OR NOT DEFINED BPC_VERSION_MINOR OR NOT DEFINED BPC_VERSION_PATCH) + + # If no title is provided, make one up using the name. + IF (NOT BPC_TITLE) + SET (BPC_TITLE ${BPC_NAME}) + ENDIF (NOT BPC_TITLE) + SET (BPC_NAME ${BPC_NAME}) + + IF (NOT BPC_ORGANIZATION) + SET (BPC_ORGANIZATION "Humanity") + ENDIF (NOT BPC_ORGANIZATION) + + + SET (branding_source_dir "${ParaView_SOURCE_DIR}/CMake") + + # If APPLICATION_ICON is specified, use that for the windows executable. + IF (WIN32 AND BPC_APPLICATION_ICON) + FILE (WRITE "${CMAKE_CURRENT_BINARY_DIR}/Icon.rc" + "// Icon with lowest ID value placed first to ensure application icon\n" + "// remains consistent on all systems.\n" + "IDI_ICON1 ICON \"@BPC_APPLICATION_ICON@\"") + SET(exe_icon "${CMAKE_CURRENT_BINARY_DIR}/Icon.rc") + ENDIF (WIN32 AND BPC_APPLICATION_ICON) + + # If BPC_BUNDLE_ICON is set, setup the macosx bundle. + IF (APPLE) + IF (BPC_BUNDLE_ICON) + SET(apple_bundle_sources ${BPC_BUNDLE_ICON}) + SET_SOURCE_FILES_PROPERTIES( + ${BPC_BUNDLE_ICON} + PROPERTIES + MACOSX_PACKAGE_LOCATION Resources + ) + SET(MACOSX_BUNDLE_ICON_FILE ${BPC_BUNDLE_ICON}) + ENDIF (BPC_BUNDLE_ICON) + SET(MAKE_BUNDLE MACOSX_BUNDLE) + ENDIF (APPLE) + + IF(WIN32) + LINK_DIRECTORIES(${QT_LIBRARY_DIR}) + ENDIF(WIN32) + + # If splash image is not specified, use the standard ParaView splash image. + IF (NOT BPC_SPLASH_IMAGE) + SET (BPC_SPLASH_IMAGE "${branding_source_dir}/branded_splash.png") + ENDIF (NOT BPC_SPLASH_IMAGE) + CONFIGURE_FILE("${BPC_SPLASH_IMAGE}" + ${CMAKE_CURRENT_BINARY_DIR}/SplashImage.img COPYONLY) + SET (BPC_SPLASH_IMAGE ${CMAKE_CURRENT_BINARY_DIR}/SplashImage.img) + GET_FILENAME_COMPONENT(BPC_SPLASH_RESOURCE ${BPC_SPLASH_IMAGE} NAME) + SET (BPC_SPLASH_RESOURCE ":/${BPC_NAME}/${BPC_SPLASH_RESOURCE}") + + IF (NOT BPC_PVMAIN_WINDOW) + SET (BPC_PVMAIN_WINDOW "QMainWindow") + ENDIF (NOT BPC_PVMAIN_WINDOW) + + IF (NOT BPC_PVMAIN_WINDOW_INCLUDE) + SET (BPC_PVMAIN_WINDOW_INCLUDE "QMainWindow") + ENDIF (NOT BPC_PVMAIN_WINDOW_INCLUDE) + + SET (BPC_HAS_GUI_CONFIGURATION_XMLS 0) + IF (BPC_GUI_CONFIGURATION_XMLS) + SET (BPC_HAS_GUI_CONFIGURATION_XMLS 1) + ENDIF (BPC_GUI_CONFIGURATION_XMLS) + + # Generate a resource file out of the splash image. + GENERATE_QT_RESOURCE_FROM_FILES( + "${CMAKE_CURRENT_BINARY_DIR}/${BPC_NAME}_generated.qrc" + "/${BPC_NAME}" ${BPC_SPLASH_IMAGE}) + + GENERATE_QT_RESOURCE_FROM_FILES( + "${CMAKE_CURRENT_BINARY_DIR}/${BPC_NAME}_configuration.qrc" + "/${BPC_NAME}/Configuration" + "${BPC_GUI_CONFIGURATION_XMLS}") + + SET (ui_resources + "${CMAKE_CURRENT_BINARY_DIR}/${BPC_NAME}_generated.qrc" + "${CMAKE_CURRENT_BINARY_DIR}/${BPC_NAME}_configuration.qrc" + ) + + IF (BPC_COMPRESSED_HELP_FILE) + # If a help collection file is specified, create a resource from it so that + # when the ParaView help system can locate it at runtime and show the + # appropriate help when the user asks for it. The + set (outfile "${CMAKE_CURRENT_BINARY_DIR}/${BPC_NAME}_help.qrc") + GENERATE_QT_RESOURCE_FROM_FILES("${outfile}" + "/${BPC_NAME}/Documentation" + "${BPC_COMPRESSED_HELP_FILE};") + SET (ui_resources ${ui_resources} "${outfile}") + ENDIF (BPC_COMPRESSED_HELP_FILE) + + QT4_ADD_RESOURCES(rcs_sources + ${ui_resources} + ) + + SOURCE_GROUP("Resources" FILES + ${ui_resources} + ${exe_icon} + ) + + SOURCE_GROUP("Generated" FILES + ${rcs_sources} + ) + + CONFIGURE_FILE(${branding_source_dir}/branded_paraview_main.cxx.in + ${CMAKE_CURRENT_BINARY_DIR}/${BPC_NAME}_main.cxx @ONLY) + + IF (NOT Q_WS_MAC) + SET(pv_exe_name ${BPC_NAME}${PV_EXE_SUFFIX}) + ELSE (NOT Q_WS_MAC) + SET(pv_exe_name ${BPC_NAME}) + ENDIF (NOT Q_WS_MAC) + + INCLUDE_DIRECTORIES( + ${PARAVIEW_GUI_INCLUDE_DIRS} + ) + + # needed to set up shared forwarding correctly. + SET (PV_EXE_LIST ${BPC_NAME}) + ADD_EXECUTABLE(${pv_exe_name} WIN32 ${MAKE_BUNDLE} + ${BPC_NAME}_main.cxx + ${rcs_sources} + ${exe_icon} + ${apple_bundle_sources} + ${BPC_SOURCES} + ) + TARGET_LINK_LIBRARIES(${pv_exe_name} + pqApplicationComponents + ${QT_QTMAIN_LIBRARY} + ${BPC_EXTRA_DEPENDENCIES} + ) + + # Add shared link forwarding executables if necessary. + IF(PV_NEED_SHARED_FORWARD) + FOREACH(pvexe ${PV_EXE_LIST}) + SET(PV_FORWARD_EXE ${pvexe}${PV_EXE_SUFFIX}) + CONFIGURE_FILE( + ${ParaView_SOURCE_DIR}/Servers/Executables/pv-forward.c.in + ${CMAKE_CURRENT_BINARY_DIR}/${pvexe}-forward.c + @ONLY IMMEDIATE) + ADD_EXECUTABLE(${pvexe} ${CMAKE_CURRENT_BINARY_DIR}/${pvexe}-forward.c) + ADD_DEPENDENCIES(${pvexe} ${pvexe}${PV_EXE_SUFFIX}) + # INSTALL(TARGETS ${pvexe} DESTINATION ${PV_INSTALL_BIN_DIR} COMPONENT Runtime) + ENDFOREACH(pvexe) + ENDIF(PV_NEED_SHARED_FORWARD) + + # TODO: Fix install rules. + # TODO: Fix assistant location logic. +ENDMACRO(build_paraview_client) diff --git a/CMake/ParaViewMacros.cmake b/CMake/ParaViewMacros.cmake new file mode 100644 index 0000000000..91955cc5a9 --- /dev/null +++ b/CMake/ParaViewMacros.cmake @@ -0,0 +1,63 @@ +# File defining miscellaneous macros + +#------------------------------------------------------------------------------ +# GENERATE_QT_RESOURCE_FROM_FILES can be used to generate a Qt resource file +# from a given set of files. +# ARGUMENTS: +# resource_file: IN : full pathname of the qrc file to generate. +# resource_prefix: IN : the name used in the "prefix" attribute for the +# generated qrc file. +# file_list: IN : list of files to be added into the resource file. +#------------------------------------------------------------------------------ +MACRO(GENERATE_QT_RESOURCE_FROM_FILES resource_file resource_prefix file_list) + SET (pq_resource_file_contents "<RCC>\n <qresource prefix=\"${resource_prefix}\">\n") + GET_FILENAME_COMPONENT(current_directory ${resource_file} PATH) + FOREACH (resource ${file_list}) + GET_FILENAME_COMPONENT(alias ${resource} NAME) + GET_FILENAME_COMPONENT(resource ${resource} ABSOLUTE) + FILE(RELATIVE_PATH resource "${current_directory}" "${resource}") + FILE(TO_NATIVE_PATH "${resource}" resource) + SET (pq_resource_file_contents + "${pq_resource_file_contents} <file alias=\"${alias}\">${resource}</file>\n") + ENDFOREACH (resource) + SET (pq_resource_file_contents + "${pq_resource_file_contents} </qresource>\n</RCC>\n") + + # Generate the resource file. + FILE (WRITE "${resource_file}" "${pq_resource_file_contents}") +ENDMACRO(GENERATE_QT_RESOURCE_FROM_FILES) + +#---------------------------------------------------------------------------- +# PV_PARSE_ARGUMENTS is a macro useful for writing macros that take a key-word +# style arguments. +#---------------------------------------------------------------------------- +MACRO(PV_PARSE_ARGUMENTS prefix arg_names option_names) + SET(DEFAULT_ARGS) + FOREACH(arg_name ${arg_names}) + SET(${prefix}_${arg_name}) + ENDFOREACH(arg_name) + FOREACH(option ${option_names}) + SET(${prefix}_${option} FALSE) + ENDFOREACH(option) + + SET(current_arg_name DEFAULT_ARGS) + SET(current_arg_list) + FOREACH(arg ${ARGN}) + SET(larg_names ${arg_names}) + LIST(FIND larg_names "${arg}" is_arg_name) + IF (is_arg_name GREATER -1) + SET(${prefix}_${current_arg_name} ${current_arg_list}) + SET(current_arg_name ${arg}) + SET(current_arg_list) + ELSE (is_arg_name GREATER -1) + SET(loption_names ${option_names}) + LIST(FIND loption_names "${arg}" is_option) + IF (is_option GREATER -1) + SET(${prefix}_${arg} TRUE) + ELSE (is_option GREATER -1) + SET(current_arg_list ${current_arg_list} ${arg}) + ENDIF (is_option GREATER -1) + ENDIF (is_arg_name GREATER -1) + ENDFOREACH(arg) + SET(${prefix}_${current_arg_name} ${current_arg_list}) +ENDMACRO(PV_PARSE_ARGUMENTS) diff --git a/CMake/ParaViewPlugins.cmake b/CMake/ParaViewPlugins.cmake index ca880965d8..af914c8feb 100644 --- a/CMake/ParaViewPlugins.cmake +++ b/CMake/ParaViewPlugins.cmake @@ -949,17 +949,13 @@ MACRO(ADD_PARAVIEW_PLUGIN NAME VERSION) IF(PARAVIEW_BUILD_QT_GUI) IF(ARG_GUI_RESOURCE_FILES) - SET(QT_COMPONENTS_GUI_RESOURCES_CONTENTS) - FOREACH(RESOURCE ${ARG_GUI_RESOURCE_FILES}) - GET_FILENAME_COMPONENT(ALIAS ${RESOURCE} NAME) - GET_FILENAME_COMPONENT(RESOURCE ${RESOURCE} ABSOLUTE) - FILE(RELATIVE_PATH RESOURCE ${CMAKE_CURRENT_BINARY_DIR} "${RESOURCE}") - FILE(TO_NATIVE_PATH "${RESOURCE}" RESOURCE) - SET(QT_COMPONENTS_GUI_RESOURCES_CONTENTS - "${QT_COMPONENTS_GUI_RESOURCES_CONTENTS} <file alias=\"${ALIAS}\">${RESOURCE}</file>\n") - ENDFOREACH(RESOURCE) - CONFIGURE_FILE("${ParaView_SOURCE_DIR}/Qt/Components/pqExtraResources.qrc.in" - "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.qrc" @ONLY) + # The generated qrc file has resource prefix "/name/ParaViewResources" + # which helps is avoiding conflicts with resources from different + # plugins + GENERATE_QT_RESOURCE_FROM_FILES( + "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.qrc" + "/${NAME}/ParaViewResources" + "${ARG_GUI_RESOURCE_FILES}") SET(ARG_GUI_RESOURCES ${ARG_GUI_RESOURCES} "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.qrc") ENDIF(ARG_GUI_RESOURCE_FILES) diff --git a/CMake/branded_paraview_main.cxx.in b/CMake/branded_paraview_main.cxx.in new file mode 100644 index 0000000000..0ba5c85cd6 --- /dev/null +++ b/CMake/branded_paraview_main.cxx.in @@ -0,0 +1,136 @@ +// ***************** DO NOT EDIT *********************************** +// This is a generated file. +// It will be replaced next time you rebuild. +/*========================================================================= + + Program: ParaView + Module: branded_paraview_main.cxx.in + + Copyright (c) 2005-2008 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 <QApplication> +#include <QBitmap> +#include <QDir> +#include <QSplashScreen> +#include <QtDebug> + +#include "@BPC_PVMAIN_WINDOW_INCLUDE@" +#include "pqPVApplicationCore.h" +#include "pqViewManager.h" +#include "pqBrandPluginsLoader.h" +#include "pqOptions.h" + +#ifdef Q_WS_X11 +#include <QPlastiqueStyle> +#endif + +int main(int argc, char* argv[]) +{ +#ifdef Q_WS_X11 + // Using motif style gives us test failures (and its ugly). + // Using cleanlooks style gives us errors when using valgrind (Trolltech's bug #179200) + // let's just use plastique for now + QApplication::setStyle(new QPlastiqueStyle); +#endif + + QApplication::setApplicationName("@BPC_NAME@"); + // Only in Qt > 4.4 + QApplication::setApplicationVersion("@BPC_VERSION_MAJOR@.@BPC_VERSION_MINOR@.@BPC_VERSION_PATCH@"); + QApplication::setOrganizationName("@BPC_ORGANIZATION@"); + + QApplication qtapp(argc, argv); + pqPVApplicationCore pvapp(argc, argv); + if (pvapp.getOptions()->GetHelpSelected() || + pvapp.getOptions()->GetUnknownArgument() || + pvapp.getOptions()->GetErrorMessage() || + pvapp.getOptions()->GetTellVersion()) + { + return 1; + } + +#ifndef PARAVIEW_BUILD_SHARED_LIBS + Q_INIT_RESOURCE(@BPC_NAME@_generated); + Q_INIT_RESOURCE(@BPC_NAME@_configuration); + Q_INIT_RESOURCE(@BPC_NAME@_help); +#endif + + // Create and show the splash screen as the main window is being created. + QPixmap pixmap("@BPC_SPLASH_RESOURCE@"); + QSplashScreen splash(pixmap); + splash.setMask(pixmap.createMaskFromColor(QColor(Qt::transparent))); + splash.show(); + + // Not sure why this is needed. Andy added this ages ago with comment saying + // needed for Mac apps. Need to check that it's indeed still required. + QDir dir(QApplication::applicationDirPath()); + dir.cdUp(); + dir.cd("Plugins"); + QApplication::addLibraryPath(dir.absolutePath()); + + + // Create main window. + @BPC_PVMAIN_WINDOW@ mainWindow; + + // Load required application plugins. + QString plugin_string = "@BPC_REQUIRED_PLUGINS@"; + QStringList plugin_list = plugin_string.split(';',QString::SkipEmptyParts); + pqBrandPluginsLoader loader; + if (loader.loadPlugins(plugin_list) == false) + { + qCritical() << "Failed to load required plugins for this application"; + return 1; + } + + // Load optional plugins. + plugin_string = "@BPC_OPTIONAL_PLUGINS@"; + plugin_list = plugin_string.split(';',QString::SkipEmptyParts); + loader.loadPlugins(plugin_list, true); //quietly skip not-found plugins. + + +#if @BPC_HAS_GUI_CONFIGURATION_XMLS@ + // Load configuration xmls after all components have been instantiated. + // This configuration part is something that needs to be cleaned up, I haven't + // given this too much thought. + QDir dir2(":/@BPC_NAME@/Configuration"); + QStringList files = dir2.entryList(QDir::Files); + foreach (QString file, files) + { + pvapp.loadConfiguration(QString(":/@BPC_NAME@/Configuration/") + file); + } +#endif + mainWindow.setWindowTitle("@BPC_TITLE@"); + + // give GUI components time to update before the mainwindow is shown + qtapp.processEvents(); + mainWindow.show(); + + qtapp.processEvents(); + splash.finish(&mainWindow); + return qtapp.exec(); +} +// ***************** DO NOT EDIT *********************************** diff --git a/CMake/branded_splash.png b/CMake/branded_splash.png new file mode 100644 index 0000000000000000000000000000000000000000..fb129d8d9d18408a9a471fffffd79c35f5474fb3 GIT binary patch literal 113654 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�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�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 Dy@Ufy literal 0 HcmV?d00001 diff --git a/CMakeLists.txt b/CMakeLists.txt index a56410bfdb..e5d14792fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,13 +251,15 @@ SET(dynamicHeaders ######################################################################### # Include the file that most of the environment setup (except GUI) # It also adds the VTK directories +SET(PARAVIEW_MACROS_CMAKE_FILE "${ParaView_SOURCE_DIR}/CMake/ParaViewMacros.cmake") SET(PARAVIEW_PLUGINS_CMAKE_FILE "${ParaView_SOURCE_DIR}/CMake/ParaViewPlugins.cmake") +SET(PARAVIEW_BRANDING_CMAKE_FILE "${ParaView_SOURCE_DIR}/CMake/ParaViewBranding.cmake") SET(VTK_MAKE_INSTANTIATOR "${ParaView_SOURCE_DIR}/VTK/CMake") SET(VTKCS_SOURCE_DIR "${ParaView_SOURCE_DIR}/Utilities/VTKClientServer") SET(VTKCS_CONFIG_DIR "${ParaView_SOURCE_DIR}/Utilities/VTKClientServer/CMake") +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewMacros.cmake) INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewCommon.cmake) - ######################################################################### IF(BUILD_DOCUMENTATION) ADD_SUBDIRECTORY(Utilities/Doxygen) @@ -303,6 +305,8 @@ SET(PARAVIEW_GUI_INCLUDE_DIRS ${ParaView_SOURCE_DIR}/VTK/GUISupport/Qt ${ParaView_BINARY_DIR}/Qt/Core ${ParaView_SOURCE_DIR}/Qt/Components ${ParaView_BINARY_DIR}/Qt/Components + ${ParaView_SOURCE_DIR}/Qt/ApplicationComponents + ${ParaView_BINARY_DIR}/Qt/ApplicationComponents ${ParaView_SOURCE_DIR}/Qt/Testing ${ParaView_BINARY_DIR}/Qt/Testing ) IF (PARAVIEW_ENABLE_PYTHON) @@ -312,13 +316,23 @@ IF (PARAVIEW_ENABLE_PYTHON) ENDIF(PARAVIEW_ENABLE_PYTHON) SET(PARAVIEW_KWSYS_INCLUDE_DIRS ${PARAVIEW_INCLUDE_DIRS}) -GET_TARGET_PROPERTY(PARAVIEW_GUI_CLIENT_EXECUTABLE paraview${PV_EXE_SUFFIX} LOCATION) -GET_TARGET_PROPERTY(PARAVIEW_BATCH_EXECUTABLE pvbatch${PV_EXE_SUFFIX} LOCATION) -GET_TARGET_PROPERTY(PARAVIEW_PROCESS_XML_EXECUTABLE kwProcessXML LOCATION) SET(PARAVIEW_SERVER_MANAGER_RESOURCES_DIRECTORY "${ParaView_SOURCE_DIR}/Servers/ServerManager/Resources") - +# Few more variable needed in ParaViewConfig.cmake +# We don't worry about the debug/release configuration directories on windows +# here since when using these variables in tests, ctest handles it as well as +# smTestDriver handles it. +SET(PARAVIEW_BATCH_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/pvbatch${PV_EXE_SUFFIX} ) +SET(PARAVIEW_PYTHON_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/pvpython${PV_EXE_SUFFIX} ) +SET(PARAVIEW_SERVER_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/pvserver${PV_EXE_SUFFIX} ) +SET(PARAVIEW_DATA_SERVER_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/pvdataserver${PV_EXE_SUFFIX} ) +SET(PARAVIEW_RENDER_SERVER_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/pvrenderserver${PV_EXE_SUFFIX} ) +SET(PARAVIEW_SMTESTDRIVER_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/smTestDriver${PV_EXE_SUFFIX} ) + +# Since this is used in custom commands etc. we use LOCATION so that the +# release/debug configuration gets considered. +GET_TARGET_PROPERTY(PARAVIEW_PROCESS_XML_EXECUTABLE kwProcessXML LOCATION) ######################################################################### IF(BUILD_SHARED_LIBS) @@ -350,6 +364,7 @@ ENDFOREACH(PLUGIN) SET(PARAVIEW_LIBRARY_DEPENDS_FILE "${ParaView_BINARY_DIR}/ParaViewLibraryDepends.cmake") EXPORT_LIBRARY_DEPENDENCIES(${PARAVIEW_LIBRARY_DEPENDS_FILE}) + # Perform build tree configuration. Install configuration is # handled below. CONFIGURE_FILE( @@ -380,8 +395,7 @@ IF (NOT PV_INSTALL_NO_DEVELOPMENT) ${ParaView_SOURCE_DIR}/Qt/Components/pqDockWindowImplementation.h.in ${ParaView_SOURCE_DIR}/Qt/Components/pqDockWindowImplementation.cxx.in ${ParaView_SOURCE_DIR}/Qt/Components/pqDisplayPanelDecoratorImplementation.h.in - ${ParaView_SOURCE_DIR}/Qt/Components/pqDisplayPanelDecoratorImplementation.cxx.in - ${ParaView_SOURCE_DIR}/Qt/Components/pqExtraResources.qrc.in) + ${ParaView_SOURCE_DIR}/Qt/Components/pqDisplayPanelDecoratorImplementation.cxx.in) INSTALL( FILES ${pluginQtComponentConfig} DESTINATION ${PV_INSTALL_INCLUDE_DIR}/Qt/Components diff --git a/Documentation/CMakeLists.txt b/Documentation/CMakeLists.txt index 8b13789179..a7b29a43af 100644 --- a/Documentation/CMakeLists.txt +++ b/Documentation/CMakeLists.txt @@ -1 +1,42 @@ +# Copy all online help files from current directory over to the binary directory. +# These do not include any server manager documentation htmls. +file(GLOB PV_DOCUMENTATION_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/[^.]*.*) +foreach (file ${PV_DOCUMENTATION_FILES}) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/${file}" + "${CMAKE_CURRENT_BINARY_DIR}/${file}" + COPYONLY) +endforeach (file) + + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/paraview.qhp + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/paraview.qhp.in + ${CMAKE_CURRENT_SOURCE_DIR}/GenerateQHP.cmake + COMMAND ${CMAKE_COMMAND} + ARGS + -D DOCUMENTATION_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR} + -D INPUT:PATH=${CMAKE_CURRENT_SOURCE_DIR}/paraview.qhp.in + -D OUTPUT:PATH=${CMAKE_CURRENT_BINARY_DIR}/paraview.qhp + -P ${CMAKE_CURRENT_SOURCE_DIR}/GenerateQHP.cmake + COMMENT "Generating paraview.qhp" +) + +FIND_PROGRAM(QT_HELP_GENERATOR + qhelpgenerator + PATHS "${QT_BINARY_DIR}" + DOC "qhelpgenerator used to compile Qt help project files") + +ADD_CUSTOM_TARGET(ParaViewOnlineHelp + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/paraview.qhp + COMMAND ${QT_HELP_GENERATOR} + ARGS ${CMAKE_CURRENT_BINARY_DIR}/paraview.qhp + -o ${CMAKE_CURRENT_BINARY_DIR}/paraview.qch + COMMENT "Compiling Qt help project paraview.qhp" +) + +ADD_DEPENDENCIES(ParaViewOnlineHelp + HTMLDocumentation + ) diff --git a/Documentation/GenerateQHP.cmake b/Documentation/GenerateQHP.cmake new file mode 100644 index 0000000000..55dad06df9 --- /dev/null +++ b/Documentation/GenerateQHP.cmake @@ -0,0 +1,12 @@ +# Script used to generate paraview.qhp file. + +file(GLOB files RELATIVE "${DOCUMENTATION_DIR}" "${DOCUMENTATION_DIR}/*.*") + +SET (DOCUMENTATION_FILES) + +foreach (file ${files}) + set (DOCUMENTATION_FILES + "${DOCUMENTATION_FILES}\n <file>${file}</file>") +endforeach (file) + +configure_file(${INPUT} ${OUTPUT}) diff --git a/Documentation/LookmarkBrowser.png b/Documentation/LookmarkBrowser.png deleted file mode 100644 index f5ea3641de4b07de8c5f8d095b33f66c484ea9aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122145 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 SJvpNneeL3fkA3x;+y4*g&6aWi diff --git a/Documentation/LookmarkButton.png b/Documentation/LookmarkButton.png deleted file mode 100644 index e84fd59438513cffd13b20f9089c916041d5ee15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092 zcmZ9Le{33M7{~9fM=4OC$B#n!(RTFKjE?Is3Z1PMUAnb3W^vtOqETbin8p2LbTeju z7@dp5|1{a+f5t>JXIv^KCZ%;-!tAt`Rc2uY25ho$H%b}I(h3LMoe!gn(<kry-1}a> zpZ9s5H}CVwvj-;RQiBvh5c$;P_%wXAFk6~1@b7xRdK*D-+0^(`hu^!2BDhdNndJ2| zKSsX05{uD)fuu)MbhY0XHwduaDB~9*>J7F5*8j6sLV9r2^5Khv=!vuEW9jnI=}}j| z1w<d6daI~gS5YzvE>F$ocA9#N#jRrT?_6&E__5Ojp{XCV`sdmQU(9#w#SLkB-^tgX z26%36#`DA1nGAztxRz8)aRtI+LOwt77`dynRfJ=ac+zIG*LiJ=w3TRfpYvgm_E=wM zJia<NKSPK&-#jz`Mae`;nMk41K{Sl)Fp-_+vEjjB=o-&+^}%u6aJLTF+O=>T@4Mpd zG7)rki)`1i`HEPO0<Y8S=}i9Yx%p6xR;x6GLgx4X%-4)7v!!ym1Z<6mJrp@HVudYz zuVm0FH&d)sB-f~P5=ArF*-lz42qt!o?D1a%9%6GmSLLeJfB81ODU`@kJI($Z%$UQP zj;4W^G%EUso$(|ikt%?<_4MAl70u-`wGsp<<ROnBg55q6j5Cft>r&{pv#*ESEYVR0 zju;%;Q(!B;#eje{N@PmMpksOY7tlW(5Av^8D;kYXK*jk&S<)m4#+ZZqU5ghNuxi5@ zw;Pi5%zFLTgDBQSQTFBEf30lWBk|$9fqrK&cE>r;8;aebdaT_$I=mhaTPh9gwh=9= zZ!UZr42LOd7)8-!GWMVN!UO9EJ`$sLQ^9Bgs(s<mbT)n0&}Nw2_sshzP8~gR+-M>Z zR76ojfxvHd1X9Cc!UmjDN$B-vdM&3S)JuP?I_%EZUV4>IXX3Y$MYc>cbZ&Vum&?LK zR4SDM&kG2@%~vZGp>`!muWiV8b;0R)+<SR`DX>D{WlE)@!O$*|$Vk#^G;}x}WAQ{d z91fJrEKoHbIw2TOb?KXVfj1kCb3d&IZ>$(iU9Pc7l}ZZ(M2{N0G&P|vZWUt8ePGcy zPJfxo6rO)#huuPe&bM$Wnur{G=i_?Y&`c73#^Yh|iA2q}=?zbg?oAhv&u4F1%qldy z7WvGxa{h9(-oFYlcX-!5MPoHpXax28mWbsrXygsH?zejxB0uNqb|2aQY4~d7d))mp PXpyOX2gYaizH;&(CJNU$ diff --git a/Documentation/LookmarkInspector.png b/Documentation/LookmarkInspector.png deleted file mode 100644 index 36b8df89c6ec8e81676cf941407a9d6a11d4660c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421171 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 N=brt&KY!0v{~ruxlEDA~ diff --git a/Documentation/Lookmarks.html b/Documentation/Lookmarks.html deleted file mode 100644 index 00f6cc96d7..0000000000 --- a/Documentation/Lookmarks.html +++ /dev/null @@ -1,117 +0,0 @@ -<html> -<head> - <title>Lookmarks</title> - <link rel="stylesheet" type="text/css" href="ParaViewDoc.css"/> -</head> - -<body> -<div class="ProxyDocumentation"> - <div class="ProxyHeading"> - Lookmarks - </div> - <div class="ProxyLongHelp"> -The purpose of lookmarks is to save and restore particular views of one or -more datasets. - </div> -</div> - -<a name="CreateLookmark"/> -<h2>Creating a Lookmark</h2> -<p align="center"> -<img src="CreateLookmarkDialog.png"/> -</p> -<p> -A lookmark may be created in one of two ways. Selecting "Create Lookmark" -from the Tools menu will create a lookmark of the active view (highlighted in -red), while pressing the "lookmark button" in the upper left corner of a -render view will create a lookmark of that view. In either case, the user -must enter a (unique) name for the lookmark in the dialog box that appears -and can (optionally) add a text description that will be stored with the -lookmark. Clicking the Create button will store a copy of the -lookmark. Lookmarks created in one ParaView session are available in -subsequent ParaView sessions unless they are deleted. (Accessing stored -lookmarks and deleting existing lookmarks are discussed later on this page.) - -<a name="LookmarkToolbar"/> -<h2>Lookmark Toolbar</h2> -<p> -One way to access lookmarks in the user interface (UI) is through the -lookmark toolbar. It is located on the right side of the ParaView -application window by default, and it contains buttons when lookmarks have been -created. It contains an icon for each lookmark. Hovering your mouse over an -icon in the toolbar will display the lookmark's name in a help balloon, while -right-clicking an icon will give the user the option to delete that lookmark, -edit its properties (by displaying the Lookmark Inspector), create a new -lookmark (by displaying the "Create Lookmark" dialog), or display the -Lookmark Browser. Left-clicking on an icon in the lookmark toolbar will apply -that lookmark in the selected view. - -<a name="LookmarkBrowser"/> -<h2>Lookmark Browser</h2> -<p align="center"> -<img src="LookmarkBrowser.png"/> -</p> -<p> -The Lookmark Browser is available from the right-click menu in the lookmark -toolbar and from the View menu. It contains a list of all lookmarks available -in the current ParaView session, and it is useful for a couple of -reasons. Using the buttons at the top of the browser, you may export (to a -file) or delete multiple lookmarks at once as well as import lookmarks from a -file. Importing lookmarks will concatenate them to the end of the lookmark -browser. Double-clicking an item in the browser will apply that lookmark to -the selected view. Finally, if the Lookmark Inspector (see next section) is -open at the same time as the Lookmark Browser, the inspector will display the -properties of the currently selected lookmark in the browser. - -<a name="LookmarkInspector"/> -<h2>Lookmark Inspector</h2> -<p align="center"> -<img src="LookmarkInspector.png"/> -</p> - -<p> -The Lookmark Inspector (View menu, Lookmark Inspector) displays the -properties of a lookmark. The lookmark that it displays is changed by either -selecting a new item in the Lookmark Browser or by choosing "Edit" in the -right-click menu of an item in the Lookmark Toolbar. From the lookmark -inspector, the user can apply the lookmark in the active view or delete it -entirely by using the buttons at the top. The Pipeline View portion of the -lookmark inspector displays the pipeline that has been saved in the lookmark -and that will be generated when the lookmark is applied. The name and -description of a lookmark can be edited, but the "Save" button must be -pressed for these changes to take effect. The user also has control over two -properties of how lookmarks behave when they are applied. When a lookmark is -created, the time value and camera properties in the selected view are stored -in the lookmark. When the lookmark is applied, these saved values (time value -and/or camera properties) can be restored. This behavior is controlled by two -checkboxes at the bottom of the Lookmark Inspector. By default, neither of -these values is applied with the lookmark. If the user marks or unmarks one -of these checkboxes, then the Save button must be pressed for the changes to -take effect next time the lookmark is applied. - -<h2>Applying a Lookmark</h2> -<p> -Thus far we have skirted the issue of what happens when a lookmark is -applied. A lookmark can be thought of as a custom filter plus displays. It -has inputs and thus must be applied to one or more existing sources -(depending on how many non-filter sources exist in the lookmark's -pipeline). So how are its inputs determined? In the case where the lookmark -has one input, the source that is selected in the Pipeline Browser is the -input to the lookmark. If nothing is selected, the user is prompted to select -the source from the pipeline to which the lookmark will be applied. If the -lookmark contains two or more inputs, the user will be prompted automatically -to specify which existing source to use for which input to the lookmark. The -input to a lookmark can be either a reader, a source (i.e. an item from the -Source menu), or a filter. Once the input is determined, the state of the -lookmark's pipeline (which includes the pipeline filters, their display -properties, and underlying properties of how ParaView is handling rendering) -is simply loaded into the selected view. The parameters and display -properties of the input(s) to the lookmark are not modified with one -exception: point and cell arrays (attributes) that were turned on in the -reader from which the lookmark was created are turned on in the reader of the -pipeline to which it is applied. Lookmarks are applied to the selected view; -thus the visibility of the sources they generate are off in all other -existing views. - -</body> -</html> diff --git a/Documentation/ToolsMenu.html b/Documentation/ToolsMenu.html index b8f5da0e4a..13f8344cff 100644 --- a/Documentation/ToolsMenu.html +++ b/Documentation/ToolsMenu.html @@ -13,7 +13,7 @@ <p> The Tools menu provides access to functionality related to custom filters, -lookmarks, linking, plugins, testing, and debugging. +linking, plugins, testing, and debugging. <a name="CreateCustomFilter"/> <h2>Create Custom Filter</h2> @@ -30,12 +30,6 @@ This dialog box lists any custom filters currently loaded into ParaView. From it, you may import custom filters previously saved to a file, export one or more of the ones in the list to a file, or remove any custom filters listed. -<a name="CreateLookmark"/> -<h2>Create Lookmark</h2> -<p> -See <a href="Lookmarks.html#CreateLookmark">Creating a Lookmark</a> on the -Lookmarks page. - <a name="ManageLinks"/> <h2>Manage Links</h2> <p> diff --git a/Documentation/ViewMenu.html b/Documentation/ViewMenu.html index 729e2cc471..3c089999eb 100644 --- a/Documentation/ViewMenu.html +++ b/Documentation/ViewMenu.html @@ -141,13 +141,6 @@ session. <tr><td><img src="TimeStepSpinBox.png"/></td><td>Use this spin box to select a time step from a dataset with time information.</td></tr> </table> -<a name="Lookmarks"/> -<h3>Lookmarks</h3> -<p> -The Lookmarks toolbar is empty by default. Buttons are added to it as -lookmarks are created. See the <a href="Lookmarks.html#LookmarkToolbar">Lookmark Toolbar</a> section of the Lookmarks page -for more information. - <a name="MainControls"/> <h3>Main Controls</h3> <p> @@ -271,18 +264,6 @@ interpolation function used in between the two extremes. <h2>Selection Inspector</h2> See the <a href="SelectionInspector.html">Selection Inspector</a> page. -<a name="LookmarkBrowser"/> -<h2>Lookmark Browser</h2> -<p> -See the <a href="Lookmarks.html#LookmarkBrowser">Lookmark Browser</a> section -on the Lookmarks page. - -<a name="LookmarkInspector"/> -<h2>Lookmark Inspector</h2> -<p> -See the <a href="Lookmarks.html#LookmarkInspector">Lookmark Inspector</a> -section on the Lookmarks page. - <a name="ObjectInspector"/> <h2>Object Inspector</h2> <p> diff --git a/Documentation/Views.html b/Documentation/Views.html index afbb47051f..72901b9584 100644 --- a/Documentation/Views.html +++ b/Documentation/Views.html @@ -95,7 +95,6 @@ There is also a series of buttons in the upper left corner just above the 3D vie <table class="PropertiesTable" border="1" cellpadding="3"> <tr><td><img src="UndoCameraButton.png"></td><td>Undo the last camera motion.</td></tr> <tr><td><img src="RedoCameraButton.png"></td><td>Redo the last undone camera motion.</td></tr> -<tr><td><img src="LookmarkButton.png"></td><td>Create a <a href="Lookmarks.html">lookmark</a> of the associated view.</td></tr> </table> <p> diff --git a/Documentation/index.html b/Documentation/index.html index 8655e073ec..9ea3adbb40 100644 --- a/Documentation/index.html +++ b/Documentation/index.html @@ -87,7 +87,6 @@ visualization. <li><a href="ViewMenu.html#CameraControls">Camera Controls</a></li> <li><a href="ViewMenu.html#CommonFilters">Common Filters</a></li> <li><a href="ViewMenu.html#CurrentTimeControls">Current Time Controls</a></li> - <li><a href="ViewMenu.html#Lookmarks">Lookmarks</a></li> <li><a href="ViewMenu.html#MainControls">Main Controls</a></li> <li><a href="ViewMenu.html#Representation">Representation</a></li> <li><a href="ViewMenu.html#SelectionControls">Selection Controls</a></li> @@ -99,8 +98,6 @@ visualization. <li><a href="ViewMenu.html#AnimationView">Animation View</a></li> <li><a href="ViewMenu.html#ComparativeViewInspector">Comparative View Inspector</a></li> <li><a href="ViewMenu.html#SelectionInspector">Selection Inspector</a></li> - <li><a href="ViewMenu.html#LookmarkBrowser">Lookmark Browser</a></li> - <li><a href="ViewMenu.html#LookmarkInspector">Lookmark Inspector</a></li> <li><a href="ViewMenu.html#ObjectInspector">Object Inspector</a></li> <li><a href="ViewMenu.html#PipelineBrowser">Pipeline Browser</a></li> <li><a href="ViewMenu.html#StatisticsView">StatisticsView</a></li> @@ -176,15 +173,6 @@ visualization. <li><a href="Views.html">Spreadsheet View</a></li> </ul> </li> - <li> - <a href="Lookmarks.html">Lookmarks</a> - <ul> - <li><a href="Lookmarks.html">Lookmarks</a></li> - <li><a href="Lookmarks.html#LookmarkBrowser">Lookmark Browser</a></li> - <li><a href="Lookmarks.html#LookmarkInspector">Lookmark Inspector</a></li> - <li><a href="Lookmarks.html#CreateLookmark">Create Lookmark</a></li> - </ul> - </li> <li><a href="ParaViewReaders.html">Readers</a></li> <li><a href="ParaViewWriters.html">Writers</a></li> <li><a href="ExtendedHelp.html">Extended Help</a></li> diff --git a/Documentation/paraview.qhp.in b/Documentation/paraview.qhp.in new file mode 100644 index 0000000000..5feeb08207 --- /dev/null +++ b/Documentation/paraview.qhp.in @@ -0,0 +1,329 @@ +<?xml version="1.0" encoding="UTF-8"?> +<QtHelpProject version="1.0"> + <namespace>paraview.org</namespace> + <virtualFolder>paraview</virtualFolder> + <filterSection> + <toc> + <section title="ParaView" ref="index.html"> + <section title="Interface Overview" ref="GUIOverview.html"/> + <section title="File Menu" ref="FileMenu.html"> + <section title="Open" ref="FileMenu.html#Open"/> + <section title="Recent Files" ref="FileMenu.html#RecentFiles"/> + <section title="Load State" ref="FileMenu.html#LoadState"/> + <section title="Save State" ref="FileMenu.html#SaveState"/> + <section title="Save Data" ref="FileMenu.html#SaveData"/> + <section title="Save Screenshot" ref="FileMenu.html#SaveScreenshot"/> + <section title="Save Animation" ref="FileMenu.html#SaveAnimation"/> + <section title="Save Geometry" ref="FileMenu.html#SaveGeometry"/> + <section title="Connect" ref="FileMenu.html#Connect"/> + <section title="Disconnect" ref="FileMenu.html#Disconnect"/> + <section title="Exit" ref="FileMenu.html#Exit"/> + </section> + <section title="Edit Menu" ref="EditMenu.html"> + <section title="Undo" ref="EditMenu.html#UndoRedo"/> + <section title="Redo" ref="EditMenu.html#UndoRedo"/> + <section title="Undo Camera" ref="EditMenu.html#UndoRedoCamera"/> + <section title="Redo Camera" ref="EditMenu.html#UndoRedoCamera"/> + <section title="Change Input" ref="EditMenu.html#ChangeInput"/> + <section title="Delete" ref="EditMenu.html#Delete"/> + <section title="Delete All" ref="EditMenu.html#DeleteAll"/> + <section title="Interact" ref="EditMenu.html#Interact"/> + <section title="Select Cells On" ref="EditMenu.html#SelectCellsOn"/> + <section title="Select Points On" ref="EditMenu.html#SelectPointsOn"/> + <section title="Select Cells Through" ref="EditMenu.html#SelectCellsThrough"/> + <section title="Select Points Through" ref="EditMenu.html#SelectPointsThrough"/> + <section title="Settings" ref="EditMenu.html#Settings"/> + <section title="View Settings" ref="EditMenu.html#ViewSettings"/> + </section> + <section title="View Menu" ref="ViewMenu.html"> + <section title="Camera" ref="ViewMenu.html#Camera"/> + <section title="Show Center" ref="ViewMenu.html#ShowCenter"/> + <section title="Reset Center" ref="ViewMenu.html#ResetCenter"/> + <section title="Pick Center" ref="ViewMenu.html#PickCenter"/> + <section title="Show Color Legend" ref="ViewMenu.html#ShowColorLegend"/> + <section title="Toolbars" ref="ViewMenu.html#Toolbars"> + <section title="Active Variable Controls" ref="ViewMenu.html#ActiveVariableControls"/> + <section title="Camera Controls" ref="ViewMenu.html#CameraControls"/> + <section title="Common Filters" ref="ViewMenu.html#CommonFilters"/> + <section title="Current Time Controls" ref="ViewMenu.html#CurrentTimeControls"/> + <section title="Main Controls" ref="ViewMenu.html#MainControls"/> + <section title="Representation" ref="ViewMenu.html#Representation"/> + <section title="Selection Controls" ref="ViewMenu.html#SelectionControls"/> + <section title="Undo/Redo Controls" ref="ViewMenu.html#UndoRedoControls"/> + <section title="VCR Controls" ref="ViewMenu.html#VCRControls"/> + </section> + <section title="Animation Inspector" ref="ViewMenu.html#AnimationInspector"/> + <section title="Animation View" ref="ViewMenu.html#AnimationView"/> + <section title="Comparative View Inspector" ref="ViewMenu.html#ComparativeViewInspector"/> + <section title="Selection Inspector" ref="ViewMenu.html#SelectionInspector"/> + <section title="Object Inspector" ref="ViewMenu.html#ObjectInspector"/> + <section title="Pipeline Browser" ref="ViewMenu.html#PipelineBrowser"/> + <section title="StatisticsView" ref="ViewMenu.html#StatisticsView"/> + </section> + <section title="Sources Menu" ref="ParaViewSources.html"/> + <section title="Filters Menu" ref="ParaViewFilters.html"/> + <section title="Animation" ref="Animation.html"/> + <section title="Tools Menu" ref="ToolsMenu.html"> + <section title="CreateCustomFilter" ref="ToolsMenu.html#CreateCustomFilter"/> + <section title="Manage Custom Filters" ref="ToolsMenu.html#ManageCustomFilters"/> + <section title="Manage Links" ref="ToolsMenu.html#ManageLinks"/> + <section title="Add Camera Link" ref="ToolsMenu.html#AddCameraLink"/> + <section title="Manage Plugins" ref="ToolsMenu.html#ManagePlugins"/> + <section title="Dump Widget Names" ref="ToolsMenu.html#DumpWidgetNames"/> + <section title="Record Test" ref="ToolsMenu.html#RecordTest"/> + <section title="Record Test Screenshot" ref="ToolsMenu.html#RecordTestScreenshot"/> + <section title="Play Test" ref="ToolsMenu.html#PlayTest"/> + <section title="Max Window Size: 300x300" ref="ToolsMenu.html#MaxWindowSize"/> + <section title="Timer Log" ref="ToolsMenu.html#TimerLog"/> + <section title="Output Window" ref="ToolsMenu.html#OutputWindow"/> + <section title="Python Shell" ref="ToolsMenu.html#PythonShell"/> + </section> + <section title="Help Menu" ref="HelpMenu.html"> + <section title="About" ref="HelpMenu.html#About"/> + <section title="Help" ref="HelpMenu.html#Help"/> + <section title="Enable Tooltips" ref="HelpMenu.html#EnableTooltips"/> + </section> + <section title="Object Inspector" ref="ObjectInspector.html"> + <section title="Properties Panel" ref="Properties.html"/> + <section title="Display Panel" ref="Display.html"> + <section title="View Section" ref="Display.html#View"/> + <section title="Color Section" ref="Display.html#Color"/> + <section title="Style Section" ref="Display.html#Style"/> + <section title="Transformation Section" ref="Display.html#Transformation"/> + <section title="Bar Chart Settings" ref="Display.html#Bar Chart View"/> + <section title="XY Plot Settings" ref="Display.html#XY Plot View"/> + </section> + <section title="Information Panel" ref="Information.html"/> + </section> + <section title="Pipeline Browser" ref="PipelineBrowser.html"/> + <section title="Selection Inspector" ref="SelectionInspector.html"/> + <section title="Views" ref="Views.html"/> + <section title="Readers" ref="ParaViewReaders.html"/> + <section title="Writers" ref="ParaViewWriters.html"/> + <section title="Extended Help" ref="ExtendedHelp.html"/> + </section> + </toc> + <keywords> + <keyword name="File menu" ref="FileMenu.html" id="FileMenu::File menu"/> + <keyword name="Open file" ref="FileMenu.html#Open" id="FileMenu::Open file"/> + <keyword name="Recent Files" ref="FileMenu.html#Recent" id="FileMenu::Recent Files"/> + <keyword name="Load State" ref="FileMenu.html#LoadState" id="FileMenu::Load State"/> + <keyword name="Save State" ref="FileMenu.html#SaveState" id="FileMenu::Save State"/> + <keyword name="Save Data" ref="FileMenu.html#SaveData" id="FileMenu::Save Data"/> + <keyword name="Save Screenshot" ref="FileMenu.html#SaveScreenshot" id="FileMenu::Save Screenshot"/> + <keyword name="Connect" ref="FileMenu.html#Connect" id="FileMenu::Connect"/> + <keyword name="Disconnect" ref="FileMenu.html#Disconnect" id="FileMenu::Disconnect"/> + <keyword name="Exit" ref="FileMenu.html#Exit" id="FileMenu::Exit"/> + <keyword name="Edit menu" ref="EditMenu.html" id="EditMenu::Edit menu"/> + <keyword name="Undo" ref="EditMenu.html#UndoRedo" id="EditMenu::Undo"/> + <keyword name="Redo" ref="EditMenu.html#UndoRedo" id="EditMenu::Redo"/> + <keyword name="Undo Camera" ref="EditMenu.html#UndoRedoCamera" id="EditMenu::Undo Camera"/> + <keyword name="Redo Camera" ref="EditMenu.html#UndoRedoCamera" id="EditMenu::Redo Camera"/> + <keyword name="Change Input" ref="EditMenu.html#ChangeInput" id="EditMenu::Change Input"/> + <keyword name="Delete" ref="EditMenu.html#Delete" id="EditMenu::Delete"/> + <keyword name="Delete All" ref="EditMenu.html#DeleteAll" id="EditMenu::Delete All"/> + <keyword name="Interact" ref="EditMenu.html#Interact" id="EditMenu::Interact"/> + <keyword name="Select Cells On" ref="EditMenu.html#SelectCellsOn" id="EditMenu::Select Cells On"/> + <keyword name="Select Points On" ref="EditMenu.html#SelectPointsOn" id="EditMenu::Select Points On"/> + <keyword name="Select Cells Through" ref="EditMenu.html#SelectCellsThrough" id="EditMenu::Select Cells Through"/> + <keyword name="Select Points Through" ref="EditMenu.html#SelectPointsThrough" id="EditMenu::Select Points Through"/> + <keyword name="Settings" ref="EditMenu.html#Settings" id="EditMenu::Settings"/> + <keyword name="View Settings" ref="EditMenu.html#ViewSettings" id="EditMenu::View Settings"/> + <keyword name="View menu" ref="ViewMenu.html" id="ViewMenu::View menu"/> + <keyword name="Camera" ref="ViewMenu.html#Camera" id="ViewMenu::Camera"/> + <keyword name="Show Center" ref="ViewMenu.html#ShowCenter" id="ViewMenu::Show Center"/> + <keyword name="Reset Center" ref="ViewMenu.html#ResetCenter" id="ViewMenu::Reset Center"/> + <keyword name="Pick Center" ref="ViewMenu.html#PickCenter" id="ViewMenu::Pick Center"/> + <keyword name="Show Color Legend" ref="ViewMenu.html#ShowColorLegend" id="ViewMenu::Show Color Legend"/> + <keyword name="Toolbars" ref="ViewMenu.html#Toolbars" id="ViewMenu::Toolbars"/> + <keyword name="Comparative View Inspector" ref="ViewMenu.html#ComparativeViewInspector" id="ViewMenu::Comparative View Inspector"/> + <keyword name="Selection Inspector" ref="ViewMenu.html#SelectionInspector" id="ViewMenu::Selection Inspector"/> + <keyword name="Statistics View" ref="ViewMenu.html#StatisticsView" id="ViewMenu::Statistics View"/> + <keyword name="Active Variable Controls toolbar" ref="ViewMenu.html#ActiveVariableControls" id="ViewMenu::Active Variable Controls toolbar"/> + <keyword name="Camera Controls toolbar" ref="ViewMenu.html#CameraControls" id="ViewMenu::Camera Controls toolbar"/> + <keyword name="Common Filters toolbar" ref="ViewMenu.html#CommonFilters" id="ViewMenu::Common Filters toolbar"/> + <keyword name="Current Time Controls toolbar" ref="ViewMenu.html#CurrentTimeControls" id="ViewMenu::Current Time Controls toolbar"/> + <keyword name="Main Controls toolbar" ref="ViewMenu.html#MainControls" id="ViewMenu::Main Controls toolbar"/> + <keyword name="Representation toolbar" ref="ViewMenu.html#Representation" id="ViewMenu::Representation toolbar"/> + <keyword name="Selection Controls toolbar" ref="ViewMenu.html#SelectionControls" id="ViewMenu::Selection Controls toolbar"/> + <keyword name="Undo/Redo Controls toolbar" ref="ViewMenu.html#UndoRedoControls" id="ViewMenu::Undo/Redo Controls toolbar"/> + <keyword name="VCR Controls toolbar" ref="ViewMenu.html#VCRControls" id="ViewMenu::VCR Controls toolbar"/> + <keyword name="Arrow" ref="ArrowSource.html" id="ArrowSource::Arrow"/> + <keyword name="Axes" ref="Axes.html" id="Axes::Axes"/> + <keyword name="Cone" ref="ConeSource.html" id="ConeSource::Cone"/> + <keyword name="Box" ref="CubeSource.html" id="CubeSource::Box"/> + <keyword name="Cylinder" ref="CylinderSource.html" id="CylinderSource::Cylinder"/> + <keyword name="Data Object Generator" ref="DataObjectGenerator.html" id="DataObjectGenerator::Data Object Generator"/> + <keyword name="Disk" ref="DiskSource.html" id="DiskSource::Disk"/> + <keyword name="2D Glyph" ref="GlyphSource2D.html" id="GlyphSource2D::2D Glyph"/> + <keyword name="Hierarchical Fractal" ref="HierarchicalFractal.html" id="HierarchicalFractal::Hierarchical Fractal"/> + <keyword name="Mandelbrot" ref="ImageMandelbrotSource.html" id="ImageMandelbrotSource::Mandelbrot"/> + <keyword name="Line" ref="LineSource.html" id="LineSource::Line"/> + <keyword name="Octree Fractal" ref="OctreeFractal.html" id="OctreeFractal::Octree Fractal"/> + <keyword name="Outline" ref="OutlineSource.html" id="OutlineSource::Outline"/> + <keyword name="Plane" ref="PlaneSource.html" id="PlaneSource::Plane"/> + <keyword name="Point Source" ref="PointSource.html" id="PointSource::Point Source"/> + <keyword name="Programmable Source" ref="ProgrammableSource.html" id="ProgrammableSource::Programmable Source"/> + <keyword name="Wavelet" ref="RTAnalyticSource.html" id="RTAnalyticSource::Wavelet"/> + <keyword name="Ruler" ref="Ruler.html" id="Ruler::Ruler"/> + <keyword name="Sphere" ref="SphereSource.html" id="SphereSource::Sphere"/> + <keyword name="SplineSource" ref="SplineSource.html" id="SplineSource::SplineSource"/> + <keyword name="Superquadric" ref="SuperquadricSource.html" id="SuperquadricSource::Superquadric"/> + <keyword name="Text" ref="TextSource.html" id="TextSource::Text"/> + <keyword name="Time Source" ref="TimeSource.html" id="TimeSource::Time Source"/> + <keyword name="Annotate Time" ref="TimeToTextConvertorSource.html" id="TimeToTextConvertorSource::Annotate Time"/> + <keyword name="3D Text" ref="VectorText.html" id="VectorText::3D Text"/> + <keyword name="Append Datasets" ref="Append.html" id="Append::Append Datasets"/> + <keyword name="Append Attributes" ref="AppendAttributes.html" id="AppendAttributes::Append Attributes"/> + <keyword name="Append Geometry" ref="AppendPolyData.html" id="AppendPolyData::Append Geometry"/> + <keyword name="Glyph With Custom Source" ref="ArbitrarySourceGlyph.html" id="ArbitrarySourceGlyph::Glyph With Custom Source"/> + <keyword name="Stream Tracer With Custom Source" ref="ArbitrarySourceStreamTracer.html" id="ArbitrarySourceStreamTracer::Stream Tracer With Custom Source"/> + <keyword name="Block Scalars" ref="BlockIdScalars.html" id="BlockIdScalars::Block Scalars"/> + <keyword name="Random Vectors" ref="BrownianPoints.html" id="BrownianPoints::Random Vectors"/> + <keyword name="Extract CTH Parts" ref="CTHPart.html" id="CTHPart::Extract CTH Parts"/> + <keyword name="Calculator" ref="Calculator.html" id="Calculator::Calculator"/> + <keyword name="Cell Centers" ref="CellCenters.html" id="CellCenters::Cell Centers"/> + <keyword name="Cell Data to Point Data" ref="CellDataToPointData.html" id="CellDataToPointData::Cell Data to Point Data"/> + <keyword name="Compute Derivatives" ref="CellDerivatives.html" id="CellDerivatives::Compute Derivatives"/> + <keyword name="Clean" ref="CleanPolyData.html" id="CleanPolyData::Clean"/> + <keyword name="Clean to Grid" ref="CleanUnstructuredGrid.html" id="CleanUnstructuredGrid::Clean to Grid"/> + <keyword name="Clip" ref="Clip.html" id="Clip::Clip"/> + <keyword name="Contour" ref="Contour.html" id="Contour::Contour"/> + <keyword name="Curvature" ref="Curvatures.html" id="Curvatures::Curvature"/> + <keyword name="Slice" ref="Cut.html" id="Cut::Slice"/> + <keyword name="D3" ref="D3.html" id="D3::D3"/> + <keyword name="Extract Surface" ref="DataSetSurfaceFilter.html" id="DataSetSurfaceFilter::Extract Surface"/> + <keyword name="Tetrahedralize" ref="DataSetTriangleFilter.html" id="DataSetTriangleFilter::Tetrahedralize"/> + <keyword name="Decimate" ref="DecimatePro.html" id="DecimatePro::Decimate"/> + <keyword name="Delaunay 2D" ref="Delaunay2D.html" id="Delaunay2D::Delaunay 2D"/> + <keyword name="Delaunay 3D" ref="Delaunay3D.html" id="Delaunay3D::Delaunay 3D"/> + <keyword name="Elevation" ref="ElevationFilter.html" id="ElevationFilter::Elevation"/> + <keyword name="Extract Block" ref="ExtractBlock.html" id="ExtractBlock::Extract Block"/> + <keyword name="Extract Edges" ref="ExtractEdges.html" id="ExtractEdges::Extract Edges"/> + <keyword name="Plot Global Variables over Time" ref="ExtractFieldDataOverTime.html" id="ExtractFieldDataOverTime::Plot Global Variables over Time"/> + <keyword name="Extract Cells By Region" ref="ExtractGeometry.html" id="ExtractGeometry::Extract Cells By Region"/> + <keyword name="Extract Subset" ref="ExtractGrid.html" id="ExtractGrid::Extract Subset"/> + <keyword name="Extract AMR Blocks" ref="ExtractHierarchicalDataSets.html" id="ExtractHierarchicalDataSets::Extract AMR Blocks"/> + <keyword name="Extract Level" ref="ExtractHierarchicalLevel.html" id="ExtractHierarchicalLevel::Extract Level"/> + <keyword name="Histogram" ref="ExtractHistogram.html" id="ExtractHistogram::Histogram"/> + <keyword name="Extract Selection" ref="ExtractSelection.html" id="ExtractSelection::Extract Selection"/> + <keyword name="Plot Selection Over Time" ref="ExtractSelectionOverTime.html" id="ExtractSelectionOverTime::Plot Selection Over Time"/> + <keyword name="FFT Of Selection Over Time" ref="FFTSelectionOverTime.html" id="FFTSelectionOverTime::FFT Of Selection Over Time"/> + <keyword name="Feature Edges" ref="FeatureEdges.html" id="FeatureEdges::Feature Edges"/> + <keyword name="Generate Ids" ref="GenerateIdScalars.html" id="GenerateIdScalars::Generate Ids"/> + <keyword name="Glyph" ref="Glyph.html" id="Glyph::Glyph"/> + <keyword name="Gradient" ref="Gradient.html" id="Gradient::Gradient"/> + <keyword name="Group Datasets" ref="GroupDataSets.html" id="GroupDataSets::Group Datasets"/> + <keyword name="Integrate Variables" ref="IntegrateAttributes.html" id="IntegrateAttributes::Integrate Variables"/> + <keyword name="Surface Flow" ref="IntegrateFlowThroughSurface.html" id="IntegrateFlowThroughSurface::Surface Flow"/> + <keyword name="Level Scalars" ref="LevelIdScalars.html" id="LevelIdScalars::Level Scalars"/> + <keyword name="Linear Extrusion" ref="LinearExtrusionFilter.html" id="LinearExtrusionFilter::Linear Extrusion"/> + <keyword name="Loop Subdivision" ref="LoopSubdivisionFilter.html" id="LoopSubdivisionFilter::Loop Subdivision"/> + <keyword name="Mask Points" ref="MaskPoints.html" id="MaskPoints::Mask Points"/> + <keyword name="Median" ref="Median.html" id="Median::Median"/> + <keyword name="Merge Blocks" ref="MergeBlocks.html" id="MergeBlocks::Merge Blocks"/> + <keyword name="Mesh Quality" ref="MeshQuality.html" id="MeshQuality::Mesh Quality"/> + <keyword name="Normal Glyphs" ref="NormalGlyphs.html" id="NormalGlyphs::Normal Glyphs"/> + <keyword name="Octree Depth Limit" ref="OctreeDepthLimit.html" id="OctreeDepthLimit::Octree Depth Limit"/> + <keyword name="Octree Depth Scalars" ref="OctreeDepthScalars.html" id="OctreeDepthScalars::Octree Depth Scalars"/> + <keyword name="Outline Corners" ref="OutlineCornerFilter.html" id="OutlineCornerFilter::Outline Corners"/> + <keyword name="Outline" ref="OutlineFilter.html" id="OutlineFilter::Outline"/> + <keyword name="Connectivity" ref="PVConnectivityFilter.html" id="PVConnectivityFilter::Connectivity"/> + <keyword name="Particle Pathlines" ref="ParticlePathLines.html" id="ParticlePathLines::Particle Pathlines"/> + <keyword name="ParticleTracer" ref="ParticleTracer.html" id="ParticleTracer::ParticleTracer"/> + <keyword name="Plot Data" ref="PlotAttributes.html" id="PlotAttributes::Plot Data"/> + <keyword name="Plot On Intersection Curves" ref="PlotOnIntersectionCurves.html" id="PlotOnIntersectionCurves::Plot On Intersection Curves"/> + <keyword name="Plot On Sorted Lines" ref="PlotOnSortedLines.html" id="PlotOnSortedLines::Plot On Sorted Lines"/> + <keyword name="Point Data to Cell Data" ref="PointDataToCellData.html" id="PointDataToCellData::Point Data to Cell Data"/> + <keyword name="Generate Surface Normals" ref="PolyDataNormals.html" id="PolyDataNormals::Generate Surface Normals"/> + <keyword name="Resample With Dataset" ref="Probe.html" id="Probe::Resample With Dataset"/> + <keyword name="Plot Over Line" ref="ProbeLine.html" id="ProbeLine::Plot Over Line"/> + <keyword name="Probe Location" ref="ProbePoint.html" id="ProbePoint::Probe Location"/> + <keyword name="Process Id Scalars" ref="ProcessIdScalars.html" id="ProcessIdScalars::Process Id Scalars"/> + <keyword name="Programmable Filter" ref="ProgrammableFilter.html" id="ProgrammableFilter::Programmable Filter"/> + <keyword name="Python Calculator" ref="PythonCalculator.html" id="PythonCalculator::Python Calculator"/> + <keyword name="Interpolate to Quadrature Points" ref="QuadraturePointInterpolator.html" id="QuadraturePointInterpolator::Interpolate to Quadrature Points"/> + <keyword name="Generate Quadrature Points" ref="QuadraturePointsGenerator.html" id="QuadraturePointsGenerator::Generate Quadrature Points"/> + <keyword name="Generate Quadrature Scheme Dictionary" ref="QuadratureSchemeDictionaryGenerator.html" id="QuadratureSchemeDictionaryGenerator::Generate Quadrature Scheme Dictionary"/> + <keyword name="Quadric Clustering" ref="QuadricClustering.html" id="QuadricClustering::Quadric Clustering"/> + <keyword name="Reflect" ref="ReflectionFilter.html" id="ReflectionFilter::Reflect"/> + <keyword name="Ribbon" ref="RibbonFilter.html" id="RibbonFilter::Ribbon"/> + <keyword name="Rotational Extrusion" ref="RotationalExtrusionFilter.html" id="RotationalExtrusionFilter::Rotational Extrusion"/> + <keyword name="Scatter Plot" ref="ScatterPlot.html" id="ScatterPlot::Scatter Plot"/> + <keyword name="Shrink" ref="ShrinkFilter.html" id="ShrinkFilter::Shrink"/> + <keyword name="Smooth" ref="SmoothPolyDataFilter.html" id="SmoothPolyDataFilter::Smooth"/> + <keyword name="Stream Tracer" ref="StreamTracer.html" id="StreamTracer::Stream Tracer"/> + <keyword name="Triangle Strips" ref="Stripper.html" id="Stripper::Triangle Strips"/> + <keyword name="Outline Curvilinear DataSet" ref="StructuredGridOutlineFilter.html" id="StructuredGridOutlineFilter::Outline Curvilinear DataSet"/> + <keyword name="Subdivide" ref="Subdivide.html" id="Subdivide::Subdivide"/> + <keyword name="Surface Vectors" ref="SurfaceVectors.html" id="SurfaceVectors::Surface Vectors"/> + <keyword name="Table To Points" ref="TableToPolyData.html" id="TableToPolyData::Table To Points"/> + <keyword name="Table To Structured Grid" ref="TableToStructuredGrid.html" id="TableToStructuredGrid::Table To Structured Grid"/> + <keyword name="Temporal Cache" ref="TemporalCache.html" id="TemporalCache::Temporal Cache"/> + <keyword name="Temporal Interpolator" ref="TemporalInterpolator.html" id="TemporalInterpolator::Temporal Interpolator"/> + <keyword name="Temporal Shift Scale" ref="TemporalShiftScale.html" id="TemporalShiftScale::Temporal Shift Scale"/> + <keyword name="Temporal Snap-to-Time-Step" ref="TemporalSnapToTimeStep.html" id="TemporalSnapToTimeStep::Temporal Snap-to-Time-Step"/> + <keyword name="Temporal Statistics" ref="TemporalStatistics.html" id="TemporalStatistics::Temporal Statistics"/> + <keyword name="Tessellate" ref="TessellatorFilter.html" id="TessellatorFilter::Tessellate"/> + <keyword name="Texture Map to Cylinder" ref="TextureMapToCylinder.html" id="TextureMapToCylinder::Texture Map to Cylinder"/> + <keyword name="Texture Map to Plane" ref="TextureMapToPlane.html" id="TextureMapToPlane::Texture Map to Plane"/> + <keyword name="Texture Map to Sphere" ref="TextureMapToSphere.html" id="TextureMapToSphere::Texture Map to Sphere"/> + <keyword name="Threshold" ref="Threshold.html" id="Threshold::Threshold"/> + <keyword name="Annotate Time Filter" ref="TimeToTextConvertor.html" id="TimeToTextConvertor::Annotate Time Filter"/> + <keyword name="Transform" ref="TransformFilter.html" id="TransformFilter::Transform"/> + <keyword name="Triangulate" ref="TriangleFilter.html" id="TriangleFilter::Triangulate"/> + <keyword name="Tube" ref="TubeFilter.html" id="TubeFilter::Tube"/> + <keyword name="Gradient Of Unstructured DataSet" ref="UnstructuredGradient.html" id="UnstructuredGradient::Gradient Of Unstructured DataSet"/> + <keyword name="Warp By Scalar" ref="WarpScalar.html" id="WarpScalar::Warp By Scalar"/> + <keyword name="Warp By Vector" ref="WarpVector.html" id="WarpVector::Warp By Vector"/> + <keyword name="Animation" ref="Animation.html" id="Animation::Animation"/> + <keyword name="Save Animation" ref="Animation.html#SaveAnimation" id="Animation::Save Animation"/> + <keyword name="Save Geometry" ref="Animation.html#SaveGeometry" id="Animation::Save Geometry"/> + <keyword name="Animation View" ref="Animation.html#AnimationView" id="Animation::Animation View"/> + <keyword name="Animation Inspector" ref="Animation.html" id="Animation::Animation Inspector"/> + <keyword name="Animation Menu" ref="Animation.html#AnimationMenu" id="Animation::Animation Menu"/> + <keyword name="Animation Toolbar" ref="Animation.html#AnimationToolbar" id="Animation::Animation Toolbar"/> + <keyword name="Create Custom Filter" ref="ToolsMenu.html#CreateCustomFilter" id="ToolsMenu::Create Custom Filter"/> + <keyword name="Manage Custom Filters" ref="ToolsMenu.html#ManageCustomFilters" id="ToolsMenu::Manage Custom Filters"/> + <keyword name="Manage Links" ref="ToolsMenu.html#ManageLinks" id="ToolsMenu::Manage Links"/> + <keyword name="Add Camera Link" ref="ToolsMenu.html#AddCameraLink" id="ToolsMenu::Add Camera Link"/> + <keyword name="Manage Plugins" ref="ToolsMenu.html#ManagePlugins" id="ToolsMenu::Manage Plugins"/> + <keyword name="Dump Widget Names" ref="ToolsMenu.html#DumpWidgetNames" id="ToolsMenu::Dump Widget Names"/> + <keyword name="Record Test" ref="ToolsMenu.html#RecordTest" id="ToolsMenu::Record Test"/> + <keyword name="Record Test Screenshot" ref="ToolsMenu.html#RecordTestScreenshot" id="ToolsMenu::Record Test Screenshot"/> + <keyword name="Play Test" ref="ToolsMenu.html#PlayTest" id="ToolsMenu::Play Test"/> + <keyword name="Max Window Size: 300x300" ref="ToolsMenu.html#MaxWindowSize" id="ToolsMenu::Max Window Size: 300x300"/> + <keyword name="Timer Log" ref="ToolsMenu.html#TimerLog" id="ToolsMenu::Timer Log"/> + <keyword name="Output Window" ref="ToolsMenu.html#OutputWindow" id="ToolsMenu::Output Window"/> + <keyword name="Python Shell" ref="ToolsMenu.html#PythonShell" id="ToolsMenu::Python Shell"/> + <keyword name="About" ref="HelpMenu.html#About" id="HelpMenu::About"/> + <keyword name="Help" ref="HelpMenu.html#Help" id="HelpMenu::Help"/> + <keyword name="Enable Tooltips" ref="HelpMenu.html#EnableTooltips" id="HelpMenu::Enable Tooltips"/> + <keyword name="Object Inspector" ref="ObjectInspector.html" id="ObjectInspector::Object Inspector"/> + <keyword name="Properties Panel" ref="Properties.html" id="Properties::Properties Panel"/> + <keyword name="Display Panel" ref="Display.html" id="Display::Display Panel"/> + <keyword name="Information Panel" ref="Information.html" id="Information::Information Panel"/> + <keyword name="View" ref="Display.html#View" id="Display::View"/> + <keyword name="Color" ref="Display.html#Color" id="Display::Color"/> + <keyword name="Style" ref="Display.html#Style" id="Display::Style"/> + <keyword name="Transformation" ref="Display.html#Transformation" id="Display::Transformation"/> + <keyword name="Bar Chart Settings" ref="Display.html#Bar Chart View" id="Display::Bar Chart Settings"/> + <keyword name="XY Plot Settings" ref="Display.html#XY Plot View" id="Display::XY Plot Settings"/> + <keyword name="Pipeline Browser" ref="PipelineBrowser.html" id="PipelineBrowser::Pipeline Browser"/> + <keyword name="Selection Inspector" ref="SelectionInspector.html" id="SelectionInspector::Selection Inspector"/> + <keyword name="3D View" ref="Views.html" id="Views::3D View"/> + <keyword name="Bar Chart View" ref="Views.html" id="Views::Bar Chart View"/> + <keyword name="XY Plot View" ref="Views.html" id="Views::XY Plot View"/> + <keyword name="3D View (Comparative)" ref="Views.html" id="Views::3D View (Comparative)"/> + <keyword name="Spreadsheet View" ref="Views.html" id="Views::Spreadsheet View"/> + </keywords> + <files> + <!-- CMake will automatically set this DOCUMENTATION_FILES variable to + list all the files in the documentation directory. We need to + ensure that those get added here. Custom apps are ofcourse free + to create this list on their own + --> + @DOCUMENTATION_FILES@ + </files> + </filterSection> +</QtHelpProject> diff --git a/Documentation/pqClient.adp b/Documentation/pqClient.adp deleted file mode 100644 index 83dfa71179..0000000000 --- a/Documentation/pqClient.adp +++ /dev/null @@ -1,220 +0,0 @@ -<!DOCTYPE DCF> -<assistantconfig version="3.2.0"> - -<profile> - <property name="name">ParaView</property> - <property name="title">ParaView</property> - <property name="applicationicon">images/handbook.png</property> - <property name="startpage">Documentation/index.html</property> - <property name="aboutmenutext">About ParaView</property> - <property name="abouturl">about.html</property> - <property name="assistantdocs">doc</property> -</profile> - -<!-- DON'T FORGET TO ADD LINKS TO index.html WHEN YOU ADD NEW SUBSECTION --> -<DCF ref="Documentation/index.html" icon="images/handbook.png" title="ParaView"> - <section ref="Documentation/GUIOverview.html" title="Interface Overview"/> - <section ref="Documentation/FileMenu.html" title="File Menu"> - <keyword ref="Documentation/FileMenu.html">File menu</keyword> - <keyword ref="Documentation/FileMenu.html#Open">Open file</keyword> - <keyword ref="Documentation/FileMenu.html#Recent">Recent Files</keyword> - <keyword ref="Documentation/FileMenu.html#LoadState">Load State</keyword> - <keyword ref="Documentation/FileMenu.html#SaveState">Save State</keyword> - <keyword ref="Documentation/FileMenu.html#SaveData">Save Data</keyword> - <keyword ref="Documentation/FileMenu.html#SaveScreenshot">Save Screenshot</keyword> - <keyword ref="Documentation/FileMenu.html#Connect">Connect</keyword> - <keyword ref="Documentation/FileMenu.html#Disconnect">Disconnect</keyword> - <keyword ref="Documentation/FileMenu.html#Exit">Exit</keyword> - <section ref="Documentation/FileMenu.html#Open" title="Open"/> - <section ref="Documentation/FileMenu.html#RecentFiles" title="Recent Files"/> - <section ref="Documentation/FileMenu.html#LoadState" title="Load State"/> - <section ref="Documentation/FileMenu.html#SaveState" title="Save State"/> - <section ref="Documentation/FileMenu.html#SaveData" title="Save Data"/> - <section ref="Documentation/FileMenu.html#SaveScreenshot" title="Save Screenshot"/> - <section ref="Documentation/FileMenu.html#SaveAnimation" title="Save Animation"/> - <section ref="Documentation/FileMenu.html#SaveGeometry" title="Save Geometry"/> - <section ref="Documentation/FileMenu.html#Connect" title="Connect"/> - <section ref="Documentation/FileMenu.html#Disconnect" title="Disconnect"/> - <section ref="Documentation/FileMenu.html#Exit" title="Exit"/> - </section> - <section ref="Documentation/EditMenu.html" title="Edit Menu"> - <keyword ref="Documentation/EditMenu.html">Edit menu</keyword> - <keyword ref="Documentation/EditMenu.html#UndoRedo">Undo</keyword> - <keyword ref="Documentation/EditMenu.html#UndoRedo">Redo</keyword> - <keyword ref="Documentation/EditMenu.html#UndoRedoCamera">Undo Camera</keyword> - <keyword ref="Documentation/EditMenu.html#UndoRedoCamera">Redo Camera</keyword> - <keyword ref="Documentation/EditMenu.html#ChangeInput">Change Input</keyword> - <keyword ref="Documentation/EditMenu.html#Delete">Delete</keyword> - <keyword ref="Documentation/EditMenu.html#DeleteAll">Delete All</keyword> - <keyword ref="Documentation/EditMenu.html#Interact">Interact</keyword> - <keyword ref="Documentation/EditMenu.html#SelectCellsOn">Select Cells On</keyword> - <keyword ref="Documentation/EditMenu.html#SelectPointsOn">Select Points On</keyword> - <keyword ref="Documentation/EditMenu.html#SelectCellsThrough">Select Cells Through</keyword> - <keyword ref="Documentation/EditMenu.html#SelectPointsThrough">Select Points Through</keyword> - <keyword ref="Documentation/EditMenu.html#Settings">Settings</keyword> - <keyword ref="Documentation/EditMenu.html#ViewSettings">View Settings</keyword> - <section ref="Documentation/EditMenu.html#UndoRedo" title="Undo"/> - <section ref="Documentation/EditMenu.html#UndoRedo" title="Redo"/> - <section ref="Documentation/EditMenu.html#UndoRedoCamera" title="Undo Camera"/> - <section ref="Documentation/EditMenu.html#UndoRedoCamera" title="Redo Camera"/> - <section ref="Documentation/EditMenu.html#ChangeInput" title="Change Input"/> - <section ref="Documentation/EditMenu.html#Delete" title="Delete"/> - <section ref="Documentation/EditMenu.html#DeleteAll" title="Delete All"/> - <section ref="Documentation/EditMenu.html#Interact" title="Interact"/> - <section ref="Documentation/EditMenu.html#SelectCellsOn" title="Select Cells On"/> - <section ref="Documentation/EditMenu.html#SelectPointsOn" title="Select Points On"/> - <section ref="Documentation/EditMenu.html#SelectCellsThrough" title="Select Cells Through"/> - <section ref="Documentation/EditMenu.html#SelectPointsThrough" title="Select Points Through"/> - <section ref="Documentation/EditMenu.html#Settings" title="Settings"/> - <section ref="Documentation/EditMenu.html#ViewSettings" title="View Settings"/> - </section> - <section ref="Documentation/ViewMenu.html" title="View Menu"> - <keyword ref="Documentation/ViewMenu.html">View menu</keyword> - <keyword ref="Documentation/ViewMenu.html#Camera">Camera</keyword> - <keyword ref="Documentation/ViewMenu.html#ShowCenter">Show Center</keyword> - <keyword ref="Documentation/ViewMenu.html#ResetCenter">Reset Center</keyword> - <keyword ref="Documentation/ViewMenu.html#PickCenter">Pick Center</keyword> - <keyword ref="Documentation/ViewMenu.html#ShowColorLegend">Show Color Legend</keyword> - <keyword ref="Documentation/ViewMenu.html#Toolbars">Toolbars</keyword> - <keyword ref="Documentation/ViewMenu.html#ComparativeViewInspector">Comparative View Inspector</keyword> - <keyword ref="Documentation/ViewMenu.html#SelectionInspector">Selection Inspector</keyword> - <keyword ref="Documentation/ViewMenu.html#StatisticsView">Statistics View</keyword> - <keyword ref="Documentation/ViewMenu.html#ActiveVariableControls">Active Variable Controls toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#CameraControls">Camera Controls toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#CommonFilters">Common Filters toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#CurrentTimeControls">Current Time Controls toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#Lookmarks">Lookmarks toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#MainControls">Main Controls toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#Representation">Representation toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#SelectionControls">Selection Controls toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#UndoRedoControls">Undo/Redo Controls toolbar</keyword> - <keyword ref="Documentation/ViewMenu.html#VCRControls">VCR Controls toolbar</keyword> - <section ref="Documentation/ViewMenu.html#Camera" title="Camera"/> - <section ref="Documentation/ViewMenu.html#ShowCenter" title="Show Center"/> - <section ref="Documentation/ViewMenu.html#ResetCenter" title="Reset Center"/> - <section ref="Documentation/ViewMenu.html#PickCenter" title="Pick Center"/> - <section ref="Documentation/ViewMenu.html#ShowColorLegend" title="Show Color Legend"/> - <section ref="Documentation/ViewMenu.html#Toolbars" title="Toolbars"> - <section ref="Documentation/ViewMenu.html#ActiveVariableControls" title="Active Variable Controls"/> - <section ref="Documentation/ViewMenu.html#CameraControls" title="Camera Controls"/> - <section ref="Documentation/ViewMenu.html#CommonFilters" title="Common Filters"/> - <section ref="Documentation/ViewMenu.html#CurrentTimeControls" title="Current Time Controls"/> - <section ref="Documentation/ViewMenu.html#Lookmarks" title="Lookmarks"/> - <section ref="Documentation/ViewMenu.html#MainControls" title="Main Controls"/> - <section ref="Documentation/ViewMenu.html#Representation" title="Representation"/> - <section ref="Documentation/ViewMenu.html#SelectionControls" title="Selection Controls"/> - <section ref="Documentation/ViewMenu.html#UndoRedoControls" title="Undo/Redo Controls"/> - <section ref="Documentation/ViewMenu.html#VCRControls" title="VCR Controls"/> - </section> - <section ref="Documentation/ViewMenu.html#AnimationInspector" title="Animation Inspector"/> - <section ref="Documentation/ViewMenu.html#AnimationView" title="Animation View"/> - <section ref="Documentation/ViewMenu.html#ComparativeViewInspector" title="Comparative View Inspector"/> - <section ref="Documentation/ViewMenu.html#SelectionInspector" title="Selection Inspector"/> - <section ref="Documentation/ViewMenu.html#LookmarkBrowser" title="Lookmark Browser"/> - <section ref="Documentation/ViewMenu.html#LookmarkInspector" title="Lookmark Inspector"/> - <section ref="Documentation/ViewMenu.html#ObjectInspector" title="Object Inspector"/> - <section ref="Documentation/ViewMenu.html#PipelineBrowser" title="Pipeline Browser"/> - <section ref="Documentation/ViewMenu.html#StatisticsView" title="StatisticsView"/> - </section> - <!-- Keywords in the next 2 sections (before each closing section tag) are - filled in by vtkSMExtractDocumentation. --> - <section ref="Documentation/ParaViewSources.html" title="Sources Menu"> - </section> - <section ref="Documentation/ParaViewFilters.html" title="Filters Menu"> - </section> - <section ref="Documentation/Animation.html" title="Animation"> - <keyword ref="Documentation/Animation.html">Animation</keyword> - <keyword ref="Documentation/Animation.html#SaveAnimation">Save Animation</keyword> - <keyword ref="Documentation/Animation.html#SaveGeometry">Save Geometry</keyword> - <keyword ref="Documentation/Animation.html#AnimationView">Animation View</keyword> - <keyword ref="Documentation/Animation.html">Animation Inspector</keyword> - <keyword ref="Documentation/Animation.html#AnimationMenu">Animation Menu</keyword> - <keyword ref="Documentation/Animation.html#AnimationToolbar">Animation Toolbar</keyword> - </section> - <section ref="Documentation/ToolsMenu.html" title="Tools Menu"> - <keyword ref="Documentation/ToolsMenu.html#CreateCustomFilter">Create Custom Filter</keyword> - <keyword ref="Documentation/ToolsMenu.html#ManageCustomFilters">Manage Custom Filters</keyword> - <keyword ref="Documentation/ToolsMenu.html#ManageLinks">Manage Links</keyword> - <keyword ref="Documentation/ToolsMenu.html#AddCameraLink">Add Camera Link</keyword> - <keyword ref="Documentation/ToolsMenu.html#ManagePlugins">Manage Plugins</keyword> - <keyword ref="Documentation/ToolsMenu.html#DumpWidgetNames">Dump Widget Names</keyword> - <keyword ref="Documentation/ToolsMenu.html#RecordTest">Record Test</keyword> - <keyword ref="Documentation/ToolsMenu.html#RecordTestScreenshot">Record Test Screenshot</keyword> - <keyword ref="Documentation/ToolsMenu.html#PlayTest">Play Test</keyword> - <keyword ref="Documentation/ToolsMenu.html#MaxWindowSize">Max Window Size: 300x300</keyword> - <keyword ref="Documentation/ToolsMenu.html#TimerLog">Timer Log</keyword> - <keyword ref="Documentation/ToolsMenu.html#OutputWindow">Output Window</keyword> - <keyword ref="Documentation/ToolsMenu.html#PythonShell">Python Shell</keyword> - <section ref="Documentation/ToolsMenu.html#CreateCustomFilter" title="CreateCustomFilter"/> - <section ref="Documentation/ToolsMenu.html#ManageCustomFilters" title="Manage Custom Filters"/> - <section ref="Documentation/ToolsMenu.html#CreateLookmark" title="Create Lookmark"/> - <section ref="Documentation/ToolsMenu.html#ManageLinks" title="Manage Links"/> - <section ref="Documentation/ToolsMenu.html#AddCameraLink" title="Add Camera Link"/> - <section ref="Documentation/ToolsMenu.html#ManagePlugins" title="Manage Plugins"/> - <section ref="Documentation/ToolsMenu.html#DumpWidgetNames" title="Dump Widget Names"/> - <section ref="Documentation/ToolsMenu.html#RecordTest" title="Record Test"/> - <section ref="Documentation/ToolsMenu.html#RecordTestScreenshot" title="Record Test Screenshot"/> - <section ref="Documentation/ToolsMenu.html#PlayTest" title="Play Test"/> - <section ref="Documentation/ToolsMenu.html#MaxWindowSize" title="Max Window Size: 300x300"/> - <section ref="Documentation/ToolsMenu.html#TimerLog" title="Timer Log"/> - <section ref="Documentation/ToolsMenu.html#OutputWindow" title="Output Window"/> - <section ref="Documentation/ToolsMenu.html#PythonShell" title="Python Shell"/> - </section> - <section ref="Documentation/HelpMenu.html" title="Help Menu"> - <keyword ref="Documentation/HelpMenu.html#About">About</keyword> - <keyword ref="Documentation/HelpMenu.html#Help">Help</keyword> - <keyword ref="Documentation/HelpMenu.html#EnableTooltips">Enable Tooltips</keyword> - <section ref="Documentation/HelpMenu.html#About" title="About"/> - <section ref="Documentation/HelpMenu.html#Help" title="Help"/> - <section ref="Documentation/HelpMenu.html#EnableTooltips" title="Enable Tooltips"/> - </section> - <section ref="Documentation/ObjectInspector.html" title="Object Inspector"> - <keyword ref="Documentation/ObjectInspector.html">Object Inspector</keyword> - <keyword ref="Documentation/Properties.html">Properties Panel</keyword> - <keyword ref="Documentation/Display.html">Display Panel</keyword> - <keyword ref="Documentation/Information.html">Information Panel</keyword> - <section ref="Documentation/Properties.html" title="Properties Panel"/> - <section ref="Documentation/Display.html" title="Display Panel"> - <keyword ref="Documentation/Display.html#View">View</keyword> - <keyword ref="Documentation/Display.html#Color">Color</keyword> - <keyword ref="Documentation/Display.html#Style">Style</keyword> - <keyword ref="Documentation/Display.html#Transformation">Transformation</keyword> - <keyword ref="Documentation/Display.html#Bar Chart View">Bar Chart Settings</keyword> - <keyword ref="Documentation/Display.html#XY Plot View">XY Plot Settings</keyword> - <section ref="Documentation/Display.html#View" title="View Section"/> - <section ref="Documentation/Display.html#Color" title="Color Section"/> - <section ref="Documentation/Display.html#Style" title="Style Section"/> - <section ref="Documentation/Display.html#Transformation" title="Transformation Section"/> - <section ref="Documentation/Display.html#Bar Chart View" title="Bar Chart Settings"/> - <section ref="Documentation/Display.html#XY Plot View" title="XY Plot Settings"/> - </section> - <section ref="Documentation/Information.html" title="Information Panel"/> - </section> - <section ref="Documentation/PipelineBrowser.html" title="Pipeline Browser"> - <keyword ref="Documentation/PipelineBrowser.html">Pipeline Browser</keyword> - </section> - <section ref="Documentation/SelectionInspector.html" title="Selection Inspector"> - <keyword ref="Documentation/SelectionInspector.html">Selection Inspector</keyword> - </section> - <section ref="Documentation/Views.html" title="Views"> - <keyword ref="Documentation/Views.html">3D View</keyword> - <keyword ref="Documentation/Views.html">Bar Chart View</keyword> - <keyword ref="Documentation/Views.html">XY Plot View</keyword> - <keyword ref="Documentation/Views.html">3D View (Comparative)</keyword> - <keyword ref="Documentation/Views.html">Spreadsheet View</keyword> - </section> - <section ref="Documentation/Lookmarks.html" title="Lookmarks"> - <keyword ref="Documentation/Lookmarks.html">Lookmarks</keyword> - <keyword ref="Documentation/Lookmarks.html#LookmarkBrowser">Lookmark Browser</keyword> - <keyword ref="Documentation/Lookmarks.html#LookmarkInspector">Lookmark Inspector</keyword> - <keyword ref="Documentation/Lookmarks.html#CreateLookmark">Create Lookmark</keyword> - </section> - <!-- Keywords in the next 2 sections (before each closing section tag) are - filled in by vtkSMExtractDocumentation. --> - <section ref="Documentation/ParaViewReaders.html" title="Readers"> - </section> - <section ref="Documentation/ParaViewWriters.html" title="Writers"> - </section> - <section ref="Documentation/ExtendedHelp.html" title="Extended Help"/> -</DCF> -</assistantconfig> diff --git a/Documentation/pqClient.qch b/Documentation/pqClient.qch deleted file mode 100644 index 37765045e491861c9126dad8435da0d61d7e8f7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1474560 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� zYIxXhCnO|f#`0%*&>lkWcUV4bHEOK)1O&fKIe{z-`e^9rsPwlDH%O(9!|-j}nvsoG z0R@H_W&N*#ewH}kyYi-609`Hq-Vaa>rkwBNq%_>OFwWL^RkJ`JkJ-N?6wFvoR#3}@ z_Vx7*M4+<`d?a4WFqr-4Lk8yLQB%&02r~bNUx`!@2!!bY(hld7&^W2EFi}yA$6O`A zoSaY;Pv~@WFar?wI4P6*CC&(Ez)>|=fQ7m6g4&bwumPm~@AX8@;oCpTBxUAhRMPR; zf^J8@^Tp-3F(MX^*8{j(k480gzD~xDB#;?go?ypFGHYroGpj_U$WZ?QgB{f2!q^^5 z{p{|&yR<`=`e_o=3T{x=7CspmfW>0DR(_(h9uOI@t+U&<PknqTKqD3UB`hpAIR+>{ zTg1HSk!mj?VlP+MpISsEZ&C07f?2z;u(`Pz^ag=Y=sO#GjlZpKE~_A6`g6Ea*Y*kl zBgDx3^TRcPQ`AD<qIixAW#T6BD7I3o4IOF1wbT?%Wlv{4Fwb7xUzFE(VPe)vecF8h zG~&szx?E<;)4u!s^|rDSR^wPzX<6o-bL9X>XN0Suom9{Zs0qPsaM(;(QS)=Lvahj_ zhLfi!e};U;D$g-gyUx&v#6+v|RjP1Cf|7%q`)78@6cHc-GxB)$4rU4~M$Al2Lmfl` zgciDAy}+5T8gYmRpYKzC&m)SG0G!B~u^Xi6-_tXd*$tp8KznG}3Aw{LbGP#K3C{%p zIh^06U)$c^@t!g<Qjo)L2%nU<q-4;hQB9rqdw=j-6uIcX3NpmR#6nKnp+<KPM?s6n z!oZ=H!e<pk_>hWKFJP_7qn0)lm9l}0$MfD%55M~izm;}daAp)rCsYJ)FhA}AVRH1b zT(zR)pka)7U|>L~cWW>T+j`$x;v-dVswMZ>2T`Dm%oIwuIqU)M7ZON3X7a_E`uC<H zEo3k_%q<pIGa<AG6R6g;3iG?bBb~#>jdYokaD&G6eSM$wZKKHs!gy-MClHR#&-X__ zANh&ZS;T<QT+xme$z#Kcx@ht7C;DVkL<n#sOqD}dK^$bDlH0FuM}&#xU++(k>^P-% zd7@Xmm0xZ1X0hHsa(wwEL7A^Wz#T^ZCg>yJ>Y=7NQf9n*LnFU8pQa<bR+pU>_a`21 zibbmz1a3<G_j=gu$&~<OQ}h4;0KIgIopz>=X_9+}5~N>s7Mw=Q4*+(wA-VJ@5&xjA z;f*&*frAVg7xl9urE@1f3hL*l&I@~akgfUlYgXDi+ObS`=pAH5FWZ6eJWs={)@nDq zuSG+s=U?CQF;Wn(&jV9oh-k~mK8A)j>v;5h!(0urT&oTcCvlX&_aZwx=x!|7h5}CY zT5!@eQFOHaH8~eh_*!UKO4}Sv>&xOFdm%5pXQr$-><bPXl6aMFE{?fk8KS{U{I4I{ zxPKqRq-T!Lo5thVF-ns9zrN{Ti1t@PcZqf_XzBmgK^>ED0MU7=zMElcyU@_rI&5PW z`2Q&*rYX>%Yx*Dpkq;z~E5}U2ImKcBHxD)9sim-|G#v=Fi+|zu)CIUl6Z(JmR0$Bl zdrc@H$D7rC_y9+<;?hRdy8jxw@zRikc%@wf*ue3_8w$EpH7CAli2t`-EK2WJyqXkK zS!cj3$DEPl|J&-VDfU2Y3~cT4bk5aE58kP|U0Vllfi)V}Oh`lIgI=qUic_?wMhDmL zJ;xRM{Alq?gaCn?Kj+Z%2Qlx5MeyUuvwP1d$eG59`n~7YWE|Mb>|V~Iox}M0_`+hq z=XE#0&y_+&yCd@KoW%1;%(@*8G+<Hs+~cQEoOTNnBg4#$rr*x)cU3*QUu&AzqfXC= z3VQPWGks<)>YQhQQ<b;uypw^?#=7e|9QX&hjuZA`Y3v>hJ%Y6KTxD%JDB^Yn+;@2d z9EzT|iJX2!<XPRXj)f-Jet1E5xHv5Yi{P(pwC^ELEe4sbG}I}nnmy{&>O#XDavulM zYjWF@z<XGt-OEiw6tN{td9Pbd`D8V#GO21Y&XUmS^Bg@xIz)cOIx-&6PXSJ8k-Hp? z*9Uay$s)A6lm(@QmybK_A}41}#d&Av$vF*hw-Ho{z9WSda^{gF`g)23`w&NV>`&#q zFW2*AlJMH!y(oHnCfXJtSF7`q#Yaci@HaL0usSRNI-G@a9?DT+56cb`?05&q@VYNN z4cUw_c)962NBN$4YxoHzPh54N1w^irL}lP(@^-(m^<TUF3kR<XbUdB)b>^2^UXJhO z#+M!<<dc(2tXP;{io}8QGq2tFsYBn}6AAxf3vU~W%crI=k6;W~Ll7cp8u}JApB;8$ z{5Qb=g-E;yie7#8r$3?t7o#g6=5A+naTp<-t!mB`4<Cr1?{u7DV;0>W(4`m?vW=6+ z$^_ehgPJcq-56Qake3c#<k&9Pt~%x9PM*sqI(;2aI#k0n-U(MUI1u{A?NN{DU2zxm z7=_GfePAC0y{kid^$!rzqvhMOlNOjpm{DPmKQzCJTzBoZOe?%j@Sf)h|Ah2Txep9< zDjWa+0KNvX<VHoCK{Q1Md-9l5Q^W4LD!m<xC5};z_#EnT)-_%axeS(@yo|R(YJ4Ql z&*%MjGiaE2G9*KB6-@F4*oTK3iw~0byZuD2AJJ_EZ%l-FKUcWCbgiy}<#j}o{tjHY z#8|R?)si6kp@v-*2KrG+18JJhe#m%*$XT!w^(bqC0xRTwbZlR*gFgP4Pt0aDk8b$* zZG?fgG&+cPM0VQ#6W|Fkm)2aCfWt63HvNg0r**vuu!_yppTf!^d(2Vi?aKf?xDLFv zqL8vJofUpo*Xtllm*d^d#2(R$)z?DGWXX))70LQ4(-`Mwa(pJ)`YIeI+0TV3;MH|l zP*z7kioxyO<H^!|fnGn0Lj62dv)55qMzsPEZ}|e*-X^xY6Y~hLr#+q?id0CH3c-TZ z<H7Cno;%f-qlZKFZB$f~;sZ1%dw8IaEw{0^0av47Lf^7c)MOs?DPomn*=BOZ{XN8^ zCb=aF%%C55rTjUyCD&@8gR5l#0vL7LgtSs{7ydThx(jG$+t6k#0;ut2^R$v{8hUXm z%(|L?@36e<!s|RX<u1Lr;zhb3nENo@f>+7po-8TnmONKR)i^TMEOgb&74Y2Uk=MOc zuQ{tZ*(&rkdrGaeAyrwA&9G93d0f?qIj44ST$bTWa{EPc=|=W0Q4nkCG))8Qu5809 z>st3R3$o3o@C5MfamLopSI1z|<<s+r!{>W<uhVzAe_bL)A|$EDLz82qsX;%k<L3nS z!f8+`o-*>DrnXE(JI+#*=9>C-(w)tHgwZ}3F{`9-g&m<!m&&QVDXEWX?U>&<Z7h!A z95BRp_zw5}qjUS*Azta#ysZ|R{jFfpygkcLz{%pj(*N%33#`IEUigufO;ZjTa~R|= zi!s!`94tEEM~$%lY?G+e9s6T+qJ5{!*rnMOb!Y!^KM)rN1H@yILih&%d8tExdFc|{ zB)MiNbCgk{zABr9>sS2IjjYP!k!g*w6zRH%&W~{cy|fW?#+}EpL)E8=7|}lpYrG9E zAt)drUS}FMP;ah%`nk8!z4>&K-q?1pcLfV~XyqautA021Y?aUcW*tXgjDaPc>F~x? zBt2_XqeRxST`7YG3kJj(So+NrTSgLRMQ@ul52BaV1&zODHd9A7Fo+Fx$2~`S{qT(w zM?a{%wr>#0(0U<1-z_Et))4h%>z)Ss0v4@{OxCjF_v2t<5=EA_bc^AlX+sM*S=pt< z>i*8!!>jhvF_ZO2^8Ob3dXnRztD-?Pl9%-@6!$J1G?w&txY{sAeJIGMd1^(Yx^Q9H zx^kgey}C);t_fFqUJ#>v-dd0UBMbsP@)(*CT)#r#gb!HM9uWWl0KWznPKNs6(f{FK zvTZ-t#knmT>^J2#<s#1<Yn5vJK1a$cdpvJpx|?fwQ%o$_GJ`Omo`IroYHV#0oFJbl zQ{36#Pf41fq5M^oaRPUfmcK_+raaMDjX(9r`|sL1-vk=3JP!%5LCQl)At5w5#t!`i z1Dubp<Z_Tpj!;3}?!=Pv0(R6gRb(j+xE&Znp};yQT*JP&8?0Bu9eCIrIW;9?GxrdI z72RJ)x+Qu{vJ;sDbTG>h{^Tt%G@p>1IhR0~O<$3g9Wc71KKIB<$W^wkHNlyPTH4!l zSZu0lnB*1EHL)SI`_30-GB^}&29~q@#;ac?BNDv2*d?X(c%-FkRb1BDN&M#9VFtmm z2`}ETaHo84wwbjIAJ2~r!U{)y<_Zk+i--GVTufVk+0VE4Lp<pMsrz*9F5)Fo;TX|H zipj0ojKo|Q6l=A;l|kg@mD;)mbze<)3HSZaGT>kwioeMeJ;a>Ix|nExEv9dgS@K*V z2Axb0NJ;(l4Qj3TN4@?@uxCViV3nw+J!|G8zhkp();~pHN{WP3AYjU=g_foFE!VJ0 zai>U_sl1<<<(6flIy*;8N=iz7VS!svFUJa<NX3sx1rl_&aLpKI6ty<V(N-&GJw=UM zLv*ylkge>R*BH>FN|%*U?k`zf_YQNNBNKP)fyH#v%D3c_Lr+nDmdf-&r;OSR7RiA6 z%S1W#x_jzO>DTNkRBD{oEd4Zf14AKO)KY{c^lNsD1$dBq6Z^rI;S00DkSk=PL*N?r z<ijGCBsDeSJcjWnBYy=}y3z{%5!KqUrS62Boa);0;`~IU9EH+mx2d&ZiGcZ!>e~8` zQMR8Fm1q;UWMsJe2S&V(Ojln|5e&{E$40Ad#c{tsN>DChQn%gWCvGY^3{ie65nP$u zb)0v`IF~TRReyC8ZMmdR%fOtRpSt)=`Z^6)^TXdalLNXy0bS_I`9heEw`*UcEW;T3 zhvn6bH0!XkFU=-vike!Y@V;!pzPixn8#r=$|9qwCcv|$;v~ii6u-c%<AJ8(FS64@6 z>PU|?ZI5Bzf1`$ma5*^)WStHm8}!2BF5++C!zv<-PEYS|t>!Qk$FY~cv@1}q^oB99 zO#jScKlE!~l`FP;=NCQ`ID<<)79Ga)2xUz0Fv8MZ6js-fi_>)HsQD2T-MT^`%kDXh zo82?1qQGaaB>qwjSa&sxGn0{hZhCLur{bRM1GLOgKTw=5)9qYd3>LIMo%eb<LI&sv zkMj*XYwMMnNh|!KXbEZQ1d<QU4a(4P`a~IHW8<sqYjE8+j8@bl*sp3@pUt!Dm>c0w zG@0evi#?F&M%TG|*B09TQfi09gyjGL0Kk*NtA}%&##@F4)Rb0mY4iL@NNzHFu7WG5 zM`ZZm#Grq2QE}9A%189vF7L%ZK0jQSNe=zY@-_D@49EoD%{vfs)9o$~!Si0+b2A<f z$naQu{#n}RkOY`{XlTe~Zz55K`ttJf?(S~2+3xrNuPMF1zaLPcNsQZ@o9s3V%!F}x zxVV3}wk~P2f);TWak{D)CaEQ8o=P@`(Xiu~HB~c3L{FnK$|+`L2N+>N0V1O=oF(r( zjQ^B5=y=Rhti`A?DeZ)!3$3c4P_Vo;3i+sy3{k4`0W_DC64T?)v_(#LQslAFuWY+p zaqFjX6+sVl#iv*WKgzAJK&@F{@iJ6#jvQul&3iZmlfR{;rhcZr;)AW%T&s_pK}0|& zWoBT23H%fSzuptj(<hU2rIecne~DPGr2Zn2;?X3wGT%EEVg(_cU&1UrfB{k9{X!;N z@wq9T$@)3DDh1nd<0<u*nQdHznQJobWy<+XdEDpp{lW3O!x3u^9T%L4penJ$MrTj2 z0(V7ZSdiS5NqHk}H?|W;GYGVH8W$b<XBe9TROc9}Qb`?J1S~m8EwLO(mV}51X-i8> zQ`4f<)cM`f<PYrvgquh6mAic&U_a@6ZeKn+#O;kPpOFNz^V!nr(mel)<qD(>&0(KV z7dCOX%*1ItDy|;*_eEj%R<7dV5YXfT6NaqD+7_bYl5j=k8G`=-&Y<vQWre-h{W+;f zGn%`d0r{7U^N)ReO}q#tKOb3<N^nLKTVD(0=<>R&Mg|s(pIjN&H5H3PV=r6uxd+QL z+P;}1I&(Q#XTpJ&%=%3(AFrPTe&+A;$y;CnhIiZ&la)n|8RF#ly7hLZt*op}Mn(n% z($QJX7mwiOm%|twjwA9oTSEeUATyQx|6TyX+;>Sxmq)r*cUq{mMcOwdPj;|f;V}Y^ zMo1~^Za2>oiOPC<IqB&LAb5Cq1qB7W%C-XSpZE4@s>}?!8`B?q!ZeppPEHCaAG>{^ zQ0No<Z6}47q~u>*T#%uWk&)G-!g<goI7i;CAuRr`pS`MnM0Om5Gq?kxbrq)83g>fo z&{xVlhXl{1!uh5H_Kf2GVHXO}@9|~R`DfPLW;+9v`PurnR^TfG^Rk|%GwDhnY_UHR zjg>;ig`7Ge6eOqvzP`RV8KaHw!UHoaYMk~;tgY%Vzx;Jj+k1KO&5(x&>9xCl-Tlh? ziCVcnF5(K`fd!70%K8fNETDlAZQdJW-kJQjnp_GqAM7mGn;q8Zl-QdaHa=T8kZ8c` zx&P8k_zI1(m8P$L6Ha{mbpyM-*GL!%*dHI8<O}KR-N<<e{31%5)8DJVkryZ+c9*-V zj7E!=d|?0p0KtcMd)sxdaW$|YSVUBIQ1CZ|p!EBb-9NqP@Tio7#Jw~w!NyEXzxcmO zRFfO-CWjdjz`#kBAQ@m6Xei}?XhuFJfnDWs%0y@5i*W_1i&l9!>pn2aDbmsHa^Ivi zbD33ngK2)x7UYC=XcK%tI#xq0{$ggBjVa{zrB<TFj&gu4vZ$WYN@N!x0cdfHH@ z#d~7pR%c8d9v)88uk-i!FEZyYdEcZ|WMOJ5<aHHF9vK)ISffV-C2VMH#KyvspiE3i zP`p1|&vNk9(pnBdK=%~Njf?w|C*o&oXNMGQS;2%KGn7CoJT^8~FndT!`tP4~e<-V= zZ_>L4_Zf0qcBXx6n8tj;i9IY_G!qG1E*|ymr^M(isVkY6!$xjwYykC+Rm5TTJJ8~5 zzdx8fJGL}gyCMg*{MfwQ8HrB7pUOi&02_GyrOKP8TUF67sb>$%!4&)cbQq~Jh6GB1 zR{=YZQRQcYdKbdEnZ?yKJp)r@ic{c+rFT${o4Zz=j0SZIDLqu=h{_NJ3cD?3h~ln> zZ(L0`Ch2Wx2Y}*Q8D8(YMn6;V?c4hHbwTv6xnPvqE5<?PD?0=#MC7+byO#AvN_?U= z*qo&jl*`R_t9>B|<6}o><t;7u04m_K>XsceSxjZWCn7=tMWB%o3OG||XzJ;m?(a)u z4AvP9#FL5oA1_psd~jcDcawv@yS*t<$Z7YvxA*b!0m&#RK#wYGDXFNObVd4!2nbs3 zR-6B&DQ`kjQj$OPaX*<(k#YJofq-NC`Ml?Ry~E=T7o~u}V++{-gZs(%k4k(#d)wPr zTM=Ze2Hk5bD}>f8QC&WOzdAI&n%mmirn6qzuaAx%LLtw9W6G+km|0k8um=EAN%c2i zUPMGhqej<i-2pazJD6GMo_M%!=C~QHkccl&Yq(3Q39aCJvzc&;JS}#V#O}M9#YGLg znVEGGn2*eO8fv2hC4Vfr+bit6orqsQa4J*d0H>gDGSqAaoxW+`miT_uJ~i>F@oSNL zUE{J0I_XklZSgDQD-obdg*-A6kI-P%t1`X;3Fas?SLk=~vsNWK&=r?To3U>gqSiN{ z+-kgK^tg}n7=5b-qd?e$#iQ_bB7mE|XNv}1-v<KuvAW9fsUKgq#b8uP;qb3*gTP?5 z-7LkInc10EFN$&uSvN5KO!T*J0i&GR{I^MsEKjL8BOD-9cGzT{Nq!iPwqhx6#*7T| zNFdB!@4*4Pe@jYA#PXG>v5Jd|BqSwSbX&j4kFdv%|7}>d1(lVTf4$iW4-dEH%_5JS zo15$KI9JFO(yC{E11eHJGzfs)K3witOy`=Jo5vFiaEgi=v^4=lB1ZrK0K(Ai2ylmx zu<$3VIeH!*x3yL$0RaKfkJ8c+Q_k`6airi@r=4K{kW+gYK-mH=<{O<}$ad`9+&EDZ zoEfo`<__R)$j#wwVq#*^iV=ajzP^G#3Ra>_(F-QX+1Z(q@o3HD!B+%Gj)chx?bAbv zU)GU-_@jqF(d*AF7HJosC_&?&;^-7IrD>BdJ%s?^W{sdq{tVMQ)D)A`B^;x+&ybRr zo|pENIg&i>`#m$`{$zP}r6k_~*?_#&W1khoU$4nc$Rf;AT~tI(BhcoNw-Kj@h10ZO zxBTe!C@C3cdRk(>XK!!Ms@JZ>fK#uTotvhvre<bkHDpTI;}6Ny`KH)hSD8hWJSs0I zr>H2G8Y%fdlze4W9KpJ6BO$oEYp@^zg1fuBySuw2xVsaA1b2da2<{%--GV#Z&bjaW ze(%*PhMBJJuFt={d(9fx(9Wi&I2#;|5beM8^fNOv2=MS_<<Nkkoyqdt*x1sNwt)c& z;7G{C$Y@@_c=GW<G$b#<>5iChi8p4}dU$*x_gY>2M^O1B!S11xrSUOZzLL2ZS@5)$ zS3Y!c6(9TAsUjNi$Dc~%Q$tm0ZAE``W)mU2*j)@dgEplAuPk47y4dZ=3lYNyZ|>^` z4huzEuP>SDD~Z0HlXI$_>_>3|ucT^)3c37X+X6e8aw!`(_v3;=fL@(x1h-p8W@c(y z8V)ArN6nh=MMeMoHB%%vv#`+Rd9ej%?r&o!ZSAGKu`IAAYHMrbqodb(UVt^ed?byD zgwH#9WEaF_A)%oks28sCR@%K-OUbYHC)OKm(n3PS)YQ~GJ?}GEEg&HwlgH8!a2Q83 zKZE@QF^kn=e5t|4&(E*Cyu7!!x9edqYxF-OK0f}>AI)hx{Lj|O85vso`fFhBLv)Xg z$!#Y0nX*7^w4HZ?*$c)GSQMZFje0}nvN;n*1-02LzgkN=Wy7l8=qJJ9nXjc8|2gvi zJAPVnWij!g%U4UEk;I1OGwbnm!|`(nLg+gf<<i;f>+AETfF~B(($-c+#Hl8pP7)3y z;jj7VxgQ)`bb$i`)Q#<Z563rueWfYzHvO?A7WP%%NH}RDdUp?*(buk}Kkb_rduL2; zmfXIEAy&~at>4}(3^677`TCs_5pEIlQ&x(ru-21_z}%5=9^9?_Z#!}Vf_aKy0xblz z)GDk4gab3mGruNsI^1ux#ZJ@mrz|^PU(esaSIB0YN+0rleSWy8sc8<Y9X3B0czZH^ z7*46|2(k-|PZb%9`T#BXgV*rpN|2&W^b^Z`_bchqGP&oA4V<zVdv^MLrpbdl?9fd1 zu#c6qh>^EJTZl-u_VH5r2Zr$`5esJNpHu(<0K=3E_3$Xv=1Btv$VazMOd5T()EHl1 zk#B<i&euA2dSVDT2085c_&UD-8>FAhDHx#Y)=>};vN#-wGl(%Uceb}h%BH{og9X4t zYprhdUhW&+K_&ySM7*BNK)d%19R)@2*jNm&nx-Z$F)=a#7Hv-F9oP&IkFtT7t;J=Z zP9rBbx4PtPKQ};K5;DVUH2u?87^LCB!3{^wdh@Z!$VkXQ2q+jtTxL=-vLH-!YU<(? zdJQ^-=XfMAn+oHvkLGOV%G8F}f2tW`(kae<W@2sy-LI!NSGv1czrSv`K3?utM_x+9 zq~QDLs$fMMQnpYX@Rl^7z#AC_1$dyu@%ufgYiI~W#x>PhmqhKFnZ<1x%S1-S#Kic$ zJcq)-gy!;%(9?MnlH?|2E|n{gq!@Kx-yrFCd7D|A&(~`x(AymAB2%9k*=k!aT@)B~ zcDk|JRVyp&|0r~IbJ@On2+_3{^Ll6~Um)i9rAgZKe|=?2Omrj+xH+0@2&le2B#6&V zYqGdIlW=kx-l9y9M9<}yQ;@5ys7Pn^u)kk)QEIZ^=Cn7m`t*@m@<WnYVKGlFTUW5k z=O4vclZax)>)nAi)^1_W-1_unV>?!k*c8C>%U#Jfhffy~9oSL2S`r}u_oC=AGJ84- zGb?xvgofAoe;6S({`p&cjFBKPdgno=R){B2pi!-#@ZQ|q-0rW0a;NFz_2Jdtn98?~ zbkMgr2EIb_9j>QKZs4)uhxf>YoMywA%B;V7dl#w=6pH@U#*;cM5h=OPCnt;bJKqDq zBm6JdGcb!_+m_Gf6tbQJyS<Bx3zi6941(=cSY?L!&-Y)te?0p_FqJneixv}P)cVTF zX_HZggoLcyE%(#Yf!VOy-d6dxg<ufy_H*_pUz<A>uh*~faem*wq%im8$)-R}P0hXW zRZ%Adgxt?y&&zu$U0cG~?O6HPm-p9Ajg9!9%|}OYn53npU!TqesBv(3c-s1Lz(Qtw ze>w7r%w%+Q3_?&-<!YqUk6Ph*XxzNGsL1VbOWM3ZxfJ6=sQ>N5zHq`p7K6^&N^Ihg zsjSIf>}s3u%X3|QU4I-LL|}9CeSUs^m;Boe^9LA!mzS@2BAd(pmuL4yZy0j!<CQ{? z;NK^QunN11Tmc_(`9{C1)g};h=CN&R<}uti9X)Le7fex`B~vi4bIx^JD}~2jQX!QT zOW~rz9o{;GMFQOk2fFqllI5Y{ke>^lkD8V8vCbnU-kHV055s<``8>PMS+e%~tMuRy z9B>b!ra{^yc8w0OLhr`mhJM10Rw@urAo&OC77qN}k7i4EgoK5^<mZ66cE?FpcJ$@x zF7NQ0o{@Y4wt@fv0K^Fl=+owTw;M2@Eq8IeF*df!B1Z|nL?b-5k7O{J%&4efp+V1* zF?>$Z%{|{Z;B<R*H83!s3z@FWTKE-*!^O=7(S58@9SI*bNI-)Md$!(o_jq&s>zDBK zlNMgB<}*1hEj=p+kgca{dvXGNH+b{kS>#dj;N+6)hs<C%X%!_O8XT0AkpXKYOsF^_ zOhHj=Yhj^g!od7|qsIA~ECz;%h)Bp&hD;jcx7AjNK%2@D5qEQQvNWHUrO%fp2Zd5I z=CT~j;9$vQGmA`X;>hrS+Ou;mf(D5Dc_lp`f0oqLs5Mpbq5eXo=~8`yQ<>W?*WJmx zhfqtRiIhox-+-?WCTQ|moA1Kir!)2}UR%?Rqw=KtW3F0H)si||A~EvVW7llmoxQx* z7=d@Ic9eSXj#1Uh>fp$9y7-Tuxb&MKrlm$<w_o|w74Vjxj+>u4uU_fQGGFA*z0f1n zhp*IEA(AjX7~RqF^89cGAxM`3^X}bP7Drs~CaQG&qJF2ZRBR;=7Z(!o%FbFotNAD? z%3vOYo`_<iOmhDc{ysRBg)S+%%4>dN8TEs}D+Q#Z8^`<0<sJ@wlPc$(ejR?k0ElLz z`iw~o1TOCnNF?}mTAYtH4D>hyI_reFc3?2CJR>6D3MYiqs`Qc!+C5X#HP!S?tj%G7 z5ZyBjs$4@ePcg9oVu9MzV+I=motKAUwQ`Lr?tnAf?GVn}*w|a-SS0k0R<F-%${}F$ zciw#x^<(x<CSUED%5yMixzhCV@>=(Q8MJyxqJDk0?HjH%@O#;>-QG1D<Jz=De63t6 zfZ3DWmO@J@P>y+PR%K*`rb;2lr&S?(S!Jb0vPO+4S0P6ok{`WWIC4~nnkB3$LzRx} z!?A4pWG6!J9R(%CAMp*lp8>hg5EmOCztwyU-}%?ZRDpy@81l`<g;u-gMRBhG(kyxO z9)jvyfwMH!>JmtEju)z>)Oeh>eh(#4fBo{M(RPu=RB}~39S_g>yt`jUE%|W1lE6!l z5qaVB@H^wqZfTm&Kp;FCMKNJHc9ZZg5T*<*ID+vf(%ZUG$HvF^UZTZ$=J4k`5+)Wl zmR3wWEhYVLBjZD6`;`20-OTCSexX~5(b3UqQkUZgzaIXUr|rg$3+MSVP1C>WzOGOI zK*A?QkLuFwBK!17i4t>ZX|biHtzNT27kS@_VlMCSaLUq}?`k+SBqq@SFGX6-6N>;3 zZ~XPI$cLnd^WBk?latHK%cr}uzJUQ8oGX5vHuapB&Ly$MzDIRQlLkv(<~dHN5*A(6 zJ=-!yG5*EYp(aNDzf{~_@s%93WRxDMZkaS)a(R^@B0EdkCO2Pbjc^-X_QwDK0L8(~ zqRn6XKuuk(-C%t%nI|SDwxnOQfQgKZoW`if?YIFP(gttepDs5+K|#IUb-fLlvec<X zsxgfn{}4tdK-oKhl$F8O*-Gj@&FntKA7F(bu=r4q)!C)Dx-zH(;<=P>38nXbPAwrQ zCd2>`BhJdkR@Ydk-R8e~v)uH`9pLV3Ndv$_e{r#xpvM7`luDsFE&;(vp|U?i<QxI0 z^)iP8yJdG}7RR=+iJ0(aO?S77#l-XN(`HOoCm~y*9)ZE~@-leEd&2y43Hs>~X&F|V zb>i%t93mp3)Q>uk6LSFyIeZu__Jld|IB+4Krao!m;nBg*5e5e%d`bVH>rBvWj#dU! z`u)`qhs~%#us{WgpDs<xseV%)zhYiICcFvJj!_aizeIW!w*xmc2Bg6tVA-F@jSCNl zMM0s4-P-I8bJ-hJs$lX;ivMM3Z{KM;ln5f=Z=6nBAn&=jxPTTS<o9g`IW1`IcK`xH z%ahjCR5(^=UZF>ImC-1hxfhD$X7Wz5YDQZY%F&te%(ZEoD7n=}&hBqxE>3Q292@}! z+2`XODFg%;6qL9xkY@?tmVa!4zqc2+S9eSw>6{&1*_fIC-dyFfLv>-|!2!Zl8XI7n zlDN143@t4=9X26TU2@J<)YRs>-gNz+56}SJxAQKt-cVW&QVNC`Uc(m7tjx?U&TqMC zB!1`LBx%?t9k!PQecp$~JDE(py1@YQ-#CSSD1)$`Qu#3Ecmedr5N{8K1ol;AOh*6X z<KydUTL5zzB_n%d`Tzy2?y&>nm-m9O$8AT6hBr9W!hREa6|YVv7o=}}$1)+8RCMKv zre7P99K?RRdKZXZ(A&dEP#43Lhd8^qTsgbU(dJqi=My$kaB*cAl+GJEZ%eyDSHi+I z+}`lkw@bhLQN#^ZDxJk+HJ8ohf4STp0T~Pid<cjAis$RIR~#`B29!J*HNAR;W~c8% z=4TuK$3tr14_FlP#iDQ#L%X^JGFWM8rASd}){F?gYnrbY$1yI|xN>)7S>Pb>_^3;z zbYuwO9PbsqUS3`L^EnD~{qUI}?)?G@_Vf=a(%U8`HzleZD0iSMa&(&L=;?26Zr&pi z8{3&&J>~WOd%pOwI5RUdtU>7K3g5B&V0c^%#m%1vn}vh|@s`$BI{An`V|}B|`ro1v zqL+_z$19HkRqztc!PE+`ot_Eu7GO!+(lR#oIg1Dh>3izw@i<@E#m40Idv0zmJ96p* zB1G{q{Bm_^wvYGsPqus?a%JY`=3-;z1$&4G`Vj7Y0k9=1wi{VSbiMlLBz?-{wP(u< zLK8%V4l+u1vq?3=bjEY9Bu2fj?t0N5s<tjO6|(>U0LD6=ulPlyO2Y+5B|!iO^FwLu z(uBk2Y=?}gw}1d92_`Uqt1SKg1H~#GsUv`x%!9~B_ah)TlvPKYoP)z-CH>R0bSHPl zK0|ufVR`l7Ho-zQlh(7;)dSWw$>iH?2J6m6>t~z65~rgY<GEoem7)rR`VXEvgW-Sw zdLdx%?Cw>S=n+f?S&B(M@}xrnFn{WQMUGyURhf&AK^H3z{i!tpA&uuoHv|wK5phUE zrUcVlLlW?O(H#V3T-#hyLc_<my0EY?H`gE$M?CS34+9pOT0UD-JK+8s=G4~K)=aTN z5-mJRt$JR2tdPv)4UIf@s5~}<L+-%#1<1u5;_ti6M&K_mUt6vf+}v))2srH5n)5h6 z8_$*u%@pC`;!^VaWv0g)+S-0hkS@1gfQrTANgY*JQMo!#8QH1L&CQj2**yaT$l{zo zRUN10-MjYu{4^=4VT*MXWd6%160nl(qz!SM@Zp9=h?4vG_)Mo&*i9Z@>v#CPIUFYX z`P`+ZCV%)qN%?`2X8iH-p>nx7p=UDA?=LeW`~2i2DzmJnipY4yXg1$+8Pc)%Tv3^J z`)-Yt)kDo*y_-wZiXnHt5V;U)*qh7<gJnyBZqsMj0>j`SlH{Dqm?xQ%I%mv5mHFT` zWm?Lnf_euD3l0NXp+O1-x;yL-;?biL_-o>MwD!7PRYf2Gt*t45C*#7#o^QmT(?I*j zzh0qW?(gq?v$E0Ah}QxFLpi)H3AE7?{gJU(?PQZYQ$8y{NAWNzL?6o(D9@&$DLZ4H zySCPRY9n`MjuEF=&%~<KZgoAR&h>=^{yk|5Bk}*k+4)kcQtZh~45X*0M-%gDzer=< z%2j#a)~Oq@WXLhRIy$+1He%_zKPs=y%kyxMp!&dz71hUvzdEqsVQIJ#pLf|3S-U-e z0ZoP;;i%g`$#Jk)zHktailXpPp{b;lkdfiF9tiOGJfV?9tA6`QeYjX|VW_Am?#&G( zr>260AmP->(bX_BJ-f~G;yRa_xc@gSG^7muv5-jE^}*W9P6UQnh?sFgxOl<C{Ubg; zzL&Qb9v%S{kRt5l<VGdq=vqNQulO2^==TD~Ga^3k{Xs&FMzyl2Fd6XY&r(P<!E#qX z0IQ3OznR&_UsCuGWqtkFZI(;=IKt0$3I=l=(kj3Chv*q_8q@7YpUzIJ5oYR1E7F8F zzdf2*%DqS_1CAWaUm~CkbbU*NWwfi1d-2m4dY4;=e2<lgjgJJrcMbElw6u7&$a#-3 z%caYSWvOjc(tRyRGKuO{FBIq~NWz%;y%V<DMmI-*>H}qI6T6e7ua{~NAP%5qX>hZ$ zyta`VFv(!_(IW~8ie~@-0LOH%{z}&!_j|fMCFb*{Ij8H{b!O6UhXqvWK7+MHCdL*f zLGs`41>UU(7;ybv-yVn?Y6t^iLL}c@v1~>ih$TSqlbDz|IXTH{F;4Rw;Y9ehn`XfO zbixXJS1twbYm-9r_%QT_nUt6aa{T141#Gba6?QGBd#6P1Tb@^5Ao~Q<H21QOB|_BL z($v&c)uG>iI(Z0WW$Nnc(p2awE-v0LlVOaEjAIhTAnd=tEFT-Dt>2p!i{qHI`1pLk zjaP53rlFRhr5R7G!sC9bY<geDo(&Pv8Pv1#aJ4_4yZ$}3e|>6v&40Uysn7Tm9+emu z3+~Ks)4h{LR*MPyBYK;Nzas#9K!m@vN2W93@c{6rGUQhWP$zzjM=;Sah%&Db5$U<H zkSd`(H~oa{m7+@AXdT^VlU5{uy3*kzYR9{%?!>{}x+@C+%wEHofTdE^8s!ptBC5x7 zuyC3H`XVljLdz~mcEsVi;ncu*wD=E4y7KMI5jwF%i>S3?V@)x!zJsX(TFl`Jt@<^e zb3PN3?Vmq?uKPbRu!1Bi6p3I@ukH0%&KWdid^{=+P8yg$x5o={!g;^@`x7xJff}<B z?7lBpU<bY0pFqK725EtWm>7u88FU&eJkHnp`uf142o_MXdcVsdY7)Qegh!-qX4}~k zrO?n&u!Ce|WPpqv1qlgEw4k6MQ!bF`gS^Jy%IYwi%jFxdSDo*JbIe*`qshD|=f{6; zm3ucb4J)pFJbdWty}gkLpZPGnv~f|Nii3fRH|_mc3JWm_!_0^9%b7hnn^b`I-I6kP zocGa|c@oJq)6Kd><r?`n01`ju%eLqHd%H%j<Mt-Qi4OMfSY$oSh`=&ib5>i+R8iZI zG9*CS`Tb+3;Mqr+PC0?i)H|0NNm*G+iPZo7O;x2`XOPR{qM_x*V6&qLp$^0nK>_Sp za#i+9=8JV^QP>RRB<`2%-}rpM3LB08IkI;%IV~;V>9lG10c_m?Ad%i3No%_88=jqY zz1kZyE!_O|>ler`f~MU`DI{V|nQ=igdYr9D$;sI*bBMWe6AO$?3|o02q~hh-Ex!9s z%N)ia`d}8HGS9*PJt26ubYw}2gK@yC(a!{(ildg}1I5$rncBTgUtj-OIg<7i-F&5% zh&JLFvqR69CNT%*%Y}l~&nm3Gn%jJYzYKO?ax&lY)0q;7EivIoev@|h@XpSVb*~Wu zkWf%FGc$MR>j9@r4YRYVUr0wsM?uw_LC1($V!Tr+l096krv_Y4m(;u<1BMc*K7alU ze0Ppl`ovi@-R$J*s@vjB1vIxUAiV=!y0;BdfAH^Yy-Oi9$HUc?@U!(S7-^V6L@5`y zx90T#0078~8dbVnjvL)y-=lyi2Xu0^euw#Zc8g&Tq;q3I&_Ga1irTg}L5=^5w}3!b zrA|{~mTOCMGfn6$&<%=bU|^u2;9#01d#Ij}nC<-hr}m9OPgz9|0}rj%X(kQm-gTaM zy-90m7@Iwufxo;`$mQ;%-%`4{_P#ygvKc=)ZwdgJZZ(Q{jI@+gC$3XMHynNpyVucd zmA#(956U<HgFCS(9FQozx*f4;Wr~tN*gxGuK*7Mo5rSZK(e^f~urRMTG&6m6x&LBq zl?M~vP4aZ_H)m|_<JCkOlfLiOs>hCYQXc}&;^J~vR@T2~uzh`0R8$YQV>-LLSgL$S zf1FJGd|x=ZxCDIPI-<(U>+7!uQTR!z`<Y(+4$s5G{obSC;^F1+dmX7s!^dgtY#nji z+}gr?eO+&`$-vV>FEyRs8RGM~p<|$Zcqs1Zmo=fMFQ1ISz<Ye`dTw_Z{#l9~8(S>@ ze7Ml@^u6cn&+DjWZ<$Igy01^Q+T(@%uGBU9u)5AA@g)wiipl85;ziHd&I8DjFC3i> z;&AgD0f6Ngw9Rr0DsiX7`9x%#Q>_y??P#c(I22k4Qz)sa-`wvV3E&sBw5cf%4-dz# zy^%<H<S1I#R?Zk*+S=HX#>U3%s=c?W!z-5ov3RT$*=$ZFw9pQxQ(|IbBx`CNV#0r; zLcSdHlG**_Pi=#}B*WIu&g^s3hbX%;S;SuNo1=FC)LQs*s9<+oTnv~`r+cdmmGi)` ztU>_cTS<ACkC9PcPRGkHv8Y%QK685`{tu>zK;e%fZ_n1Nhv$*BS0@h-5>Cs>-uEcK zCUSM^Z1Diz=m;kl4+MOEU8SXCu&Ww$%+JhR{k=R{YABba+`8~2&x1YcYK;&xjz}cX z5rW|0@8-qQ`R{iD7(46gw!n&C=;0>y$zfcA<kjcFdHQNURb5@9S~q3Llw>UHiRN`G z<Z4sAUlu+T?*2<B#EbvSE)EHa0lm#}-Sl+Wr>PGgJ}5QW#}NtG%MRk&5FBGj#4+gp z9Go3J*$P2$LfKZY(5I?EBj&z84wW;&KR7Nf{^4Kib=8@BdwWVSS?|GwgR>8k|M`L` zkVWukb7=T<g}2q7U|%Vg{<%-6Bv!YEI93S4fngEbsDsH<SFH#$;JD~d(Nw7TEH3q) zd;aIxt0jST6}}e~W#fd5zR+>7sMpN9-);S1oD`g|ySSEJ9mI8#y!0GQwQp?|T1<$C z1#2$<0mCsPGm~ZlPjzATfB^TJgmZGS?_Gi7@bIwI^3?cvtbta>W2?O)BRQ|{6m``3 zddD3n|2IUg0(r%+zl#-o?hdy%4~e}th3|;@EWN$GTD;!hoxhI&007BmaT(7(Dm%i@ zo9vSCsJq=sV`812;p63H0g(i!Yl*>|f1`UN5Fa0JxWB>ayfgSBaPAi%T9eVzl97Q2 zqQHGI=r3j8@7As^k6?f*y|(0(RD4cOpnLq><Imz^A{BHT;loI$Uj|;rh(;v~vm*UB z8v;owdU;=^KgR51<*<Nw6Lkd+gonip1W6vdUKLEIe0Kb+T?VaHpl1G!Cn|`Ac05&e zZ9iItgPfxaZ(^yReIQb;TwAw4Jv-a?>M>^T%2j!7^4n>66Trj6L!CM!koHO@aQX1; z<8khOzFN-QB}iF;M>Oq7@A&SsFj@;{QBiBrPj|bp(w2;{;{8<~kHNSHFE84mAvW%p zo8twRjAR3?2na=OZ=qccb$+ksl8TD<n)s~LO!eQp+}vDR%bF9}toyrBX(20+IyySF znjcdn0YUNvRA`~wOEB$4!jQ_*=23xPnVG+XgA4a3exOTzs^;Wl80+%6^FFPvQoq-t zt3D#(bGLO?M#p>WpB^5bSYMwR8L6Mo(;`^$`BTRQiBGbiY}f(q*%c&<W>H`Jggx7& zN^?xD=dd6P2ec;)xl>b9J8P|XcKFzYm<qBYyx=29y+J@}>rSKL5JUw-16q{l%--JK z;^N}<{Ev>eKMz64fWH�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%0Dk?s`ARAMYS!D= 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%0A1cPiH<3S|UX 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�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�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�w`*4iNQ7W+_nw_BUismS$>FOvn3K^Z)@*V( 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≷%NR44r486XJ<FJ7OJpp`J<s&QeeB=YeX19B`aZr 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�iDz^I6oH|t#XPj(YA zrHI5)CB4yfugFX0aMW8T^n3D$zJalhcZU#1AK!lLm;WpHiYQTq=F#N?*8XW%$ZM4= zV1Li~9y<uvCl=UzW5wL^HFmg<FZ>PCvU#sNTvcDme~Ijz^xx9379UN%0D*4yQ3(;; zuMNeRtf1A0*}sLIyJ_vX=Tv`=J6Gke+Y#9tJ*4(&;6bZGfM<#{5viuXFBNu3y+$WN zHJ>yu(#VsM+FD}Ql0FNc?BF*QR`Gv3{$LoQrXuC_M%3R|W%D+g;2x725bf%04SW@3 z#$ZNLEi{Yip&wwjj`;)o1J5D=bN*NVen7x}|4VNE|DXS8h+m*Gz!m@)1@LnK$L#;K z1-$$>kk|V1uWUIM)k-1$U(wd4?nxFsn_pxaMcKzUlH&@=Y?Dz}XyQI(y9dSOI@%le zVl5Tt{}DfN^bt7^TojVuW96|ZAyRF(BbpgA5y}eA3n1fJS4>+ch8_^k=Nj%T{3;h3 zr!0i~H#6D>eJQtpIdrxBtb@vonJqQ7ZuL_&n{rNlc<kT5{MDGt^i!$CJB5<4t$X&< zC|N9bMkh2P=j>=kU{p_Vy?r=jX!S5{0MSedEMDgqHnJjkib>?bg7An!yI`{cU1~FD zwPs4P?M4Fo%7YP2bc!GhwdOdo{BCz=ugGR3e5rprs69t}Uq$eloB4;JYVt3tu*<Ko z`|aNl272&4fm;aATOsQ)@PvIyYG#h%I^ltEBiSzW1^0y`Oqhh=mQ5|Ht~jr{J~(*E zXmKTW941SOuGCddL)B)=ci*L*dwv!;;e`@UY5x?~2`C-kdA?Ce!HZR`eIm)t!9(vu zjzR+gi)v>*MeI}vN_p;aPTi&7sBb6TRmLxGH=GT$_S&Y|bk-sSu20d3e=kXeLxu2Q zu~1z(h`(&Qn*D}Zxr0wX3YZ6mxNJYN6fgN_xfKM3Oz7^;QsB=y<QHH{e8+~HEpTHG z#HHf`V1#R4<``3+7c!FFJ%lKFF{g$g8L&QRIy04YZk@a!6dxTfJQlhYU^NXOR1x{z zAz7z<{12n$ATYF;b0{0UA>i(abBZC&V+@G<ibQR3^#4}(amp{G9f_iTqNvx*(^n&1 zbJ~yXQL<uqFK#$<svjeZ)l|bE%Qc+Ub5{RUJd^k<Slvb4>CuN#esfNV+_wME|9_xO zAmACm%m243(jrh53@BLz2nYdyFqqbmbq0WhdOkFMds<#$%Qhgk52Y}u^W4dmDWG!t zZV5S&7eN4H0GVCvx?=)a$)x45<+_~T#ZX-v*MD5KA|5r{FYS}nDXT@J25iaJIovr@ z($LDbspmdemg=80QW@csKk;j-JxsmTh-i?$!+o|4dmi7-&&r&zRM6KRuX`H}Q$`}n zsw%ua{Z5?SH}f>Ar1w>G0xd<ENo-(`*IBs4S<?5gav8x~Nd1tp9|!YH1*aCewaxQQ zk*_+mhOJTFY@QbpHlb0o%jzfjBY+6+v<l-p_Bkp+<tmA67QG1AD^Lz$2vh;=?HK~* z6KcR(LapEFKYM#8v>5mqreQ;afwGCdFpDgMz?P?aEga1ibl6t89R9NtPRUJ$eQ>(J zJ)fHFU%H!3WpiuH8^lYiumi|MF{)%;u+WHouv3nQk&tS$F?d6ot;Rgc2lO$pbK<lP zu89ih#Y?(}*GQ6pHeNJg1|Vs&u)v#uTT5T7gF2W!dY`9hLZf9cG7VPrZ{A7)4<Z3H z1&3QiZwUl^9+gNfGLbSL1VE<X$aa(?reSprTDXEA9&cnj>epIiKh#K|dI=GUc!4^y zCE^TflXW;=pB;HYmeWrvACXDjR-H`ObxJd?y13edNm$N54?mJSBjV^3E9=gGJqAku zlHFT1EWI7oPkK2K{Y?!_eg~Z?(!Iw&HXw*Ayf-1dS+|EEDg^HiXoB-)qH8jE=CEic zRnq6BY?%<1?Uwuv*no^JM6(BHv$U;qX{bcIX}C%nfR!XXu}cbdA-}L5xD`}+a4FY} z%a3sBY5o;V-lpu<=c&uL`xBKYl15MPtYQWpYCUols(S+Uefl0Kp@yQ6Wi24V^@p3_ zaMea*^!w|Ew4siJo;Mr=S0t_Ddj|G2OiC&K`!=6Y_3XFE`-Ydz7r%`Y@H}FnQS`|O zyW3nB3>{`zn+K?lNu&lXM};7%G-&^WgW(;*>_Yqt?8!5*hew##BV}RSKRZWY-j0uB z&CWt;)C$Jn`OJr=<!Tba<WlJw<BsSkAJK2Huk5yz|482D`fN>0;J|sjAKTMoXw_Y! zZnwy~aVNA>n@3Yx+$|u_C-$FM@K@E05%^9Y4!iaqGMb%Ipq6l`z7#mEN#Up~jKjfO z1Ss<8c>4Oa|t$>P@Jc^!hu-mkZ3^I?3H)JVsLMesWA7F8<#(OjY+*uSoD>Gi1 zS$uH^pj9+Q8~Nqbe&PF=yvj&%3$;-Ui9aaxRss_gWO=?8h9!2qf-03Em<V5wND&ey zV0CK<uV8;=78B6j&bF@><ROQs{PmNRqjVZmgyIPxoI7k_SQO&O`k*NMW*LCq9F}`u znr{op27(`5RbZg;*CCA(Kb2&f7>E?y>w7VDKu8ySgXj0z7%%BaI<sRwJIBFxP7~G= zVAiNHGUO`qikz;+3msBgF>2CJuU}muLhI2tJl!&dBW0S4jC*DqHR_d|?BnsSU>O|; zHKMyT$#QK4Xe+wj^n3)3C!FVHTqXu73wiilEk5oMrA*Vv30;F@__IAbxe9N8KeAF8 zWV^wxqCwJ8a|-7oPaW;2h|?JX>yhNc4aYya5B?^_X{JUgLo3a|cJw4bnP3`Ts;jn= z*z!prqvC3>i3!DRTk}Lw_`n@$)xY+c+#CjgS{y6~4Y}H&z`e1lNGDKq;+IoUHW_+W zLv8Bz?;?g6kT@^r6+ZW-VFO>TETOiVH7C$Zz0r)L&MYGpC7(xDW47^&j?DLzjHHzV zslQ7gEysvV##)uQnV40+>MBg9K=qz*a?a>l6IK7nF8_Kojf}C}UiZ8o6i<0(l;$^S z3%#)0^}#YQ&F%n4ch>-WZd^%ra(>3)`2Oa9A~9b~H#;mZjHDw+uf%=bqNJkPs!eku z4SozY?N0eqZilYZ!-9tf?Z+FwI}2L;4RjY#i`Z>%0?GY;4zmAK??Mpugc*KI3PT`t zTUKP%h)N}$%rw^1fu(T<K}LJ4QBs0i`Ij&cUY;Y*j(BOnr31wccjj>|!PPjqI7Ea0 z5wfuD)$ND};?g&RToNgIz#m>KgW(6Qk?rtXqad`_4XlCagQYKtvz|o%@;iLQMU(!$ zo0>oxo>DGCIsGg>BiEMr3iUBG&fw}oeEcs@y;@<xcj!vi-@BA%;_$Nk_(PJg0=f1^ zEqu7hE0|wyGOuHihyARO+6Os@@WH~T#a!V*<>K2quwXVZ2Oc+xPzBR|pah~128xqo zWLdafnmbz5kJ|k9+T9}sw@)@=_QZ50F#MtojiJ%Gsr7ZUY&VsDz_AyX3M_yi7f!Wj zG`|{ULRWHRl4&_Z?$YcQtA3L&>PSbF2M3p2J!oTL(l9)jbHXMRd6??qFyx<OJwpt2 zZT)Zav+@JFZ?7-huJ}#d|Mq`-AmG0LM+l&SNkD<W04Yo*fOBNhO&&SFJHVB6_5QN+ zw8<v?OZ$fk(Q4QqB<tYrj<pr6<KV975Ck|b4yc}S_lxhk9RvGH^Yf|19dGxSbNz0` z@QKN&LSj@BP#_>SXh&p#nQ;R69$hFTEGP3$PY@Vr3>bwZNTyb{yhh)PtFh+h=CgVk zrFKWt5{t@emuLLOuhP<|I3&t~7WQMMQk$7JQ+ri|Z`1v@@(c6iaEC;v*wok-F|S&8 z^<A_}T$`&Ftl;6`;rF&X_*AXt(9L!=?>mF{+3IW<1w)zXvN9U*0XegUiHY5r;kS+5 zA~T|ke7M!sL~k}H!)uh%zK<9XdGhKhSOyr(bl*U2EOhC>z9zNLDU&7F6o<ANS7NQ8 zjDyrRy$n<#S|je#*Y{5A_|1pIFWk#{wSYJjCu)B_1FBDG5Fku54zz$PAX;ZY$5##E z3seJid;otO1kmw;sX<o0B9#;*;bCxK05dzhw3HZN{qsL)CoCukz^8xi{I7sFFbiRM zK(^G%+LEFs3*bApi@2tXs=c|3yOEO_kg%z}u^ExHt&xS9ikXqAr{lO80H6lkDJ>?f z=CNV?`ST+PN)JrBO=oCoN;Vk~6eQ(Kv<x(aAoK||l*eTBCehZOq6x(Q8Pv-T8yuI& zJGgy92ZzgHZ}xikpeW@3(-2F<E{7H-6xg|93*o)&4JR_ii6xh+&jPmQ#4O|s20@3W zT~I)B9~QWGVF5AHn~(L)`oMGw(_^98Z)gdmD)a}DAjgYpu<!MT6ZD`p98NC3jwPpO z90Em9s2(w3Zx*oxPC+mQ{9*bqpJ~gJe(LW-2aXI<BKo+}pl~f1_%Mj31MnRrQ67+- zIOMp3_-Pm@yzEd}93AW&TrUvY7E-!)M!TFT#3Z=oNRfiVh&k8X6X6}UoC{K-3D-PE zf(@4fYyiXrXeRVuIk1Lcyuo^HB~7df7*oO@OWm~$rGcE9|+^#=>ML##Mjba^Ny zuRbKhx8(lqobW;};dEgcFgpG~wZTMSC*?xJa*x!&y+z)zpWfXdaF<elCO&V{Y9VQ( zP!){spNVmzq1&9my-``FpKVCJC>ypEqAc&Nj6M80l#!nwEQIYO6Rt0%V^9?>QO{Ip zIq|Q#6i``l=z^eVykKUP`2^cvKwwxvOSb!G!q~Wg>@R@u#1+J9MGS-bkPhYnw}M(6 zP2FM2`lo!HB_DxTKmsMiRY0=zZwI)E)$E?ISBf*-_hf#dJba@3>@WpK2QhSFwK21w z@&ZF!8lb*R+q*?d`v$6vln=BC&g&G|%WtF*X44lJ6x!10DUgte>V?@V&tPG3heGkE zuh@n$-@mMV^}rg#-icXM(f>Zkqd%hN>VX_DN)HBNDN=9y2kwx48T;0oR^11z>4VG* z?@(qU{9bJ*xm4rAgW*M^OMRe8)Qi6`#akT(@$=Ud!4_75K<K?$&&Cn<)%I-eNTj)T zMeZtIhoPt_V$_%ekZIXD{qR2f^HS!sj!R7)h2qr*FwZf-QK`+|UD{lF+WXOzWa<UE z0H@OT0`fAj1hlZ?a$xp&LN#BrNw_<Ui@os3iQ$M4vo|X{f4*V+oxfj4MK3^sYdYxI zd=lhhkc{j29OpC<g!14ob%5|qr+0z-<}FYpR6ls!B0|L-6#jr=c04)L%D>h{dI9kW zL1}F%gCIo*MSv0Y-**S*u{`1T&jqdML{dC2zaZdkWHi-@Li@pfRi*2OuUM`T%NpUt zPBwRG{eUOv(tTgk+V&bg+*zDR{w^eqjypt@8W0|b1T&2(B^Z+;f|*ay0^*iiM;p~h zTSW2=U<41PeC|O|p@kCy-3DRWi(~v8;*(VVqT>j1v8AI4>6hQEz@!BZ3fjP{B^HdQ zbPq@PHr<?Yl6#oh_b?evIOwc}?UCkQwgV|3n0Uzvs`9D*edm`ra;hxBZpQD%S|?$E zcjjyRUa0}fYV<M$Mi|Ow7yJJC2N`J0INouEjd&=Ly%443x63aU!lsA0^zH5|3Y{O( z5fi-w7ARvEG&jj&al1DdshNsYnT<_IX1^nE9FGtF@)(?$#cK{Y)P^p5vN`QHo<VJr zz5|LYO;Ymop<~U%MA6A5kb*79!&Ss`d!yRGdzo5A4&x&I8mWvHu6Xco9yv^(&P$LF zl`UM!roF+wMW^!px@u<<o(f>}<XPV+cmhw~T#+zeez@x+<+|rY%>bVXC^283`%N$( zzvIV-=0V4DOh`;gn26Uo?Oig&CcHW9;EzDQF5SgkCv1atWJzCrFZ+zuH>KWYUtgWI zk=I~MGZi`hw01KZTCKnW)j-g0lw5>hbg+E|7!}u(Dw;D6R3L+CG~YP1C0F)##TFmQ zI-ymJ%ktu@UM0@UwI3p_R_%-_YockVn$3#~*v-HwHm_o?A}m2>=?sk_H!)%syWU?s zEWdU6hQgv54uHhdW4<MYPc3|0stZa^IgbuS?hFtA{k^V!+#uQ!5x-Rhf|OK4?p|PY zb`euD6pB+rh7}T4NddP)3U`a+{T*+!zWpSD2W&W$3()^Bc!a`)_{*h=A2AYx)M=-? z;a}?&P^j3Fcq#kIeF;||V*wzbw0L^<3G5Pq=$6CP)yk=USYO$cofVZItcbgzRbPc! z4^>T1GIbNQcgZOB-KX!S;iz6=XjIwielGb|;)5t{d;}_Ayrm9*@xE@E^4QKty8qD? zLWh*a!Z{g}F>(cGGma(VOcuh^hCSm4LUMulnC#`9rC(KWgP$L*JIT_0ahtzAtAvAJ z(^Bi6Kx-osW_8u1_y4*L(asE4_XtDhR#D0L7(*94P(V+iTmc~!UMSh-=)ir2RW4s4 zWN|@=j3(I-$KiiGQJEV(@wq&u0s%}l<^~W=C)%wFWR}s2)njef!3)@<w)%{cl-i-! z<ef%M$w5dVBwY-wmF%u<jEh6}#ijma{w{+mZ{tCgadC)-AFTVqM1;2%=NU^KW97#V zY<A3yZTGoi8qv--QbdxN#F>Ln{Tb#hB%+169W+!*a)S?Tt9#3r?>@zH#eXxFEku;k zzm?QK-*h=y>T@;6qZ}80p2USx(`Acu<ivllAH2O6ZFl|{j>YbQVgCd2`?Fq)5SlWd zD7Gw_Ye`)BM8Dvd<IuI7RHr|D=E^zw0Howjgq<@)GX(~|OG(zU4z{nwvZEo`wRPum zaH}_NUG7?KXp?D~+ks?o)PCU#Tu|0ZTKn1n9{h+*yXIM-IybcA`|At}s2q{tAya)< z{skOK$+InY73Xv(9aeYlFxW;KcW!va^BKx(FX(Z@BtLd|53y?aG|;wH=caB6L)7{7 zwG|X!Y{uW#wdb|OeMIg!Bki~B&-yu8`uiNf&7>5x+GZ~MGQ;M7cf?F51;c+AGD^ih zppG;0_N3(6o`-GtTs(t8hjQoV1X&vN20d~K0W4H`b$z(O6Bt&99w~?-jkl^l5+yUg z#yZ}Cev0r=vkkEOg%u_e#(Vr3*mTVi(q?w1m0V$&n0zYHzDtHm_87jtlKarMf8~%K zi^GY_>FToprEvbp&3L)E))`hFdcGexdZzs6C>Li}@FH(FJia{-Y(H_nCyG=zI(C0; zg^^<`C~lD2AosKd4vRPWt*8@ih<~#^<r&pdnYBD!J~MC*39FUqw#2I>$E#u5mz+*) z)S~!2Nv%b;x-ucVEpYsTOyr-*+LZeUq-y|(Um?a1vL|&nl*|oity}S_*Gx%F|FW^3 z<&cNkT(YC527R@7=(<=BKK(RM2Y2kW59lIN7fN7!@83ZwhX%eB*?S4vRjHMK<NjWC zCa@hT8CvGpyUU|g5%8}G%V{t?=FJ@%y^rlG7Ly0L;~!sIhLn3uNc{&nCbgweT&F<c z<O9WR`Cd27)DoS_q>$YN1<=2GQTUs{XmtbbFM%nhx(t1qNYbaTj6Z$4ZB;M#m)7oG z;Gh`laX_~Xud`2QCNaN1Z7xPuBQQ$3(yNvX8CGIrySUp~10R9o*@c$x@Femj&C}nE z5#WQmTmy5Lb((|M%_Fj@Ksk}8H-~R#D_NF%oegfVgB=U6M)X_WIJL_a{l=c&RWAph z>u|IjKjgbLkvE@LqxXbZQ)7K@PO|;NNV4-M{r-?E<%MbAdH#qep)G|2TXK0-K10uj zpijL>#&>WlDTRm>6;MG1l;!ehC01hD&?JPnuf@Y8P$nFsmELqH_fr$Y(o5#^e{0cE zg~%licrW|XQQV#bGx>0S<+9XMXNeJF)B(*6CWU=*fo%&TZ~}>gy;5+!#H#xmLdn!8 z>)~nSg&a?>YcI2KtvXW{8e~^?_I4vex>7{s(s^q3!5%adniv0k-ym+EQz~F_ycWeP zH})(-xdUYo37dEZElH5@GHR{R4WbQ-Rq&~BcAKY`3wrtn%RS@g8qaRNoNx~6OW+Dn z8Z!RfsH*%O6}M1!>K!`2!2Ovg6MB?GhMh0z{kOxnGXBLUqk{pRsGC-;UM$s=%~jFv z<uLWpHnn;M!o27xqk<XcsW2XSPYh^OYsD_y@2d!25#8NvxyGZ=(x$+lJ2lfFAmW&o z6nbMkIsQnzn4!-7I**u$>wBsEjCB)tRCM!Y{&|(^UQ>A{a$9Kmp8|}`MB<k=t!KVo z*VA6h)qzz1D)_BaNbQp;kqdXSptF1Tqvr78EFLvC-zdx`J2FN`1*TJ(NMKbInYuED zwXQWDuQi)Bo0tm_4^9X4OZpAp(D!$5d+MG)Gz~@)|C@z5liDw{xUM?^x>}^yK36u{ z@z`Ynz8JzBLh`3LGpAx4%!bZ}(>&opro_8b2oIgpKXi}32l@LAjeAq!omVvjei5dI zzBKRF9tUINId!R5**>*y*o@=gNLd-A1+}yHioS8^2r`DXg3YvceY$Y}K9wt4C3CcF zyjv%(U(6Y=1se1|?Lge()kA~(LnP(rSl=V`q-{JI05S+^YJA|}oO1xy%8Yr1_ffKg zm9HSyf%fnmWP6Ik7jmrKRGnv!eB10CYQN2wkZEbv9jijH%B>r$n`UiESnQ@N7;%^d z=B5)x`@@!$_82OnaIKYlLhUbQ&_S)zN#}?Az>rjAE*gYGS|G;X1h2ds&1hl`P5Yc& zP&P38lHGLZp-$$ZH!}BEUb2+7FJ|T8;YBhCIKoE`g3UGtW*ZnNL_$E9eLa0%<^)53 z+saHdee>pxbkW3qs%(A8e@-9&<QHax=Tqbpi75_<g2_EpC9EJBtSpQ9kMv-|0xwj- z$A93v8W#H@*-emoC$1(vz@sWL)t3fz*PZRG#i7v#o~*bzZHM)*>7s~0LgZ8RWO89Y zi~W2$PN&^CvQjyu3C>ekq)h+jzMCw%E<|5gW*(k}Ku$F(xj1P)Ic&@6ZpTI)M5^0C zrF`X5lKs8Re!H#dR=IJP2@4yz{!ORiLDAM<czWRmqbwr=5)jaQ%3a-LH5fl4U0{kU z*8q<K$Mjb%VUeQ?#7M<wg2-uq=0`;F3EnG`v#U;#xJ>>t!>*pb;U1I_@u`cE$;BU9 zNa$2U;d`N2LyjP@Oop#^U^^SV(jj4VcUG-L5z);_^Xu24&+gpbT_%uP785SP#2!<~ z_aAVw*~w;I46eL%%x+KRGJ$FaOv{1g0=1dq?tdRr)y>PqyBH5`G!o!0Gh=Sx#BB&m zPGv;2VjX%})J+iIyE-S2Vsk)&t;QbvMJ!a=v;sC}Is9)y550B+dxEqq?7AJaGkJaM zq2sG6JC3<Sk6aY3JpGc@BbZ-ayM!&YbUZ4Ce24h#;2aXi&%1(w`lI{U{=lZHg@&)B zq1aOX{wMHZ$yKeMmfwZ_HhrDOXYeQMAFTxdhIo7MNtZ5~wJx?bqddexdS6)USlcWZ zqdl!4YZ5jubHShrAB-LZf&ufJ9+JtF<Av~c4U9MelT;>QEOgCLxXNp_wq4-)<VukP zBLgUC@|07GT48@Z?%DB&inD4G+XIS+>@hbNU2^k;Sj9isYa7!CT^2bp=VtY4S@u1Q zAWXj>kiOuGnOkR_(ZT!%LnTUuAhD`Drv+VUCdDUDmz642j+-T8Bic4;=HS(QsEt+K zDz>FI{fjJv;Yk;kW`2AZ87%1PUn^H*TK>(Fpti8RX@Ha^@Agq52;_86eK}5K_Ci*q z&u%SQM{4`(1~}(lA<H$4-#Uk5v4JR1!7{NKRA$bs1hnQ`8C);VZ72PU-OCWKs<NE> zf~*`3d#-Xs)cd=?22GC?h;aQ!U*bMJjxPLa5FsnPUyOll{qw{hj8ft1nxD0xnh@RD zL=UHbJ;wTtZF=8eVlA|VW@oy?8w9_=%dUvOli6%$A5dz_#n(XA^ffu@Z6KDMUJ_9T z$U|_c6ck=WyYFt%Jn;w|&HCGs)9*t#@J+8~#hBKt6%QLx3u)x8#7cVRB?1fWw1Sph zydJp?gv@y#HVKh{htN<A1*7T|Nix*ZxCx0Rx+cARg)g2U&xC}hgl>vM2lyaW-GP!z z9KCm0a%c#M&$KcCwWBh;M_XvAh#clqZXpY2uAaf%*e+K8EqYsW77codsjPQqkJ0x+ zyIF~se$EfKcO7=SdC7JC*E4;$!_{kU%fSWKy!h9ntMSET_75{a|C)0!XD~IrwUa)C z@+1sM9xH{3{x>>k5`p&nH~B>NtGeoL{shQe!3Vp`PuQ;yr*C~VCpY=XBuL*SNNZlu z%cElh=1&lZ$~@GJ!CrzW)FD*?`6wGQSzQfJ9Er-u*O2#n?OT)~Vhx$TgdNI(CCMVv zWg^f#6$(zD`z>v&U?qiQ4UIKxDHjl@v6>*p9$+&Y3bFCyTM-&bPSUKufs)K7E%c76 z`ak%wh^76>9%q8!Z4?Nza~)X9S7i0qN{A|!E$wa1nF1bz)|zpmsQ2*;5xd<7a0P#o z%L<#A-z#d0R1EHw{4fI|v-;H}Kbfw4Sn*+0p*k9xF~3f=faG)s32VQ5)&bosVkX|h z!WH-CL4Xx4%dg~WJ!`<j)8pI64*Ybj(Av{dKX|~WfPLG|!v6-><Wc0s*2})mPqeoT zdF)9AfAa$eN)r6TR#e`tnFJVDXr>N#PM|lE#DQ4$Q+P|0zHFyD>XwOrV_^tP;%U6k zoWHQ+Zq@mTQPi&7EtN{1t3)c_N2Jm{c^i^xp7j<~TLBN~D$3ciFFboRD#sEySjSfc zI`0pwfqfy3#>@7^TmANMYy-F~qy+BwMt6b0XV%k8?HTWk)9U~=v(JL}7G1XFw+88_ ziNaey^Ov!QhvV0n;5aKaCf)Wnyoa!dO~Ig!$ijo@W6K9r4aBm{q$9C{Q@M-B&dH># zUeL{zGCd*8@>4rzB0M@8vC#^NI#NyA_0<FdALl-ca{KpJa++<Y*MU5+ayn!&(Q!eO zd1%jHc+B1^Mp)Iq%q0XdhAk$>4Z*=LlDo2PLOYw?L|p-BUY$Cm$3tm%eCY2_hJEOP zi*G)2gjitzXnlVD`BfO&Bv1yE&1SSFW^pklp1$G`3aK6HUcV1*&~|0DFs{N*lpRr3 z;LS}|&;L3`M<h_qI%*6m`%cNytgPst=JGGjM|e8@Ha^v$WH3`~_Gr?{C%Q_+vI%3y zLqktAwhb?YM2bIK!SVi1DmePgIP;9^AfX-@N;gVDssK&Nj}n;Dlh!Bsvd+!X(!jr; ztbXjabGmC=DGoGrzRJE4$b;vT%gXdz!t~K;MWONy&DYVth++ri#~|cHnV*8BD~O^< zlJ+_oPa3Ee$V(<?{UgrKln1LlZML>g+FdODdK1p}nk`VDZ(>u?Z=XsCf%E1h5|*$I zw80R#hwqvO<o98KCBGGyC_TobkbeouP`!kKffrjHrWoU}*4ERDvx`#*0=I%>Px-|Y z$E~mT@nW1_k%KOn${wefnXg*+T9W39f-VmOpIl8y?OqTtO5oR9Q_D;CAgsx<n%jKr zJL5*l5ymj9622Rzx>Bx;p#?Koj+O{O|5|-SMU4ey*Wy|(mVHUK$?h-H13l_)Z|S?y z#`#dk`k2%>HTvqPB82Vl-o(KV`q=~WZ{KXLWxIWTyaZPlZ$sOX$NG<10|Aw#zz{u0 z1>eqizMpkK(p@x+B$sHi>>OO+!`8F$B+WT>1_Dc3KD<To!H`luKh=UtGFGouP}o(Q zt!|0j((#(7I(Io}>V7~J$-mh9_2fdnTgiASSVh#>jZ}ITs@a&B*51|`7b^|?OnB^t z0{iB~DgaU1CpLv6_RwZn%Q=)y1{LSwO~={!l<<1Q4WfoViEn7ySDjU5J7X$7&c5lk zTOmDPM2MEA1E?qq`BWA1pjBcRvCsr`_Uf?}2!N3JG2YtEkS=tt@2-^Yg0o->*t5vU zQiVYnndLs7Nv=#*wQ-v~pFsiO=N|PrLPY52?CdLB&roggcDSvO$rTH}wxp&wiG*-0 zcD$uC_s`=jk)0BiaMU3-L>ys^AvP7^N76csfe`urCsIjM-~kwkDpjKQuTHWCV-%`b zk_gW+v0yynNfAg|k3||PK|C?jPBvs(!WzAM-y4%5s9<f}zwnYLu*${#Usw!y7TL5K z=39WZ2eS1b!O2t`2{Fxd|6Iqv%nQpm2kH9;A6X|`x7M-5LU}%1FP~N^hv-q0+H~E? z`++T$;POZeHLrHC0>!dn;whFQbWW!b;NJPZBcr)9?1L9(jIO|=BE7u6!zh;cB6cRt z*1}UVCEPy@tl6z6WQIuL-^lfH^X*6FrPQl#R(-7jb6NkwE#xuXrZTtc%}H*#VH5Vc z$SeBHF4CX;$SDRZAW^qHqO{%YDu^F_qfQ5=P)rei$^x6{4)2%-u2g!oM=Q5AH|tcK zhetaqwa3xUyAtj4=X=WAkHf+mIE#KgsSBa=;1UHm>i4L~ceY*5ld1)X1CP0(QYn%; z8o7AkOsL%>QQkrSl=LB({?odsI9ginX=^+bM${)5QT61y_|7bAi5QsUkhqk#;tb>U zA#>3;oYF*{^FA%ott~^j3;~gN>rqb@4P8$*MHSj%zUS+m**t;h>6U@6wT~^)vU!r` zQ&bt%#KcO|l`&4Uv%lAsxA``mP>~_1{*aUvZ{Cp^EPKEtwJPaq3SZ8R?T{tswBH_) zbzlr1*R(Aa-(>Lg95J8vQhiw=hqf4B0f(X7@}cs$9T$I^nikQlgyt3|2Ku+Pb6TA+ zex6hRxAgm^f-$xjqD6q~Ah=(f_9l!i=kA1tMfEC}6~nlZFn5Q&>Uob<H!DBymZO`> znhkT2w|H70Wt>!VBShZz1HHGlgxrPk;*s~)OMFSoYR+~CRDI==PIvF)@-%<;`K|%* z{3@IVuV4#6|JoI7$9?NHRyA4G--TMf1ofHUG*>H|Y%x`SFOl?l!s>=Rf4bYP3&h)E zYq}8a=Sa_W7vZ)aQRx=+wv|=ApX%6F^%g$l@6gmn0!^p)7t#+G84)Xy;D_3_%Z^*t z{F#KX?>#F#vM&iuxLSCem9vko(~SsnqYvp~b_tdt3i6|C*yWI#xveaTD6zokmb54N z%Bt#SLRd^04BY8mM=MWGO`104bvmE*r72^J5&A!JY2EjIW5v*ADXKnWaR+$%Q^Vbs zaw}`q?TwC%d@|lYU}=f#UAyKkt+KKl%@ZIUmNb5v#n`dk-xs)3o!b}m{hTamj^rIG zsOLU37fYSy!w~A^){yAPUFF}uu|#Bgll_>neGxkSK`6B=q$h$;vvu0dyUc5~jJ-2O zz_>5ovjU;C7>pM`eq(L4F4H_nw9Oi(46L-k_w40k@m*v>Afh`%Zer&8f>$0O3+9y3 z3SBUyIuy^cZRiu&WWr4+tJ3#AEmWnqCsQS&!XWDr%{2Ttc_>kKrq1Z3c8sYCBWt|{ z&fk?{o<V%IV;CQD-7UXxt-x&HHQvUPJ}Wkm^T7`J``YbQl~=a-`_eP({s~^)ok0ln z%=nmXYgUI(H_AC8$T9LsBs{B+%_UhxyM6aAY9FM8j^6UJ8n$sU_z@_=TUsQ3a_%C~ z^CWI-(zkIbt71)GtB%N7W9Z4ks&%}Q#6w-l*LHM%%3C@t@NHg(flWz)g&O%cx0k28 zG~>{u79(!Zlh<`{lx>NL1HGwb+uNig(4r^U)uX!rZ6+$|rps<_|J}rwCS}YEdScv( zr%K)15d(!r7<b5rvvKoQ$VD%{vResbBl1tzj~KEyBEilhw5vrO`S;X<NZy*S=GS|F z_;v#11sC$<VyD`w3)|!!->PQ9LGl1yE44}Zel;YRGXMD2gHAErI3zMJ!9_DawW|nt z2KNQw%(<x|13o+aDAX~vj6dJI;G${SXaL^LI&(MR>2sU^RlY!B*t{hk@v;B`7q%%` zRF`ZKbBx}F3!+)<>X;8WdfoJ|D>4#^ot?|P^j6)lw_y)deuZH#B2vujAj8Ad4QmLG z7u0G&jX91fZ&ei<>Ro3SUp5}P99}kF-71JWtL`KO^lLvg9m1IgICotd-;{wyWL=1n zw|YDgJ`2%F;hCC7n_+3TiI%(8ycc2dO_BClIzoL<ml*3lk;SS-eV*A_6jh61`E}pg z%;_>?b0MCJrP!OCc=G|EZc1brrR(<Qjq*$cB_JBBNj%>QUdPZ($aXH9g{^i3a^cRJ z83v&_sA+^9$Zs5u(7N{vJq-x@YO9LjIO>`*;X7FGjguOq=K*_Oww*74{&j}4@~aL{ zh_Ahgqz)YAt#M?AVpu}qBeGgK1UzW|ZE!N#$`9Vu+-)xXmH%4SetM~>Y^q7s(8_S; zuAyD)EG6R+v(Rk%PEUZGkFwq2pdZvuDW^!L&JV9o)v#LYjd0_#DS3T#EQdn{M8PFp zX-9sO_qyzzYbqsX4z3U`SeELHug3>*zAx9O#_2YeWVZ849}?Se&|LF8{`tWVo>rsE zc8N`&#A_d7g<|7}cCt_qFu!t$8w$aYEJh9gZWrsk^g7F;09H#wj?Du1ktiBcbt5st zu=V>>2>l9=EBbR3YzsVJh`(xTuTlYiORnyYwO&uQVSZ=)k;xOP?5R9no5VYx{A>D& z7V)fNT?Fp;Z?4kiI?Lb+ChQW$a&xJE^JAMR2{>K`6CR{ArF7+9Mwu;iq?yxX?nFj@ z;BHa&w1|~w_rl2TyS3!7ejI_^z_H_zgX{|2!HjO>(o}(nVmJAJ9uJ-k*3P#<y5hd@ z(9x9^CAHlwk}+(ko5RFqSVNoM^~@5k)tO}WQcr5Neq3uANGxbr-P1o8b9%_ysM0rQ z*0uKTg{iIj@g(yjxykh(su85}Nt;An1&QVG=nrX?R!T?>Mc`d=c14fMxtxB~jZel$ zvi9zy({`EW6jw>G$A@+skn{JwRAM_Rg6=Jc&BHwj@o7e0HP&SbEB<CjDnV&@M=CKB zv2Jmf&m9;#qCi4;YF{~PKeNjfJI8w*4%yF><%0X0EJO?Io45<{R+=QT@2{;pGaOfF z)kN0Va>8=ZqRxVkD+V*Fe+dn*W}kl?^8!^O_T)i+!XG~Ut&pUAWH(<u!{ENc@4^Y% zn6F&->DH|+yGN;Il@@2z^jCD)PomNES=tB8XOArQ3Z%&K>eGD#M@XXT+ib7W+{c1_ z>P{G5>g^XI0}o+x`mPHqTJhIjP;)RA8g)#K4A8_nAo#(hVeq1aqH^_GrAoRg(ZlBN zT1Fi|o0;k+IbKZ|*O%Kmrjng_I=)NE0ZdNBc@{KccFbs(3bFOtUv20G5XG9*QHS#C zN?z{LTyUZkVj;ir=Syj~_43)Sex5<Zib=-l&bbgU$i5Q<BlE4WezX`vjwNg7{JW%K z4#GhqMY1o)O~5(!kE%`H-F82tlz17c0A}64$?S;)NZuA^rvy;ZA;ka2ZWxCFThe0S zg@vHTr9~q+G#?oxU?zWgFh&hse;4DP*ZT=bw<y}DE;7URm6s#5_cA^{NL;MY_u#d2 zd71ZrvU$8i0B1>^L$T0S;`2~pO9H>ud#QWck;6e2K|)-P4`P9s6QN}aXl{Fh{3x0^ zA{W*l-I;T5dx?rFZ^ty)MKOe{LYE<Bvz$l)^slQ$4bqemQIzb<=bkjklY4x_THfYG zEEjY$7VMBB4U-g_s%17jhdJ0QjapP#8k%?Ro~bJ@LB=~|IcfX%Rg$7u7Oy6^qq)MT zrPUf%2w#7l8(yA11E}UA-UI!}?1`+<C{0hMG?QG$nJI8$BJk%JpKX0?WVs;R3uRH! zOaA!5MM^LOF@U%{WWLz6GFHBB6sL41eMzwoEh=9NChhBGNFSD=?bvx%Ns!t*Wg)7v z{bjJa$f+9ajHg#vrhy`*i-9xG{6;tNj-gW?vh#ah|JN10;ozo|HzS?8r9c5yY@_W< z+#zGvevZe_YR!F-iuahVQ*;&%hwq}c!xu!4C3E1!xA7|pkn~eRzKMEO53)$KBHQ7^ z%8AIO51gE(?wk_B84ZIfUJnStk5cw8ZL=)J*$K-^`jMPu*vZoEr`Ip!LdD~2)|R|e z=tP$(LGT99`X&yZ{Ba;m+&Zjr&k_^s=ql)d!bT^KH9+L9>>dhj34I{}{lQ7$QH-63 ziL=+IY3b)6n8t){HPP-2NQ;lxjwfSz?74OWgnXcAcE}>((6w0k3W{0Q*2B-|s$&x! z_Gjy>swkxpUL2RU6bg)TPAw{Ll1U@8(G`wL&7v>N+AS{z56r-P1FmRrCP-1gi;<gE ztO)7bGe{lTC6f&w;yOMwk~8-F=e3Ul#%k;T!QDGPi4rtl!eiUEZQFNj+qQYfxMSP4 zZQHhOdv>1R^B27F#_mRJMn-o>edzvDr>in6^PI=C8rHekh(c4nM}awkPbkd(qX&%( zJw71hI=cXbO|Rf(X!Rytm8u{tRrUv+8PhOA=6Id00qyK5ufJj>p|LUq_6)GVb};lM zP`8s@OOW^$TgYM(rw;{KksPN8CH3y-TTL->xn1qu3|ese1C-Mk!wfa&2`52GV}nVZ z#^K5Rti4drFtVT8+HxkKS&&ph%nO&vTOzNtR8}+t%@<VZyi!IHICCLB+Xg95T}8!! z=8RQhJyT9?P2TTmJh%(#W&J_0*bffI+0apkAU{^{4M}U-CeiOF1l2dCMj(^g#qikV zC=5#wEdzSw&AXR$>PIlrKxK*vy(XTEVZYn9l4m?ObI?wuhROulKa<nkiUQLvifJWv zEK}U)>(|Pax(ZdsbiDZWK>P6F`q-o=D)Fv=V-T!Y0t&gb&Kc6|#Urik+zxby91Awf zibT<yc3DJ|o{}7za6iFTp~{9FPO@2w$=ONRl|@-UA3Ot;rxs%2K=;%MK?`#YW#f3@ za2)I7SSE_a(b&+jQPw5kNbQP6;@|gT{8}36EaVL`{FgRRq{H|qa-vLwQ;rPhtIZQH zOUDhVs3#^Bc|!z&?O8=Bz5h*El5U{vIw&XE6GVr@(28yOo7vqIj><<c+;bE@z%`s$ zOpca_<L;O4m{Lo|EDinQUx!ouGNWJJ1c&zO@1U=To|r{JzKVRtglj^Sh8aCBf0Q=T z-_)_lLE$HaxUAs$D4F2Y3aUduh3B8}clLT>2x9aqDk!1HxqDB$XCL}V%=s{=SS?>k z>lqQh=e>fcC>#@DF%<IH!0spxK!wote7uw$g|1oENE4G>n7DD4C-AvXSr&;Meje&h zo6*Ab3S`J);!4;uPTX#958a&=yg>$4g1{`5t%fDdyvA8D96<kyvEuZKlOyNA^2cLQ zi2(L^`VlI(%Z(CUPAlQNXEeAGDkYj>9$DW3`cxMXPEuAEQ5jBQwfF2aMO{!RsEGE6 zSbWidthB%2e4|+T7a9V@zn!vHANv(W9O1E}qQ>eCS>uP!RRd)zv46D;Jz$cyjxR|p zwS($&Rn&F@A4HoPJ6HLp?g{=%_FNxu4}PTT9e!S~)?~40U9bCutqr>#jMCawbwW9c zi+HK{##VPnB_^rN{>#J*9-6lU&`sA!FJq-9q2Ab<(5VOm5|mN<5usQ%cu^AthkmbQ zatwE&T*j>j;EYB^i7-8mKb-B!zLOh$V7osrlRUQ|(Pj{5Lw|-CwH8L&ys_7i=8MC^ z5`>IGDzY5Kbji+aa|R`0mG*BtVmaIKNTQW_<jdV}++;fgT9MM_;eAl<Jkvdog$N|+ zuY1H509Wy4$%RBiJv3k+blBTuION-z=O*V?Rzm|9E+8>d8UnvzC@*tSl=<uv(L+)< z%{pJ2{LQ}3;A?<kKtRMV<*c8@lRM<XRBhYPnVfFt%NkBD&PvySS`!#K2`3KlKAle{ zsZ&t=SeSNqe!|0*QewI~_OSZ1)F>i}69Q@-e%^LPi6N}d;BBLeYR~x)1amDTOC9Q& zrwIkmhJ$e*)2NdS9t3bGzeU4+9&S*EKRG8Rf{0(<J4z19VUj8Dubtg}Zu-Ti(~$PK zi$1V?uPMf#vy(hBD@Woxn&qL6<)c;Crr^vMQn!>vocxhRE(3_M%-0NH#9B@f@~nv~ zqB&S@L~BrliV46vTMy(On`a14w9h~Ry9Kq|+;V#Z1unB+xXx%tez#fgVN<>P@JEwT zR^$0@H-*bN08w{A<gRAm62bBgZszFh)iBv%l|7JN2bGlk-1i^1hbbE=M>c98OZ=0Q zf+rtM(tvtP=bJ@IWyX4hDaFtG*IO1&Ru;|{XG@c5gdk@^%vi6CfR08r_i=W5N!BAS zgzbjt8lJr(zZL0lrUp&4j6WyYbm#mGumv&(Pawo&V4|D4|J`ZZOD2DZYR$!pwco)* z2E%4$3o07&$b<la#Oh>uYFBbjz2?F@t4$P(?2A3kp~z$2m@e9Mr5m=@0>nnO=F;sK z|GFE~*n){dktMuKW;(J1Q5%-8erNhAB&|BZ;neZTf>f?&)AF_b^-vg3g4xGTH0BEa zO_*6WeH5=SU@}!I!e1z&CJ!BLL8mk*W<~#k2M=T&uBvduHI59U)2H2(sYW1l_S#8K zJXT|B1d9*Gg)DaJUN8r!H6z8KyUdd{U6@38)$YwnFZwC;d+lV+Ou@faU(=O0<?&Uo zVNdh<daOz*KkdhTsXvM+Obk{7*98*TOSW`tZf4Efno*U#tca%&)<fbH4@qQb3H+s` z|0PKI5r&^e3s}zJ1G8V(qn~9=1ksj9!WV>XTyPpaS;n4ukRq{af_)?wUy1SPAxac+ zbf!=Y2!u+mqyD9X+++3_8hS_Q{p2n`I34(07@oH^G0+BCynS9gbPLx~{m^cAVA9}# z#1>YIDmoMM=GsC1SBV1O(H^ZBulaed-|XuIW`$}DR}-wWR(NxJ5~cMIP_e5t9s323 zHH1=ostJQr=8V4H@mnaTzAq#g>fNEc$4Pv!qw9&kNh9$gJs*Chr?9FJntN=_<Ohj} zCo=kcQ3UM5r9}y2adUX82JvspxWBjMl*>RJ3ae<%nfP`0A3ULNe(qSx%ih&L2}BZ! z4b59Rg1(3=h$Dv$s)+4ZDTn!z60eYaK=0(P-`|H)TjNCT#7a>rG=HNpkgi>ts_&|a z+>^03!q})6JZMT@_p~x)q23nIII9}r9oWYJf>h_*Cbo!7w8Y<Q#=+I;wU+!Q)QaFN zj4DQuo(QkcJ2ZE5iC(HI3aXYPo|oXO>cCFC#Dqm6J(NFOhC-%<Z~`Y`6t*UwKWoy_ z^lT_^5}VQ0YgUBk+Ray~I}(P6Fp(T9A!>PozLm`rZWW657&~g+Q0<w$3J`nyL4C7s zv$7Jreaf(ccNMWaW^<E20=gd)n1c1cy)9f#d~Hu)(pJk{?OuHYptuJ#nJ|Aoj^9Sh zGZpHYRZ{DD(=ct0$53^w*Nlb%CiT``Et{=+=sY6;)``-{FIXf33YZ-FQpu2s!2}VE zo%9PB)xyp<b*<p5gYrKV4H71mc0Amk9MX7hO(9(4&6zw+JdiaawqGhyFmo+^xmKvo zqKp~Z^ZTn|_Mk=qNU1jkxa%bq$h5q?j#DnG*<~FdOp?RwfCei@sbXGV_V*ndRqIO2 zt*ol392%fEC;27PVaa*W$Ou%LTVTV#p~zkq{Jh-k9<8jEC?s_dF<*q<l}$<J+n6Bz z=(UvWw$~jMjHakkvk!B+LM*#zqT1x*;R)G&e;W9|Kzu@!z`sR>bwzL@>Xp;=szdqO z)*Dj$>fh11mFXH|kHP{8RlznSj+C4ec8G7fhNZ%ta?`|q@vk@GgXzIxisD^9$6_rR zkj|V$f%7U<Too(&iFE_5t7A@s03kfsVeR$d^vTw@mY6AJXIQ%+tSp`V%qdxw=3N~i zxccV?LuX05%{*0kzt8ym3dL)qPCirk7_5cMRWQP|T>!qzs!Wr&5T>QD(5mI%LFhoi z9P_8U^g>>;3N8C&)=kVAljmX~{lr^Ccp7jlS0HsVh>fyrl@YOQfG}A*-h~&&Jzf<< z<l>fVd9sQnXZOG{8WEvra(%|p$);QXOoeNp3KJHIY#cB9p-}x^>)cP(VGJ`W4$i6) z5pMAu9Z=S#q30n}MPbN*ZhzcRly}?|A2}x=xY?mu@!P>j<4l}KP6!a^5X2tdENgBQ zp$Foelv13wojyb8JF^;_@Sk7RX!|i^>Tz+Xt`u9!FtodfC1I;iT>Ey^^emdi4Y3OQ z@3$Sn^k=`=u_h8LtFMc|F0Bhf?{X$Y7G?6zmv+sU%i7=5i{}FXA0l~;hD(+wmmZCI zBvXe>#>}DEAfcMzoY{9xt}k9pkDI9-7NQ(_OpA(tMDS}O1L{ypL2&?z2|qpbxRJ^N zwfi9ZsiBzy4<>%sOSh&C`pEorTMA<g#>grUOytO~gPRtQ3hG{V&OK#2p3@I^cal`$ z@R<BVHLh2wKbk3*-x~88<Ng9o`HX#Wd}#?vn&7L<=xoq<-`wH_*cuwgvjS5^CgPJ> z%ET}ZTp-BhFvba1e5v<++w3qAY&&8fKeikid|v_1T!c|;TzZy;bAL8X^^P36%^GIt zA2~xwP%S1BK+U_)XK;gBs-SwMlr`;f?2M9SRCn3_q3s(CTsttUhO3xZHYavsk*4yM zx+$~L=K^g4`WPraEz^c~?7iQh75oE#xrajZ>rE^1^(9>NNvw?>&OGez#ch*`ZG@ZR z6S+eURn(uqykG=a8WK7u&w@B%D@d0dLwF~{Rri{=D?9w@_@^LG{|PgAy>|>SKS%Bt z+xmKgpV<`AU+!mwEoD;r)z<$yxPegV!`Z2i$nf^`M<fp3QEpREa$vaomw*g;+pjYY zHt{2!z=62R#Q;c9%4JUfx6FRq3aIeh2sr&mzh6o4UCV0M_=+_e*$*5t*(w(B@Q3y; z*sgcs=;WHpI1IC2KJiF#9Ew-slUu>ZtK6o-!VGc><|vf+Dsg!5;}L#EOX&3{Wo*l+ z??@{LUjyVpT<W2U@mU`^HIvlXVB&B~VGk@Jwz)ALIniGHn#u4Wxf}kkym5m_yjzID z)f^%Se99O4+7m5MdKXp0e*6;Jh5TD!Bbs|1#Z?*M{(K2GvZX9{lXFH2i{|Kfnz4zL z+_G0&$E-O2qQ!R7;Gaf8!zpcxU;OL)A`7{EG}KFPh0$2&`Xu=?V%YHqh0?AzXR9-4 zzmKoR{5$3krs*z53(e7WS=)UMHZ(ZP$t3$G2S7@IVI=7GD390nqlxa!vaa2jHLKpS zFxUCHF>pY7Md5dW%#t<CoXr;wA^OnQ7twX^r~LZvBbLOGRNP6Ifih-g{2UQNm|nGK zMA&<g__zHG{iR39MA`J>XQP^CR}-`~C|P4kEo-rFLav0WCSMFd#wt$QvmZ^c<zh35 z(JT7ga6}zgHST!?BjJp#?(V4Ko*66Uc^siiEk-HS>q({L_qg1TC7iY3or9I}XcICF zlCt`4M;lsK3?V9sPGwd+;TO=YoO^*4Zq$5kF#Is!|3oSx%wi69h)uAp%MS*H+)<vc zMa>0CE+3xnH4!wHX<<{q->?xo=N_}}m8JPNjw&7c;h{nuD>W6lm_1Z>kX5!IN9gD~ zUP3*qc$u7hTOScZN)_v>LK;<opi&uZoTm)yQHq*uU8|j)vWL?}ZNbKN+{B<@<>+P{ z|Ii!+9q{WC?MQL$9W>`zd~W|Z$I`U7pd%{*av`jotj{=45~!lLeP++3<{|Fz8uF<Q z$9`#eT2;j}Hg(0zty~?Apl0KfRl#4II?26<$RywuQ$|ydh(T1`>J%YIkMieC{)j#t z#@Ke=Y&4-);SX#kVqPpWmh+iu<@UaDOntY=`8WG>W?~_3^EVOkeL&L9z=2gkg7>_y zb|0BC$*9+wAMtA2<u^ZPa{ffcH~taTu_;tRQk$3WJ2r!L54W*YwiTYmRug$NtR^er zi!w7pZ~61|)&Yc;x+S*>dMBXDNPNEvbHI8A$3|83aenwX!RM?#r#EJMx)7%=ir~9& zpT3S&1fk^obMC#*Ia^Rela=1}hX467Qbsz8$<U!pz#riyP%_-G#VXk@T7D;B(RVnz zxR>k@u0q$%G{VNyqTkORWq`bFZp}-Q!Ghca1mH_QJ!K%rBth)r)!9|0?uPizFCE>+ zQw1lQc%(s@K_!>A?OCa?QXSrvDvt!U)l%YSf$$4${}E+iXnrO47?nBy>Eu67$fB~v zuS-j+W}0b|kxlKx%`=xgm|vtjbYPpcRc?BB+e5xa24k$*7KK2OzNN)fin`_oWoMUm zK@Etzt4<Ts$*XG<Go(ZRew6U~>tA^?i_<~-FxxJyXt)4f4~cPPXDQxP|1VO+Xy_pI zNp!eSU21=#=9VR{eh)oqL?pkxTI`S1#PRKBNDVi>^%ExBIH@}(VK;40d1B@6@{lCW z3t+|j#C7F;!BJhJhjP_)H<3+Y=H*bU^~qhaEGV*dpj{(AlnY?=EI6n)Vb<iAG1<FO z(Q)dZU;G;gzL96f$xb^+LuQQ2WlBDX$Xvo9FXQADSm+94vk~D|9g~v9!brM(?a<Ml z|Ex_y=7oLk!o&4r5FhQ<^UPkve7Bwc7)u+vLQW;+>)~z;r+8x#ToZI|EUh)NDWDN= z8b>D$mql#6V7^O>CGbvDsbm%stpcMW4w{ss^3=SrmWAg#L{hgRLzTsX&hq=R#=p~Z zd_x4FN9t(UuMUcDkDfF}Ee1DPmUP6>N(IZqN-Ci)PObIotNN9}P__qTm38tMD9yus zOh;eZ&1z4G7DE@k`8^Wpj8nf~Sj;Hv^KN{PNOLXelro%sQ!M)53HfG~r85e}JHHL* zbl=xWXM7S9CP`%uvBR`!YPYeJ@R){1hcsIa!om50!7J;l^<U7GqOTctQ-uYNVmINz z-xod=J;`L)Qvd<;<iMT9opwq_&Pfz3J{8nG2Xi$o+M`D=f&Dl{(qhJ<g{|TZ7;CsD z@(&!Fve@vV&aCClgOg*_0nWVlgky3C%o4fn;NSTSN$^S*#V^irLo#(`#8U6r8|9_e z#<S+O|7@xS<}f<G#*YLOCPq23IBU^BL{&aHuqxsgW8E4SW$rH5FR`&;7p1vu%LfFj zc+WP12aQqH9c$XpocRAHLwDo5WVBR=&_w|?hRJEk5CrG{m|^sfnhC<So}Loyh)1w9 zKkpA+9F3cYg?ma3UF9b3c_U8yu#qJdD87fzjIYH<49<y`$?+6i1T)+T2+Dtd>krn2 zWUFbz2n;yzgQ08T%i^mD_qNcXzfz+PR?#W^d8pgouZ49_{nu&su1W*yzy*MUn`E_O zZ0$qCNy`0%T#P_e3Ycg|ybamX(=W2kH6#)($;k9UiuJcfjF+m-xrF>eC_y~FJQYq# z!5MQkM`SALif9hYO<MCB(LTABOzS$%v3OJ7R?om5pk)f|R{S+V2uABxe1_8?I#38v z_|QcP9;k{f7=^S>VzTl1AT{j}crRJ)>maC5M`OQnX(2I!Sr>F=<kXd^LHL`JSe7!4 zrbqOAxqki~^#{<L7V$*^lGI8J!cLK4@`>V5$lQw33A@Rg%!f}0*{k8|8t=t3j2TtF zqv5=oiInJx54pQ}%co_z-ItDL4}Ev)&#<a6y43q0xO%I3Q8z|m^@w^3B;<jhCHU#j z5zKG5lWYF#TfglU9z@BJZ|=DO?3A$Kw;COy&`yn`6$oJ82-BjHa-kDv$4!@TzzVSu zm$xi#4hmc81&~8H8^zj<2}Rgw90T*#%d6vs5P8^>59+xS>6Q1Mk_t$?w0KS%dXRm* z6+IQXwcl#D3HGEKrYe+{YByH+WntC_ciIQ65^EkbGkOufC_VAt_FoV~Bhq5*DBYsh z#S?MfR5)65@3Lr@JXQ`0$iwGy)eeU`41JPgg{u*&N2-wSp2|Pbo^8jPL9+Y~?!0Wk z^f~Sr7-80$lV&yZv3bD?C2K6kCTI#6NYFe_qM-1p6nff6=%0olH@5WhNFg!NNG2hK z4YGIOi%G$SpBgH*Eb`=OMgmcWOTFI52QFzzCS5X0oK@k@e<Fl&7NXt66ZN}=EM?b2 z)uviq(vv_<se9l%V%_Z&y>dY>NMt%`a+NVjGB-HXu2JW?44RTJO3&aYbW$%u>7u@n zZF<A?e4ZjmB<;2jYAu!fN-!IFbzQIJiRWuOy;(eUw{{LoW@!2cz7#JL8#x(+((Uvo z2qh3K$Rn0K^{2reAwD<^dz{;s1Wtlt!C0Nri`hPEmX2-BBY3rs8c(d%l3I`4u6F7* z!?yRR5^W}P4=<{=c~{zQ9*5xR)IzBjIb0ny<U$-9?B3N-EGxcKuRIgKxSDa{M-1NY ziD9E*!Mbz)(iiqe`kT>e5XLWnMpOh(+IU$}G}4R~Z-%&RjJTJ(d>(oQd4++A*4hpb ziZfj=_P7>U->|~ZJke<<JepZ1B?h?~9<>|qK~bvN@uL7Az#VQhU4hAZU>)zjReqT% z&DFr@k<k~1J#eXk{B7g}R_-~R$UvSzuLuK}UQUnTn%?{6=yXwqPtkS2X~J=7!eM*V zh8}F{4JHmjoqFJ|^!2??*x#OKZBQ%!6je8(3${E<+1yD^<!HT%qTKwbmo%n^e1aHp z;yzlbp=AZJZNxg)E0Lqw1o_~*YL(P6J0^oLMjSml7lt$fSLGl1EG5jT22i=B7sxT@ z+|F(vyHi7sy1MJLDapvXTafQH?<`=QSC!v_9fsM7)=;GiP4p;HJJ_pS*1E}QZ{m#t zJ_{{>6V()e8S|f`pQqc|P#Qr~=%02+BXY-O)!K0%a>u-{V`115<_A}<BPVXp1DGmW z#F81t>Pv9J#Blrym!&hh0)jK|>xo&=*bCvm#-zaOQB7!$V?;2KM8D@~55h7<?3mHT z#Bge=O(Y~<v#)f7dtqp2kAfLucUWHX73}wu+B`sZp?($g+e}X!HQB;;^ivVmrm9q8 z9qDD|JV1{_>n}U=w&ezL#<HU5xt!9MFufB@m(W|)7;IW<Z&`CKNh@8y#GW^hEGvQa zK2xw;lG~?GL9shWiDPt6->R~+X%xu;ZsN1)Cu&GpTzBGTj%F?mMk%a{g4*zvg-DoG zDarnf5(UaYcvSITy=EcGm<Kf+#p<d<^cpG{TtoijDYpED`t;Gw^~s28llhj0vZ8J3 zSN)U21}~PL+JGMR@)hU!x8=;KoF!Xw^B4a{KPv|D4A}wH;%z6!KR)tw+wjdPlaJ5b z^uR|kUtsNQl+@Yk)IaiBcb3>&Vhew);OAZ0lTwC%F0R~3lXzZ29eH(G9LG*WNPk}T zw*k4;4sKL&P(b3W^!BmfPdELIEPiu)|5&Mqy&iblk2Qf-P36VIV@`9I(u(m4>G|k7 zdXycAY{N7o@YOZC@cbusTzpqm7&KwM+fFuug#l*{$QUBN6^xIJGI*#Pun6%Reip6@ zts!>jRXbeu9%848$EEc!3JOf>X+94uzKK<roPz}4N*>n>jPV9qQOv3;Q&Bkjw~cx! zS-39xZv-(~CLc1#Plj}d*!0_>p=GQph)qK!-iNm^4Tpfo5a&4@Fg|xrx=PVt1TfA# zlU{V0+?0_>a)Vd<y0*95s`VkvBs>zB7WXQcaA+(+aq^NPXQR_oW8HQRBJ~rKMglhx z#d%_)G_3;%Vo;J=p24?B(<W^H8L_-rzPd9rHI=owfstpnx}aOqx}t1NGdr(cF}YX` z*n|NQKU}W+Z7o$Tjmt#t_2*3r_pmZUD^82AB(dqG_?0MJ?|l#2LXR=#h_O&cP<*$D zJNo4=#wom=uIIUenE;A;kjb)^2#w%Lkw5s##8=Yxu2IW+$&|7x9tcbJk0z_CV21zz zc~!Zu(O*FEMrg*+@}un@QPN<tas<r7u^zv7e3E{yF_ED0W4ig4+ANx-S;az^WOg$S zx>^j3>>a5@Oq;3wU1!^tI^pCsT}$?Z$|sA9Zvv1NizvxOTMGMUGZrv;*4lCin=>JL z5vmFw+mx|WQd>g9*EesVR}O(GzP>;TaWfpP&;+-E2?!t&^5Y43eL&4qT;-j9F&^6u zA@YSOD)qi`QY`49wN~9eo1t)ZgN_rFsVtmDA36+_-2~%B$g>+^HxYLl6a4}A30Scu z&$xv82eXQ`$o`0{L7rTcU`c``$;jd@C8j*Goq8}(i`w{*9>;k1IxXOwSL_Px;G-hZ z0zG5sBYVMXs$|)}2$c+I;&CTG{voK?e~+gmt6ymI%Re4#RjG#`vutIRiQ_@CTJP`# zRuW@)LGmC=Wl`FD7z6&uy7Dt`A>V!p0CVv^aKA@zpbch_+EQ_7MN)LWO=#R#e3q=J zL&s>MiA}#lbpsmBB4enEut|Q}*$*LpZfbJMOfG8biK12|BOg0<mFxwJ<vURY#QAP^ zE*212*lr2+<<`%Q;lqM6vQTTgg$;`)fepBOTyvvSzbdURGQ>J6?Z{an$>;Tn_~oI@ z${Ra)(9G?^cQyv^4+<a+eyB+2V2Hb}ldIXP4)&P<Hu&b`-}IV1MMtandA@DE7T?)_ zUlQ+@<E;R?H^2Bdew;lG)iGJkUcYdfdv&x@TeJ5`yHyL@$SJp;6cwi$bIiAnNVtmS z49Y%Ek*(I~7aviYDMDJ|poATp#1g{Gb2iN^#u(rBA%vy>vMnxHc}!yWgS1AJMl^0( zwD!w}{CNE(-mQH;`eAKharowU(e&a#j=)C4C2DYlG)s~qSrLuaYTS%=<c&IXy=-L} zXM!`NJCJ6R456fz7Mb7;ovdm!OVUo4%8MdwAsy?7>BySqoO$^8y7Thg$+_{{dEni7 z;k)_h3W*2?!<e$p0UFxu$@%aCO#R7t_yW(z|5VsV$oO&4J34z_J2c$%9r-Q*G*FAb z46D%mjwDT6u{5|QY#Mn4qJPIAp}Y`CFgv`oQzpqz%=!W*XJ2W#HM3T<>Z7V~BJ97Z zm;0o<o%49_yQ52h$3U;X;k(j%d6EeeGS%%#5`2)f@93MD>sT;cT+;JwSLU_-aJ&Va z8UDM_e5u84!Fr=qJT9Zp!-UCOu*`#fogtI1qrHUS8&X&T^+{w3llC&S)!E4%o82U! zPPjN`j_uLt(}vdB`=$THu^)tWC<mzOLv{phA~KDf{WJ`*9-~H~79>fOe+7Sayd$m7 z38i}Aw|~k_J~*40Zbo0E;8O8`x?pLV_a&2^#Ra(7{SJK2p>!76+U+%tk!@St9c`*2 zcMZy!uorHDITcha)p;=;qAHRkxoI7X`RvhZrxMplWi=r{{pTQ&a4`ugOf_L@-qr!a zPoc-ogOnyJ6N8)fQQE6|s)92$2S4%4QGOc3%^F2+3X1ckSE@7`_gL%#vq)Q)it+~O zs{Y1nXSu;{uKRvr56JzWE0BU-Up4i;Xvp$BjN53xj9*>A)++J2y*5@l4OnTGHiBHd z$Q=MJyuFW_+PDgcHRR;@sxs&Bl#j_9%5_cSbq1}U+>nBdC&kLZj;n+9QKZf0CV>KF zz;={rB5I)0MrCLX<*EV)HI`WrzLPc<c*B>>Mo%PvHP#of`AQNCw?o^WVafc$m7CT= zUU!57(#}a;oXnpc`$kkc79O)D_9D93$8@XH$=DHYZi0kFD}0Asb9tgOTO*f7q(3MR zP>cgcyB9ZrlZ1)4d*Fm=^8m3P#(J9@4cOSpN;rZzv8Mq|Rz*ul4)c*bP7<EQTb!N5 zJQp~F#TZ%y&=tDHSJI`c+D??B9xXn9oD<9qhZyt8XgZWGWIfCRaR1e5nyPx)cvGl> zMYQKY$PzEOvZb7i>0%)m)bNSSI)hMQz9z-FV>iu~mc-GGi|4k~D*VHGMRF8=x#>C+ zwAtTPIx&YN)l<m#cEcJe6?(5kC*xkpGI(B(bXpFl1d4UmNKJAKd`3+nT>1|mh}lI& zplV3Lnt{EJTCfLlvVd#0SOWsQ%CbOeo;gyX&{r@(a)k9p#+{7CSY7=AwcQ6Q#&k+! zt#*;;3l18JKd6AdM5$G%mGh5|4A<>bKDrTaTck>8q-nNfj#T`rIn%W^DKMGmv_19s z{OFw<uYA9b_3DeSYy(G&tD)cbpGqi#gNbz!^9&>luM)@T8{pXHL}kFcdNo;e&xQ={ z%X?PJduBc{_tZ#dT+u3TGCNQOJ{Ov!aijIAgy@OYffW33T_K+KAk?EU!=b2bY7g&V zMncaXVC-h`9-8Vp^q6dLx*;zHp*QIObh7)uO0V`^>4ijhy@@U{_By7#wHT|6gc8S9 zt?F=wh<+%v8YByGqwpET1NsO3ti~@Gan(sTA_`2}?L?9<e0`31CoUSvL*N$)f&DjR zvJC`9)}Jt>`+^E$Jn1<FZV(}OoB-4nJIjZq*0IfIDpyyiQ5##Jvp4CsD5KX2e#|}T zLKZ=}`5c0)Q5`LU{Tyj%JBmSCVgAb(lxkXALSF~s0oEkGJMC*?41=>KNh1b~)<&@_ z&Zh#!3{+%46pZp0J1&!Rcf4JgnngH|WS&vr^t&GlkfAT>OpJq0wBO)MoaK+|+nECz zN=xO*UbmLU0olG!fTC9y%9KdE26ZJwaS@}J*4BRvL#nIZPK*TNn>J^$bDXF4H8SEl z<Sm7iZtMf5-^~-#@)Bf5?aF&mNw`uC*^>jay8Bd8TZ0dD?*U2Z_2+ZKPE5E9>l2Tn zL{R!o8`aQCl~@!7USD)IwklaENuRw<YGX=#F6^eUcRy%bcu!W&bnkEP94v-dK*Rn? z?Ow86IP=50KzfDx8VG}=Zw%BZQ{pC4hp~=K{fi2c29o)-sW(6ZLnIl1Nv$#OU{*ye zfG51-Ke4vWJ2#aQnQ{uZ>NHEX>LQO%9D}@hTgDYiBV<)RIiJw2NqQ+>6P<s)M)$Ul zLBj{ffl9zez<Fu&_?aGkhVRr7D&=X+$wp@z^8anw;&0Lk6Pc%?AU@5vMZGeEH!1_D zQDk^T3>h)!^Kh8)3rwPKnDkwI%kY!`5$642Z29qDb+nb-t6D)l75~*w@Kg!!Y4qHP zLuk^EEPn2=pxLY9-NX!6rWN06lg*H>?ee@Yy<PV;M4}S%l`AwE8~w}av2T;x^z+qD zqa!b|hZjKK(1XfGxD#O&_1b`bsHT3ke0HYho{{bdk*+{&Fg^C!w8DHhS{4fOMDFz- zP<IVItrZs52^8;TB*=VLCXyq%&yhFK<;mYN{=>tZ7JAF~!&5;f96-)lIff%<WK+eE zUQjdG`-ne(yj-*|C+S`DFr6(M1=nNn4P>XKdGJ5{zW@gS|MCAvEd<kF6$BuX?N>7_ z?N_-nX-95B9%W>sy6CETz0Q~k@C;yp;5>w|7b!C$Z5OFNR}k4qS^@^X`(wA^eIH*i zUqLTYA+Y-`fFJJ|CIrF7NKk_@+Ger}I@(2R#nZHI(uUB|onbDc;rV*=w?^^HS8f6O zpj$y~r&1gt=q~#)GsKJeQ<DOwT8~aC6fr3M(KCd+I%tl0u?r_XGBh>|dljz!n-!;f z3Tx&eF3H5j*2?OH<66%Ct@9NA6}aXL+gZ$ZoDh~tb9V10@-W08cjpMpK8{4?&HiZT zT+IJS%gwf$Xd<4NRLjXSUVxI>fOG|`!6{zB(8uUtnT-0-=x%i~LEMadI!#^Gr(Tm= zUlexlH~kl-GHd_~BF0oTTpcc3AK2>iLiU$HKORXDQ?S%;)r{U$4cgm*M4<^hWEVs7 zR30bas1%v@90264d#+EJ2K3#s{yRuZJv9X^J|hej7>~)oL6cDO9#6xOh$1u(0?MKH zV0HmaslY?8hWGW{hD@`D>z0wWs?2QBM?aN)Gi+qTrsZVt(~#r!^US(G+cZQ5ib(je z^@UwOv2rv@=6LqQe2CLGQr)oWlDPE&6?{4PAwf12SsOSF{6j|xot_er<~-()q(c0^ z^Ck-PNVE{W@WsCH{8Ee}M+?D(2mPA!EH?89V+|$CKNQLLpl@CjhPu;~u%rPbLDI$1 zt{L2gf4ubMOvG%$ShCD9Tf!XCXax}^|HSoT#>THr{cW?XvEIwYp^;vhUkX7uf-T1# zgSy}dr-nEs7rZ!?2eNMro}b+6U*o`b%>mm(5k_=g><qOL;IIeQ<@Du?Pb_#xi@4ex zYGy)_0)%56*SxUV6L2XhaHFG0d^QCJ<R7h}Ewe4fq(Ex~e;i4PLm~vkB1P;(13w7! za(Ccrv^`c*$I*N*{ZPMJ%To`dV#x_BtysFLELUERU-V&mAC?uYSww2Vbm>OjeV;rC zwPbg&VT*29>u9fdKW4YbLOF~XF$y5yzzy}SoBYwM?*TjMW@Bx1_Hk|JdC9)@z{APu ze1`?daXJ1k{>1?Re*OQ4g|hmqfdE9?{)Q7R?wKk|Qr6g_7}<BS%N-Y6?(E?QDCEPf zgMAj*#87+ka{y4S7KLGG>CglUK?vk@+6dqvyiH-yNWA@^kVim=2=bs*LE=(`Whn71 z76-fHUtw8IxIJArCd<XPUsm|cKc71-KQB|4MJdPqI1dQG0K2BLGC4yxg5J=Hu>2?N zs%(G)_|ww-FXJEFx4e&KP|V>?Gby(8IvcY8j#gq0?U(pJqFv%Z;e#LrWCSC8`I#vg z%w%8reXk&SLh!Y9!;F(C?NsPWpo4J)39@faJhNy^%PiUr%p=ODr>DVzMz~P4?l#5s zzA-TBd%T`0;*NySx4CH1iKjeiaeO&3VB%am7Omx3u3loI_^?pk!CZ;8_;yxjV@rhh z_R|FYyI!Aa>}F(FiO%lFV&Q=V7AC`1^e7@KD*Q+i=1zOuY&X?SaWXe}BN3Qn1{fZv zgAdOBVjJ0r#F)fYW2@69$IhIn+UXv6y@eae$!5Vcz+J!Rs1XK*^`fASbj_k_D58up z0SWyBDxsMmFlRY;pOT%!pn(A9p;x9NRZ+1wz+SWHn`PBmSkITw$loFxc~WFis#1+F zTh(Q2Ye^9+<V}hgt6xOB{{j0A4AwTY*RM(IaHh^Kp=G2ExsluoHtL=#iPN2Hbf)MQ z!xeeD7uL0%oSamWGp_Ew=vZV}rK=QaZ7OSGNy0Uj4Of;9h>T$%2t*kM4h9T~?zZ;T zTH^v0w~x36>oUvv2tXe8=pI1tQjYK;0vK%Cu_%Bq^&^2q6<wZJg+`fuOFOj;C{%O7 zEt{Z5>UDJVF;AwuEW#~@(09D&5$3fAAFOXD;}&8@4&sh_x=W&+whQ1F!eloiRxVf@ zP<2pnC2``{0gzyx`B9-{h(vC^bEvFj+O`+5T9MWbiZlmpGJ4IE29nXsEt@IysYw~= z>fF_C+ZkSb={`Q}_yvb)!ZE-&vJ)UhQ5qtMjFh2)5WfxBT$MsY)dw0U2ln=SI+~iy zt*sXMEpG@*veW4B4yB3$rODFP#}*IE2QF=vE8?Ufjch=Obb0;0$9EK>LFmBBUnj?q zr0UAe#S~i#BMx&hfq)_!xj9d2y^Ng?>*9QK2Bt4pdXI{(kdd=*4>2ZBZ2g*ByKf(G zy?41?<wr4Y?0EX6+5y#`Tb-jow)}he`B7V6r~d`P_5}*T5Jm`)@LkTvFRNG*xA(rD zoK^~$UkNuTsPk#7cRG%7o0*vDre=IUzp>MOg3EUPr2iNHzwC~`{{PiN1^m@P0AfG@ z03d(a>;FfLljFZaSn8vHX@@qhY~#k;S#%l&&?z+w%)JT<9VTIAph!?Re!2(XN#k)@ zpF~kOGd=8%r$&dCuSGl*tm9aZKm`oiP}O~hqk7lTJltKt117j<DOAJj#QjbGnIqSZ zps9rq1x{HRA+1_&R>sRoH`L&~tdvi0y6U2Ngvl$HbIup+y~snG!eCmtaKxLm2wS8b zNs`eK1oN<Z%F(rU%6wA(9ch*%Qr)e;qAB%S>?NrMX72^*Nm>=4P93E2XWG83K`AC( zAQ$ppV<cQ2q@r9fmu~$&>d((cZR<c|JO*(Dx)vw3+bJ+l;JfscN@d%IRCf&pyF|-N zIK)~U?g2rPX6voWbAHJa??f}wy`_n_Vre?QB51LSSTZ9dis+jJ5FemnmT<SMlICEb zUG^Tp4}||yhQ``3_z!^D<MG^nG86wcI!wJnWnsx!#G1>Z^4fC4!qL6L1Gu~ag_D{p z3%t<Cap>O=&~_a9Z&7fc1ZS;!Y-@mnfd;94EI5!EXL{3yY_4LvV3%Yv<RXR01eV&X z%01O+VXf!BWlevo)kdPIidcqGoLZqv3;Hv78bAMft*rX%xJYPOT2{87*f{LV5<9#Z zoQAE7hv1`g?^)E2BAC1vb4pu4ip45X%jcb?``}I}L7NwP&&m$Dnz9<v3|ML7&hf1e zoa8`ETSIJ#+vs6mC%Sm7<Q3p!Hn=9-_?bUUpHB4lcWjcyPEc0wdr+fg%xxc~i*#o5 z*R|7T=&Z#Rh$Siw?+k^=suN+ZY9T#c$@){C%=9{2AU4y2m#zJLS^U0xdLHwOoT(M3 zC-wS$vD?vw(eAvkCeVTeueOm@-55pERYMu?%()Zh)yYN>1`w)b4Q~d|TJM<h8$LyQ zpULc2ad=+&PgaJG8I3YVg1NTR5QuFef~DM+C#aaqx=dE$gr+lWI}>9%fGJxHhqT0$ zMQnGw4+`nsWLJ*!Va9q8n2y@p*j^=Glv@LJYm3{;;T81yPDQ}YumbAmG<|t(w(T@n z_(8N(f7{NzC-(Ym5(yN2^qVyg#<X~^yI~L`Ga{HvsU*bFEQG3(Y??fsMZrz@N4-h* zUq@cx5d71?{So}aon3yq69IVFRN!^43{X9}X*B)k!MEWwvB9MC!i?QU4xY8q9>(;1 z2_Z7yqDbo7S;8)oEFbs@Qd+;Dqnri_sQHw>UfLfhFx$6r>_Weffk%A5*zRnZbMhBG z-WQ+I1HCGq&!G><v2v#WQT;S^tIzm+@ABYYOS2+Q>EMcSAqr{_=@MSqd*b|j!jaG8 z+wfWlj|GN>*J)*Z(>>#BcoTcOKf{f;gev>+0aSEJFka({|D~IVH+dMP(>0vH{_w(8 z^jdsP((PDF#p-H|Ng--Nm!YjBSV&QfDvr^+JF%1GEBT>|1yY5`OVvLmS1w9K%14rP z7Lv;{|D`oU7bckiL;cIMSa!Iv@t3q1YN$7caRG9dB$Wb#c(tiHErkYKXIBCMa+bk# z)j9t!Zk`^v6Ocrmf2^U>B;nJjky842QPKIWsiM#>Cxu7lX(}3nNq^-b^r@NP7&=NV znc-(CXJMp?>vjp&{gjy%hlS)r;lTw6io?oPf<zxq*#!g+<RpbZW;~I8$t{@`qHfCW z#xPUS6YV=EhLEaG+U3qnnvN84%7Q`<JfTYQh#b*|r>R-XORgm2GRQ&n-?`r6V%{OP zniEz;C4V1=@O-@MePvK7^n;qPUajJqsRvq`>{g=M?SeClK?mQNGWp)Px;4yG|8z|t z8Y-i+=U|T1b0s~d)VuK1^XSTvE?qoBWI#6p!H8tI=^_p;cum%KB3po*IT53+9u6`K zRpiOI*e!wm2Lc{S&+MUMLQE!HPFHdmRzdC)zH5k|YM*e+u}F5l<LX7b^=V|$vnK23 zC8Bzqv3$lKaX|l!geH;OWmMD#BDK?OGOhwS*w~g4R@a<<c;?W{*b%0}iac{7m5(vN zLe7-{4Qf1M9BZtmXLdW@I&KL|l#X)gkpAQ94$(#gqdnIJWlE`C15ZTj!z;I5u{i<# z2IHp(udhJ3iMVJ%{{1@D(LHBU+9|Zff6*x?h+OkC*`TXa9MXWaNFFpOVHL<YSFc~U z@VIAC^wzKj|4b>>2;$g?@}WX9pgC~-+gj&XlO0rCvl-cP+X8$@#WleicBjZR8z`Cc z{APoO%8r<_(Zgx&MqQpm=I1Z;LOa&4*tTmq=)}`Z`r_JU`;yo`KhE0%m7u9fd(tFW z(+4B6WQtmQk<=`WDB;BnG5xOsyf9kz7-N1Xm~t$IVRLUalGs0`!c2-huA00Yr6d|` z-I9+>d^V><+A?gnghc`>)#b7*heF_y76{2?*z$xeTzOa4!TU(SpDfMupCs?=HV=}V zF)O@3$y3B*^&Tv>o6K0=|6H1Ry&a6r$DA(q@U4&;ezWlZx9mUbKM;UB0C3#z<^Q0C zp!#e62IX|Wdxu!}%%kN02IbtTmBP)c@-1m5S9l=Oe-V|14CPsnHMG%K$oO7~Nd^bm z^?X>m-}FlFG+=LcV^aSP2K|BIH{9pKSMM85x1Jrx!DhJI&{2}qG9Y|ClxfR+&i0*d zJIVBF7yqi0s$Ms0LJ@5v^4Y6+y;1u)rJ5}A@;N{`>coT0>2c+^_{SCc&>WeV`|PEB z#eJtIc$H2PVQA@VJ43*SaL5ros+Ao8ak(Alu5c5p(=+VABeSqwz&CYVO-x%v`X|4+ zVgpvP_RaRv#lj{5`nGm%arN@a9hR#;UqD8}7x6?XSZL4MEk>{p0#ssKdsmL>ejk4C z!`Rz$v)N&HISMc!T26LyQdUZ_-QTI6PrS6i*Ha|GfUvEKE@~|_@ZQkhb*(GP<y&=S zc)e!ZUc?ElB7%rLtHSP#ci+zC08%==#V|++*fTgOO4}7yw~-}O$cFHXsuOKEd43GX zmbr{)Qoh(=lh1+t$%2sh7*WGI85-niGbRB!wQq=q9&M&En*o_70^cC1`@3^<1OK0H z-_`8szqB>XdKQ*@BvS$cPD7p?RJA<qvXWklZNLcV01kffFk{p=kB4W}2?kU_L=M_# zcMa9#otPLTx^ndjkjWN1xKzEC?QR2S7uPx%sl(|7onvh^5Lz_oR+hK1hLL)r1g+M} zp%ki?f0B8Sf&gK;gt?1#7u<nv!ZuflbaoP0;o%<YgD8+=G*Z2SWFkl->W%nvu@y{i z=USRB$l}YH)X;Jc)f)wP<6ZgW@uc?QJp@9bPjjaL9d`K1YN|=?A?e52U^91tFavmo z8iBGdQLrMXILBGZTk{aXNSDZ%Hl!`tq<5rp5_cb3o6cES?B@9jX?exVYS&HSb2RIc zjA}x`7c(%DP~8K!p(T{VCjib1-L}<$|9r<8@TMmovILzfzMbgWmlUPSXj$`=E25SJ z7yN<)R#m5gRleIV-^T)0X2qFBepc+vp(E&5ro(V&TOVtFPWZ|A_%SXyng(Gj91jg? zK0o_=2X=(xoGn8w{55_z)vCXg_SV1Is`Nf9WI>c+Gj<E=q<{eQqNX}TNx}f|xs1U^ zORUDQyL}lf$69p+8TKv+QN(o&o>axy*>CWxvJm;k!(ExqBmKeTL_84`5K)=Q=}0?M zwhftt;YBd4gtt^#*WX~>{6CP-8nQ_lt)JZA2kH{DJ2ANOF=TGw^V9b=U>s$LY+4r+ zx9~r>dWMqw0*u)xSSc7cQa+@Mz_MqqhG|(wbY<aj^iOExo${(;Wm^myuP2#cny9ZU z!f-jU<-xGCw0>^J#rn89Uwu7=CYR&HF`nb?7xt5u0l3%;5&s*Xw=gG9(u@O4XF6a_ zmoa4VXXq5WM;5qZ&~nk}{llcoKO@te`<iuQG7iDT$vRoe>G>Wio}>)H#mkc}OJ-$p zB^Dg_TGx#zvo>~cDy}VGM8Xxweq>!*^>VoA%$#9;ZBFOrnSxNx2RN*#aE!6CA&JIi zH=jlbPc%GNN5=`*lzA$8${zCjs87w&GY9v5eB&ErqBdcrM&-JOKnoAa1aL4(K(7!2 zk!nJ+a^WC?R#f$qx~A*hvpT(Pd2zA7R%0hJ#_X*etOIUAvOWxjI6%QN!_vUy#~2`f zYNXF_RtY8e{HaUs*=qy-!}L2HD|->?+%cw!;KB<Id}mKZ#FI8Fs)l-<Fk_qV;ppsc zZcp~cR}g{k>l4`?Ujne(p9HVQ1|~*~S=sf1Hz3N*paW^5LVj(t&~CZJ0O$rTENm$< z_X%ChoMIx}XhsMk9>CVg=pX;?O2NAjQ6f@<VLZ*?z#WtqDNG)U<Z03JU#fvoD%kuc z=Nrf_X63iO(3?J<GyCVKXW@7IoI+%ImZ8HRB!>WfMGb^GeMXYNKNvzL>_bl@%wVW; zgkz8*ReuIyDb530K!rebCCL+demHga=NS<JO~0jB4uHt}x!RGgh?)v1Kp$j7FFxO9 z3ry}T4QVq}vO2DxTj41P%~NVV4NK?rKUk~-LP4Qif`|#~G6^J{s4@a7lR)!sF1ha3 zP!mMuf-P{Ax!32C?BK8XYDq^#NjtW5)vY)bRMGci-QRRCPG6Tcc^1E>*tdajPGe&- z(zCS>64t30J0=grh}33y@;4G7t4fT{nB*vvp!7cPfD}9ZL+NzB+X@wsjD5e*_HFnR zp|^+wum$dee+79>aI;V!^4jcrKEOUpMe^!7i}c;hx;bn(D9S7Q-*F6ushz$>zy0_E za?;|JJ*Wxog`Bx4D@)H^SK{E%{gET=Z}Z-Q>O|!ciGG<GcbNG7?uWdg(UA<4%tE`1 zkCy7$kn<B>VS2g;>ktL^_jD3iTPvHx)2R^QAg-HLv1tZv1eJ4d4W++)U^l9m7t0ZG zKXnrk6cX9IG?4l&eRb8MRbP0YoB?gE^5=U6?Cot{3t;AUk@5q1B@GoxhgpK^P$c7O zwwlA*zWU>kwL1%7@;FG&CUMi@g}nbZKl}hh!@%*NeYsofA9SCX>y5mK%Xa<1e|MNN z{Ac|K2Cx7CmIn;^z5VaA2t<D!5P(E7004v(_slN!jpzdr1fQH5iqF4f^U|3ReFN1- z76t;`NC8XJ3_LAYj`P+VHtic}Q@*@Q=sS+!fb@ShQ`$3~+RL+yji}<bNwAGYJ%M8} zY(a|gJ(9<`!oL!5(L29EpoXaCP08i$5M)41S9YnGUe^ZOmJzK{k}FPul`ex1E&?Y{ zTsdSDR=FjZG%imocC|)97t+zF-#o;rH=wKrU{YL+apNbxL~q7GYF6ShK<(?Q^6^oa z0&}$obG20Jaaa>2RRshKvc+RVX!&R*oCnU0igSK>9GOj!i&}iI<g_uA8%Ub9gtQq! zU5N&BOuBqy^251eX0T=JIEZV9u~3J~UjlGPpl;3oHaB8T{Ql@ctOLdTwLt(v5q_UV z+%qp=Zk<k!;`a^p^>?2h?ID5Y^95*n`#?x0TxsZj2lt+x9bn2@hemtvf7lNiLeYz@ z+v?tDuQufPnSN=PK-z$+lCX>-F)E6yTfg?zTw|NM{E_b7Yk1w)80=EgLAW2Fb-#*H z=;K)eKS_E?$wn9IE(xG#*IeJBetv#Fe()*2@v8%ZgHdH>a`=1pE`J9zD#C%EetVMr ze!hj5!=XPvUf`?0UTXAu{JsD*fRkVUsr<y?@9bK`!O_(+l^*?kf4_a4z}Nc*9kjK& z?|BkL+U@WWQvzT7{JiY&r~0PK^5_aE-QtJzz7qmI{O}9?jKtXOS^N4L(9!V`9K77@ z*nj*0aQ57-#q1~l=fw^9hRpR}qt@2i`o=$@5dBXDr3eTJL&tt358q!OGq>=^KRZ1? zfhr6EB$zv$z9Hq9rMvL)e{x4ZzAjGi?d@v;ocfQr<q}EVzrTJ)MtdPZVB7&$ZF2#8 z?D#(b7AI1dyLZPbX5yM7h9v`DUHY%U(;ZHRPR=&$D94}}yFEON_CutopSMU@e?rzO zT#Q>~B>jr4wGVdSksh6&oHR}nXF&kYOW!@hN&K}y0OF;851W2-VpYjL=GZ1UBlLC? zq+N&Af7TzTwDVnE=q*&mcXFdPPTvEX(OOiDO9zO;2#6q{-eZWuzR4pPLh=LQGASA= z@;73CO9owC(p@joKN}h?7Ifmt+Q=-fzdoDDH6o`d3gE|_UU+&YPCR^fc3$xA75wy4 z#?(zj5C#_)w(elGE7-eBu{@vT0__F;PR}^JKd=6t<GgFDq81#-;o6-4&Nj>c0A7F+ z6-App;EIB0HYC2PfBat`Pwq6TomecNUF`tDU?TTpdl-;)NHQmRuhmQMMKP;9!+=0R znp}N4SjSPjNq`?`*t3@f8?ja;oj~*OcOq#N{Bx?1dEsi6$yCq-r<;SE(ckhVV^MQR z>}FAYFc2oJ_@=FCE2o@<Y<UAft;wjy5Y&yS1nD8XNJ`%^wU?LMf~azkP&{cC$d?xq ztsV|W8f1=uc0m)4b2DxnK{6G8OH^9oQH8J&R8`H2Q>~hT!BS)`ZXa+inK&{HtmVsi zjshj)k<Zt#&4IG`rv6@NWZLcXweL@H5>t2EmUG`}F*NL?ZF$e}ku$WOiWQ(ODroKg z1ub?VvA5beKS6SjpemOw=8Yg60ru2~_<I-0SQCph<Nw9pKLv@>1>vG#8@p|5cki}s z+qP}nwr$(CZQHi(p8n5?n3%bkmwC8xXHG^%)pKR!w{oSvT*lpuU;Lv<A;|TB^})b3 zN3<wEN0#OCJxoVQEF+cxo5$K_2w_p;B6M5|6ia$56HkE-2}L4CZuxF|opFQe@V7^- zr<!4_^GTXhU7?o!(8rEWS{6#d`*??U=0JC#-~hY^>rv#1B??Jpz?t4?uNX!mW6KuR zLG15|<EsT58-?vhpno>rRXG|9ogf28U$1{<j0iQ~aimPFJ)sHwdHFe{rl)jb(Hf2O zLtK;sfplSk*1IB~;WPNxsnB6#*g8E<qPjT2AqCDhORiCcCGcOqlYA;mt0IRe@tJFW z?DYt<oiHjZFC#*l=J=}&7nl@Fjqp-0!|K>orGb6(XRzku1#t2_xMo-Ff14$lkj0OI zAqa1J@0?^Og%cP4C)IPTXZ7VWQwv2|0r(vA4uEUcn<$=8u1BCuabk9}jHH1<78A%V zAE{eZUwXE4k6M)rVhEqN_Nt3&Ut4YHIcZ0#%qdO})v(KBxijJ#6yf2JCB}|8ID55O z`Gk@`E{>Ary>jfh6BQLx`_`H@&3Vy@c_2=V$MyYr^Kgn%=`Uo&$tI$w*xy!&q%5oo zvo8uf1H%V^-v+jpJ8hbgIHAo#@4oyNkGZfRxgGkbwjP-&YZ??D%to#Qj8?=K%%u%N zKh~QmFIgK~BIu8cS-^T{Q_gLmMVaHdFD5~5B8Amy<eCS>&1G=$WHeO_VUqIQ*VK0w zRL%$a`!vuJE;>eT(NS&hjtor?LB@YcIWC2N(&CemtUb#v)AINY(?%WIGuoN=Hx3Ff zVIzaw-BtnIdkPX>DOaAqkK^Qio2tXYx_D0sT^(M(c2e>By-*e*xF}3$d6bO2+^Srs zDw@*)=zGRL_v7DSkhUk|rd^Tuj*hVIZ9$z?tc#Z)+j(j79?1)Vo33l0TTt{|30rRv zCM94_o0gN&)H_mXl1a$Iw=xpFPC^Ipfa`vE_Gw0*?f>Kdwcgsu+UVHm_~t${uyJ-a zwm$CY$y)pRy58Peub-2ZRpOOP)O#o%R(|Y(`?{W*;PX-8YMYXlgDRVfdfM1QFK*xQ z{-)Am#V!WmW!B2VvEqO`EbPGG6$WYt6b0A<Ao8^a7;4?Jo`uOpuUPui4v5S^Pybhi z1$#uR{c)g7VI+PXAD=MR!Uh}mcdyr;MvLtC+})i|{3ba*fg`(CeZ{SNS0nAyaFkxm z$k7w4*LE5>Ds@J7cBk{zdAk!<GPTy8t>nwIcb(Hkc7DG8S$;uP$Va$20tLik#pyr0 z9b#7YJlRkin^-e8pLZnVOGktUs4I-i^Y_KG-)X+B2*H47%%~z1l;plX3cC!HZjnES zJXoPu@<IVrmp)3uAvQLa&3FHlK${}S!N2R*ID@}Fbf_s9Hm(v54p?Fl?Ac6!Dqr?@ z{~6jO)9CzLo?T@@<zjFxfx6KWlCO0Gpj$vZt6s&8-Z0ZIC}<S(+`{LJv}fb_=B8_L z6uKx5?(f$xEL<RoNlw9x8VdIJ|1^@I<bFXO0Zm*M+@e9#jwsmZN9K)O{T8!xxpOjL zOuww&J#Sxs=+Vwe5NI>5g#GA|da9U^G*X0>Ix`KK7@_@6qF5=H=h7Tn^e0JQjg}hL zL^81Pyu1Q0M|<n(k^Hc(sVXBUuOuZcB%4N>n|ghfnh0PrSITKuF#Njx=(u?UDl8SR zinT<FR!hK&Orq|oX65-5lrnqc)biuz1=T`6DfD;ou8xuBe7v<kLwyLODcRBuB$Bl& z<6~y$r?s&6y56ktfz^<7)Q-;CXEn6>{z(%!I>ov6CCO#Upt{Ez>A)Q!4mSc0gh0cX zLoU)P5pOYYQgD4cA5zJ#$R~~dW9O%9x{l)L%9fE(&*mgkvlExWp(1^7NOUjny5OyL zqq~eh=YjY|?0}!>KL<k(HO$GZ!gF#1xiTwt(n!K-^SvKm9|V<5<vwUiPE#XUD~=D< zds^J?e)oFXG@bL5q~zrE<b;BPnm#-xL7>Z14;hJXZh_aNii(1Ur4$Dho1~lQS4=~! z@QDFUn*peU?F%vs^UG@wh7afn91HOOG;2ixjTmFD5t0e{L#Wuw4o^t;M>2QgipFY? zEofJD1P93p>-hW(#b+(`VX<k4!As#U3sh%(!V}X+$)znqW?*I^OPkGh*Nsj@qCYWS zVO7W<$!;|N{-7Pt2+F@OlCuxfZ$;H5=S;Rk#Kco)u1N3g&8rBX^*0>wC$n$qX0;K? zAKoMdv=<05zsS2+CX3B1*zBEAM5e}#$|&Qcm1z1KhKL82^7P0ZqE{@&>aNh=V-=TD zJM}dqaiAbgRFcK(+x+MM2lH<NJ%Xf1IypOS1uhNwCm~tFRh{ghNbt*oEJ6&mN(xoV z?XsfX$mX-EM}yd`_xQoJ(~1yWzr&9fyGM7o>Hc@BF_mV)!*%51mf%6dSD4ET_Kn=V z?#is5j(%(gp5^{MAOu^?^bi3CL8}!2Aak+)Pt*&5C|`(m#W4dEK5IH@^Op%xB?U)L zx{Tn!z`Gz2>0`av(azL-WC;2NbT&<+O6wd-%#tw(%s<7yNv&UyEm(NJbQRgMu*h+Y zH;@s;VI1xg1?*xB4k8&tiP9MvUy7Y)Jk|0U+QFJCmU(Ls<`V^2(jQgS0p9j6QAhG* z)T|Vs83fSqahw7y4d_Q7A)*7CP~6Bo4DdWW2qj6Yaw^F+J-Icn)!(?0G?csypvG?$ zyfw_moHJ7`7V|Ms!xHM-T%`Yv!2lqNIzDV)Jj!5PLjjaRtm68DbXo%eJ`28>e0h=d z@5vH@T0Q!_Ood$!n5z8A05?UR<m%O>o!!}Ca5)`UrDc^hRc$cl630ewrFDL$aPU2w znb@h#6RMe!s@<1#+yu_ob$qxQqj?CXwqe9%<#BjClxrD?o{Va`xzL(Ko_e2g^x3?4 zvb5MBQP%gj9?30<1Sr4?=%Yo2u#HTCea&#{+lJy&q@A5yHCrC3tDIu=;ghR#%%k6W z@SOxL$aoJv_UqrD@rYqOTSZJZ6G6i4i7`$~!(XweUu?vS)NDJ1zjz_Lg5rb34VZYL z1e1p|)~;MQ!Z)JycK%S)!fjWa8@;8~jy7_aM14qhZiF(DRhJUv>X(@qDHhQd#|ACL znKL=y&Ix&HCCkas#|VFt8$Ab6BlmOAw%kqlQWD^$?^T6uJQS`V*;q4}qShFk7p#<i zc$#QFz%f;Ew5txag|?qRx&)mE9p28oxWM3Wb6lA`&0?FnlC^n542NQl(j>o|Z2WP) z9u?7xS=er^lafALb*mGsO>%Ta78T*pbv$tHn2gML_GkmxP*BrYYsAvZc8><tc|E|! zflbS5kp(;B4@yv@!_(7qcXjsElPM0En@TRu@_KtSVdtq$nyy%TSl{~a{%15gpNf;P zhqhz6KKoZLfAW?&jk*^f&B}i+N;_v`cGfdpuN)@$^c>RabyGTKq^T^A?Ji@8w-`7f z_?45X>HCjRT5vC#uZ)Vx$Y~&2b`<b`eiV_H<^K&ZziW|7fgoCMw4*n!n$@ca2?<YY zRxV(IM6->6)MEN{RUhUJLL^}-bh;kw9~h{jMzEf{9`JmHRM-9k{;&Lx_#g23H~$aR z^85K;^8Xha2xIco{f$z8+qK}5exp<sE1P{``0s2Tx~Gso>%KHy#pTEbW$l{R(&Xkz zf-b!+L%6z2L(VQMz8@DH4Hg`%u@a&2Xc#ls)0_{J8;Dhx>O&@Te}ph|00ouRgYH=B z_=1@Kd{NMlrhNfpE|JnU%bO~PG6QI!u>PUEwoFAw>J>lGNB*R0d?mN@$RZIy4Y5OZ zhnnM*p>Qv>2M$9Vo;A+8AzxRkrfcXQ=Y(3tPxI_NV<?MVqqnU9fc?F)+J#B`>HO|? z$Nx28xc`2j&w7&?zUzacn7z>gKlu{miXaIT*=Ze}biJ3({xmAy*hNi&NJ3uCrl*^s zu#uw5<%;oiD4Ep$xNFZtz`6}Kt9*K#DZH5-m^1+TPXz~(V5~3{=nZbb1s7L}(ED&h z;v(Fxtd<G4CCWRK{wTgBm9_~Wp1_=IPT%_8J^KfK<|~n%gF$*`NJKfMe0x3fRq}V! zJp-e-t4u<c+vfaaw?G!YVP>p6uC%)hL7}$M9R=^8bJkZlW){RLpYKjC%&tcZ@-G%a zY-3gZv_Sy!7y$ql)PD2-Sss?iLf9iO<JxBz<4@}A7H#BkMKJzCjJ~G)>gAl46pirm ze!TvOFm!a^M?As@KJPI;ru_0qOnkHCL*fyf`cSW;r4aebX6k?EnY$VqS3GX6w(L)K z`;J!s+x=(tpSc6s%~D`Gd6+8)I%V@Q1+ofbirWNnC%+nyB({@Ot2M3GY*Kv+mHS?I zQo4Te=HbJVtbQ6lo^z3BMCo3y%n#6m`7MdbXEZ57^g&*s5a9dkMd3GH0Ye!5-4kvv zR_XuOe)~5O>oF?9S^mQ#+^vxnxVy+sYmhm&yhR}C#MNBD=j}@dK4$)eA^MTXiFZpM zs?WDBj!rgyg+(`Ny;}cT86<AN3gAL=gGDj^i{+1u+kL&WP(N3Ry0?QJ;Ef}cF=QO+ zq$3y_8qpAA8+3kg`}ObM2Y*4InE{N&;il8-h6-p*#qscDP`fOzoJK`37yVzJ-@N<0 zs_}NrW6OzrVv}1{%$&=C1sRFC3V@uzbGzRavOPO_aMH}3i#OeL^?zH>BTw4`8Kl3( zYLJK3G+X7BBUt(Qj=c5W!I7-i0hwJRepwQST3h^A?88KI=9>8<C_>O(uwBUW(8VSt zOxRlwwN3zX(vZL*7AW6Re>w1{;8Gf1Y@DvHV$6u-vKYS9R3(mb>~My&^*lTP{sE2j zy4Gk5jWSmI6<#1&ax#`F{xOe7D*EeW^UF?16}1)pkie(9f$VxaG~60uHh(5LW=*IQ ziGjJGc0ebd@mY9kRtviH`79cZoF``&$0FWb+v}OsqmQ=1#LgMB7>b(r&m%ZWZ?JO$ z_?T{fwAx9(ppSL-81mtjDr9HM@nHdIpQ)Ht?oa}jebxkB0HRv9Ce(i6QBlkjSxR<8 z(R+@dGw)tix+#|J_?IlQ)`hM6Az)RXj-5WSQLKZAvK*u-JPY5Y@n%F@V*D6`rPRNb zP~(N;R+DHCo_Z#x{Mr0jdHo!YYZsSZYq(d1F4z<^9<iAXa=n}M76J@0J#CzXH0SAw z>;osYQ!QaiO@0^gq1nZtf#j;-D5z2B+Z6CS!^}plg@NAg5CfCOvD7dyZ-djJ@+cv+ z1mNbGmYG>`6~tNZ3ymu_-&6O=0XHNY>lr`4NN(J+RNrRIv&(>vrqEh(XFj1o04R$D zm>8S;>Ps(v&c^_?;7;t-m9Svd5T85i!j=54^6T*Wlgbko4zE;e^LFiBh`r!psMOnq zJ_@S=@0&f2Nf_Kjah-U}g~<steeeZnMUUc*KUYcumYMPROkBhXA7S3S+kX<JbybTm z_`!%Z@c3ksG%A^fN=9SQ4!DQg@iu#*6)RCZaCK48GW^v=2JwLKV1k^}jG+NhX7~q= z5WGANXf92g#7??Hqm$?Q#-c<D7SCYTs$JKjfaaUe1Pr8+0URErVqswUQ8SiUnH)FN zad&P543*<@;aXiz;7HybOK;a+O!&1OOkwZ?XD2Xxk3=-i8~h7uhePU@{|f+MgY-35 zP8Ec27m)&z_z#Q(m4c|fJShV^e}%@4Jb;~7=QF}zh0x2?td1tx^K4D1{q3tSyfoRQ zq%ke+bC3_Y(Gl}p0s=3fha9)&&&YBJ%mxqJl%l_-;I&4-bE(YW5|)1p<3s5LBmAlw zDOMqr^7BHfGfl+eErKUVK#)s~vd2MCjgo281YA)Mn9>C&^kd#XP?|r{PiTn*=dtq` zQ|pTg?FuFj|E^rHI1R+V2~{h08};Q$%xQ+)t?9VX`qO=a<ec`f?8yilca6b#tv>CU zq%!A|MUbOTsU{v4vlz_ze0f)hW12A2SjojNgypVk#<@oY2@8~+t*q#itQ@Tm^!#0j zS>_3wM<=VNNR6C<>|+b1G-}{4*q|jaqarezkX)x9N{^x-$=RGu&TyZZnhSu6`bkdx zr{rY|p@WJH)iDK5HNy{hL=9-LBIy^VDJnUWMa{2CK5;1C?~9C3#M)lQ7=(yY9K{d2 zg+$JVl-WF4mU&`yyw5V@5=)b5nLtr~PPoo>(T(4JhVey<-Ya4suh@DRC~e`}=i45# zgRMrV(wZ`sNUEIQW@5+7>KN{htO*jED<33^u}#|gNQGbj9#$ZgQC2ZjY{wXL!KH*e zU6xiiIq_nCVrxbaYV<lzaGv&k@T9@0ERix-tYu)Bw{(ZmR>CFS@&-)jyKZH0{TJh< zGjwr0q~Lq*bF+q2S}3Y>3NWYirlt&5b4(5=gIGUoVXd>M|4)GPYWZf%1MI7d&b<LM z%TQ8^D@i+dq}P>WW~tGP2OptPRAkkKa0zZ6%QegDhOr&;CrwHU313fxqAP!iZ4?&S zx+#k`<HXguMS(shhgm_{U5OcGH?V?()IF0E`3jxd-piL43+LR9z4c&w?tOdF<LUc4 z<=wc&*P^wn>T0!N{eH5IdH`IM!RfK=mR&p97)WkzftAhr1wB?8qR_)Q(gD2zMAvWP zx~Iy%{(jEFY8U21#H{1AQ%Gpi*R#Az!eDK49)@44oQ$~*%zSc@c&s3TfKG#R;*mQO zcE-AIqGyKQC~A}GLD6{oBH2Yui%qW?Zzh(y=4sQwo$Cs!Y>Y3RH0s!S_N~3Z17!v0 z!ra_;KPvA|fS3?UnvbC`IxCGkQ;*K3p!oB%P0iujwHuCl8}Q2suLQXl#M*S&8HiqQ z%mOL9-Li~~4wslk$Q;O1BhK5`e!q3uZnI!VdWZ*gg4z?Y6O~IR+izlFN7?-J0F9p~ z?){A5X@RB0`;RAuC&u?n$-a-|*P~RK$tg|o_e(<V3~X6W7uyrV?#9c+?T<U=Qv>k1 ziH$gyfDhTz4D9CYmd;x-+VW1gz>n3Z&r8xC?0@%vK)?Wi-{*hH|1}y2bo0{#0SNnT z#{eDsy~`>}*=*24cfF|CvR6XZ4u0{<D0r%YKh_S+f_6<HDnKa_3FK$I@5I!{FQ0)o z13Eyn7H8wW;gU@xH&=7VQIRX;0EpHf)^=av2&*NfU^_4K@CvpdhJl5Y2@wG@I<_JP z$|#;Cf;1wqP~0g9IhokG;5^cYRH!Ql=`i;}f6_i9G%AqMu?Cm;#eJc2k=6G_WX39V zgKg0UJ-z5_f}&e!gxMgV5Ritp83I0eyD0+DJB{~@+*?#+YB=oWXGhJpRnj}>bnGAE zCEgLfeqcFfu^OtkFaz%VStSZYelJBRRRT#*V1e-B2S(P7Ab&#WTNNB<DCJuxaL?89 zrB;=J{7(JBOo(pIU~RIlEA`2WfutjsdPdj+XyC51rGB`_bY9*hoFWihCEsa43$WC8 ziUk3urDJ;er!EQq`8s}BM{AQf%vK27v<0mIGoAtcG?EDBHp8ruXtwR%+lLnYukx+t z02+Kg{yQ~(Yf^}J)pi;%@^4aXH!Z3NP3v;pOCv`RI5vJ0LHxBDTM?VHrnfrfE(etE z^qdVVrnD-ht2dNtyg9aX`hp&jvw7A4P&z!!a1tw8?p&L68mB9Tol>x({HN}P-s}r7 zZ*j6z*9dgI`77&@YM9LM-qpPDQ}nKM8?K4jxBC|=l8f?5)tMWWin3g#jH))JQ}SmU z)CnP_2Z<FI1wnBWjmE^m8|I8~3k{CruG}B$D6TobuexkFn{n-v+2LV9P8(y(H-dDT zrTZYqbaT7rPJf1Psel}>g!Y<$@`arRhx=9W5kI9w1cZ}4qHhxamRKFyIF`OO)RSml zZRQ0Qvi=AD0muRVd;UL5h`gWvZ(|ZE0030+|51(l9)I$;L`{-uHff-{JN@)OOVp`@ zTrW@u87VC2reLY2CXeteSwTcg5y_OUucv^4R5T^<XbHSh3x2yP7Yja!J89as^qY$K zrKyGs7#L}(7;3&ma^aB0qY)|8*6a1S(?|E;Q^Z4$9~c8GRg<=S4hm2#Dsc9a;Qmq? z%$lyA;WH_IIU1n}X(>TrPdh(8JU`xFpC<zyQay{WjsyIEYt4zs4L?1B(3@#BcbwH2 zg_A>qa+1QnZhm@pe!RU~u1Z#Y?0j|rG%@QkzV{ABV(_>-U7tRGzi@cmwJlDLE>Es? zheHuuH&vfbY^iPEpFdvaBXu$?-E6O|4Gj*v^jU3{jNnt7V++KYJT9LH7aoy4+qZSz zM|vMFr-wpjWNSS>-<z$r2RA7{!|%*5)Z1;|hyMPFw|5LCS5`QoP8_pE<@20l-tW1Q zVB+Zb_tOajBd}Je`zOz}%j~Yl&)rTNHk#ZSNJr#U)QYopASrXIl0Ub1U5%;uz(^#U zrn;DvQjQ@GPD@F}lv^lA79+ib?r+mjxyecv$^gKz0Rg}a)^k$e<nAw@Xuu37?_Frw z-R}U1`i3AAwA*fvh}D+Y>0SIlK>YsvxYO2|nVP&BEjQc3t5=Bn@h{fdCc4M2@9zoK zVIhr;K$_=g3*g`{HjlQoD2T|4a`HeP5g3;Q$3_;*rx%#;%s3F;Kc6s=7@>16*P6ij zE;rge9xudflNu@tD5<FE-`?ODFwMIkF*_+WT4G|;M3(KHou3OSH@?<BFMCk4gHIMG z>lvjPWl*9K6`~TMevtvG697z@qT1c=Qj(JVzBxIhEdc-wCmk_4Iow{R#e^q%MPN?H zJvXtoys$|4AG>!7!^O?2QGN30VG$CWZV=(U3MH`VX5kE<AAt5ZI<#TK-!EU&U%!(+ z-g7GpBj)U=Ee-$=xJX#BePj13>ZzdE$daRceuuWl3TQPMY3jOg0F~Bg@bIqh_e`;R z#bo`rHzcb?_$K^Wk%wV7JKS0Ao;o@+@F{1io6|Eix7PzCwP*Rdem>AYeh{O&fk$M= zB{tn#Zue*RTPx@0n5qXzE~B=#nQRWi>VXoWF*s_UXBRXs+1~9Bj|{V#&eGa$ZlF}a z9xzT$n!*MwIH`HtT|P*r6yVHv6zO5%>cg<ve_S^udL5l%V-sYwd>Rf86@K@#f~{T< z>spNfjH?}{imp1E`{iw-7F3<}e^`J}wHdSfu4Y$zQ(t5vrUN)!M6CUXe;|Mr06>%9 z*Z=QG7>J+YZ-NW@_plQE&7vr4SZ*kyHzScWAFw*77fLrUo&`0B))yM(Ho+B<i?5&x zDoNo0M}ZR&xvo(_^daE~4i7Lg+QrSHyYvMYLpBLixUTUkurQwriNaXbGg+myx3Egd zZ-gD(w%|(9h|LzlXumqye~z4-e*8RS{djVZyt{XpCQJn4Lu@VlrdgbVQ2Y!)0K$LU zok7=rN2UH>d^|Md?BJ?iiZmT<C9t|~h(1iXmQk8n<9IUuoYljPh?w+2A=NUregIxf z%wfS%GP_337*%;QH*l=ssJ>SP3IbSbU9_Q+<(P%k4*=kmxZt{4q=q0OFGmao->YO& zv|KOquJJ!>MOhcH9O^7>Vh5#(^2E3(3ztvRDMHf<{lneeY!_@c$JK<t2kvoy?8g>z zDS~Ogx<<8qC$0W@gD3_fAP>g1o1E7|RvTzkhzb=J`MOJHFhkJ0FZC!LHY+Swx6#PW z3`Zu?rYMc0Ln=?+;#Bu&`uGGbM|iEp%mw}c>F6)^y^durYar<vSoSaCRoHI@xD=OI z`b{^vQfJ6swE>~~6VSt2A$&*Ht+(|Ski8Bq?F+*svkC^~I!nA-Q?Wh=>W7Y$lH<Et zgKFTX0B-Vn<I8$MrK8R1l5hB*HMpz`5LeBu8;lA7vl$rh6NPs2Mo6|kRGTQF(DxdQ zpOzfTh!sl{Hy<R8%0z&E8g^R)yAjwHYN=AHZvXpr<%m%!S8mXTwABe}yaNY=wTL=` z*Ao@YkT(CiQLDuN+!S8l=qf@qHCdk18Ix25*HEp6d*!FBRMY!%7=dRFy_Nm22>%f- zS$y4>m?Z!6gwcZbX9nAI>*241VtOXy6Qu_FA~xd0!R^HS6QM&WZqr(-oHKFJjg$Og zS0<4R9nXu@<4!T^*@Y7#y!zrGh0BzVx1Y7HQ|&0CVQ*^s3DYsqwED}SLYMDpaBkY* z<l{OlRnMK=UGe^>=OIE$r~Xg*sH--OlB!3|?gLsvot7vIJEPkG**W~?6wPiNE;Ytg zatu>Sy0hx=%#Rq98QjvVT-7+*7hW{dLG6E#$6<w#q50$tgncI@f&C80M_xcWJ@vVg zK`x*da}3Mjz0Nqh#(V4u{eJGSf&FrnOa5p2@&{+*Q8hU0<mANdJEDeX<40A(L!*Oq zqB3ZWodYqW6B~2av}I=L&lgYrg^t%z=`qt=y1B&#JP{gf2(nP!26j&7dn&$I$W*qb zMBe-6+no$e5P0R$H7K3C(fP>S8il-b)W0hbVN`*c6=+&uGCT-JKe$8QeUt8==DhB_ zaRrzPJ_?mHuHtj9sl)*B3VY%V?XWHFD4JqKI`E_WHucYHWlxn<&ufE&g4p_<mBwkb zU<B5>nm0L%HY3yh%1n8!>-1kr)0-1vdr??Q!V<CIzh>!%lw?dyO|0J&hr9gtunSn0 zi46cZG+nRshaF7!N4LE*d3~5IJzt_w{`ru4OUhOOFJq?m*TRe2hE4C2w<;wId9#o2 zyZxbwY85W8P`N!WpR2?SwH^X}4ffKomp<9~s{bkgP(Y*@xz|b!7bY4e41@S4D@PgT z6#082g(n5!VI$&`5R9-G+#I7F_@{gaNQ`?ry)*x&MSIO41d<gLvz$<l9P8h`C5^^g zBAnSXh&522$jkn#3N`aZZK3kQdT02WiD&KZE($j-Vyg)1VD(%VR5d5}DlZpC6QH;w zjaFdPG8QH;%+)2TN)~rurywZzN3P?1AA^&A_4?i}dGBSx3|;Q(l6ne*;Gx54%R9EG zzV=%$7kLCDq(veDQR0s@wq(gH3>8X42z*_p0~S_n!%WbZlxxsdA(XADD;!meNMUZf zi)_#Oqd7w}jcjB*GDd04VO|_~<OG)brgz(U{6Mjg;?3dk@a(F-)+VQGiK3u9f@)|S zf}%TYP{pzS42yiDYWTX2hbAc-*2<QmK-H)vmsFXqCLtP>wr1q^4_^78BhBv}k~;Fw z{JbM+zXZc{xV<X|lo&s2RD1mFV=A9XFMe~n0s?S8F@uexw<5kvm2o@JR$c2ZWsgHT zA3Lu=FQoBri_*Ed+RcJjyhx`p?z4OOm&cba>tWBup)zHttx)Qnd$})$lpoeP9_Q>D zmDs*<YH&N)X$fIVBN496#Vl&OQi$I?j>Jp_`sqr0V4f)_wP^g|VP**rPf#wzgnG#@ zX-@`@JGy@w=S)mgj4!96t@LaMV&};m6R?@3=cyi5BxMAE)vUpe=L<@p9Xkd8UKxkP zFf9YR&;Uybi2K}Vt?kujzcnxlrNL1vXBqT>c|p<DwKX;gk7v%BC@QnA0<-w)))r)^ zHqGMX-uD3S=;`X|(uK;+KlVim+Ter1yeI(en3l)SpBw!jn0G0y&bQeMG-mEBuB<LU z2bs>>Wu1~MAgllB|JwinodDYYZ{_~OX#I?TJ-p%n^zi=;A0PZz0aAfyZ{pR(dp5^1 zWf5iJ_0_`X^PnU(vqZ=fO)9)>?di4&ey?BIcs5i^k6~f3!ELjWw|J?r5@_G9Nn9sR zpuEx<lTV6tIbR!sjp4Rrc|*cdJJ?pj@1W3cR}F`eBUfy9Y@|T+DwIMo$V=x9(YliY z|LVwlD5zQfbPur1$h6jYfA`N>&r~#WimZkGJ^)(i{+Gf?NJ?~2HHHR4d;J?efw%;L z`x*V-1`z+h38ffuq-?BhK>m)etxA=EqBGXL-;HqGOO2p7!{45MT}`Q=?#CA~Zo+MC z-5)M|Da1S@l;Hw}{&~@;p|Ni7Ru!5%z20gdLtXmB<`+ztPTX+WQLVx+m>8iTC;b~m z;(41EO>s%h#c_A=11Cmjgs&l~_`Q}QlDa2g-1_tR;Pq0q#BS~kPtCwk(O5aW=b;fM z$pg~=HQPm{vXjZO^ziz2LNZH?|9<!K(NMzj`g1pwij2sJle6JxoaNo9BeDc0r70_T zK8BV*57%wG<K)nk8p_EN1JRCaY)k-&ad=C>w&}-C!^KfuWEe#DbhF}9>~k5ZSqZWL zH*Kq9U!0>Ns;Jd>xw4bf^Zm^W`;z0+y{-M2DiwVfGfJT{h0nl7qFLOaivoK55prWw zc6YDU;qv(#=lT460p|1I-@oMi@D9_U&iVA<($R6EaK9e=y89CFwBQ4_2mn<#*JlG} zvgvqwM~+O;Soid}UE>B$_4Vx?@8{K2$W(4D2|oEj<eYKRSZ8NI>ixXl87w5jguvq2 zIy}j$D2-UN4=xD;LDE42di%lQ@$?FLe}3BC&4YS-d*>npwjco?9v$&$`lrJ}XLeS4 zIy=KMG99i|oSUb^JNN;hvr?>74mtw9J(c@om*yE7o8zKl0~&IAKI*PyXPKIlmaC{# zX`S61z(L0*m`Go*cL9?kq9XcX*Byp%j8^X2LJVvUejZJn;Bk8fx<bH$NoD8;rhN|# z-bYoXT{FUOEG*3!Whw9@0r1?5_x^`@yrgzu6)S_1Ev}puWsMK8#G!8zu;SQqpH{Sk zldIqW2wxa@TKhLOtB$YpDgqP|5{7@l;A%=4t7=|h<b9Rr0=!&M4p-)&=--(z@1lJF zYSgdXJG*!HaIB-8MZ!P(3Y+!=$6U%E`1D@`UXMNN_EbgeksCqN1K_H%<(0OJcC8d$ zsiZM!rJ+9A+%3-6?>EjxAd7j+=ETkb3=*wii}e%NFi*?3&+!9y@g3IojrL=?NvOQU zyMJf0#X}D7-`fKocq%0P(*XRdGz=88p#NAgi?mRXL;C_jG%#Js4ar`Gn;k9;uHdl# zgT6vl$S%7ZM#+-$Dr7{Be#>ktzlqRVd<$$I;l_4sA|=otXVOy^uaJoeZ+p$vMVGzM zDp;ZR?XR~Aa59fQw5(M6SGNB~hYFY5;GFAr{iKhHqUIP1c^)MpP(uW>Wbq^-aIGT+ zPxJb{3LsLI5Z$YrISH~V1B^Ltl?u-l#9iD?Rn4abhe*!HCt7{yiOuReRMC2wDofup z8?LYqsARm)iBbOqC&E8!-*Xy|KBo9CZv2TMxgbpIjha)Qci#1gM?V}FTF<k?x+oc* zn$glfd@-LdH_S&Q86~7`{Pb^R<fK6?>aP~l#8m>sp*=txG$6rMIelXhTqIGW;4<?& z8Rs})1`O%JN2mED;1=R2jn$wb>PP6YT?6#rhtT|dq#!8MAa2()eEimoFamR_Ign{) zn?DYpZ+3l~lA(MG*Wt;xMA02qQi*^&)0WBUVO2H-ZWT0=jP(9a`=d5AIzC@VM>8iQ zDr=?Gui^TSdI4**;Pn~4bzB{DbwD{L(DO|Mi0o&G4&>0h?k3;okcd?m?D(hlL&J6r z`{D=#!MFXDXu0$R*x+nt25#rC9M?+9XPk+0T1T?G#dulAXAZ7o31+?75SXvMW{+WP z(-+Wfx(Af+m0(_{o`JYtPP*vF>{%?N!i6E~a5f4jUV@(jzRVGmq89b%^4v|b-Zlw} zX>I-VzI6?AW4c~_MWr@u_M_>wiLF2TV%#3bREhepp_A1`H(FJ|H($HV$E<0lvzt#* zxo{%WTbfbFxqiLiTCm~{09y0+mjW-HLR6Y$)B?H0I{}Jr7{kstp+@R*8wA~N8jAYJ zGRgOuBYVpE^J^04W$PJg6LKRTVb2d`K}63$pn7V2gQ<Q2GH!!zU97iFnotym8zxe1 z(~O&}tf{u<)jM!137zzj;Bx>l9?J;s;=quDvjKLy2J8&~NNx*;ss04iPBe$F`rfIM z?mdZZc;jB7tg?1Yl+NlSl%Q6M^NsQ-deM$(H{!We|2VO^>J=)=(EB(rtwOu3NOkl6 z0K?3EkN>(OH;V>6EB|71ijv<W;<=ZHe5dEc^RwF9?nK&lvW4L$NNrJ4O+Ch!QCa?j zw$&K^e3~UB1h1PXv^CE-W8nq=>_dIeBzxBBt08D9?M(^n(r;xAW|4a92ENle<x^`! zY?LLYRa<Kh3s(=DHO7Vqwu-2qMS9)&mPaLuxU8pM?@;z__$q5iz$-|YBM<XhPqlv6 zGhAk2*>fdgEcqf7G*I`aDxdZ2`%FX4ixYkzPi14dh$l$d(VD8FW1E3J_J$iBMgk)h z9*HZvE&hw^tgF<{Wh4;g%w#5g_}#cH2X9hR%zLaZibdam)KlnZO}cDC1!!2USuB5k z;0^G1d_WCAdg}U4PI*5}L2`I_oG!RueTHbmCy9FU3OOxZ*>mg|UxfzTte0Uhjd;`_ zy|)ID>Y!pLD(r>0@L}h`Wq;daQ*Y_Ezodu73Exti=-@i(ND&x@dSp=;DFJFytKw>~ z$cWFs?6Sp03JMFxErCv%kX~OU$XRt<y#&|0^690_Cq=XK`88(MJ{2Y}l8&LPuR-B% z+?h{ua%-|O68*A%7ljXESdRAnS#1FbZ=12%l`q4&hC*Vi%+Tb#i}kTSYtX^W0T5LX zLrJ0~ynMfis;17`#g}d$Zb#D^Th|kf3nUDYn^g3P*%5&V9=n<PP?;X8_ExehHqjFO zN$-68=AiY;QRUis*K_wdB7`zl?)j0RNCdB?(BI7yqo{5F056Puc`a?JC1vTGk+HK= zs~4gQHYzsu%%$_fVR`s0x%TWhDR*-s^Kal|f+Ln-y3*v1*Wl9FQ^&#kwf)l-a+Up= zitX^?63i2w5}WU&RFWDRWdIasG29I=57*DSiVg2&E-y|_1lOxM{uN28Ic}(&)fxJ| zGqSujaRxXPDdoqh)K@k8{M?7CEQ&&qYaD?)yKCu6nJy8E0~3Texn=98{#$s>wsWTP zmAPgg&l0cfG3IrIw6+|riv-gsUK=L^OFmm-wYAQ*)>NwLYP)wv6~Tpsj^pdV;53;F z8O8dsX{HM#N6P-tH@?ZN`qm!{w<z(o^^!!skw!l1bJR;tCJu*%`^md)lfcN_BPJOq zB6}SBhOY#updPG?Z<;GO@fydc!omS-EL@x6c?;?CH|_e<hSLo)K`idb&%+fB%S(9F zPihybxR9afmresLB%j{I5cjMu{zmo{kq+*Vc-FGI6U_6XH;f&^Nc)!X8_7tSt)~|? z#EH0dql@vVG|hM1Exh`DV(0gKTREYCU-Nxdt>#3AFyHyku_mEl?^Qxw<z|-V+0oy< zJacnwUOa{{5+u+Qfb;JX1TuYsd1wfd<9NN$%b?)*_L=Xn+8xmf`^CTe=Ydg)hn<K^ z_5JUttL4@ty3D=NWDrJ1goU>w3!T_ClsN9?RnK~P21T6HCA9f!CQaQ988bOylv#t> z^kMWV9uCg<;Za)oYGfv^4-eDxqqLbmakOM3M$-m6tb0fB5WI+4Z_Np8V>qui&plEM z&)>-5jUUY^yZ3|#6O&2v>7|9<{1@4|Z9WSdD`{x{w9(n(kxfTMw6mcTU7XL~@@^Wk zJnOl1tuk+`wr@#rV7cK1&fYSIQS-L>6Q=+nNtgqW0&e1gz)42RCrvTQDK{xSt3?k8 zoi38#dp^5x!-{#JT5IwCxMQ$;TZD8Ahx;d-Pet+9n}B-DQljOStwrC<hNQlr3?tof zz-PlzXo8yMz!aQ;#7+&aU=cIs(iEqC=?R%}w=~qKTeP(j6q^@_({tjv3puq4sfHv* z77ZLVR!@bCOG$2HqhfKoC~v9d*7O}o?C`TL4O+9jQb~E#s|k4z%a&6jb51%Un?^Ei zZpjWy;YLY{iM>d7X^kdG;z)p0#H!)g-A(7MogRb0qu{c2zo<G41Uq9!u7?5*!MaO? zqWqH`{RHu;ow0IwFc=vj#s2pyR9;>{tZ5tM_=`jCzyZV<3Mx?9r(L2gCqv=eN5p)p zUX`p<)uHi<WJE)A^IF??I6@6fAhpoT9}jztQ5cT=o5V^YXtCN?Fp5x0YNxv5Zd@7( zV4Pt0!0A(Bv=Wef%Ru?<k))*xY!3cm(UNYwEJQvdmpIHUWdRi=LVDG?ns)dOcg)9h zCsgJs7W)|vO@e>{J0c~1a1nhPq6I{lC{woG=$dHP&yJRCy2Yh;Z6*XkV$_#42Kqnf z$;Tr)=ZcDV_KiU77qItc;j}c3xAZLY+v;AL2-a8b+GPR2CSEQgHl8E0)^fx&2+nFw zCogJS1Vwz&m(JsobItXm`e+teMN(Sy62km%C&txfWxv|(ALcA}z9FLCH6*Qxc$WAR zqT%%!P6oNT^B_50H>l}MSZ>wyX)C6=zqSc`)|RmJscCEA>w*4$Dxo8LjrRr8QiH%& z7$h-92Wt^D5B_)RPF#XrYJ3tS)w)jUhvUBez}PVzi3duIM`--fXIxbbySSDMf=v!) z9kMEGO9JN<7Caqgjz>$aZL>SAYNW+y2)L;`RdX_88$nxpiRWLDm`ll{SRg_=>YIB) zYz~B5Nl;|qYXQ}b!F}=b(S}g_v>w>T&`poeG>p1yd}f^Sn5<`B=w?}+LeBmGQk=~Q z@hezUP2B=13`<=LfqO)?_*ii3fXZ@m;qr!yRIYaQGW2=#g_Vou!tQ~cyIPCkw;@(( z>rWv^O$=D^;}gx$YtS`J2d=t^>d`gsFaAB=YC=~jIOd<PE<+IuN+-jfK2rUrm}!8G zBR5<d)f}C()7NK^ouCjIKSjY2`rAD*oKoT=S}w^IyeYy92U|vpI{L466J{2eYiGJ` z;q)s`MF!(r`TU*^P5zDEb)&MSN@D;e1vepIfhsDYB^?=}Wpn8BRfrZ_j<FiId_4B@ zjxY;(>ZGPJO8=>2dPHkTvZ*m_=}H+VsA$fx(sIb&un=WUV|}@+EM3WzqTPsh;Aed_ zY#0{LuWVT3usrI}2>2o3CmL$`abBwli%DY^0jqX(i0ef^)5PecCUA$c9xe0xmSqxG z*?x6jZgP;19};gxQg37G!i2VckdK=jL$OI;o688t>giE(p2{}0wj?pKeC|Yb_sODJ zeis-P0cHL9c5%AeDZ~-GoIUHawYQTFMC^?5DQ)5Se1kI&-Fxd6r>m!Hf?~=*Y9dRq z^uc}L7dePOKgNBLMRDf+eq0*EbtiP{<zl*ET?r9+YgNJOSihjqlx*%~qijI^H}E(e zSb}-}RFU6606vab;~0`a_dc{_1stuTgLEL}m|8tAB*J5@zp`2H7BeJt6;c7}n&K1n zie#{^@dN9ef6o0jN32|fAYy~q-CR#54Q8ToK*p!}j{R8@V}D-ZN05*|l)pqcQo<yB zjz>s5?~tmF9X*fiWg?-w5fXpXpz96<l%n1Y)sPo5w&E6$IT;K=w2p;`BJ-5p%t19$ zBD05;85{+>k)c(=_7*N!MGulkAU?qO#?Xc!kA&wY{*_}+hU;Ev`@&HSn;PbDQL<{b zI`yQT=k&C!euuo%Rje>E&$x`pvRw=v-pY0NFtcUU)rp|=7~EkXDOnedt8!6t6BNq5 zz?1R<B`)x>oEXPbn>mJgo3lnn_cD>NJu+wl_uR&Sn!%%awrkzu1^@N^F2do(6!teJ zOHfnq?ZU|1Jdf{fA#zE%@}7nrg<kz)7Qv=rS`noOiaf>v6*<+vX7e4lhD)feyLbFA zTh5ZV!#14qHt~T{qh+Pen_;z1yS*=M1h4hr$)D2R64KG+*R$QHCuY)KD?4TT86T5* z!S7IiZ7c20jUN(XDe`b<wO}684FLiD1)qa*slb;%SOiClY78;=lU*Y8sKcU`Io`}N zqeHqf&Z_h%WNUQX$8)kUpwSv+ZpHkCB+zUYklo(_g9)d%2K(^Emx9z|nv?CH(&Q@| z7kwvAy!sA;p063tOXNS2rRBPu4W((HN7zrd+lj3&cKrh_$UY@d%scJJ--3jvR=CoN zy`&D!r}_b>a<T)ZjPGa2CuqIAc-aN-%+$8p=9dm>GmP3_i&Oae3OZlUM}x6&%@xL& zsSUL#EgvHezxem8;^K^_7|vOZ7CBIietBFs>hRPe_$rQqE6@ti$=MzhX=~w}nR6Hp zUzSkv-V<AH<yikbv9`{v57p2MFIVWy_4V46ueCf;0XJsPH6>SfWG`+=N(q7WT%gK2 zb#ZFV*}Wz~Gd%1mI^KMHu46ggl11W!+Ca5=khWb>R?2nj<3I>~YXTba1-foRuHoQq zp%XWuqlRTm$P+X3lJ>{TX*YeQ;b4XK-Npj*Dxhee<T^X0-}E;Z3<s8X>Cs4u`OCz8 zE(xHsV%0IR*)!>^clW0!lFnf~V!wR<)1$1+W}3hGU5BCj(~<J$F1c9d9-(!|u2+%q z8jiuru{xmf4PPWPQq=)%b!@%xnvi;8{yNz}(|P>`Gk|#oFkuBci`W<8Vv_}t9gk9D zkg?;2J{S_t;)zF43w?QTRN~`RR6&3N%s#`0dzm&TK?8!2JYE^s@E+Hal!UUIr@2u* zUv?-#yJDnuYv-qS(uTD)dQ20fY~_bMjiil^ociEvx1e;Vj~IQm^rFAxfx^iOqF2;$ zg9@v7jbTh!KP5t<(ZB?E2UR0yRMgjdSf_?@k%JIx!N!Uu=}}PA<My>1v!LM;Q_$4z zOlDIlXEU{+q+hG=O9g=j(<Y2sd<C+|J>?SG4*#A~Lp{6lxP?042B2L2izyJuTM7d& z;>K4n(`LE^9mRH=aOQKHCZ`#79p$vNjm7y*vg)U#fJZvjjFyij=MtM_{aj9`JSVEm zrz=*jH&nz(B^NM`Bn4Mm7idNP=hO_7iyRlv`EHxM+k_9emu_|z$X6F&7aABJkr!AO z9O&C_E*sF75D);&+1yOxBSr!V-%`Nl&eOr9^|(K@(_~fu0V6nlGHONx)xMFIapw~j zU=Vhf(Yx?RU2dFkDR|8l$(wQBLQWZ}@mfMwS=G)L3aQ)_(pwAs&oWbYi}2W@(t}4m zS{r_|96&5scV*CJL`$Xsrl?sADLTR)B#FG^fRW@QcZa3vsF>Jzj8F)#NPAKEK` zrpj$#0!RB+D#5ksA;EnFM44&Ao>g!-r^-0Dq-}b2CKG#6h>pgZjb3g!*9_|!u{kWs z8Wrkr_JN0y%mxCb&%Z@`!dFSZ(+d?zAu0@yyBCe9e+QsXAGN?cy1nt%N4ES4y4AcM zPDTgV(*;EI$=vHL?2YkH^s`KxNB0;4(p5le;x}V;aK{9L)w1sYJOqv!3ip?Sk~?@X ztt&Fr{#sG4W8LIS`p5L|ZP1Q59mgb~hDifk4@2staf1xmufI$H&&15XKBuMBA(#Xb zAZsSZTXIb=iHYC2y&j9Q8eUes@7)W+E`F4?r`hJ0kCm#uU(2IL%o|oj{o>zCMK&nR zEv^9G)U3Wo$W#JjWO)i>ffjM9gzVt@lsBB805U5?=yEEgM{#-J<jr`jNgSBNArDwK zG&?NxoK0X5G=?~OlNg!oR2le%jXqI2>iIiOZL|Jw9^NDM=#j?BUx>Cl?jZ=3$^pM0 zB?QbEMzmDp2sDKV|GNZegC2x4K^j%$sL%wPrK5Ko>)c}CIudRLf`?I&K2wI~qY0km z+UJDRYYe%?4*+x@&ctf)$Oq$|;xg#zZp*mgWVT$hd_T<`q@c#w7y&~z#sb0Pa&=E% ze7QT?dea;$%AX0D@9QBd(CmqA4W|$8v|JI<^>i`IOGpJu?w^G*1{(Vfir~Wulg2qg z2F?Ru`aCn{LIf4dpf)9gQSY=}eNi6cFCzKcIuq+sKsZ_rtwz~bCYHk0!-;6=I|3!} zURLcai#GQHs97||bk}R+90P(Q^Pd3Rsg^8a^r78ikuW&`-g>Uju!#14{hXk);ibhu zmluc>njCd_?E00DkW{nbOZXGO)Nhh1r`n+HeoHlBj|{yZBi$XNt4ww_apXQbA=~eh zfB3qC+Wc&Tk%VZA∓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 diff --git a/Documentation/pqClient.qhp b/Documentation/pqClient.qhp deleted file mode 100644 index 9f57aa8938..0000000000 --- a/Documentation/pqClient.qhp +++ /dev/null @@ -1,751 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<QtHelpProject version="1.0"> - <namespace>paraview.org</namespace> - <virtualFolder>paraview</virtualFolder> - <filterSection> - <toc> - <section title="ParaView" ref="Documentation/index.html"> - <section title="Interface Overview" ref="Documentation/GUIOverview.html"/> - <section title="File Menu" ref="Documentation/FileMenu.html"> - <section title="Open" ref="Documentation/FileMenu.html#Open"/> - <section title="Recent Files" ref="Documentation/FileMenu.html#RecentFiles"/> - <section title="Load State" ref="Documentation/FileMenu.html#LoadState"/> - <section title="Save State" ref="Documentation/FileMenu.html#SaveState"/> - <section title="Save Data" ref="Documentation/FileMenu.html#SaveData"/> - <section title="Save Screenshot" ref="Documentation/FileMenu.html#SaveScreenshot"/> - <section title="Save Animation" ref="Documentation/FileMenu.html#SaveAnimation"/> - <section title="Save Geometry" ref="Documentation/FileMenu.html#SaveGeometry"/> - <section title="Connect" ref="Documentation/FileMenu.html#Connect"/> - <section title="Disconnect" ref="Documentation/FileMenu.html#Disconnect"/> - <section title="Exit" ref="Documentation/FileMenu.html#Exit"/> - </section> - <section title="Edit Menu" ref="Documentation/EditMenu.html"> - <section title="Undo" ref="Documentation/EditMenu.html#UndoRedo"/> - <section title="Redo" ref="Documentation/EditMenu.html#UndoRedo"/> - <section title="Undo Camera" ref="Documentation/EditMenu.html#UndoRedoCamera"/> - <section title="Redo Camera" ref="Documentation/EditMenu.html#UndoRedoCamera"/> - <section title="Change Input" ref="Documentation/EditMenu.html#ChangeInput"/> - <section title="Delete" ref="Documentation/EditMenu.html#Delete"/> - <section title="Delete All" ref="Documentation/EditMenu.html#DeleteAll"/> - <section title="Interact" ref="Documentation/EditMenu.html#Interact"/> - <section title="Select Cells On" ref="Documentation/EditMenu.html#SelectCellsOn"/> - <section title="Select Points On" ref="Documentation/EditMenu.html#SelectPointsOn"/> - <section title="Select Cells Through" ref="Documentation/EditMenu.html#SelectCellsThrough"/> - <section title="Select Points Through" ref="Documentation/EditMenu.html#SelectPointsThrough"/> - <section title="Settings" ref="Documentation/EditMenu.html#Settings"/> - <section title="View Settings" ref="Documentation/EditMenu.html#ViewSettings"/> - </section> - <section title="View Menu" ref="Documentation/ViewMenu.html"> - <section title="Camera" ref="Documentation/ViewMenu.html#Camera"/> - <section title="Show Center" ref="Documentation/ViewMenu.html#ShowCenter"/> - <section title="Reset Center" ref="Documentation/ViewMenu.html#ResetCenter"/> - <section title="Pick Center" ref="Documentation/ViewMenu.html#PickCenter"/> - <section title="Show Color Legend" ref="Documentation/ViewMenu.html#ShowColorLegend"/> - <section title="Toolbars" ref="Documentation/ViewMenu.html#Toolbars"> - <section title="Active Variable Controls" ref="Documentation/ViewMenu.html#ActiveVariableControls"/> - <section title="Camera Controls" ref="Documentation/ViewMenu.html#CameraControls"/> - <section title="Common Filters" ref="Documentation/ViewMenu.html#CommonFilters"/> - <section title="Current Time Controls" ref="Documentation/ViewMenu.html#CurrentTimeControls"/> - <section title="Lookmarks" ref="Documentation/ViewMenu.html#Lookmarks"/> - <section title="Main Controls" ref="Documentation/ViewMenu.html#MainControls"/> - <section title="Representation" ref="Documentation/ViewMenu.html#Representation"/> - <section title="Selection Controls" ref="Documentation/ViewMenu.html#SelectionControls"/> - <section title="Undo/Redo Controls" ref="Documentation/ViewMenu.html#UndoRedoControls"/> - <section title="VCR Controls" ref="Documentation/ViewMenu.html#VCRControls"/> - </section> - <section title="Animation Inspector" ref="Documentation/ViewMenu.html#AnimationInspector"/> - <section title="Animation View" ref="Documentation/ViewMenu.html#AnimationView"/> - <section title="Comparative View Inspector" ref="Documentation/ViewMenu.html#ComparativeViewInspector"/> - <section title="Selection Inspector" ref="Documentation/ViewMenu.html#SelectionInspector"/> - <section title="Lookmark Browser" ref="Documentation/ViewMenu.html#LookmarkBrowser"/> - <section title="Lookmark Inspector" ref="Documentation/ViewMenu.html#LookmarkInspector"/> - <section title="Object Inspector" ref="Documentation/ViewMenu.html#ObjectInspector"/> - <section title="Pipeline Browser" ref="Documentation/ViewMenu.html#PipelineBrowser"/> - <section title="StatisticsView" ref="Documentation/ViewMenu.html#StatisticsView"/> - </section> - <section title="Sources Menu" ref="Documentation/ParaViewSources.html"/> - <section title="Filters Menu" ref="Documentation/ParaViewFilters.html"/> - <section title="Animation" ref="Documentation/Animation.html"/> - <section title="Tools Menu" ref="Documentation/ToolsMenu.html"> - <section title="CreateCustomFilter" ref="Documentation/ToolsMenu.html#CreateCustomFilter"/> - <section title="Manage Custom Filters" ref="Documentation/ToolsMenu.html#ManageCustomFilters"/> - <section title="Create Lookmark" ref="Documentation/ToolsMenu.html#CreateLookmark"/> - <section title="Manage Links" ref="Documentation/ToolsMenu.html#ManageLinks"/> - <section title="Add Camera Link" ref="Documentation/ToolsMenu.html#AddCameraLink"/> - <section title="Manage Plugins" ref="Documentation/ToolsMenu.html#ManagePlugins"/> - <section title="Dump Widget Names" ref="Documentation/ToolsMenu.html#DumpWidgetNames"/> - <section title="Record Test" ref="Documentation/ToolsMenu.html#RecordTest"/> - <section title="Record Test Screenshot" ref="Documentation/ToolsMenu.html#RecordTestScreenshot"/> - <section title="Play Test" ref="Documentation/ToolsMenu.html#PlayTest"/> - <section title="Max Window Size: 300x300" ref="Documentation/ToolsMenu.html#MaxWindowSize"/> - <section title="Timer Log" ref="Documentation/ToolsMenu.html#TimerLog"/> - <section title="Output Window" ref="Documentation/ToolsMenu.html#OutputWindow"/> - <section title="Python Shell" ref="Documentation/ToolsMenu.html#PythonShell"/> - </section> - <section title="Help Menu" ref="Documentation/HelpMenu.html"> - <section title="About" ref="Documentation/HelpMenu.html#About"/> - <section title="Help" ref="Documentation/HelpMenu.html#Help"/> - <section title="Enable Tooltips" ref="Documentation/HelpMenu.html#EnableTooltips"/> - </section> - <section title="Object Inspector" ref="Documentation/ObjectInspector.html"> - <section title="Properties Panel" ref="Documentation/Properties.html"/> - <section title="Display Panel" ref="Documentation/Display.html"> - <section title="View Section" ref="Documentation/Display.html#View"/> - <section title="Color Section" ref="Documentation/Display.html#Color"/> - <section title="Style Section" ref="Documentation/Display.html#Style"/> - <section title="Transformation Section" ref="Documentation/Display.html#Transformation"/> - <section title="Bar Chart Settings" ref="Documentation/Display.html#Bar Chart View"/> - <section title="XY Plot Settings" ref="Documentation/Display.html#XY Plot View"/> - </section> - <section title="Information Panel" ref="Documentation/Information.html"/> - </section> - <section title="Pipeline Browser" ref="Documentation/PipelineBrowser.html"/> - <section title="Selection Inspector" ref="Documentation/SelectionInspector.html"/> - <section title="Views" ref="Documentation/Views.html"/> - <section title="Lookmarks" ref="Documentation/Lookmarks.html"/> - <section title="Readers" ref="Documentation/ParaViewReaders.html"/> - <section title="Writers" ref="Documentation/ParaViewWriters.html"/> - <section title="Extended Help" ref="Documentation/ExtendedHelp.html"/> - </section> - </toc> - <keywords> - <keyword name="File menu" ref="Documentation/FileMenu.html" id="FileMenu::File menu"/> - <keyword name="Open file" ref="Documentation/FileMenu.html#Open" id="FileMenu::Open file"/> - <keyword name="Recent Files" ref="Documentation/FileMenu.html#Recent" id="FileMenu::Recent Files"/> - <keyword name="Load State" ref="Documentation/FileMenu.html#LoadState" id="FileMenu::Load State"/> - <keyword name="Save State" ref="Documentation/FileMenu.html#SaveState" id="FileMenu::Save State"/> - <keyword name="Save Data" ref="Documentation/FileMenu.html#SaveData" id="FileMenu::Save Data"/> - <keyword name="Save Screenshot" ref="Documentation/FileMenu.html#SaveScreenshot" id="FileMenu::Save Screenshot"/> - <keyword name="Connect" ref="Documentation/FileMenu.html#Connect" id="FileMenu::Connect"/> - <keyword name="Disconnect" ref="Documentation/FileMenu.html#Disconnect" id="FileMenu::Disconnect"/> - <keyword name="Exit" ref="Documentation/FileMenu.html#Exit" id="FileMenu::Exit"/> - <keyword name="Edit menu" ref="Documentation/EditMenu.html" id="EditMenu::Edit menu"/> - <keyword name="Undo" ref="Documentation/EditMenu.html#UndoRedo" id="EditMenu::Undo"/> - <keyword name="Redo" ref="Documentation/EditMenu.html#UndoRedo" id="EditMenu::Redo"/> - <keyword name="Undo Camera" ref="Documentation/EditMenu.html#UndoRedoCamera" id="EditMenu::Undo Camera"/> - <keyword name="Redo Camera" ref="Documentation/EditMenu.html#UndoRedoCamera" id="EditMenu::Redo Camera"/> - <keyword name="Change Input" ref="Documentation/EditMenu.html#ChangeInput" id="EditMenu::Change Input"/> - <keyword name="Delete" ref="Documentation/EditMenu.html#Delete" id="EditMenu::Delete"/> - <keyword name="Delete All" ref="Documentation/EditMenu.html#DeleteAll" id="EditMenu::Delete All"/> - <keyword name="Interact" ref="Documentation/EditMenu.html#Interact" id="EditMenu::Interact"/> - <keyword name="Select Cells On" ref="Documentation/EditMenu.html#SelectCellsOn" id="EditMenu::Select Cells On"/> - <keyword name="Select Points On" ref="Documentation/EditMenu.html#SelectPointsOn" id="EditMenu::Select Points On"/> - <keyword name="Select Cells Through" ref="Documentation/EditMenu.html#SelectCellsThrough" id="EditMenu::Select Cells Through"/> - <keyword name="Select Points Through" ref="Documentation/EditMenu.html#SelectPointsThrough" id="EditMenu::Select Points Through"/> - <keyword name="Settings" ref="Documentation/EditMenu.html#Settings" id="EditMenu::Settings"/> - <keyword name="View Settings" ref="Documentation/EditMenu.html#ViewSettings" id="EditMenu::View Settings"/> - <keyword name="View menu" ref="Documentation/ViewMenu.html" id="ViewMenu::View menu"/> - <keyword name="Camera" ref="Documentation/ViewMenu.html#Camera" id="ViewMenu::Camera"/> - <keyword name="Show Center" ref="Documentation/ViewMenu.html#ShowCenter" id="ViewMenu::Show Center"/> - <keyword name="Reset Center" ref="Documentation/ViewMenu.html#ResetCenter" id="ViewMenu::Reset Center"/> - <keyword name="Pick Center" ref="Documentation/ViewMenu.html#PickCenter" id="ViewMenu::Pick Center"/> - <keyword name="Show Color Legend" ref="Documentation/ViewMenu.html#ShowColorLegend" id="ViewMenu::Show Color Legend"/> - <keyword name="Toolbars" ref="Documentation/ViewMenu.html#Toolbars" id="ViewMenu::Toolbars"/> - <keyword name="Comparative View Inspector" ref="Documentation/ViewMenu.html#ComparativeViewInspector" id="ViewMenu::Comparative View Inspector"/> - <keyword name="Selection Inspector" ref="Documentation/ViewMenu.html#SelectionInspector" id="ViewMenu::Selection Inspector"/> - <keyword name="Statistics View" ref="Documentation/ViewMenu.html#StatisticsView" id="ViewMenu::Statistics View"/> - <keyword name="Active Variable Controls toolbar" ref="Documentation/ViewMenu.html#ActiveVariableControls" id="ViewMenu::Active Variable Controls toolbar"/> - <keyword name="Camera Controls toolbar" ref="Documentation/ViewMenu.html#CameraControls" id="ViewMenu::Camera Controls toolbar"/> - <keyword name="Common Filters toolbar" ref="Documentation/ViewMenu.html#CommonFilters" id="ViewMenu::Common Filters toolbar"/> - <keyword name="Current Time Controls toolbar" ref="Documentation/ViewMenu.html#CurrentTimeControls" id="ViewMenu::Current Time Controls toolbar"/> - <keyword name="Lookmarks toolbar" ref="Documentation/ViewMenu.html#Lookmarks" id="ViewMenu::Lookmarks toolbar"/> - <keyword name="Main Controls toolbar" ref="Documentation/ViewMenu.html#MainControls" id="ViewMenu::Main Controls toolbar"/> - <keyword name="Representation toolbar" ref="Documentation/ViewMenu.html#Representation" id="ViewMenu::Representation toolbar"/> - <keyword name="Selection Controls toolbar" ref="Documentation/ViewMenu.html#SelectionControls" id="ViewMenu::Selection Controls toolbar"/> - <keyword name="Undo/Redo Controls toolbar" ref="Documentation/ViewMenu.html#UndoRedoControls" id="ViewMenu::Undo/Redo Controls toolbar"/> - <keyword name="VCR Controls toolbar" ref="Documentation/ViewMenu.html#VCRControls" id="ViewMenu::VCR Controls toolbar"/> - <keyword name="Arrow" ref="Documentation/ArrowSource.html" id="ArrowSource::Arrow"/> - <keyword name="Axes" ref="Documentation/Axes.html" id="Axes::Axes"/> - <keyword name="Cone" ref="Documentation/ConeSource.html" id="ConeSource::Cone"/> - <keyword name="Box" ref="Documentation/CubeSource.html" id="CubeSource::Box"/> - <keyword name="Cylinder" ref="Documentation/CylinderSource.html" id="CylinderSource::Cylinder"/> - <keyword name="Data Object Generator" ref="Documentation/DataObjectGenerator.html" id="DataObjectGenerator::Data Object Generator"/> - <keyword name="Disk" ref="Documentation/DiskSource.html" id="DiskSource::Disk"/> - <keyword name="2D Glyph" ref="Documentation/GlyphSource2D.html" id="GlyphSource2D::2D Glyph"/> - <keyword name="Hierarchical Fractal" ref="Documentation/HierarchicalFractal.html" id="HierarchicalFractal::Hierarchical Fractal"/> - <keyword name="Mandelbrot" ref="Documentation/ImageMandelbrotSource.html" id="ImageMandelbrotSource::Mandelbrot"/> - <keyword name="Line" ref="Documentation/LineSource.html" id="LineSource::Line"/> - <keyword name="Octree Fractal" ref="Documentation/OctreeFractal.html" id="OctreeFractal::Octree Fractal"/> - <keyword name="Outline" ref="Documentation/OutlineSource.html" id="OutlineSource::Outline"/> - <keyword name="Plane" ref="Documentation/PlaneSource.html" id="PlaneSource::Plane"/> - <keyword name="Point Source" ref="Documentation/PointSource.html" id="PointSource::Point Source"/> - <keyword name="Programmable Source" ref="Documentation/ProgrammableSource.html" id="ProgrammableSource::Programmable Source"/> - <keyword name="Wavelet" ref="Documentation/RTAnalyticSource.html" id="RTAnalyticSource::Wavelet"/> - <keyword name="Ruler" ref="Documentation/Ruler.html" id="Ruler::Ruler"/> - <keyword name="Sphere" ref="Documentation/SphereSource.html" id="SphereSource::Sphere"/> - <keyword name="SplineSource" ref="Documentation/SplineSource.html" id="SplineSource::SplineSource"/> - <keyword name="Superquadric" ref="Documentation/SuperquadricSource.html" id="SuperquadricSource::Superquadric"/> - <keyword name="Text" ref="Documentation/TextSource.html" id="TextSource::Text"/> - <keyword name="Time Source" ref="Documentation/TimeSource.html" id="TimeSource::Time Source"/> - <keyword name="Annotate Time" ref="Documentation/TimeToTextConvertorSource.html" id="TimeToTextConvertorSource::Annotate Time"/> - <keyword name="3D Text" ref="Documentation/VectorText.html" id="VectorText::3D Text"/> - <keyword name="Append Datasets" ref="Documentation/Append.html" id="Append::Append Datasets"/> - <keyword name="Append Attributes" ref="Documentation/AppendAttributes.html" id="AppendAttributes::Append Attributes"/> - <keyword name="Append Geometry" ref="Documentation/AppendPolyData.html" id="AppendPolyData::Append Geometry"/> - <keyword name="Glyph With Custom Source" ref="Documentation/ArbitrarySourceGlyph.html" id="ArbitrarySourceGlyph::Glyph With Custom Source"/> - <keyword name="Stream Tracer With Custom Source" ref="Documentation/ArbitrarySourceStreamTracer.html" id="ArbitrarySourceStreamTracer::Stream Tracer With Custom Source"/> - <keyword name="Block Scalars" ref="Documentation/BlockIdScalars.html" id="BlockIdScalars::Block Scalars"/> - <keyword name="Random Vectors" ref="Documentation/BrownianPoints.html" id="BrownianPoints::Random Vectors"/> - <keyword name="Extract CTH Parts" ref="Documentation/CTHPart.html" id="CTHPart::Extract CTH Parts"/> - <keyword name="Calculator" ref="Documentation/Calculator.html" id="Calculator::Calculator"/> - <keyword name="Cell Centers" ref="Documentation/CellCenters.html" id="CellCenters::Cell Centers"/> - <keyword name="Cell Data to Point Data" ref="Documentation/CellDataToPointData.html" id="CellDataToPointData::Cell Data to Point Data"/> - <keyword name="Compute Derivatives" ref="Documentation/CellDerivatives.html" id="CellDerivatives::Compute Derivatives"/> - <keyword name="Clean" ref="Documentation/CleanPolyData.html" id="CleanPolyData::Clean"/> - <keyword name="Clean to Grid" ref="Documentation/CleanUnstructuredGrid.html" id="CleanUnstructuredGrid::Clean to Grid"/> - <keyword name="Clip" ref="Documentation/Clip.html" id="Clip::Clip"/> - <keyword name="Contour" ref="Documentation/Contour.html" id="Contour::Contour"/> - <keyword name="Curvature" ref="Documentation/Curvatures.html" id="Curvatures::Curvature"/> - <keyword name="Slice" ref="Documentation/Cut.html" id="Cut::Slice"/> - <keyword name="D3" ref="Documentation/D3.html" id="D3::D3"/> - <keyword name="Extract Surface" ref="Documentation/DataSetSurfaceFilter.html" id="DataSetSurfaceFilter::Extract Surface"/> - <keyword name="Tetrahedralize" ref="Documentation/DataSetTriangleFilter.html" id="DataSetTriangleFilter::Tetrahedralize"/> - <keyword name="Decimate" ref="Documentation/DecimatePro.html" id="DecimatePro::Decimate"/> - <keyword name="Delaunay 2D" ref="Documentation/Delaunay2D.html" id="Delaunay2D::Delaunay 2D"/> - <keyword name="Delaunay 3D" ref="Documentation/Delaunay3D.html" id="Delaunay3D::Delaunay 3D"/> - <keyword name="Elevation" ref="Documentation/ElevationFilter.html" id="ElevationFilter::Elevation"/> - <keyword name="Extract Block" ref="Documentation/ExtractBlock.html" id="ExtractBlock::Extract Block"/> - <keyword name="Extract Edges" ref="Documentation/ExtractEdges.html" id="ExtractEdges::Extract Edges"/> - <keyword name="Plot Global Variables over Time" ref="Documentation/ExtractFieldDataOverTime.html" id="ExtractFieldDataOverTime::Plot Global Variables over Time"/> - <keyword name="Extract Cells By Region" ref="Documentation/ExtractGeometry.html" id="ExtractGeometry::Extract Cells By Region"/> - <keyword name="Extract Subset" ref="Documentation/ExtractGrid.html" id="ExtractGrid::Extract Subset"/> - <keyword name="Extract AMR Blocks" ref="Documentation/ExtractHierarchicalDataSets.html" id="ExtractHierarchicalDataSets::Extract AMR Blocks"/> - <keyword name="Extract Level" ref="Documentation/ExtractHierarchicalLevel.html" id="ExtractHierarchicalLevel::Extract Level"/> - <keyword name="Histogram" ref="Documentation/ExtractHistogram.html" id="ExtractHistogram::Histogram"/> - <keyword name="Extract Selection" ref="Documentation/ExtractSelection.html" id="ExtractSelection::Extract Selection"/> - <keyword name="Plot Selection Over Time" ref="Documentation/ExtractSelectionOverTime.html" id="ExtractSelectionOverTime::Plot Selection Over Time"/> - <keyword name="FFT Of Selection Over Time" ref="Documentation/FFTSelectionOverTime.html" id="FFTSelectionOverTime::FFT Of Selection Over Time"/> - <keyword name="Feature Edges" ref="Documentation/FeatureEdges.html" id="FeatureEdges::Feature Edges"/> - <keyword name="Generate Ids" ref="Documentation/GenerateIdScalars.html" id="GenerateIdScalars::Generate Ids"/> - <keyword name="Glyph" ref="Documentation/Glyph.html" id="Glyph::Glyph"/> - <keyword name="Gradient" ref="Documentation/Gradient.html" id="Gradient::Gradient"/> - <keyword name="Group Datasets" ref="Documentation/GroupDataSets.html" id="GroupDataSets::Group Datasets"/> - <keyword name="Integrate Variables" ref="Documentation/IntegrateAttributes.html" id="IntegrateAttributes::Integrate Variables"/> - <keyword name="Surface Flow" ref="Documentation/IntegrateFlowThroughSurface.html" id="IntegrateFlowThroughSurface::Surface Flow"/> - <keyword name="Level Scalars" ref="Documentation/LevelIdScalars.html" id="LevelIdScalars::Level Scalars"/> - <keyword name="Linear Extrusion" ref="Documentation/LinearExtrusionFilter.html" id="LinearExtrusionFilter::Linear Extrusion"/> - <keyword name="Loop Subdivision" ref="Documentation/LoopSubdivisionFilter.html" id="LoopSubdivisionFilter::Loop Subdivision"/> - <keyword name="Mask Points" ref="Documentation/MaskPoints.html" id="MaskPoints::Mask Points"/> - <keyword name="Median" ref="Documentation/Median.html" id="Median::Median"/> - <keyword name="Merge Blocks" ref="Documentation/MergeBlocks.html" id="MergeBlocks::Merge Blocks"/> - <keyword name="Mesh Quality" ref="Documentation/MeshQuality.html" id="MeshQuality::Mesh Quality"/> - <keyword name="Normal Glyphs" ref="Documentation/NormalGlyphs.html" id="NormalGlyphs::Normal Glyphs"/> - <keyword name="Octree Depth Limit" ref="Documentation/OctreeDepthLimit.html" id="OctreeDepthLimit::Octree Depth Limit"/> - <keyword name="Octree Depth Scalars" ref="Documentation/OctreeDepthScalars.html" id="OctreeDepthScalars::Octree Depth Scalars"/> - <keyword name="Outline Corners" ref="Documentation/OutlineCornerFilter.html" id="OutlineCornerFilter::Outline Corners"/> - <keyword name="Outline" ref="Documentation/OutlineFilter.html" id="OutlineFilter::Outline"/> - <keyword name="Connectivity" ref="Documentation/PVConnectivityFilter.html" id="PVConnectivityFilter::Connectivity"/> - <keyword name="Particle Pathlines" ref="Documentation/ParticlePathLines.html" id="ParticlePathLines::Particle Pathlines"/> - <keyword name="ParticleTracer" ref="Documentation/ParticleTracer.html" id="ParticleTracer::ParticleTracer"/> - <keyword name="Plot Data" ref="Documentation/PlotAttributes.html" id="PlotAttributes::Plot Data"/> - <keyword name="Plot On Intersection Curves" ref="Documentation/PlotOnIntersectionCurves.html" id="PlotOnIntersectionCurves::Plot On Intersection Curves"/> - <keyword name="Plot On Sorted Lines" ref="Documentation/PlotOnSortedLines.html" id="PlotOnSortedLines::Plot On Sorted Lines"/> - <keyword name="Point Data to Cell Data" ref="Documentation/PointDataToCellData.html" id="PointDataToCellData::Point Data to Cell Data"/> - <keyword name="Generate Surface Normals" ref="Documentation/PolyDataNormals.html" id="PolyDataNormals::Generate Surface Normals"/> - <keyword name="Resample With Dataset" ref="Documentation/Probe.html" id="Probe::Resample With Dataset"/> - <keyword name="Plot Over Line" ref="Documentation/ProbeLine.html" id="ProbeLine::Plot Over Line"/> - <keyword name="Probe Location" ref="Documentation/ProbePoint.html" id="ProbePoint::Probe Location"/> - <keyword name="Process Id Scalars" ref="Documentation/ProcessIdScalars.html" id="ProcessIdScalars::Process Id Scalars"/> - <keyword name="Programmable Filter" ref="Documentation/ProgrammableFilter.html" id="ProgrammableFilter::Programmable Filter"/> - <keyword name="Python Calculator" ref="Documentation/PythonCalculator.html" id="PythonCalculator::Python Calculator"/> - <keyword name="Interpolate to Quadrature Points" ref="Documentation/QuadraturePointInterpolator.html" id="QuadraturePointInterpolator::Interpolate to Quadrature Points"/> - <keyword name="Generate Quadrature Points" ref="Documentation/QuadraturePointsGenerator.html" id="QuadraturePointsGenerator::Generate Quadrature Points"/> - <keyword name="Generate Quadrature Scheme Dictionary" ref="Documentation/QuadratureSchemeDictionaryGenerator.html" id="QuadratureSchemeDictionaryGenerator::Generate Quadrature Scheme Dictionary"/> - <keyword name="Quadric Clustering" ref="Documentation/QuadricClustering.html" id="QuadricClustering::Quadric Clustering"/> - <keyword name="Reflect" ref="Documentation/ReflectionFilter.html" id="ReflectionFilter::Reflect"/> - <keyword name="Ribbon" ref="Documentation/RibbonFilter.html" id="RibbonFilter::Ribbon"/> - <keyword name="Rotational Extrusion" ref="Documentation/RotationalExtrusionFilter.html" id="RotationalExtrusionFilter::Rotational Extrusion"/> - <keyword name="Scatter Plot" ref="Documentation/ScatterPlot.html" id="ScatterPlot::Scatter Plot"/> - <keyword name="Shrink" ref="Documentation/ShrinkFilter.html" id="ShrinkFilter::Shrink"/> - <keyword name="Smooth" ref="Documentation/SmoothPolyDataFilter.html" id="SmoothPolyDataFilter::Smooth"/> - <keyword name="Stream Tracer" ref="Documentation/StreamTracer.html" id="StreamTracer::Stream Tracer"/> - <keyword name="Triangle Strips" ref="Documentation/Stripper.html" id="Stripper::Triangle Strips"/> - <keyword name="Outline Curvilinear DataSet" ref="Documentation/StructuredGridOutlineFilter.html" id="StructuredGridOutlineFilter::Outline Curvilinear DataSet"/> - <keyword name="Subdivide" ref="Documentation/Subdivide.html" id="Subdivide::Subdivide"/> - <keyword name="Surface Vectors" ref="Documentation/SurfaceVectors.html" id="SurfaceVectors::Surface Vectors"/> - <keyword name="Table To Points" ref="Documentation/TableToPolyData.html" id="TableToPolyData::Table To Points"/> - <keyword name="Table To Structured Grid" ref="Documentation/TableToStructuredGrid.html" id="TableToStructuredGrid::Table To Structured Grid"/> - <keyword name="Temporal Cache" ref="Documentation/TemporalCache.html" id="TemporalCache::Temporal Cache"/> - <keyword name="Temporal Interpolator" ref="Documentation/TemporalInterpolator.html" id="TemporalInterpolator::Temporal Interpolator"/> - <keyword name="Temporal Shift Scale" ref="Documentation/TemporalShiftScale.html" id="TemporalShiftScale::Temporal Shift Scale"/> - <keyword name="Temporal Snap-to-Time-Step" ref="Documentation/TemporalSnapToTimeStep.html" id="TemporalSnapToTimeStep::Temporal Snap-to-Time-Step"/> - <keyword name="Temporal Statistics" ref="Documentation/TemporalStatistics.html" id="TemporalStatistics::Temporal Statistics"/> - <keyword name="Tessellate" ref="Documentation/TessellatorFilter.html" id="TessellatorFilter::Tessellate"/> - <keyword name="Texture Map to Cylinder" ref="Documentation/TextureMapToCylinder.html" id="TextureMapToCylinder::Texture Map to Cylinder"/> - <keyword name="Texture Map to Plane" ref="Documentation/TextureMapToPlane.html" id="TextureMapToPlane::Texture Map to Plane"/> - <keyword name="Texture Map to Sphere" ref="Documentation/TextureMapToSphere.html" id="TextureMapToSphere::Texture Map to Sphere"/> - <keyword name="Threshold" ref="Documentation/Threshold.html" id="Threshold::Threshold"/> - <keyword name="Annotate Time Filter" ref="Documentation/TimeToTextConvertor.html" id="TimeToTextConvertor::Annotate Time Filter"/> - <keyword name="Transform" ref="Documentation/TransformFilter.html" id="TransformFilter::Transform"/> - <keyword name="Triangulate" ref="Documentation/TriangleFilter.html" id="TriangleFilter::Triangulate"/> - <keyword name="Tube" ref="Documentation/TubeFilter.html" id="TubeFilter::Tube"/> - <keyword name="Gradient Of Unstructured DataSet" ref="Documentation/UnstructuredGradient.html" id="UnstructuredGradient::Gradient Of Unstructured DataSet"/> - <keyword name="Warp By Scalar" ref="Documentation/WarpScalar.html" id="WarpScalar::Warp By Scalar"/> - <keyword name="Warp By Vector" ref="Documentation/WarpVector.html" id="WarpVector::Warp By Vector"/> - <keyword name="Animation" ref="Documentation/Animation.html" id="Animation::Animation"/> - <keyword name="Save Animation" ref="Documentation/Animation.html#SaveAnimation" id="Animation::Save Animation"/> - <keyword name="Save Geometry" ref="Documentation/Animation.html#SaveGeometry" id="Animation::Save Geometry"/> - <keyword name="Animation View" ref="Documentation/Animation.html#AnimationView" id="Animation::Animation View"/> - <keyword name="Animation Inspector" ref="Documentation/Animation.html" id="Animation::Animation Inspector"/> - <keyword name="Animation Menu" ref="Documentation/Animation.html#AnimationMenu" id="Animation::Animation Menu"/> - <keyword name="Animation Toolbar" ref="Documentation/Animation.html#AnimationToolbar" id="Animation::Animation Toolbar"/> - <keyword name="Create Custom Filter" ref="Documentation/ToolsMenu.html#CreateCustomFilter" id="ToolsMenu::Create Custom Filter"/> - <keyword name="Manage Custom Filters" ref="Documentation/ToolsMenu.html#ManageCustomFilters" id="ToolsMenu::Manage Custom Filters"/> - <keyword name="Manage Links" ref="Documentation/ToolsMenu.html#ManageLinks" id="ToolsMenu::Manage Links"/> - <keyword name="Add Camera Link" ref="Documentation/ToolsMenu.html#AddCameraLink" id="ToolsMenu::Add Camera Link"/> - <keyword name="Manage Plugins" ref="Documentation/ToolsMenu.html#ManagePlugins" id="ToolsMenu::Manage Plugins"/> - <keyword name="Dump Widget Names" ref="Documentation/ToolsMenu.html#DumpWidgetNames" id="ToolsMenu::Dump Widget Names"/> - <keyword name="Record Test" ref="Documentation/ToolsMenu.html#RecordTest" id="ToolsMenu::Record Test"/> - <keyword name="Record Test Screenshot" ref="Documentation/ToolsMenu.html#RecordTestScreenshot" id="ToolsMenu::Record Test Screenshot"/> - <keyword name="Play Test" ref="Documentation/ToolsMenu.html#PlayTest" id="ToolsMenu::Play Test"/> - <keyword name="Max Window Size: 300x300" ref="Documentation/ToolsMenu.html#MaxWindowSize" id="ToolsMenu::Max Window Size: 300x300"/> - <keyword name="Timer Log" ref="Documentation/ToolsMenu.html#TimerLog" id="ToolsMenu::Timer Log"/> - <keyword name="Output Window" ref="Documentation/ToolsMenu.html#OutputWindow" id="ToolsMenu::Output Window"/> - <keyword name="Python Shell" ref="Documentation/ToolsMenu.html#PythonShell" id="ToolsMenu::Python Shell"/> - <keyword name="About" ref="Documentation/HelpMenu.html#About" id="HelpMenu::About"/> - <keyword name="Help" ref="Documentation/HelpMenu.html#Help" id="HelpMenu::Help"/> - <keyword name="Enable Tooltips" ref="Documentation/HelpMenu.html#EnableTooltips" id="HelpMenu::Enable Tooltips"/> - <keyword name="Object Inspector" ref="Documentation/ObjectInspector.html" id="ObjectInspector::Object Inspector"/> - <keyword name="Properties Panel" ref="Documentation/Properties.html" id="Properties::Properties Panel"/> - <keyword name="Display Panel" ref="Documentation/Display.html" id="Display::Display Panel"/> - <keyword name="Information Panel" ref="Documentation/Information.html" id="Information::Information Panel"/> - <keyword name="View" ref="Documentation/Display.html#View" id="Display::View"/> - <keyword name="Color" ref="Documentation/Display.html#Color" id="Display::Color"/> - <keyword name="Style" ref="Documentation/Display.html#Style" id="Display::Style"/> - <keyword name="Transformation" ref="Documentation/Display.html#Transformation" id="Display::Transformation"/> - <keyword name="Bar Chart Settings" ref="Documentation/Display.html#Bar Chart View" id="Display::Bar Chart Settings"/> - <keyword name="XY Plot Settings" ref="Documentation/Display.html#XY Plot View" id="Display::XY Plot Settings"/> - <keyword name="Pipeline Browser" ref="Documentation/PipelineBrowser.html" id="PipelineBrowser::Pipeline Browser"/> - <keyword name="Selection Inspector" ref="Documentation/SelectionInspector.html" id="SelectionInspector::Selection Inspector"/> - <keyword name="3D View" ref="Documentation/Views.html" id="Views::3D View"/> - <keyword name="Bar Chart View" ref="Documentation/Views.html" id="Views::Bar Chart View"/> - <keyword name="XY Plot View" ref="Documentation/Views.html" id="Views::XY Plot View"/> - <keyword name="3D View (Comparative)" ref="Documentation/Views.html" id="Views::3D View (Comparative)"/> - <keyword name="Spreadsheet View" ref="Documentation/Views.html" id="Views::Spreadsheet View"/> - <keyword name="Lookmarks" ref="Documentation/Lookmarks.html" id="Lookmarks::Lookmarks"/> - <keyword name="Lookmark Browser" ref="Documentation/Lookmarks.html#LookmarkBrowser" id="Lookmarks::Lookmark Browser"/> - <keyword name="Lookmark Inspector" ref="Documentation/Lookmarks.html#LookmarkInspector" id="Lookmarks::Lookmark Inspector"/> - <keyword name="Create Lookmark" ref="Documentation/Lookmarks.html#CreateLookmark" id="Lookmarks::Create Lookmark"/> - <keyword name="AVS UCD Reader" ref="Documentation/AVSucdSeriesReader.html" id="AVSucdSeriesReader::AVS UCD Reader"/> - <keyword name="CSV Reader" ref="Documentation/CSVReader.html" id="CSVReader::CSV Reader"/> - <keyword name="COSMO Reader" ref="Documentation/CosmoReader.html" id="CosmoReader::COSMO Reader"/> - <keyword name="DEM Reader" ref="Documentation/DEMReader.html" id="DEMReader::DEM Reader"/> - <keyword name="ExodusIIReader" ref="Documentation/ExodusIIReader.html" id="ExodusIIReader::ExodusIIReader"/> - <keyword name="Restarted Sim Exodus Reader" ref="Documentation/ExodusRestartReader.html" id="ExodusRestartReader::Restarted Sim Exodus Reader"/> - <keyword name="FLUENTReader" ref="Documentation/FLUENTReader.html" id="FLUENTReader::FLUENTReader"/> - <keyword name="Facet Reader" ref="Documentation/Facet Reader.html" id="Facet Reader::Facet Reader"/> - <keyword name="Image Reader" ref="Documentation/ImageReader.html" id="ImageReader::Image Reader"/> - <keyword name="LSDynaReader" ref="Documentation/LSDynaReader.html" id="LSDynaReader::LSDynaReader"/> - <keyword name="Legacy VTK Reader" ref="Documentation/LegacyVTKFileReader.html" id="LegacyVTKFileReader::Legacy VTK Reader"/> - <keyword name="MFIXReader" ref="Documentation/MFIXReader.html" id="MFIXReader::MFIXReader"/> - <keyword name="Meta Image Reader" ref="Documentation/Meta Image Reader.html" id="Meta Image Reader::Meta Image Reader"/> - <keyword name="OpenFOAMReader" ref="Documentation/OpenFOAMReader.html" id="OpenFOAMReader::OpenFOAMReader"/> - <keyword name="PLOT3D Reader" ref="Documentation/P3DReader.html" id="P3DReader::PLOT3D Reader"/> - <keyword name="PNG Reader" ref="Documentation/PNGReader.html" id="PNGReader::PNG Reader"/> - <keyword name="PVD Reader" ref="Documentation/PVDReader.html" id="PVDReader::PVD Reader"/> - <keyword name="Phasta Reader" ref="Documentation/PhastaReader.html" id="PhastaReader::Phasta Reader"/> - <keyword name="SESAME Reader" ref="Documentation/SESAMEReader.html" id="SESAMEReader::SESAME Reader"/> - <keyword name="SLAC Particle Data Reader" ref="Documentation/SLACParticleReader.html" id="SLACParticleReader::SLAC Particle Data Reader"/> - <keyword name="SLAC Data Reader" ref="Documentation/SLACReader.html" id="SLACReader::SLAC Data Reader"/> - <keyword name="Restarted Sim Spy Plot Reader" ref="Documentation/SPCTHRestartReader.html" id="SPCTHRestartReader::Restarted Sim Spy Plot Reader"/> - <keyword name="TIFF Reader" ref="Documentation/TIFFReader.html" id="TIFFReader::TIFF Reader"/> - <keyword name="XML Hierarchical Box Data reader" ref="Documentation/XMLHierarchicalBoxDataReader.html" id="XMLHierarchicalBoxDataReader::XML Hierarchical Box Data reader"/> - <keyword name="XML Image Data Reader" ref="Documentation/XMLImageDataReader.html" id="XMLImageDataReader::XML Image Data Reader"/> - <keyword name="XML MultiBlock Data Reader" ref="Documentation/XMLMultiBlockDataReader.html" id="XMLMultiBlockDataReader::XML MultiBlock Data Reader"/> - <keyword name="XML Partitioned Image Data Reader" ref="Documentation/XMLPImageDataReader.html" id="XMLPImageDataReader::XML Partitioned Image Data Reader"/> - <keyword name="XML Partitioned Polydata Reader" ref="Documentation/XMLPPolyDataReader.html" id="XMLPPolyDataReader::XML Partitioned Polydata Reader"/> - <keyword name="XML Partitioned Rectilinear Grid Reader" ref="Documentation/XMLPRectilinearGridReader.html" id="XMLPRectilinearGridReader::XML Partitioned Rectilinear Grid Reader"/> - <keyword name="XML Partitioned Structured Grid Reader" ref="Documentation/XMLPStructuredGridReader.html" id="XMLPStructuredGridReader::XML Partitioned Structured Grid Reader"/> - <keyword name="XML Partitioned Unstructured Grid Reader" ref="Documentation/XMLPUnstructuredGridReader.html" id="XMLPUnstructuredGridReader::XML Partitioned Unstructured Grid Reader"/> - <keyword name="XML PolyData Reader" ref="Documentation/XMLPolyDataReader.html" id="XMLPolyDataReader::XML PolyData Reader"/> - <keyword name="XML Rectilinear Grid Reader" ref="Documentation/XMLRectilinearGridReader.html" id="XMLRectilinearGridReader::XML Rectilinear Grid Reader"/> - <keyword name="XML Structured Grid Reader" ref="Documentation/XMLStructuredGridReader.html" id="XMLStructuredGridReader::XML Structured Grid Reader"/> - <keyword name="XML Unstructured Grid Reader" ref="Documentation/XMLUnstructuredGridReader.html" id="XMLUnstructuredGridReader::XML Unstructured Grid Reader"/> - <keyword name="XDMF Reader" ref="Documentation/XdmfReader.html" id="XdmfReader::XDMF Reader"/> - <keyword name="BYU Reader" ref="Documentation/byureader.html" id="byureader::BYU Reader"/> - <keyword name="EnSight Reader" ref="Documentation/ensight.html" id="ensight::EnSight Reader"/> - <keyword name="EnSight Master Server Reader" ref="Documentation/ensightMS.html" id="ensightMS::EnSight Master Server Reader"/> - <keyword name="Gaussian Cube Reader" ref="Documentation/gaussiancubereader.html" id="gaussiancubereader::Gaussian Cube Reader"/> - <keyword name="NetCDF Reader" ref="Documentation/netCDFReader.html" id="netCDFReader::NetCDF Reader"/> - <keyword name="PDB Reader" ref="Documentation/pdbreader.html" id="pdbreader::PDB Reader"/> - <keyword name="PLY Reader" ref="Documentation/plyreader.html" id="plyreader::PLY Reader"/> - <keyword name="POP Reader" ref="Documentation/popreader.html" id="popreader::POP Reader"/> - <keyword name="Partitioned Legacy VTK Reader" ref="Documentation/pvtkfile.html" id="pvtkfile::Partitioned Legacy VTK Reader"/> - <keyword name="Spy Plot Reader" ref="Documentation/spcthreader.html" id="spcthreader::Spy Plot Reader"/> - <keyword name="STL Reader" ref="Documentation/stlreader.html" id="stlreader::STL Reader"/> - <keyword name="VRML Reader" ref="Documentation/vrmlreader.html" id="vrmlreader::VRML Reader"/> - <keyword name="XYZ Reader" ref="Documentation/xyzreader.html" id="xyzreader::XYZ Reader"/> - <keyword name="CSVWriter" ref="Documentation/CSVWriter.html" id="CSVWriter::CSVWriter"/> - <keyword name="DataSetCSVWriter" ref="Documentation/DataSetCSVWriter.html" id="DataSetCSVWriter::DataSetCSVWriter"/> - <keyword name="DataSetWriter" ref="Documentation/DataSetWriter.html" id="DataSetWriter::DataSetWriter"/> - <keyword name="EnSightWriter" ref="Documentation/EnSightWriter.html" id="EnSightWriter::EnSightWriter"/> - <keyword name="ExodusIIWriter" ref="Documentation/ExodusIIWriter.html" id="ExodusIIWriter::ExodusIIWriter"/> - <keyword name="MetaImageWriter" ref="Documentation/MetaImageWriter.html" id="MetaImageWriter::MetaImageWriter"/> - <keyword name="PDataSetWriter" ref="Documentation/PDataSetWriter.html" id="PDataSetWriter::PDataSetWriter"/> - <keyword name="PNGWriter" ref="Documentation/PNGWriter.html" id="PNGWriter::PNGWriter"/> - <keyword name="PPLYWriter" ref="Documentation/PPLYWriter.html" id="PPLYWriter::PPLYWriter"/> - <keyword name="PSTLWriter" ref="Documentation/PSTLWriter.html" id="PSTLWriter::PSTLWriter"/> - <keyword name="XMLHierarchicalBoxDataWriter" ref="Documentation/XMLHierarchicalBoxDataWriter.html" id="XMLHierarchicalBoxDataWriter::XMLHierarchicalBoxDataWriter"/> - <keyword name="XMLImageDataWriter" ref="Documentation/XMLImageDataWriter.html" id="XMLImageDataWriter::XMLImageDataWriter"/> - <keyword name="XMLMultiBlockDataWriter" ref="Documentation/XMLMultiBlockDataWriter.html" id="XMLMultiBlockDataWriter::XMLMultiBlockDataWriter"/> - <keyword name="XMLPImageDataWriter" ref="Documentation/XMLPImageDataWriter.html" id="XMLPImageDataWriter::XMLPImageDataWriter"/> - <keyword name="XMLPPolyDataWriter" ref="Documentation/XMLPPolyDataWriter.html" id="XMLPPolyDataWriter::XMLPPolyDataWriter"/> - <keyword name="XMLPRectilinearGridWriter" ref="Documentation/XMLPRectilinearGridWriter.html" id="XMLPRectilinearGridWriter::XMLPRectilinearGridWriter"/> - <keyword name="XMLPStructuredGridWriter" ref="Documentation/XMLPStructuredGridWriter.html" id="XMLPStructuredGridWriter::XMLPStructuredGridWriter"/> - <keyword name="XMLPUnstructuredGridWriter" ref="Documentation/XMLPUnstructuredGridWriter.html" id="XMLPUnstructuredGridWriter::XMLPUnstructuredGridWriter"/> - <keyword name="XMLPVDWriter" ref="Documentation/XMLPVDWriter.html" id="XMLPVDWriter::XMLPVDWriter"/> - <keyword name="XMLPolyDataWriter" ref="Documentation/XMLPolyDataWriter.html" id="XMLPolyDataWriter::XMLPolyDataWriter"/> - <keyword name="XMLRectilinearGridWriter" ref="Documentation/XMLRectilinearGridWriter.html" id="XMLRectilinearGridWriter::XMLRectilinearGridWriter"/> - <keyword name="XMLStructuredGridWriter" ref="Documentation/XMLStructuredGridWriter.html" id="XMLStructuredGridWriter::XMLStructuredGridWriter"/> - <keyword name="XMLUnstructuredGridWriter" ref="Documentation/XMLUnstructuredGridWriter.html" id="XMLUnstructuredGridWriter::XMLUnstructuredGridWriter"/> - <keyword name="XdmfWriter" ref="Documentation/XdmfWriter.html" id="XdmfWriter::XdmfWriter"/> - </keywords> - <files> - <file>about.html</file> - <file>Documentation/3DView.png</file> - <file>Documentation/3DViewTitleBarButtons.png</file> - <file>Documentation/AboutDialog.png</file> - <file>Documentation/ActiveVariableControlsToolbar.png</file> - <file>Documentation/ActiveVariableSelection.png</file> - <file>Documentation/AddPropertyLinkDialog.png</file> - <file>Documentation/AfterSwapViews.png</file> - <file>Documentation/Animation.html</file> - <file>Documentation/AnimationInspector.png</file> - <file>Documentation/AnimationToolbar.png</file> - <file>Documentation/Append.html</file> - <file>Documentation/AppendAttributes.html</file> - <file>Documentation/AppendPolyData.html</file> - <file>Documentation/ArbitrarySourceGlyph.html</file> - <file>Documentation/ArbitrarySourceStreamTracer.html</file> - <file>Documentation/ArrowSource.html</file> - <file>Documentation/AVSucdSeriesReader.html</file> - <file>Documentation/Axes.html</file> - <file>Documentation/BeforeSwapViews.png</file> - <file>Documentation/BlockIdScalars.html</file> - <file>Documentation/BrownianPoints.html</file> - <file>Documentation/byureader.html</file> - <file>Documentation/Calculator.html</file> - <file>Documentation/CalculatorButton.png</file> - <file>Documentation/CameraControlsToolbar.png</file> - <file>Documentation/CellCenters.html</file> - <file>Documentation/CellData.png</file> - <file>Documentation/CellDataToPointData.html</file> - <file>Documentation/CellDerivatives.html</file> - <file>Documentation/ChangeInput.png</file> - <file>Documentation/ChooseServerDialog.png</file> - <file>Documentation/CleanPolyData.html</file> - <file>Documentation/CleanUnstructuredGrid.html</file> - <file>Documentation/Clip.html</file> - <file>Documentation/ClipButton.png</file> - <file>Documentation/CloseViewButton.png</file> - <file>Documentation/ColorEditor.png</file> - <file>Documentation/ColorLegend.png</file> - <file>Documentation/ColorLegendToolbarButton.png</file> - <file>Documentation/ColorOpacityEditor.png</file> - <file>Documentation/ColorScalePresets.png</file> - <file>Documentation/CommonFiltersToolbar.png</file> - <file>Documentation/ComparativeView.png</file> - <file>Documentation/ConeSource.html</file> - <file>Documentation/ConfigureNewServerDialog.png</file> - <file>Documentation/ConfigureServerCommandDialog.png</file> - <file>Documentation/ConfigureServerManualDialog.png</file> - <file>Documentation/ConnectButton.png</file> - <file>Documentation/Contour.html</file> - <file>Documentation/ContourButton.png</file> - <file>Documentation/CosmoReader.html</file> - <file>Documentation/CreateLookmarkDialog.png</file> - <file>Documentation/CreateViewButtons.png</file> - <file>Documentation/CSVReader.html</file> - <file>Documentation/CSVWriter.html</file> - <file>Documentation/CTHFragmentConnect.html</file> - <file>Documentation/CTHFragmentIntersect.html</file> - <file>Documentation/CTHPart.html</file> - <file>Documentation/CubeSource.html</file> - <file>Documentation/CurrentTimeControlsToolbar.png</file> - <file>Documentation/Curvatures.html</file> - <file>Documentation/Cut.html</file> - <file>Documentation/CutButton.png</file> - <file>Documentation/CylinderSource.html</file> - <file>Documentation/D3.html</file> - <file>Documentation/DataObjectGenerator.html</file> - <file>Documentation/DataSetCSVWriter.html</file> - <file>Documentation/DataSetSurfaceFilter.html</file> - <file>Documentation/DataSetTriangleFilter.html</file> - <file>Documentation/DataSetWriter.html</file> - <file>Documentation/DecimatePro.html</file> - <file>Documentation/Delaunay2D.html</file> - <file>Documentation/Delaunay3D.html</file> - <file>Documentation/DEMReader.html</file> - <file>Documentation/DisconnectButton.png</file> - <file>Documentation/DisconnectDialog.png</file> - <file>Documentation/DisconnectReconnectDialog.png</file> - <file>Documentation/DiskSource.html</file> - <file>Documentation/Display.html</file> - <file>Documentation/DisplayColorByArray.png</file> - <file>Documentation/DisplayColorSolid.png</file> - <file>Documentation/DisplayStyle.png</file> - <file>Documentation/DisplayTransformation.png</file> - <file>Documentation/DisplayView.png</file> - <file>Documentation/EditMenu.html</file> - <file>Documentation/ElevationFilter.html</file> - <file>Documentation/ensight.html</file> - <file>Documentation/ensightMS.html</file> - <file>Documentation/EnSightWriter.html</file> - <file>Documentation/ExodusIIReader.html</file> - <file>Documentation/ExodusIIWriter.html</file> - <file>Documentation/ExodusReader.html</file> - <file>Documentation/ExodusRestartReader.html</file> - <file>Documentation/Exponential.png</file> - <file>Documentation/ExtendedHelp.html</file> - <file>Documentation/ExtractBlock.html</file> - <file>Documentation/ExtractEdges.html</file> - <file>Documentation/ExtractFieldDataOverTime.html</file> - <file>Documentation/ExtractGeometry.html</file> - <file>Documentation/ExtractGrid.html</file> - <file>Documentation/ExtractGridButton.png</file> - <file>Documentation/ExtractHierarchicalDataSets.html</file> - <file>Documentation/ExtractHierarchicalLevel.html</file> - <file>Documentation/ExtractHistogram.html</file> - <file>Documentation/ExtractSelection.html</file> - <file>Documentation/ExtractSelectionOverTime.html</file> - <file>Documentation/Facet Reader.html</file> - <file>Documentation/FeatureEdges.html</file> - <file>Documentation/FFTSelectionOverTime.html</file> - <file>Documentation/FileMenu.html</file> - <file>Documentation/FLUENTReader.html</file> - <file>Documentation/gaussiancubereader.html</file> - <file>Documentation/GenerateIdScalars.html</file> - <file>Documentation/Glyph.html</file> - <file>Documentation/GlyphButton.png</file> - <file>Documentation/GlyphSource2D.html</file> - <file>Documentation/Gradient.html</file> - <file>Documentation/GroupDataSets.html</file> - <file>Documentation/GroupDataSetsButton.png</file> - <file>Documentation/GUIOverview.html</file> - <file>Documentation/HelpButton.png</file> - <file>Documentation/HelpMenu.html</file> - <file>Documentation/HierarchicalFractal.html</file> - <file>Documentation/HistogramDisplayTab.png</file> - <file>Documentation/HistogramView.png</file> - <file>Documentation/ImageMandelbrotSource.html</file> - <file>Documentation/ImageReader.html</file> - <file>Documentation/index.html</file> - <file>Documentation/Information.html</file> - <file>Documentation/InformationTab.png</file> - <file>Documentation/IntegrateAttributes.html</file> - <file>Documentation/IntegrateFlowThroughSurface.html</file> - <file>Documentation/InteractButton.png</file> - <file>Documentation/LabeledSelection.png</file> - <file>Documentation/LegacyVTKFileReader.html</file> - <file>Documentation/LevelIdScalars.html</file> - <file>Documentation/LinearExtrusionFilter.html</file> - <file>Documentation/LineSource.html</file> - <file>Documentation/LinkManagerDialog.png</file> - <file>Documentation/LookmarkBrowser.png</file> - <file>Documentation/LookmarkButton.png</file> - <file>Documentation/LookmarkInspector.png</file> - <file>Documentation/Lookmarks.html</file> - <file>Documentation/LoopSubdivisionFilter.html</file> - <file>Documentation/LSDynaReader.html</file> - <file>Documentation/MainControlsToolbar.png</file> - <file>Documentation/MaskPoints.html</file> - <file>Documentation/MaximizeViewButton.png</file> - <file>Documentation/Median.html</file> - <file>Documentation/MergeBlocks.html</file> - <file>Documentation/MeshQuality.html</file> - <file>Documentation/Meta Image Reader.html</file> - <file>Documentation/MetaImageWriter.html</file> - <file>Documentation/MFIXReader.html</file> - <file>Documentation/netCDFReader.html</file> - <file>Documentation/NormalGlyphs.html</file> - <file>Documentation/ObjectInspector.html</file> - <file>Documentation/OctreeDepthLimit.html</file> - <file>Documentation/OctreeDepthScalars.html</file> - <file>Documentation/OctreeFractal.html</file> - <file>Documentation/OpenDataFileButton.png</file> - <file>Documentation/OpenFOAMReader.html</file> - <file>Documentation/OutlineCornerFilter.html</file> - <file>Documentation/OutlineFilter.html</file> - <file>Documentation/OutlineSource.html</file> - <file>Documentation/P3DReader.html</file> - <file>Documentation/ParaViewBook_FrontCover_smaller.png</file> - <file>Documentation/ParaViewDoc.css</file> - <file>Documentation/ParaViewFilters.html</file> - <file>Documentation/ParaViewGUIOverview.png</file> - <file>Documentation/ParaViewLogo.png</file> - <file>Documentation/ParaViewReaders.html</file> - <file>Documentation/ParaViewSources.html</file> - <file>Documentation/ParaViewWriters.html</file> - <file>Documentation/ParticlePathLines.html</file> - <file>Documentation/ParticleTracer.html</file> - <file>Documentation/PDataSetWriter.html</file> - <file>Documentation/pdbreader.html</file> - <file>Documentation/PhastaReader.html</file> - <file>Documentation/PickCenterButton.png</file> - <file>Documentation/PipelineBrowser.html</file> - <file>Documentation/PipelineBrowser.png</file> - <file>Documentation/PlaneSource.html</file> - <file>Documentation/PlotAttributes.html</file> - <file>Documentation/PlotOnIntersectionCurves.html</file> - <file>Documentation/PlotOnSortedLines.html</file> - <file>Documentation/plyreader.html</file> - <file>Documentation/PNGReader.html</file> - <file>Documentation/PNGWriter.html</file> - <file>Documentation/PointData.png</file> - <file>Documentation/PointDataToCellData.html</file> - <file>Documentation/PointSource.html</file> - <file>Documentation/PolyDataNormals.html</file> - <file>Documentation/popreader.html</file> - <file>Documentation/PPLYWriter.html</file> - <file>Documentation/Probe.html</file> - <file>Documentation/ProbeLine.html</file> - <file>Documentation/ProbePoint.html</file> - <file>Documentation/ProcessIdScalars.html</file> - <file>Documentation/Programmable Filter.html</file> - <file>Documentation/ProgrammableFilter.html</file> - <file>Documentation/ProgrammableSource.html</file> - <file>Documentation/Properties.html</file> - <file>Documentation/PropertiesButtons.png</file> - <file>Documentation/PSTLWriter.html</file> - <file>Documentation/PVConnectivityFilter.html</file> - <file>Documentation/PVDReader.html</file> - <file>Documentation/pvtkfile.html</file> - <file>Documentation/PythonCalculator.html</file> - <file>Documentation/QuadraturePointInterpolator.html</file> - <file>Documentation/QuadraturePointsGenerator.html</file> - <file>Documentation/QuadraturePointStatistics.html</file> - <file>Documentation/QuadratureSchemeDictionaryGenerator.html</file> - <file>Documentation/QuadricClustering.html</file> - <file>Documentation/Ramp.png</file> - <file>Documentation/ReaderSelectionDialog.png</file> - <file>Documentation/RedoButton.png</file> - <file>Documentation/RedoCameraButton.png</file> - <file>Documentation/ReflectionFilter.html</file> - <file>Documentation/RepresentationToolbar.png</file> - <file>Documentation/ResetCameraButton.png</file> - <file>Documentation/ResetCenterButton.png</file> - <file>Documentation/RestoreViewButton.png</file> - <file>Documentation/RibbonFilter.html</file> - <file>Documentation/RightClickFilter.png</file> - <file>Documentation/RotationalExtrusionFilter.html</file> - <file>Documentation/RTAnalyticSource.html</file> - <file>Documentation/Ruler.html</file> - <file>Documentation/SaveDataFileButton.png</file> - <file>Documentation/ScatterPlot.html</file> - <file>Documentation/SelectCellsFrustumButton.png</file> - <file>Documentation/SelectCellsSurfaceButton.png</file> - <file>Documentation/SelectionInspector.html</file> - <file>Documentation/SelectionInspector.png</file> - <file>Documentation/SelectionToolbar.png</file> - <file>Documentation/SelectPointsFrustumButton.png</file> - <file>Documentation/SelectPointsSurfaceButton.png</file> - <file>Documentation/SESAMEReader.html</file> - <file>Documentation/SettingsGeneral.png</file> - <file>Documentation/ShowCenterButton.png</file> - <file>Documentation/ShrinkFilter.html</file> - <file>Documentation/Sinusoidal.png</file> - <file>Documentation/SLACParticleReader.html</file> - <file>Documentation/SLACReader.html</file> - <file>Documentation/SmoothPolyDataFilter.html</file> - <file>Documentation/spcthreader.html</file> - <file>Documentation/SPCTHRestartReader.html</file> - <file>Documentation/SphereSource.html</file> - <file>Documentation/SplineSource.html</file> - <file>Documentation/SplitViewHorizontalButton.png</file> - <file>Documentation/SplitViewVerticalButton.png</file> - <file>Documentation/SpreadsheetView.png</file> - <file>Documentation/Step.png</file> - <file>Documentation/stlreader.html</file> - <file>Documentation/StreamlinesButton.png</file> - <file>Documentation/StreamTracer.html</file> - <file>Documentation/Stripper.html</file> - <file>Documentation/StructuredGridOutlineFilter.html</file> - <file>Documentation/Subdivide.html</file> - <file>Documentation/SuperquadricSource.html</file> - <file>Documentation/SurfaceVectors.html</file> - <file>Documentation/TableToPolyData.html</file> - <file>Documentation/TableToStructuredGrid.html</file> - <file>Documentation/TemporalCache.html</file> - <file>Documentation/TemporalInterpolator.html</file> - <file>Documentation/TemporalShiftScale.html</file> - <file>Documentation/TemporalSnapToTimeStep.html</file> - <file>Documentation/TemporalStatistics.html</file> - <file>Documentation/TessellatorFilter.html</file> - <file>Documentation/TextSource.html</file> - <file>Documentation/TextureMapToCylinder.html</file> - <file>Documentation/TextureMapToPlane.html</file> - <file>Documentation/TextureMapToSphere.html</file> - <file>Documentation/Threshold.html</file> - <file>Documentation/ThresholdButton.png</file> - <file>Documentation/TIFFReader.html</file> - <file>Documentation/TimerLog.png</file> - <file>Documentation/TimeSource.html</file> - <file>Documentation/TimeStepSpinBox.png</file> - <file>Documentation/TimeToTextConvertor.html</file> - <file>Documentation/TimeToTextConvertorSource.html</file> - <file>Documentation/TimeValueEntry.png</file> - <file>Documentation/ToolsMenu.html</file> - <file>Documentation/TransformFilter.html</file> - <file>Documentation/TriangleFilter.html</file> - <file>Documentation/TubeFilter.html</file> - <file>Documentation/UndoButton.png</file> - <file>Documentation/UndoCameraButton.png</file> - <file>Documentation/UndoRedoToolbar.png</file> - <file>Documentation/UngroupDataSetsButton.png</file> - <file>Documentation/UnstructuredGradient.html</file> - <file>Documentation/VCRBack.png</file> - <file>Documentation/VCRFirst.png</file> - <file>Documentation/VCRForward.png</file> - <file>Documentation/VCRLast.png</file> - <file>Documentation/VCRLoop.png</file> - <file>Documentation/VCRPause.png</file> - <file>Documentation/VCRPlay.png</file> - <file>Documentation/VectorText.html</file> - <file>Documentation/View+XButton.png</file> - <file>Documentation/View+YButton.png</file> - <file>Documentation/View+ZButton.png</file> - <file>Documentation/View-XButton.png</file> - <file>Documentation/View-YButton.png</file> - <file>Documentation/View-ZButton.png</file> - <file>Documentation/ViewMenu.html</file> - <file>Documentation/Views.html</file> - <file>Documentation/ViewTitleBarButtons.png</file> - <file>Documentation/vrmlreader.html</file> - <file>Documentation/WarpScalar.html</file> - <file>Documentation/WarpVector.html</file> - <file>Documentation/WarpVectorButton.png</file> - <file>Documentation/XdmfReader.html</file> - <file>Documentation/XdmfWriter.html</file> - <file>Documentation/XMLHierarchicalBoxDataReader.html</file> - <file>Documentation/XMLHierarchicalBoxDataWriter.html</file> - <file>Documentation/XMLImageDataReader.html</file> - <file>Documentation/XMLImageDataWriter.html</file> - <file>Documentation/XMLMultiBlockDataReader.html</file> - <file>Documentation/XMLMultiBlockDataWriter.html</file> - <file>Documentation/XMLPHierarchicalBoxDataWriter.html</file> - <file>Documentation/XMLPImageDataReader.html</file> - <file>Documentation/XMLPImageDataWriter.html</file> - <file>Documentation/XMLPMultiBlockDataWriter.html</file> - <file>Documentation/XMLPolyDataReader.html</file> - <file>Documentation/XMLPolyDataWriter.html</file> - <file>Documentation/XMLPPolyDataReader.html</file> - <file>Documentation/XMLPPolyDataWriter.html</file> - <file>Documentation/XMLPRectilinearGridReader.html</file> - <file>Documentation/XMLPRectilinearGridWriter.html</file> - <file>Documentation/XMLPStructuredGridReader.html</file> - <file>Documentation/XMLPStructuredGridWriter.html</file> - <file>Documentation/XMLPUnstructuredGridReader.html</file> - <file>Documentation/XMLPUnstructuredGridWriter.html</file> - <file>Documentation/XMLPVDWriter.html</file> - <file>Documentation/XMLRectilinearGridReader.html</file> - <file>Documentation/XMLRectilinearGridWriter.html</file> - <file>Documentation/XMLStructuredGridReader.html</file> - <file>Documentation/XMLStructuredGridWriter.html</file> - <file>Documentation/XMLUnstructuredGridReader.html</file> - <file>Documentation/XMLUnstructuredGridWriter.html</file> - <file>Documentation/XYPlotDisplayTab.png</file> - <file>Documentation/XYPlotView.png</file> - <file>Documentation/xyzreader.html</file> - </files> - </filterSection> -</QtHelpProject> diff --git a/Examples/CMakeLists.txt b/Examples/CMakeLists.txt index fb3a75e5fd..0f3925a2e8 100644 --- a/Examples/CMakeLists.txt +++ b/Examples/CMakeLists.txt @@ -8,6 +8,7 @@ IF(NOT ParaView_BINARY_DIR) INCLUDE(${PARAVIEW_USE_FILE}) SUBDIRS(Plugins) + SUBDIRS(CustomApplications) ELSE(NOT ParaView_BINARY_DIR) diff --git a/Examples/CustomApplications/CMakeLists.txt b/Examples/CustomApplications/CMakeLists.txt new file mode 100644 index 0000000000..71525677d6 --- /dev/null +++ b/Examples/CustomApplications/CMakeLists.txt @@ -0,0 +1,12 @@ +IF(PARAVIEW_BUILD_QT_GUI) + SUBDIRS( + ParticlesViewer + Spreadsheet + Demo0 + Demo1 + Clone1 + Clone2 + ) +ENDIF(PARAVIEW_BUILD_QT_GUI) + + diff --git a/Examples/CustomApplications/Clone1/CMakeLists.txt b/Examples/CustomApplications/Clone1/CMakeLists.txt new file mode 100644 index 0000000000..81efb1be5a --- /dev/null +++ b/Examples/CustomApplications/Clone1/CMakeLists.txt @@ -0,0 +1,43 @@ +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewBranding.cmake) +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewPlugins.cmake) + +#------------------------------------------------------------------------------ +# Add extra library containing custom code for the client. +QT4_WRAP_CPP(MOC_BUILT_SOURCES + myMainWindow.h) + +QT4_WRAP_UI(UI_BUILT_SOURCES + myMainWindow.ui +) + +SOURCE_GROUP("Generated" FILES + ${MOC_BUILT_SOURCES} + ${UI_BUILT_SOURCES} +) + +SET(ParaView_SOURCE_FILES + myMainWindow.cxx + myMainWindow.h + ${MOC_BUILT_SOURCES} + ${UI_BUILT_SOURCES}) + +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) + +build_paraview_client(paraview_revised + TITLE "ParaView (ReVisEd)" + ORGANIZATION "Kitware Inc." + VERSION_MAJOR 1 + VERSION_MINOR 1 + VERSION_PATCH 1 +# SPLASH_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/RSplash.png" + PVMAIN_WINDOW myMainWindow + PVMAIN_WINDOW_INCLUDE myMainWindow.h + GUI_CONFIGURATION_XMLS + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewSources.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewFilters.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewReaders.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewWriters.xml + SOURCES ${ParaView_SOURCE_FILES} +) diff --git a/Examples/CustomApplications/Clone1/ParaViewFilters.xml b/Examples/CustomApplications/Clone1/ParaViewFilters.xml new file mode 100644 index 0000000000..4f25247c80 --- /dev/null +++ b/Examples/CustomApplications/Clone1/ParaViewFilters.xml @@ -0,0 +1,162 @@ +<ParaViewFilters> + <Category name="Common" menu_label="&Common" preserve_order="1" + show_in_toolbar="1"> + <Proxy group="filters" name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> + <Proxy group="filters" name="Contour" icon=":/pqWidgets/Icons/pqIsosurface24.png"/> + <Proxy group="filters" name="Clip" icon=":/pqWidgets/Icons/pqClip24.png"/> + <Proxy group="filters" name="Cut" icon=":/pqWidgets/Icons/pqSlice24.png"/> + <Proxy group="filters" name="Threshold" icon=":/pqWidgets/Icons/pqThreshold24.png"/> + <Proxy group="filters" name="ExtractGrid" icon=":/pqWidgets/Icons/pqExtractGrid24.png"/> + <Proxy group="filters" name="Glyph" icon=":/pqWidgets/Icons/pqGlyph24.png"/> + <Proxy group="filters" name="StreamTracer" icon=":/pqWidgets/Icons/pqStreamTracer24.png"/> + <Proxy group="filters" name="WarpVector" icon=":/pqWidgets/Icons/pqWarp24.png"/> + <Proxy group="filters" name="GroupDataSets" icon=":/pqWidgets/Icons/pqGroup24.png"/> + <Proxy group="filters" name="ExtractHierarchicalLevel" icon=":/pqWidgets/Icons/pqGroupExtract24.png"/> + </Category> + + <Category name="DataAnalysis" menu_label="&Data Analysis"> + <Proxy group="filters" name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> + <Proxy group="filters" name="ExtractSelection" + icon=":/pqWidgets/Icons/pqExtractSelection24.png" /> + <Proxy group="filters" name="ExtractSelectionOverTime" + icon=":/pqWidgets/Icons/pqPlotCellOverTime24.png" /> + <Proxy group="filters" name="ExtractHistogram" + icon=":/pqWidgets/Icons/pqHistogram24.png"/> + <Proxy group="filters" name="IntegrateAttributes" /> + <Proxy group="filters" name="ExtractFieldDataOverTime" /> + <Proxy group="filters" name="ProbeLine" + icon=":/pqWidgets/Icons/pqPlotLineOverTime24.png" /> + <Proxy group="filters" name="ProbePoint" + icon=":/pqWidgets/Icons/pqProbeLocation24.png" /> + <Proxy group="filters" name="PlotAttributes" /> + <Proxy group="filters" name="PlotOnSortedLines" /> + <Proxy group="filters" name="PlotOnIntersectionCurves" /> + <Proxy group="filters" name="ProgrammableFilter" + icon=":/pqWidgets/Icons/pqProgrammableFilter24.png"/> + </Category> + + <Category name="Statistics" menu_label="&Statistics"> + <Proxy group="filters" name="ContingencyStatistics"/> + <Proxy group="filters" name="DescriptiveStatistics"/> + <Proxy group="filters" name="KMeans"/> + <Proxy group="filters" name="MulticorrelativeStatistics"/> + <Proxy group="filters" name="PCAStatistics"/> + </Category> + + <Category name="Temporal" menu_label="&Temporal"> + <Proxy group="filters" name="ParticleTracer" /> + <Proxy group="filters" name="ParticlePathLines" /> + <Proxy group="filters" name="TemporalCache" /> + <Proxy group="filters" name="TemporalInterpolator" /> + <Proxy group="filters" name="TemporalSnapToTimeStep" /> + <Proxy group="filters" name="TemporalShiftScale" /> + <Proxy group="filters" name="TemporalStatistics" /> + <Proxy group="filters" name="TimeToTextConvertor" /> + </Category> + + <Proxy group="filters" name="Append" /> + <Proxy group="filters" name="AppendAttributes" /> + <Proxy group="filters" name="AppendPolyData" /> + <Proxy group="filters" name="ArbitrarySourceGlyph" /> + <Proxy group="filters" name="ArbitrarySourceStreamTracer" /> + <Proxy group="filters" name="BlockIdScalars" /> + <Proxy group="filters" name="BrownianPoints" /> + <Proxy group="filters" name="Calculator" /> + <Proxy group="filters" name="CellCenters" /> + <Proxy group="filters" name="CellDataToPointData" /> + <Proxy group="filters" name="CellDerivatives"/> + <Proxy group="filters" name="CleanPolyData" /> + <Proxy group="filters" name="CleanUnstructuredGrid" /> + <Proxy group="filters" name="Clip" /> + <Proxy group="filters" name="Contour" /> + <Proxy group="filters" name="CTHFragmentConnect"/> + <Proxy group="filters" name="CTHFragmentIntersect"/> + <Proxy group="filters" name="CTHPart" /> + <Proxy group="filters" name="Curvatures" /> + <Proxy group="filters" name="Cut" /> + <Proxy group="filters" name="D3" /> + <Proxy group="filters" name="DataSetSurfaceFilter" /> + <Proxy group="filters" name="DataSetTriangleFilter" /> + <Proxy group="filters" name="DecimatePro" /> + <Proxy group="filters" name="Delaunay2D" /> + <Proxy group="filters" name="Delaunay3D" /> + <Proxy group="filters" name="ElevationFilter" /> + <Proxy group="filters" name="ExtractBlock" /> + <Proxy group="filters" name="ExtractEdges" /> + <Proxy group="filters" name="ExtractGeometry" /> + <Proxy group="filters" name="ExtractGrid" /> + <Proxy group="filters" name="ExtractHistogram" /> + <Proxy group="filters" name="ExtractHierarchicalLevel" /> + <Proxy group="filters" name="ExtractSelection" /> + <Proxy group="filters" name="ExtractSelectionOverTime" /> + <Proxy group="filters" name="ExtractHierarchicalDataSets" /> + <Proxy group="filters" name="FeatureEdges" /> + <Proxy group="filters" name="FFTSelectionOverTime" /> + <Proxy group="filters" name="GenerateIdScalars"/> + <Proxy group="filters" name="Glyph" /> + <Proxy group="filters" name="Gradient" /> + <Proxy group="filters" name="GroupDataSets" /> + <Proxy group="filters" name="IntegrateAttributes" /> + <Proxy group="filters" name="IntegrateFlowThroughSurface" /> + <Proxy group="filters" name="LevelIdScalars" /> + <Proxy group="filters" name="LinearExtrusionFilter" /> + <Proxy group="filters" name="LoopSubdivisionFilter" /> + <Proxy group="filters" name="MaskPoints" /> + <Proxy group="filters" name="Median" /> + <Proxy group="filters" name="MergeBlocks" /> + <Proxy group="filters" name="MeshQuality" /> + <Proxy group="filters" name="OctreeDepthLimit" /> + <Proxy group="filters" name="OctreeDepthScalars" /> + <Proxy group="filters" name="OutlineCornerFilter" /> + <Proxy group="filters" name="OutlineFilter" /> + <Proxy group="filters" name="ParticlePathLines" /> + <Proxy group="filters" name="ParticleTracer" /> + <Proxy group="filters" name="PlotAttributes" /> + <Proxy group="filters" name="PlotOnIntersectionCurves" /> + <Proxy group="filters" name="PlotOnSortedLines" /> + <Proxy group="filters" name="PointDataToCellData" /> + <Proxy group="filters" name="PolyDataNormals" /> + <Proxy group="filters" name="Probe" /> + <Proxy group="filters" name="ProbeLine" /> + <Proxy group="filters" name="ProbePoint" /> + <Proxy group="filters" name="ProcessIdScalars" /> + <Proxy group="filters" name="ProgrammableFilter" /> + <Proxy group="filters" name="PVConnectivityFilter" /> + <Proxy group="filters" name="PythonCalculator" /> + <Proxy group="filters" name="QuadraturePointInterpolator" /> + <Proxy group="filters" name="QuadraturePointsGenerator" /> + <Proxy group="filters" name="QuadraturePointStatistics" /> + <Proxy group="filters" name="QuadratureSchemeDictionaryGenerator" /> + <Proxy group="filters" name="QuadricClustering" /> + <Proxy group="filters" name="ReflectionFilter" /> + <Proxy group="filters" name="RibbonFilter" /> + <Proxy group="filters" name="RotationalExtrusionFilter" /> + <Proxy group="filters" name="ScatterPlot"/> + <Proxy group="filters" name="ShrinkFilter" /> + <Proxy group="filters" name="SmoothPolyDataFilter" /> + <Proxy group="filters" name="StreamTracer" /> + <Proxy group="filters" name="Stripper" /> + <Proxy group="filters" name="StructuredGridOutlineFilter" /> + <Proxy group="filters" name="Subdivide" /> + <Proxy group="filters" name="SurfaceVectors" /> + <Proxy group="filters" name="TemporalCache" /> + <Proxy group="filters" name="TemporalInterpolator" /> + <Proxy group="filters" name="TemporalSnapToTimeStep" /> + <Proxy group="filters" name="TemporalShiftScale" /> + <Proxy group="filters" name="TemporalStatistics" /> + <Proxy group="filters" name="TessellatorFilter" /> + <Proxy group="filters" name="TextureMapToCylinder" /> + <Proxy group="filters" name="TextureMapToPlane" /> + <Proxy group="filters" name="TextureMapToSphere" /> + <Proxy group="filters" name="Threshold" /> + <Proxy group="filters" name="TimeToTextConvertor" /> + <Proxy group="filters" name="TransformFilter" /> + <Proxy group="filters" name="TriangleFilter" /> + <Proxy group="filters" name="TubeFilter" /> + <Proxy group="filters" name="UnstructuredGradient" /> + <Proxy group="filters" name="WarpScalar" /> + <Proxy group="filters" name="WarpVector" /> + <Proxy group="filters" name="NormalGlyphs" /> + <Proxy group="filters" name="TableToPolyData" /> + <Proxy group="filters" name="TableToStructuredGrid" /> +</ParaViewFilters> diff --git a/Examples/CustomApplications/Clone1/ParaViewReaders.xml b/Examples/CustomApplications/Clone1/ParaViewReaders.xml new file mode 100644 index 0000000000..423db4b184 --- /dev/null +++ b/Examples/CustomApplications/Clone1/ParaViewReaders.xml @@ -0,0 +1,58 @@ +<ParaViewReaders> + <!-- + NOTE: Readers are tried in reverse order that they are present in this + list i.e. if two readers can read the same extension, then the reader + apperaring later will be tried first when reading the file. + --> + <Proxy group="sources" name="LSDynaReader" /> + <Proxy group="sources" name="PVDReader" /> + <Proxy group="sources" name="XMLPolyDataReader"/> + <Proxy group="sources" name="XMLUnstructuredGridReader" /> + <Proxy group="sources" name="XMLImageDataReader" /> + <Proxy group="sources" name="XMLStructuredGridReader" /> + <Proxy group="sources" name="XMLRectilinearGridReader" /> + <Proxy group="sources" name="XMLPPolyDataReader" /> + <Proxy group="sources" name="XMLPUnstructuredGridReader" /> + <Proxy group="sources" name="XMLPImageDataReader" /> + <Proxy group="sources" name="XMLPStructuredGridReader" /> + <Proxy group="sources" name="XMLPRectilinearGridReader" /> + <Proxy group="sources" name="XMLMultiBlockDataReader" /> + <Proxy group="sources" name="XMLHierarchicalBoxDataReader" /> + <Proxy group="sources" name="LegacyVTKFileReader" /> + <Proxy group="sources" name="pvtkfile" /> + <Proxy group="sources" name="ensight" /> + <Proxy group="sources" name="ensightMS" /> + <Proxy group="sources" name="netCDFReader" /> + <Proxy group="sources" name="byureader" /> + <Proxy group="sources" name="XdmfReader2" /> + <Proxy group="sources" name="pdbreader" /> + <Proxy group="sources" name="xyzreader" /> + <Proxy group="sources" name="P3DReader" /> + <Proxy group="sources" name="spcthreader" /> + <Proxy group="sources" name="SPCTHRestartReader" /> + <Proxy group="sources" name="DEMReader" /> + <Proxy group="sources" name="vrmlreader" /> + <Proxy group="sources" name="plyreader" /> + <Proxy group="sources" name="stlreader" /> + <Proxy group="sources" name="gaussiancubereader" /> + <Proxy group="sources" name="ImageReader" /> + <Proxy group="sources" name="popreader"/> + <Proxy group="sources" name="AVSucdSeriesReader" /> + <Proxy group="sources" name="Meta Image Proxy" /> + <Proxy group="sources" name="Facet Proxy" /> + <Proxy group="sources" name="PNGReader" /> + <Proxy group="sources" name="TIFFReader" /> + <Proxy group="sources" name="PhastaReader" /> + <Proxy group="sources" name="SESAMEReader" /> + <Proxy group="sources" name="CSVReader" /> + <Proxy group="sources" name="MFIXReader" /> + <Proxy group="sources" name="FLUENTReader" /> + <Proxy group="sources" name="OpenFOAMReader" /> + <Proxy group="sources" name="CosmoReader" /> + <Proxy group="sources" name="SiloReader"/> + <Proxy group="sources" name="ExodusIIReader" /> + <Proxy group="sources" name="ExodusRestartReader" /> + <Proxy group="sources" name="SLACReader" /> + <Proxy group="sources" name="SLACParticleReader" /> + <Proxy group="sources" name="ParticleReader" /> +</ParaViewReaders> diff --git a/Examples/CustomApplications/Clone1/ParaViewSources.xml b/Examples/CustomApplications/Clone1/ParaViewSources.xml new file mode 100644 index 0000000000..a2796a1180 --- /dev/null +++ b/Examples/CustomApplications/Clone1/ParaViewSources.xml @@ -0,0 +1,27 @@ +<ParaViewSources> + <Proxy group="sources" name="GlyphSource2D" /> + <Proxy group="sources" name="VectorText" /> + <Proxy group="sources" name="TimeToTextConvertorSource" /> + <Proxy group="sources" name="ArrowSource" /> + <Proxy group="sources" name="Axes" /> + <Proxy group="sources" name="CubeSource" /> + <Proxy group="sources" name="ConeSource" /> + <Proxy group="sources" name="CylinderSource" /> + <Proxy group="sources" name="DataObjectGenerator" /> + <Proxy group="sources" name="DiskSource" /> + <Proxy group="sources" name="HierarchicalFractal" /> + <Proxy group="sources" name="LineSource" /> + <Proxy group="sources" name="ImageMandelbrotSource" /> + <Proxy group="sources" name="OctreeFractal" /> + <Proxy group="sources" name="OutlineSource" /> + <Proxy group="sources" name="PlaneSource" /> + <Proxy group="sources" name="PointSource" /> + <Proxy group="sources" name="ProgrammableSource" /> + <Proxy group="sources" name="SphereSource" /> + <Proxy group="sources" name="SplineSource" /> + <Proxy group="sources" name="SuperquadricSource" /> + <Proxy group="sources" name="TextSource" /> + <Proxy group="sources" name="TimeSource" /> + <Proxy group="sources" name="Ruler" /> + <Proxy group="sources" name="RTAnalyticSource" /> +</ParaViewSources> diff --git a/Examples/CustomApplications/Clone1/ParaViewWriters.xml b/Examples/CustomApplications/Clone1/ParaViewWriters.xml new file mode 100644 index 0000000000..46f0ffbc01 --- /dev/null +++ b/Examples/CustomApplications/Clone1/ParaViewWriters.xml @@ -0,0 +1,26 @@ +<ParaViewWriters> + <Proxy group="writers" name="XMLPVDWriter" /> + <Proxy group="writers" name="XMLPolyDataWriter" /> + <Proxy group="writers" name="XMLUnstructuredGridWriter" /> + <Proxy group="writers" name="XMLStructuredGridWriter" /> + <Proxy group="writers" name="XMLRectilinearGridWriter" /> + <Proxy group="writers" name="XMLImageDataWriter" /> + <Proxy group="writers" name="XMLPPolyDataWriter" /> + <Proxy group="writers" name="XMLPUnstructuredGridWriter" /> + <Proxy group="writers" name="XMLPStructuredGridWriter" /> + <Proxy group="writers" name="XMLPRectilinearGridWriter"/> + <Proxy group="writers" name="XMLPImageDataWriter" /> + <Proxy group="writers" name="XMLMultiBlockDataWriter" /> + <Proxy group="writers" name="XMLHierarchicalBoxDataWriter" /> + <Proxy group="writers" name="DataSetWriter" /> + <Proxy group="writers" name="PDataSetWriter" /> + <Proxy group="writers" name="PPLYWriter" /> + <Proxy group="writers" name="PSTLWriter" /> + <Proxy group="writers" name="MetaImageWriter" /> + <Proxy group="writers" name="PNGWriter" /> + <Proxy group="writers" name="XdmfWriter"/> + <Proxy group="writers" name="ExodusIIWriter" /> + <Proxy group="writers" name="EnSightWriter" /> + <Proxy group="writers" name="CSVWriter" /> + <Proxy group="writers" name="DataSetCSVWriter" /> +</ParaViewWriters> diff --git a/Examples/CustomApplications/Clone1/myMainWindow.cxx b/Examples/CustomApplications/Clone1/myMainWindow.cxx new file mode 100644 index 0000000000..99aac60f68 --- /dev/null +++ b/Examples/CustomApplications/Clone1/myMainWindow.cxx @@ -0,0 +1,117 @@ +/*========================================================================= + + Program: ParaView + Module: myMainWindow.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 "myMainWindow.h" +#include "ui_myMainWindow.h" + +#include "pqHelpReaction.h" +#include "pqObjectInspectorWidget.h" +#include "pqParaViewBehaviors.h" +#include "pqParaViewMenuBuilders.h" + +class myMainWindow::pqInternals : public Ui::pqClientMainWindow +{ +}; + +//----------------------------------------------------------------------------- +myMainWindow::myMainWindow() +{ + this->Internals = new pqInternals(); + this->Internals->setupUi(this); + + // Setup default GUI layout. + + // 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); + + this->Internals->animationViewDock->hide(); + this->Internals->statisticsDock->hide(); + this->Internals->selectionInspectorDock->hide(); + this->Internals->comparativePanelDock->hide(); + this->tabifyDockWidget(this->Internals->animationViewDock, + this->Internals->statisticsDock); + + // Enable automatic creation of representation on accept. + this->Internals->proxyTabWidget->setShowOnAccept(true); + + // Enable help for from the object inspector. + QObject::connect(this->Internals->proxyTabWidget->getObjectInspector(), + SIGNAL(helpRequested(QString)), + this, SLOT(showHelpForProxy(const QString&))); + + // Populate application menus with actions. + pqParaViewMenuBuilders::buildFileMenu(*this->Internals->menu_File); + pqParaViewMenuBuilders::buildEditMenu(*this->Internals->menu_Edit); + + // Populate sources menu. + pqParaViewMenuBuilders::buildSourcesMenu(*this->Internals->menuSources, this); + + // Populate filters menu. + pqParaViewMenuBuilders::buildFiltersMenu(*this->Internals->menuFilters, this); + + // Populate Tools menu. + pqParaViewMenuBuilders::buildToolsMenu(*this->Internals->menuTools); + + // setup the context menu for the pipeline browser. + pqParaViewMenuBuilders::buildPipelineBrowserContextMenu( + *this->Internals->pipelineBrowser); + + pqParaViewMenuBuilders::buildToolbars(*this); + + // Setup the View menu. This must be setup after all toolbars and dockwidgets + // have been created. + pqParaViewMenuBuilders::buildViewMenu(*this->Internals->menu_View, *this); + + // Setup the menu to show macros. + pqParaViewMenuBuilders::buildMacrosMenu(*this->Internals->menu_Macros); + + // Setup the help menu. + pqParaViewMenuBuilders::buildHelpMenu(*this->Internals->menu_Help); + + // Final step, define application behaviors. Since we want all ParaView + // behaviors, we use this convenience method. + new pqParaViewBehaviors(this, this); +} + +//----------------------------------------------------------------------------- +myMainWindow::~myMainWindow() +{ + delete this->Internals; +} + + +//----------------------------------------------------------------------------- +void myMainWindow::showHelpForProxy(const QString& proxyname) +{ + pqHelpReaction::showHelp( + QString("qthelp://paraview.org/paraview/%1.html").arg(proxyname)); +} diff --git a/Examples/CustomApplications/Clone1/myMainWindow.h b/Examples/CustomApplications/Clone1/myMainWindow.h new file mode 100644 index 0000000000..de9b52a3a7 --- /dev/null +++ b/Examples/CustomApplications/Clone1/myMainWindow.h @@ -0,0 +1,59 @@ +/*========================================================================= + + Program: ParaView + Module: myMainWindow.h + + 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. + +========================================================================*/ +#ifndef __myMainWindow_h +#define __myMainWindow_h + +#include <QMainWindow> + +/// MainWindow for the default ParaView application. +class myMainWindow : public QMainWindow +{ + Q_OBJECT + typedef QMainWindow Superclass; +public: + myMainWindow(); + ~myMainWindow(); + +protected slots: + void showHelpForProxy(const QString& proxyname); + +private: + myMainWindow(const myMainWindow&); // Not implemented. + void operator=(const myMainWindow&); // Not implemented. + + class pqInternals; + pqInternals* Internals; +}; + +#endif + + diff --git a/Examples/CustomApplications/Clone1/myMainWindow.ui b/Examples/CustomApplications/Clone1/myMainWindow.ui new file mode 100644 index 0000000000..b22347d645 --- /dev/null +++ b/Examples/CustomApplications/Clone1/myMainWindow.ui @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqClientMainWindow</class> + <widget class="QMainWindow" name="pqClientMainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>970</width> + <height>700</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout"> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="pqViewManager" name="MultiViewManager" native="true"/> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>970</width> + <height>27</height> + </rect> + </property> + <widget class="QMenu" name="menu_File"> + <property name="title"> + <string>&File</string> + </property> + </widget> + <widget class="QMenu" name="menuSources"> + <property name="title"> + <string>&Sources</string> + </property> + </widget> + <widget class="QMenu" name="menuFilters"> + <property name="title"> + <string>&Filters</string> + </property> + </widget> + <widget class="QMenu" name="menu_Edit"> + <property name="title"> + <string>&Edit</string> + </property> + </widget> + <widget class="QMenu" name="menu_View"> + <property name="title"> + <string>&View</string> + </property> + </widget> + <widget class="QMenu" name="menuTools"> + <property name="title"> + <string>&Tools</string> + </property> + </widget> + <widget class="QMenu" name="menu_Help"> + <property name="title"> + <string>&Help</string> + </property> + </widget> + <widget class="QMenu" name="menu_Macros"> + <property name="title"> + <string>&Macros</string> + </property> + </widget> + <addaction name="menu_File"/> + <addaction name="menu_Edit"/> + <addaction name="menu_View"/> + <addaction name="menuSources"/> + <addaction name="menuFilters"/> + <addaction name="menuTools"/> + <addaction name="menu_Macros"/> + <addaction name="menu_Help"/> + </widget> + <widget class="pqStatusBar" name="statusbar"/> + <widget class="QDockWidget" name="pipelineBrowserDock"> + <property name="allowedAreas"> + <set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Pipeline Browser</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="pqPipelineBrowserWidget" name="pipelineBrowser"> + <property name="contextMenuPolicy"> + <enum>Qt::ActionsContextMenu</enum> + </property> + </widget> + </widget> + <widget class="QDockWidget" name="proxyTabDock"> + <property name="allowedAreas"> + <set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Object Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="pqProxyTabWidget" name="proxyTabWidget"/> + </widget> + <widget class="QDockWidget" name="statisticsDock"> + <property name="allowedAreas"> + <set>Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Statistics Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>8</number> + </attribute> + <widget class="pqDataInformationWidget" name="statisticsView"/> + </widget> + <widget class="QDockWidget" name="animationViewDock"> + <property name="windowTitle"> + <string>Animation View</string> + </property> + <attribute name="dockWidgetArea"> + <number>8</number> + </attribute> + <widget class="pqPVAnimationWidget" name="animationView"/> + </widget> + <widget class="QDockWidget" name="selectionInspectorDock"> + <property name="windowTitle"> + <string>Selection Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>2</number> + </attribute> + <widget class="pqSelectionInspectorWidget" name="selectionInspector"/> + </widget> + <widget class="QDockWidget" name="comparativePanelDock"> + <property name="windowTitle"> + <string>Comparative View Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>2</number> + </attribute> + <widget class="pqComparativeVisPanel" name="comparativeVisPanel"/> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>pqPipelineBrowserWidget</class> + <extends>QWidget</extends> + <header>pqPipelineBrowserWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqProxyTabWidget</class> + <extends>QWidget</extends> + <header>pqProxyTabWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqViewManager</class> + <extends>QWidget</extends> + <header>pqViewManager.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqSelectionInspectorWidget</class> + <extends>QWidget</extends> + <header>pqSelectionInspectorWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqPVAnimationWidget</class> + <extends>QWidget</extends> + <header>pqPVAnimationWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqDataInformationWidget</class> + <extends>QWidget</extends> + <header>pqDataInformationWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqStatusBar</class> + <extends>QStatusBar</extends> + <header>pqStatusBar.h</header> + </customwidget> + <customwidget> + <class>pqComparativeVisPanel</class> + <extends>QWidget</extends> + <header>pqComparativeVisPanel.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/Examples/CustomApplications/Clone2/CMakeLists.txt b/Examples/CustomApplications/Clone2/CMakeLists.txt new file mode 100644 index 0000000000..0551ecd71d --- /dev/null +++ b/Examples/CustomApplications/Clone2/CMakeLists.txt @@ -0,0 +1,43 @@ +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewBranding.cmake) +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewPlugins.cmake) + +#------------------------------------------------------------------------------ +# Add extra library containing custom code for the client. +QT4_WRAP_CPP(MOC_BUILT_SOURCES + myMainWindow.h) + +QT4_WRAP_UI(UI_BUILT_SOURCES + myMainWindow.ui +) + +SOURCE_GROUP("Generated" FILES + ${MOC_BUILT_SOURCES} + ${UI_BUILT_SOURCES} +) + +SET(ParaView_SOURCE_FILES + myMainWindow.cxx + myMainWindow.h + ${MOC_BUILT_SOURCES} + ${UI_BUILT_SOURCES}) + +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) + +build_paraview_client(paraview_revised_2 + TITLE "ParaView (ReVisEd)" + ORGANIZATION "Kitware Inc." + VERSION_MAJOR 1 + VERSION_MINOR 1 + VERSION_PATCH 1 +# SPLASH_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/RSplash.png" + PVMAIN_WINDOW myMainWindow + PVMAIN_WINDOW_INCLUDE myMainWindow.h + GUI_CONFIGURATION_XMLS + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewSources.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewFilters.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewReaders.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ParaViewWriters.xml + SOURCES ${ParaView_SOURCE_FILES} +) diff --git a/Examples/CustomApplications/Clone2/ParaViewFilters.xml b/Examples/CustomApplications/Clone2/ParaViewFilters.xml new file mode 100644 index 0000000000..4f25247c80 --- /dev/null +++ b/Examples/CustomApplications/Clone2/ParaViewFilters.xml @@ -0,0 +1,162 @@ +<ParaViewFilters> + <Category name="Common" menu_label="&Common" preserve_order="1" + show_in_toolbar="1"> + <Proxy group="filters" name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> + <Proxy group="filters" name="Contour" icon=":/pqWidgets/Icons/pqIsosurface24.png"/> + <Proxy group="filters" name="Clip" icon=":/pqWidgets/Icons/pqClip24.png"/> + <Proxy group="filters" name="Cut" icon=":/pqWidgets/Icons/pqSlice24.png"/> + <Proxy group="filters" name="Threshold" icon=":/pqWidgets/Icons/pqThreshold24.png"/> + <Proxy group="filters" name="ExtractGrid" icon=":/pqWidgets/Icons/pqExtractGrid24.png"/> + <Proxy group="filters" name="Glyph" icon=":/pqWidgets/Icons/pqGlyph24.png"/> + <Proxy group="filters" name="StreamTracer" icon=":/pqWidgets/Icons/pqStreamTracer24.png"/> + <Proxy group="filters" name="WarpVector" icon=":/pqWidgets/Icons/pqWarp24.png"/> + <Proxy group="filters" name="GroupDataSets" icon=":/pqWidgets/Icons/pqGroup24.png"/> + <Proxy group="filters" name="ExtractHierarchicalLevel" icon=":/pqWidgets/Icons/pqGroupExtract24.png"/> + </Category> + + <Category name="DataAnalysis" menu_label="&Data Analysis"> + <Proxy group="filters" name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> + <Proxy group="filters" name="ExtractSelection" + icon=":/pqWidgets/Icons/pqExtractSelection24.png" /> + <Proxy group="filters" name="ExtractSelectionOverTime" + icon=":/pqWidgets/Icons/pqPlotCellOverTime24.png" /> + <Proxy group="filters" name="ExtractHistogram" + icon=":/pqWidgets/Icons/pqHistogram24.png"/> + <Proxy group="filters" name="IntegrateAttributes" /> + <Proxy group="filters" name="ExtractFieldDataOverTime" /> + <Proxy group="filters" name="ProbeLine" + icon=":/pqWidgets/Icons/pqPlotLineOverTime24.png" /> + <Proxy group="filters" name="ProbePoint" + icon=":/pqWidgets/Icons/pqProbeLocation24.png" /> + <Proxy group="filters" name="PlotAttributes" /> + <Proxy group="filters" name="PlotOnSortedLines" /> + <Proxy group="filters" name="PlotOnIntersectionCurves" /> + <Proxy group="filters" name="ProgrammableFilter" + icon=":/pqWidgets/Icons/pqProgrammableFilter24.png"/> + </Category> + + <Category name="Statistics" menu_label="&Statistics"> + <Proxy group="filters" name="ContingencyStatistics"/> + <Proxy group="filters" name="DescriptiveStatistics"/> + <Proxy group="filters" name="KMeans"/> + <Proxy group="filters" name="MulticorrelativeStatistics"/> + <Proxy group="filters" name="PCAStatistics"/> + </Category> + + <Category name="Temporal" menu_label="&Temporal"> + <Proxy group="filters" name="ParticleTracer" /> + <Proxy group="filters" name="ParticlePathLines" /> + <Proxy group="filters" name="TemporalCache" /> + <Proxy group="filters" name="TemporalInterpolator" /> + <Proxy group="filters" name="TemporalSnapToTimeStep" /> + <Proxy group="filters" name="TemporalShiftScale" /> + <Proxy group="filters" name="TemporalStatistics" /> + <Proxy group="filters" name="TimeToTextConvertor" /> + </Category> + + <Proxy group="filters" name="Append" /> + <Proxy group="filters" name="AppendAttributes" /> + <Proxy group="filters" name="AppendPolyData" /> + <Proxy group="filters" name="ArbitrarySourceGlyph" /> + <Proxy group="filters" name="ArbitrarySourceStreamTracer" /> + <Proxy group="filters" name="BlockIdScalars" /> + <Proxy group="filters" name="BrownianPoints" /> + <Proxy group="filters" name="Calculator" /> + <Proxy group="filters" name="CellCenters" /> + <Proxy group="filters" name="CellDataToPointData" /> + <Proxy group="filters" name="CellDerivatives"/> + <Proxy group="filters" name="CleanPolyData" /> + <Proxy group="filters" name="CleanUnstructuredGrid" /> + <Proxy group="filters" name="Clip" /> + <Proxy group="filters" name="Contour" /> + <Proxy group="filters" name="CTHFragmentConnect"/> + <Proxy group="filters" name="CTHFragmentIntersect"/> + <Proxy group="filters" name="CTHPart" /> + <Proxy group="filters" name="Curvatures" /> + <Proxy group="filters" name="Cut" /> + <Proxy group="filters" name="D3" /> + <Proxy group="filters" name="DataSetSurfaceFilter" /> + <Proxy group="filters" name="DataSetTriangleFilter" /> + <Proxy group="filters" name="DecimatePro" /> + <Proxy group="filters" name="Delaunay2D" /> + <Proxy group="filters" name="Delaunay3D" /> + <Proxy group="filters" name="ElevationFilter" /> + <Proxy group="filters" name="ExtractBlock" /> + <Proxy group="filters" name="ExtractEdges" /> + <Proxy group="filters" name="ExtractGeometry" /> + <Proxy group="filters" name="ExtractGrid" /> + <Proxy group="filters" name="ExtractHistogram" /> + <Proxy group="filters" name="ExtractHierarchicalLevel" /> + <Proxy group="filters" name="ExtractSelection" /> + <Proxy group="filters" name="ExtractSelectionOverTime" /> + <Proxy group="filters" name="ExtractHierarchicalDataSets" /> + <Proxy group="filters" name="FeatureEdges" /> + <Proxy group="filters" name="FFTSelectionOverTime" /> + <Proxy group="filters" name="GenerateIdScalars"/> + <Proxy group="filters" name="Glyph" /> + <Proxy group="filters" name="Gradient" /> + <Proxy group="filters" name="GroupDataSets" /> + <Proxy group="filters" name="IntegrateAttributes" /> + <Proxy group="filters" name="IntegrateFlowThroughSurface" /> + <Proxy group="filters" name="LevelIdScalars" /> + <Proxy group="filters" name="LinearExtrusionFilter" /> + <Proxy group="filters" name="LoopSubdivisionFilter" /> + <Proxy group="filters" name="MaskPoints" /> + <Proxy group="filters" name="Median" /> + <Proxy group="filters" name="MergeBlocks" /> + <Proxy group="filters" name="MeshQuality" /> + <Proxy group="filters" name="OctreeDepthLimit" /> + <Proxy group="filters" name="OctreeDepthScalars" /> + <Proxy group="filters" name="OutlineCornerFilter" /> + <Proxy group="filters" name="OutlineFilter" /> + <Proxy group="filters" name="ParticlePathLines" /> + <Proxy group="filters" name="ParticleTracer" /> + <Proxy group="filters" name="PlotAttributes" /> + <Proxy group="filters" name="PlotOnIntersectionCurves" /> + <Proxy group="filters" name="PlotOnSortedLines" /> + <Proxy group="filters" name="PointDataToCellData" /> + <Proxy group="filters" name="PolyDataNormals" /> + <Proxy group="filters" name="Probe" /> + <Proxy group="filters" name="ProbeLine" /> + <Proxy group="filters" name="ProbePoint" /> + <Proxy group="filters" name="ProcessIdScalars" /> + <Proxy group="filters" name="ProgrammableFilter" /> + <Proxy group="filters" name="PVConnectivityFilter" /> + <Proxy group="filters" name="PythonCalculator" /> + <Proxy group="filters" name="QuadraturePointInterpolator" /> + <Proxy group="filters" name="QuadraturePointsGenerator" /> + <Proxy group="filters" name="QuadraturePointStatistics" /> + <Proxy group="filters" name="QuadratureSchemeDictionaryGenerator" /> + <Proxy group="filters" name="QuadricClustering" /> + <Proxy group="filters" name="ReflectionFilter" /> + <Proxy group="filters" name="RibbonFilter" /> + <Proxy group="filters" name="RotationalExtrusionFilter" /> + <Proxy group="filters" name="ScatterPlot"/> + <Proxy group="filters" name="ShrinkFilter" /> + <Proxy group="filters" name="SmoothPolyDataFilter" /> + <Proxy group="filters" name="StreamTracer" /> + <Proxy group="filters" name="Stripper" /> + <Proxy group="filters" name="StructuredGridOutlineFilter" /> + <Proxy group="filters" name="Subdivide" /> + <Proxy group="filters" name="SurfaceVectors" /> + <Proxy group="filters" name="TemporalCache" /> + <Proxy group="filters" name="TemporalInterpolator" /> + <Proxy group="filters" name="TemporalSnapToTimeStep" /> + <Proxy group="filters" name="TemporalShiftScale" /> + <Proxy group="filters" name="TemporalStatistics" /> + <Proxy group="filters" name="TessellatorFilter" /> + <Proxy group="filters" name="TextureMapToCylinder" /> + <Proxy group="filters" name="TextureMapToPlane" /> + <Proxy group="filters" name="TextureMapToSphere" /> + <Proxy group="filters" name="Threshold" /> + <Proxy group="filters" name="TimeToTextConvertor" /> + <Proxy group="filters" name="TransformFilter" /> + <Proxy group="filters" name="TriangleFilter" /> + <Proxy group="filters" name="TubeFilter" /> + <Proxy group="filters" name="UnstructuredGradient" /> + <Proxy group="filters" name="WarpScalar" /> + <Proxy group="filters" name="WarpVector" /> + <Proxy group="filters" name="NormalGlyphs" /> + <Proxy group="filters" name="TableToPolyData" /> + <Proxy group="filters" name="TableToStructuredGrid" /> +</ParaViewFilters> diff --git a/Examples/CustomApplications/Clone2/ParaViewReaders.xml b/Examples/CustomApplications/Clone2/ParaViewReaders.xml new file mode 100644 index 0000000000..423db4b184 --- /dev/null +++ b/Examples/CustomApplications/Clone2/ParaViewReaders.xml @@ -0,0 +1,58 @@ +<ParaViewReaders> + <!-- + NOTE: Readers are tried in reverse order that they are present in this + list i.e. if two readers can read the same extension, then the reader + apperaring later will be tried first when reading the file. + --> + <Proxy group="sources" name="LSDynaReader" /> + <Proxy group="sources" name="PVDReader" /> + <Proxy group="sources" name="XMLPolyDataReader"/> + <Proxy group="sources" name="XMLUnstructuredGridReader" /> + <Proxy group="sources" name="XMLImageDataReader" /> + <Proxy group="sources" name="XMLStructuredGridReader" /> + <Proxy group="sources" name="XMLRectilinearGridReader" /> + <Proxy group="sources" name="XMLPPolyDataReader" /> + <Proxy group="sources" name="XMLPUnstructuredGridReader" /> + <Proxy group="sources" name="XMLPImageDataReader" /> + <Proxy group="sources" name="XMLPStructuredGridReader" /> + <Proxy group="sources" name="XMLPRectilinearGridReader" /> + <Proxy group="sources" name="XMLMultiBlockDataReader" /> + <Proxy group="sources" name="XMLHierarchicalBoxDataReader" /> + <Proxy group="sources" name="LegacyVTKFileReader" /> + <Proxy group="sources" name="pvtkfile" /> + <Proxy group="sources" name="ensight" /> + <Proxy group="sources" name="ensightMS" /> + <Proxy group="sources" name="netCDFReader" /> + <Proxy group="sources" name="byureader" /> + <Proxy group="sources" name="XdmfReader2" /> + <Proxy group="sources" name="pdbreader" /> + <Proxy group="sources" name="xyzreader" /> + <Proxy group="sources" name="P3DReader" /> + <Proxy group="sources" name="spcthreader" /> + <Proxy group="sources" name="SPCTHRestartReader" /> + <Proxy group="sources" name="DEMReader" /> + <Proxy group="sources" name="vrmlreader" /> + <Proxy group="sources" name="plyreader" /> + <Proxy group="sources" name="stlreader" /> + <Proxy group="sources" name="gaussiancubereader" /> + <Proxy group="sources" name="ImageReader" /> + <Proxy group="sources" name="popreader"/> + <Proxy group="sources" name="AVSucdSeriesReader" /> + <Proxy group="sources" name="Meta Image Proxy" /> + <Proxy group="sources" name="Facet Proxy" /> + <Proxy group="sources" name="PNGReader" /> + <Proxy group="sources" name="TIFFReader" /> + <Proxy group="sources" name="PhastaReader" /> + <Proxy group="sources" name="SESAMEReader" /> + <Proxy group="sources" name="CSVReader" /> + <Proxy group="sources" name="MFIXReader" /> + <Proxy group="sources" name="FLUENTReader" /> + <Proxy group="sources" name="OpenFOAMReader" /> + <Proxy group="sources" name="CosmoReader" /> + <Proxy group="sources" name="SiloReader"/> + <Proxy group="sources" name="ExodusIIReader" /> + <Proxy group="sources" name="ExodusRestartReader" /> + <Proxy group="sources" name="SLACReader" /> + <Proxy group="sources" name="SLACParticleReader" /> + <Proxy group="sources" name="ParticleReader" /> +</ParaViewReaders> diff --git a/Examples/CustomApplications/Clone2/ParaViewSources.xml b/Examples/CustomApplications/Clone2/ParaViewSources.xml new file mode 100644 index 0000000000..a2796a1180 --- /dev/null +++ b/Examples/CustomApplications/Clone2/ParaViewSources.xml @@ -0,0 +1,27 @@ +<ParaViewSources> + <Proxy group="sources" name="GlyphSource2D" /> + <Proxy group="sources" name="VectorText" /> + <Proxy group="sources" name="TimeToTextConvertorSource" /> + <Proxy group="sources" name="ArrowSource" /> + <Proxy group="sources" name="Axes" /> + <Proxy group="sources" name="CubeSource" /> + <Proxy group="sources" name="ConeSource" /> + <Proxy group="sources" name="CylinderSource" /> + <Proxy group="sources" name="DataObjectGenerator" /> + <Proxy group="sources" name="DiskSource" /> + <Proxy group="sources" name="HierarchicalFractal" /> + <Proxy group="sources" name="LineSource" /> + <Proxy group="sources" name="ImageMandelbrotSource" /> + <Proxy group="sources" name="OctreeFractal" /> + <Proxy group="sources" name="OutlineSource" /> + <Proxy group="sources" name="PlaneSource" /> + <Proxy group="sources" name="PointSource" /> + <Proxy group="sources" name="ProgrammableSource" /> + <Proxy group="sources" name="SphereSource" /> + <Proxy group="sources" name="SplineSource" /> + <Proxy group="sources" name="SuperquadricSource" /> + <Proxy group="sources" name="TextSource" /> + <Proxy group="sources" name="TimeSource" /> + <Proxy group="sources" name="Ruler" /> + <Proxy group="sources" name="RTAnalyticSource" /> +</ParaViewSources> diff --git a/Examples/CustomApplications/Clone2/ParaViewWriters.xml b/Examples/CustomApplications/Clone2/ParaViewWriters.xml new file mode 100644 index 0000000000..46f0ffbc01 --- /dev/null +++ b/Examples/CustomApplications/Clone2/ParaViewWriters.xml @@ -0,0 +1,26 @@ +<ParaViewWriters> + <Proxy group="writers" name="XMLPVDWriter" /> + <Proxy group="writers" name="XMLPolyDataWriter" /> + <Proxy group="writers" name="XMLUnstructuredGridWriter" /> + <Proxy group="writers" name="XMLStructuredGridWriter" /> + <Proxy group="writers" name="XMLRectilinearGridWriter" /> + <Proxy group="writers" name="XMLImageDataWriter" /> + <Proxy group="writers" name="XMLPPolyDataWriter" /> + <Proxy group="writers" name="XMLPUnstructuredGridWriter" /> + <Proxy group="writers" name="XMLPStructuredGridWriter" /> + <Proxy group="writers" name="XMLPRectilinearGridWriter"/> + <Proxy group="writers" name="XMLPImageDataWriter" /> + <Proxy group="writers" name="XMLMultiBlockDataWriter" /> + <Proxy group="writers" name="XMLHierarchicalBoxDataWriter" /> + <Proxy group="writers" name="DataSetWriter" /> + <Proxy group="writers" name="PDataSetWriter" /> + <Proxy group="writers" name="PPLYWriter" /> + <Proxy group="writers" name="PSTLWriter" /> + <Proxy group="writers" name="MetaImageWriter" /> + <Proxy group="writers" name="PNGWriter" /> + <Proxy group="writers" name="XdmfWriter"/> + <Proxy group="writers" name="ExodusIIWriter" /> + <Proxy group="writers" name="EnSightWriter" /> + <Proxy group="writers" name="CSVWriter" /> + <Proxy group="writers" name="DataSetCSVWriter" /> +</ParaViewWriters> diff --git a/Examples/CustomApplications/Clone2/myMainWindow.cxx b/Examples/CustomApplications/Clone2/myMainWindow.cxx new file mode 100644 index 0000000000..5e152b9fc3 --- /dev/null +++ b/Examples/CustomApplications/Clone2/myMainWindow.cxx @@ -0,0 +1,158 @@ +/*========================================================================= + + Program: ParaView + Module: myMainWindow.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 "myMainWindow.h" +#include "ui_myMainWindow.h" + +#include "pqHelpReaction.h" +#include "pqObjectInspectorWidget.h" +#include "pqParaViewBehaviors.h" +#include "pqParaViewMenuBuilders.h" +#include "pqPluginManager.h" +#include "pqDefaultViewBehavior.h" +#include "pqAlwaysConnectedBehavior.h" +#include "pqDeleteBehavior.h" +#include "pqAutoLoadPluginXMLBehavior.h" +#include "pqApplicationCore.h" +#include "pqStandardViewModules.h" +#include "pqPVNewSourceBehavior.h" + +#include <QToolBar> +#include <QList> +#include <QAction> + +#include "pqMainControlsToolbar.h" +#include "pqRepresentationToolbar.h" +#include "pqAxesToolbar.h" +#include "pqSetName.h" +#include "pqLoadDataReaction.h" + + +class myMainWindow::pqInternals : public Ui::pqClientMainWindow +{ +}; + +//----------------------------------------------------------------------------- +myMainWindow::myMainWindow() +{ + this->Internals = new pqInternals(); + this->Internals->setupUi(this); + + // Setup default GUI layout. + + // 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); + + // Enable automatic creation of representation on accept. + this->Internals->proxyTabWidget->setShowOnAccept(true); + + // Enable help for from the object inspector. + QObject::connect(this->Internals->proxyTabWidget->getObjectInspector(), + SIGNAL(helpRequested(QString)), + this, SLOT(showHelpForProxy(const QString&))); + + // Populate application menus with actions. +#if 0 + pqParaViewMenuBuilders::buildFileMenu(*this->Internals->menu_File); +#else + QList<QAction *> qa= this->Internals->menu_File->actions(); + QAction *mqa = qa.at(0); + new pqLoadDataReaction(mqa); +#endif + + pqParaViewMenuBuilders::buildEditMenu(*this->Internals->menu_Edit); + + // Populate sources menu. + pqParaViewMenuBuilders::buildSourcesMenu(*this->Internals->menuSources, this); + + // Populate filters menu. + pqParaViewMenuBuilders::buildFiltersMenu(*this->Internals->menuFilters, this); + + // Populate Tools menu. + pqParaViewMenuBuilders::buildToolsMenu(*this->Internals->menuTools); + + + // Populate toolbars +#if 0 + pqParaViewMenuBuilders::buildToolbars(*this); +#else + QToolBar* mainToolBar = new pqMainControlsToolbar(this) + << pqSetName("MainControlsToolbar"); + mainToolBar->layout()->setSpacing(0); + this->addToolBar(Qt::TopToolBarArea, mainToolBar); + + QToolBar* reprToolbar = new pqRepresentationToolbar(this) + << pqSetName("representationToolbar"); + reprToolbar->layout()->setSpacing(0); + this->addToolBar(Qt::TopToolBarArea, reprToolbar); + + QToolBar* axesToolbar = new pqAxesToolbar(this) + << pqSetName("axesToolbar"); + axesToolbar->layout()->setSpacing(0); + this->addToolBar(Qt::TopToolBarArea, axesToolbar); +#endif + + // Setup the View menu. This must be setup after all toolbars and dockwidgets + // have been created. + pqParaViewMenuBuilders::buildViewMenu(*this->Internals->menu_View, *this); + + // Setup the help menu. + pqParaViewMenuBuilders::buildHelpMenu(*this->Internals->menu_Help); + + // Final step, define application behaviors. Since we want all ParaView + // behaviors, we use this convenience method. +#if 0 + new pqParaViewBehaviors(this, this); +#else + pqPluginManager* pgm = pqApplicationCore::instance()->getPluginManager(); + pgm->addInterface(new pqStandardViewModules(pgm)); + new pqDefaultViewBehavior(this); + new pqAlwaysConnectedBehavior(this); + new pqPVNewSourceBehavior(this); + new pqDeleteBehavior(this); + new pqAutoLoadPluginXMLBehavior(this); +#endif +} + +//----------------------------------------------------------------------------- +myMainWindow::~myMainWindow() +{ + delete this->Internals; +} + + +//----------------------------------------------------------------------------- +void myMainWindow::showHelpForProxy(const QString& proxyname) +{ + pqHelpReaction::showHelp( + QString("qthelp://paraview.org/paraview/%1.html").arg(proxyname)); +} diff --git a/Examples/CustomApplications/Clone2/myMainWindow.h b/Examples/CustomApplications/Clone2/myMainWindow.h new file mode 100644 index 0000000000..de9b52a3a7 --- /dev/null +++ b/Examples/CustomApplications/Clone2/myMainWindow.h @@ -0,0 +1,59 @@ +/*========================================================================= + + Program: ParaView + Module: myMainWindow.h + + 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. + +========================================================================*/ +#ifndef __myMainWindow_h +#define __myMainWindow_h + +#include <QMainWindow> + +/// MainWindow for the default ParaView application. +class myMainWindow : public QMainWindow +{ + Q_OBJECT + typedef QMainWindow Superclass; +public: + myMainWindow(); + ~myMainWindow(); + +protected slots: + void showHelpForProxy(const QString& proxyname); + +private: + myMainWindow(const myMainWindow&); // Not implemented. + void operator=(const myMainWindow&); // Not implemented. + + class pqInternals; + pqInternals* Internals; +}; + +#endif + + diff --git a/Examples/CustomApplications/Clone2/myMainWindow.ui b/Examples/CustomApplications/Clone2/myMainWindow.ui new file mode 100644 index 0000000000..4fd5e14c9b --- /dev/null +++ b/Examples/CustomApplications/Clone2/myMainWindow.ui @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqClientMainWindow</class> + <widget class="QMainWindow" name="pqClientMainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>970</width> + <height>700</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout"> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="pqViewManager" name="MultiViewManager" native="true"/> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>970</width> + <height>22</height> + </rect> + </property> + <widget class="QMenu" name="menu_File"> + <property name="title"> + <string>&File</string> + </property> + <addaction name="actionOpen"/> + </widget> + <widget class="QMenu" name="menuSources"> + <property name="title"> + <string>&Sources</string> + </property> + </widget> + <widget class="QMenu" name="menuFilters"> + <property name="title"> + <string>&Filters</string> + </property> + </widget> + <widget class="QMenu" name="menu_Edit"> + <property name="title"> + <string>&Edit</string> + </property> + </widget> + <widget class="QMenu" name="menu_View"> + <property name="title"> + <string>&View</string> + </property> + </widget> + <widget class="QMenu" name="menuTools"> + <property name="title"> + <string>&Tools</string> + </property> + </widget> + <widget class="QMenu" name="menu_Help"> + <property name="title"> + <string>&Help</string> + </property> + </widget> + <widget class="QMenu" name="menu_Macros"> + <property name="title"> + <string>&Macros</string> + </property> + </widget> + <addaction name="menu_File"/> + <addaction name="menu_Edit"/> + <addaction name="menu_View"/> + <addaction name="menuSources"/> + <addaction name="menuFilters"/> + <addaction name="menuTools"/> + <addaction name="menu_Macros"/> + <addaction name="menu_Help"/> + </widget> + <widget class="pqStatusBar" name="statusbar"/> + <widget class="QDockWidget" name="proxyTabDock"> + <property name="allowedAreas"> + <set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Object Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="pqProxyTabWidget" name="proxyTabWidget"/> + </widget> + <action name="actionOpen"> + <property name="text"> + <string>Open</string> + </property> + </action> + </widget> + <customwidgets> + <customwidget> + <class>pqProxyTabWidget</class> + <extends>QWidget</extends> + <header>pqProxyTabWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqViewManager</class> + <extends>QWidget</extends> + <header>pqViewManager.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqStatusBar</class> + <extends>QStatusBar</extends> + <header>pqStatusBar.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/Examples/CustomApplications/Demo0/CMakeLists.txt b/Examples/CustomApplications/Demo0/CMakeLists.txt new file mode 100644 index 0000000000..110e1a312a --- /dev/null +++ b/Examples/CustomApplications/Demo0/CMakeLists.txt @@ -0,0 +1,9 @@ +SET (SOURCE_FILES + DemoApp0.cxx +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) + +ADD_EXECUTABLE(DemoApp0 ${SOURCE_FILES} ${MOC_SRCS} ${UI_BUILT_SOURCES}) +TARGET_LINK_LIBRARIES(DemoApp0 pqCore ${QT_LIBRARIES} ) diff --git a/Examples/CustomApplications/Demo0/DemoApp0.cxx b/Examples/CustomApplications/Demo0/DemoApp0.cxx new file mode 100644 index 0000000000..9ec9c3848e --- /dev/null +++ b/Examples/CustomApplications/Demo0/DemoApp0.cxx @@ -0,0 +1,12 @@ +#include <QApplication> +#include "pqApplicationCore.h" +#include <QMainWindow> + +int main(int argc, char** argv) +{ + QApplication app(argc, argv); + pqApplicationCore appCore(argc, argv); + QMainWindow window; + window.show(); + return app.exec(); +} diff --git a/Examples/CustomApplications/Demo1/CMakeLists.txt b/Examples/CustomApplications/Demo1/CMakeLists.txt new file mode 100644 index 0000000000..1248b0de23 --- /dev/null +++ b/Examples/CustomApplications/Demo1/CMakeLists.txt @@ -0,0 +1,24 @@ +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewBranding.cmake) +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewPlugins.cmake) + +SET (SOURCE_FILES + DemoApp1.cxx + myMainWindow.cxx + myMainWindow.h +) + +QT4_WRAP_CPP(MOC_SRCS + myMainWindow.h +) + +QT4_WRAP_UI(UI_BUILT_SOURCES + myMainWindow.ui +) + +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) + +ADD_EXECUTABLE(DemoApp1 ${SOURCE_FILES} ${MOC_SRCS} ${UI_BUILT_SOURCES}) +TARGET_LINK_LIBRARIES(DemoApp1 pqCore pqComponents pqApplicationComponents +${QT_LIBRARIES} ) diff --git a/Examples/CustomApplications/Demo1/DemoApp1.cxx b/Examples/CustomApplications/Demo1/DemoApp1.cxx new file mode 100644 index 0000000000..b64a34059b --- /dev/null +++ b/Examples/CustomApplications/Demo1/DemoApp1.cxx @@ -0,0 +1,12 @@ +#include <QApplication> +#include "pqPVApplicationCore.h" +#include "myMainWindow.h" + +int main(int argc, char** argv) +{ + QApplication app(argc, argv); + pqPVApplicationCore appCore(argc, argv); + myMainWindow window; + window.show(); + return app.exec(); +} diff --git a/Examples/CustomApplications/Demo1/myMainWindow.cxx b/Examples/CustomApplications/Demo1/myMainWindow.cxx new file mode 100644 index 0000000000..5a4ee63429 --- /dev/null +++ b/Examples/CustomApplications/Demo1/myMainWindow.cxx @@ -0,0 +1,73 @@ +/*========================================================================= + + Program: ParaView + Module: myMainWindow.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 "myMainWindow.h" +#include "ui_myMainWindow.h" + +#include "pqApplicationCore.h" +#include "pqPluginManager.h" +#include "pqStandardViewModules.h" +#include "pqRenderView.h" +#include "pqActiveObjects.h" +#include "pqObjectBuilder.h" +#include "pqServerResource.h" + +//----------------------------------------------------------------------------- +myMainWindow::myMainWindow(QWidget* parentObject, + Qt::WindowFlags wflags) : Superclass(parentObject, wflags) +{ + Ui::myMainWindow ui; + ui.setupUi(this); + + // Get access to the for standard paraview views. + pqPluginManager* pgm = pqApplicationCore::instance()->getPluginManager(); + pgm->addInterface(new pqStandardViewModules(pgm)); + + // Make a connection to the builtin server + pqApplicationCore* core = pqApplicationCore::instance(); + core->getObjectBuilder()->createServer(pqServerResource("builtin:")); + + // Create render view + pqRenderView* view = qobject_cast<pqRenderView*>( + pqApplicationCore::instance()->getObjectBuilder()->createView( + pqRenderView::renderViewType(), + pqActiveObjects::instance().activeServer())); + pqActiveObjects::instance().setActiveView(view); + + // Set it as the central widget + this->setCentralWidget(view->getWidget()); +} + + +//----------------------------------------------------------------------------- +myMainWindow::~myMainWindow() +{ +} diff --git a/Examples/CustomApplications/Demo1/myMainWindow.h b/Examples/CustomApplications/Demo1/myMainWindow.h new file mode 100644 index 0000000000..4cced549c5 --- /dev/null +++ b/Examples/CustomApplications/Demo1/myMainWindow.h @@ -0,0 +1,53 @@ +/*========================================================================= + + Program: ParaView + Module: myMainWindow.h + + 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. + +========================================================================*/ +#ifndef __myMainWindow_h +#define __myMainWindow_h + +#include <QMainWindow> + +class myMainWindow : public QMainWindow +{ + Q_OBJECT + typedef QMainWindow Superclass; + +public: + myMainWindow(QWidget *parent = 0, Qt::WindowFlags flags=0); + ~myMainWindow(); + +protected slots: + +private: + Q_DISABLE_COPY(myMainWindow) +}; + +#endif + diff --git a/Examples/CustomApplications/Demo1/myMainWindow.ui b/Examples/CustomApplications/Demo1/myMainWindow.ui new file mode 100644 index 0000000000..9d3dc8ffda --- /dev/null +++ b/Examples/CustomApplications/Demo1/myMainWindow.ui @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>myMainWindow</class> + <widget class="QMainWindow" name="myMainWindow"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>559</width> + <height>518</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"/> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Examples/CustomApplications/ParticlesViewer/CMakeLists.txt b/Examples/CustomApplications/ParticlesViewer/CMakeLists.txt new file mode 100644 index 0000000000..2ec095972c --- /dev/null +++ b/Examples/CustomApplications/ParticlesViewer/CMakeLists.txt @@ -0,0 +1,48 @@ +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewBranding.cmake) +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewPlugins.cmake) + +# This application demostrates following concepts: +# * Building user interface through a plugin +# * Loading startup plugins +# * Changing default ParaView behavior for creating representations + +SET (SOURCE_FILES + ParticlesViewerStarter.cxx + ParticlesViewerDisplayPolicy.cxx +) + +QT4_WRAP_CPP(MOC_SRCS + ParticlesViewerStarter.h + ParticlesViewerDisplayPolicy.h +) + +QT4_WRAP_UI(UI_BUILT_SOURCES + ParticlesViewerMainWindow.ui +) + +ADD_PARAVIEW_AUTO_START(IFACES IFACE_SRCS + CLASS_NAME ParticlesViewerStarter + STARTUP startApplication + SHUTDOWN stopApplication) + +ADD_PARAVIEW_PLUGIN(ParticlesViewerPlugin "1.0" + GUI_INTERFACES ${IFACES} + GUI_SOURCES ${IFACE_SRCS} ${SOURCE_FILES} ${MOC_SRCS} ${UI_BUILT_SOURCES}) + +TARGET_LINK_LIBRARIES(ParticlesViewerPlugin pqApplicationComponents) + +#------------------------------------------------------------------------------ +# Build the client +build_paraview_client(particles_viewer + TITLE "Particles Viewer (ParaView-based Example Application)" + ORGANIZATION "Particles Viewer Coorporation" + VERSION_MAJOR 1 + VERSION_MINOR 0 + VERSION_PATCH 0 + REQUIRED_PLUGINS ParticlesViewerPlugin + CSCS_PointSprite_Plugin + GUI_CONFIGURATION_XMLS + ${CMAKE_CURRENT_SOURCE_DIR}/SupportedReader.xml +) + + diff --git a/Applications/Client/ProcessModuleGUIHelper.h b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.cxx similarity index 60% rename from Applications/Client/ProcessModuleGUIHelper.h rename to Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.cxx index 8313db9c77..75fae7a84f 100644 --- a/Applications/Client/ProcessModuleGUIHelper.h +++ b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.cxx @@ -1,7 +1,7 @@ /*========================================================================= Program: ParaView -Module: ProcessModuleGUIHelper.h + Module: ParticlesViewerDisplayPolicy.cxx Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. All rights reserved. @@ -29,31 +29,26 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =========================================================================*/ -#ifndef __ProcessModuleGUIHelper_h -#define __ProcessModuleGUIHelper_h +#include "ParticlesViewerDisplayPolicy.h" -#include <pqClientProcessModuleGUIHelper.h> +#include "pqApplicationCore.h" +#include "pqObjectBuilder.h" +#include "pqSMAdaptor.h" +#include "pqDataRepresentation.h" +#include "vtkSMProxy.h" -class ProcessModuleGUIHelper : public pqClientProcessModuleGUIHelper +//----------------------------------------------------------------------------- +pqDataRepresentation* ParticlesViewerDisplayPolicy::newRepresentation( + pqOutputPort* port, pqView* view) const { -public: - static ProcessModuleGUIHelper* New(); - vtkTypeRevisionMacro(ProcessModuleGUIHelper, pqClientProcessModuleGUIHelper); - void PrintSelf(ostream& os, vtkIndent indent); - - /// Start the GUI event loop. - virtual int RunGUIStart(int argc, char** argv, int numServerProcs, int myId); - - /// postAppExec does everything after the appExec - virtual int postAppExec() { return pqClientProcessModuleGUIHelper::postAppExec(); } - -protected: - ProcessModuleGUIHelper(); - ~ProcessModuleGUIHelper(); - -private: - ProcessModuleGUIHelper(const ProcessModuleGUIHelper&); // Not implemented. - void operator=(const ProcessModuleGUIHelper&); // Not implemented. -}; - -#endif + pqDataRepresentation* repr = pqApplicationCore::instance()->getObjectBuilder()-> + createDataRepresentation(port, view); + if (repr) + { + pqSMAdaptor::setEnumerationProperty( + repr->getProxy()->GetProperty("Representation"), + "Point Sprite"); + repr->getProxy()->UpdateVTKObjects(); + } + return repr; +} diff --git a/Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.h b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.h new file mode 100644 index 0000000000..9606dce2f4 --- /dev/null +++ b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerDisplayPolicy.h @@ -0,0 +1,53 @@ +/*========================================================================= + + Program: ParaView + Module: ParticlesViewerDisplayPolicy.h + + 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. + +========================================================================*/ +#ifndef __ParticlesViewerDisplayPolicy_h +#define __ParticlesViewerDisplayPolicy_h + +#include "pqDisplayPolicy.h" + +/// Display policy defines the application specific policy +/// for creating display proxies. +class ParticlesViewerDisplayPolicy : public pqDisplayPolicy +{ + Q_OBJECT + typedef pqDisplayPolicy Superclass; +public: + ParticlesViewerDisplayPolicy(QObject* p) : Superclass(p) {} + +protected: + /// Create a new representation. port and view cannot be null at this point. + virtual pqDataRepresentation* newRepresentation(pqOutputPort* port, + pqView* view) const; +}; + +#endif + diff --git a/Examples/CustomApplications/ParticlesViewer/ParticlesViewerMainWindow.ui b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerMainWindow.ui new file mode 100644 index 0000000000..0328d0652e --- /dev/null +++ b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerMainWindow.ui @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ParticlesViewerMainWindow</class> + <widget class="QMainWindow" name="ParticlesViewerMainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>640</width> + <height>480</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="pqViewManager" name="MultiViewManager" native="true"/> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>640</width> + <height>27</height> + </rect> + </property> + <widget class="QMenu" name="menu_File"> + <property name="title"> + <string>&File</string> + </property> + <addaction name="action_Open_Dataset"/> + <addaction name="action_Exit"/> + </widget> + <widget class="QMenu" name="menu_View"> + <property name="title"> + <string>&View</string> + </property> + </widget> + <addaction name="menu_File"/> + <addaction name="menu_View"/> + </widget> + <widget class="QStatusBar" name="statusbar"/> + <widget class="QDockWidget" name="dockWidget"> + <property name="windowTitle"> + <string>Pipeline Browser</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="pqPipelineBrowserWidget" name="pipelineBrowser"/> + </widget> + <widget class="QDockWidget" name="dockWidget_2"> + <property name="windowTitle"> + <string>Object Inspector</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="pqProxyTabWidget" name="objectInspector"/> + </widget> + <widget class="pqAxesToolbar" name="axesToolbar"> + <property name="windowTitle"> + <string>Axes Controls</string> + </property> + <attribute name="toolBarArea"> + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak"> + <bool>false</bool> + </attribute> + </widget> + <action name="action_Open_Dataset"> + <property name="text"> + <string>&Open Dataset</string> + </property> + </action> + <action name="action_Exit"> + <property name="text"> + <string>&Exit</string> + </property> + <property name="shortcut"> + <string>Ctrl+Q</string> + </property> + </action> + </widget> + <customwidgets> + <customwidget> + <class>pqPipelineBrowserWidget</class> + <extends>QWidget</extends> + <header>pqPipelineBrowserWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqProxyTabWidget</class> + <extends>QWidget</extends> + <header>pqProxyTabWidget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>pqAxesToolbar</class> + <extends>QToolBar</extends> + <header>pqAxesToolbar.h</header> + </customwidget> + <customwidget> + <class>pqViewManager</class> + <extends>QWidget</extends> + <header>pqViewManager.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.cxx b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.cxx new file mode 100644 index 0000000000..ef141ea6da --- /dev/null +++ b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.cxx @@ -0,0 +1,80 @@ +/*========================================================================= + + Program: ParaView + Module: ParticlesViewerStarter.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 "ParticlesViewerStarter.h" +#include "ui_ParticlesViewerMainWindow.h" + +#include "pqCoreUtilities.h" +#include "pqApplicationCore.h" +#include "pqLoadDataReaction.h" +#include "pqParaViewBehaviors.h" +#include "pqParaViewMenuBuilders.h" +#include "ParticlesViewerDisplayPolicy.h" + +//----------------------------------------------------------------------------- +ParticlesViewerStarter::ParticlesViewerStarter(QObject* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +void ParticlesViewerStarter::startApplication() +{ + QMainWindow* window = + qobject_cast<QMainWindow*>(pqCoreUtilities::mainWidget()); + Q_ASSERT(window != 0); + + Ui::ParticlesViewerMainWindow ui; + ui.setupUi(window); + + // Enable automatic creation of representation on accept. + ui.objectInspector->setShowOnAccept(true); + + new pqLoadDataReaction(ui.action_Open_Dataset); + QObject::connect(ui.action_Exit, SIGNAL(triggered()), + pqApplicationCore::instance(), SLOT(quit())); + + pqApplicationCore::instance()->setDisplayPolicy( + new ParticlesViewerDisplayPolicy(this)); + + pqParaViewMenuBuilders::buildViewMenu(*ui.menu_View, *window); + + // Final step, define application behaviors. Since we want all ParaView + // behaviors, we use this convenience method. + new pqParaViewBehaviors(window, window); +} + +//----------------------------------------------------------------------------- +void ParticlesViewerStarter::stopApplication() +{ +} + +//----------------------------------------------------------------------------- diff --git a/Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.h b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.h new file mode 100644 index 0000000000..6c002688b1 --- /dev/null +++ b/Examples/CustomApplications/ParticlesViewer/ParticlesViewerStarter.h @@ -0,0 +1,55 @@ +/*========================================================================= + + Program: ParaView + Module: ParticlesViewerStarter.h + + 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. + +========================================================================*/ +#ifndef __ParticlesViewerStarter_h +#define __ParticlesViewerStarter_h + +#include <QObject> + +class ParticlesViewerStarter : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + ParticlesViewerStarter(QObject* parent=0); + + // Callback for shutdown. + void startApplication(); + + // Callback for startup. + void stopApplication(); +private: + Q_DISABLE_COPY(ParticlesViewerStarter) +}; + +#endif + + diff --git a/Examples/CustomApplications/ParticlesViewer/README.txt b/Examples/CustomApplications/ParticlesViewer/README.txt new file mode 100644 index 0000000000..506a5557c7 --- /dev/null +++ b/Examples/CustomApplications/ParticlesViewer/README.txt @@ -0,0 +1,20 @@ +This example demonstrates how to create specialized applications using the +ParaView's application development framework. + +In this example, we are creating a specialized visualization application that +can be used to look at the point-sets. It's basically a stripped down version of +ParaView that allows reading a small sub-set of datasets (*.vtk, *.vtp, *.pvd) +and then displays the points using the point-sprite plugin (distributed with +ParaView). + +This example demonstrates the following: +* Building user-interface using a plugin (alternative is to write a new + QMainWindow subclass). + - Uses a small set of GUI components used by ParaView (pipeline browser, + object inspector, and axes controls toolbar) all defined in the UI file + itself. + - Specifying set of supported readers. +* Loading required plugins when application startups. +* Changing properties of representations created by default using + pqDisplayPolicy. + diff --git a/Examples/CustomApplications/ParticlesViewer/SupportedReader.xml b/Examples/CustomApplications/ParticlesViewer/SupportedReader.xml new file mode 100644 index 0000000000..c8904e4912 --- /dev/null +++ b/Examples/CustomApplications/ParticlesViewer/SupportedReader.xml @@ -0,0 +1,5 @@ +<ParaViewReaders> + <Proxy group="sources" name="XMLPolyDataReader" /> + <Proxy group="sources" name="LegacyVTKFileReader" /> + <Proxy group="sources" name="PVDReader" /> +</ParaViewReaders> diff --git a/Examples/CustomApplications/Spreadsheet/CMakeLists.txt b/Examples/CustomApplications/Spreadsheet/CMakeLists.txt new file mode 100644 index 0000000000..a37d62b51a --- /dev/null +++ b/Examples/CustomApplications/Spreadsheet/CMakeLists.txt @@ -0,0 +1,35 @@ +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewBranding.cmake) +INCLUDE(${ParaView_SOURCE_DIR}/CMake/ParaViewPlugins.cmake) + +SET (SOURCE_FILES + SpreadSheetMainWindow.cxx + SpreadSheetMainWindow.h +) + +QT4_WRAP_CPP(MOC_SRCS + SpreadSheetMainWindow.h +) + +QT4_WRAP_UI(UI_BUILT_SOURCES + SpreadSheetMainWindow.ui +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) + +#------------------------------------------------------------------------------ +# Build the client +build_paraview_client(spreadsheet + TITLE "Raw Data Viewer (ParaView-based Example Application)" + ORGANIZATION "Kitware Inc" + VERSION_MAJOR 1 + VERSION_MINOR 0 + VERSION_PATCH 0 + PVMAIN_WINDOW SpreadSheetMainWindow + PVMAIN_WINDOW_INCLUDE SpreadSheetMainWindow.h + GUI_CONFIGURATION_XMLS + ${CMAKE_CURRENT_SOURCE_DIR}/SupportedReader.xml + SOURCES ${SOURCE_FILES} ${MOC_SRCS} ${UI_BUILT_SOURCES} +) + + diff --git a/Examples/CustomApplications/Spreadsheet/README.txt b/Examples/CustomApplications/Spreadsheet/README.txt new file mode 100644 index 0000000000..fec5d95111 --- /dev/null +++ b/Examples/CustomApplications/Spreadsheet/README.txt @@ -0,0 +1,14 @@ +This example demonstrates how to use the ParaView application framework for +developing custom applications with work-flow different from that of ParaView's. + +This is a simple spreadsheet application that can be used to inspect raw data. +The user loads a supported datafile and we immediately allow the user to look at +the data attributes. + +This example demonstrates the following: +* Building user inferface by subclassing QMainWindow + - Interface does not use pipeline-browser/object-inspector framework at at + all. +* Unlike standard ParaView, we are not allowing user to split views or create + different types of views i.e. the central widget in the MainWindow is + custom-built. diff --git a/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.cxx b/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.cxx new file mode 100644 index 0000000000..4c901b6da1 --- /dev/null +++ b/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.cxx @@ -0,0 +1,113 @@ +/*========================================================================= + + Program: ParaView + Module: SpreadSheetMainWindow.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 "SpreadSheetMainWindow.h" +#include "ui_SpreadSheetMainWindow.h" + +#include "pqActiveObjects.h" +#include "pqActiveObjects.h" +#include "pqAlwaysConnectedBehavior.h" +#include "pqApplicationCore.h" +#include "pqDisplayPolicy.h" +#include "pqLoadDataReaction.h" +#include "pqObjectBuilder.h" +#include "pqOutputPort.h" +#include "pqPersistentMainWindowStateBehavior.h" +#include "pqPipelineSource.h" +#include "pqPluginManager.h" +#include "pqSpreadSheetViewDecorator.h" +#include "pqSpreadSheetView.h" +#include "pqStandardViewModules.h" +#include "pqRecentFilesMenu.h" + +//----------------------------------------------------------------------------- +SpreadSheetMainWindow::SpreadSheetMainWindow(QWidget* parentObject, + Qt::WindowFlags wflags) : Superclass(parentObject, wflags) +{ + Ui::SpreadSheetMainWindow ui; + ui.setupUi(this); + + // Register ParaView interfaces. + pqPluginManager* pgm = pqApplicationCore::instance()->getPluginManager(); + + // * adds support for standard paraview views. + pgm->addInterface(new pqStandardViewModules(pgm)); + + // Define default behaviors - create only small subset, since this application + // is not really a ParaView-like application at all. + new pqAlwaysConnectedBehavior(this); + new pqPersistentMainWindowStateBehavior(this); + + /// We do need the recent files menu, so set it up. + new pqRecentFilesMenu(*ui.menuRecent_Datasets, ui.menuRecent_Datasets); + + // Create spread-sheet view and set it as the central Widget. + pqSpreadSheetView* view = qobject_cast<pqSpreadSheetView*>( + pqApplicationCore::instance()->getObjectBuilder()->createView( + pqSpreadSheetView::spreadsheetViewType(), + pqActiveObjects::instance().activeServer())); + this->setCentralWidget(view->getWidget()); + new pqSpreadSheetViewDecorator(view); + + pqActiveObjects::instance().setActiveView(view); + + // Reactions + new pqLoadDataReaction(ui.action_Open_Dataset); + QObject::connect(ui.action_Exit, SIGNAL(triggered()), + pqApplicationCore::instance(), SLOT(quit())); + + // We need to destroy the previously opened source and show the new one + // every time a new source is created. + QObject::connect(pqApplicationCore::instance()->getObjectBuilder(), + SIGNAL(sourceCreated(pqPipelineSource*)), + this, SLOT(showData(pqPipelineSource*))); +} + + +//----------------------------------------------------------------------------- +SpreadSheetMainWindow::~SpreadSheetMainWindow() +{ +} + +//----------------------------------------------------------------------------- +void SpreadSheetMainWindow::showData(pqPipelineSource* source) +{ + pqActiveObjects& activeObjects = pqActiveObjects::instance(); + + if (activeObjects.activeSource()) + { + pqApplicationCore::instance()->getObjectBuilder()->destroy( + activeObjects.activeSource()); + } + activeObjects.setActiveSource(source); + pqApplicationCore::instance()->getDisplayPolicy()->setRepresentationVisibility( + source->getOutputPort(0), activeObjects.activeView(), true); +} diff --git a/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.h b/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.h new file mode 100644 index 0000000000..c0a977204e --- /dev/null +++ b/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.h @@ -0,0 +1,54 @@ +/*========================================================================= + + Program: ParaView + Module: SpreadSheetMainWindow.h + + 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. + +========================================================================*/ +#ifndef __SpreadSheetMainWindow_h +#define __SpreadSheetMainWindow_h +#include <QMainWindow> + +class pqPipelineSource; + +class SpreadSheetMainWindow : public QMainWindow +{ + Q_OBJECT + typedef QMainWindow Superclass; +public: + SpreadSheetMainWindow(QWidget *parent = 0, Qt::WindowFlags flags=0); + ~SpreadSheetMainWindow(); + +protected slots: + void showData(pqPipelineSource*); + +private: + Q_DISABLE_COPY(SpreadSheetMainWindow) +}; + +#endif + diff --git a/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.ui b/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.ui new file mode 100644 index 0000000000..fafd024bb0 --- /dev/null +++ b/Examples/CustomApplications/Spreadsheet/SpreadSheetMainWindow.ui @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SpreadSheetMainWindow</class> + <widget class="QMainWindow" name="SpreadSheetMainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>559</width> + <height>518</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"/> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>559</width> + <height>27</height> + </rect> + </property> + <widget class="QMenu" name="menu_File"> + <property name="title"> + <string>&File</string> + </property> + <widget class="QMenu" name="menuRecent_Datasets"> + <property name="title"> + <string>Recent Datasets</string> + </property> + </widget> + <addaction name="action_Open_Dataset"/> + <addaction name="menuRecent_Datasets"/> + <addaction name="action_Exit"/> + </widget> + <widget class="QMenu" name="menu_Help"> + <property name="title"> + <string>&Help</string> + </property> + </widget> + <addaction name="menu_File"/> + <addaction name="menu_Help"/> + </widget> + <widget class="QStatusBar" name="statusbar"/> + <action name="action_Open_Dataset"> + <property name="text"> + <string>&Open Dataset</string> + </property> + </action> + <action name="action_Exit"> + <property name="text"> + <string>&Exit</string> + </property> + <property name="shortcut"> + <string>Ctrl+Q</string> + </property> + </action> + <action name="actionFo"> + <property name="text"> + <string>fo</string> + </property> + </action> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Examples/CustomApplications/Spreadsheet/SupportedReader.xml b/Examples/CustomApplications/Spreadsheet/SupportedReader.xml new file mode 100644 index 0000000000..c8904e4912 --- /dev/null +++ b/Examples/CustomApplications/Spreadsheet/SupportedReader.xml @@ -0,0 +1,5 @@ +<ParaViewReaders> + <Proxy group="sources" name="XMLPolyDataReader" /> + <Proxy group="sources" name="LegacyVTKFileReader" /> + <Proxy group="sources" name="PVDReader" /> +</ParaViewReaders> diff --git a/Examples/Plugins/CMakeLists.txt b/Examples/Plugins/CMakeLists.txt index 5632dcda62..1f0c808e1c 100644 --- a/Examples/Plugins/CMakeLists.txt +++ b/Examples/Plugins/CMakeLists.txt @@ -9,14 +9,15 @@ SUBDIRS ( IF(PARAVIEW_BUILD_QT_GUI) SUBDIRS( - GUIToolBar - Reader - GUIObjectPanel - GUIView - Writer Autostart DisplayPanelDecorator + DockWidget + GUIObjectPanel + GUIToolBar + GUIView + Reader SourceToolbar + Writer ) ENDIF(PARAVIEW_BUILD_QT_GUI) diff --git a/Examples/Plugins/DockWidget/CMakeLists.txt b/Examples/Plugins/DockWidget/CMakeLists.txt new file mode 100644 index 0000000000..abd12181c6 --- /dev/null +++ b/Examples/Plugins/DockWidget/CMakeLists.txt @@ -0,0 +1,16 @@ +# Example plugin demonstrating how to add a dock panel to ParaView. +# This plugin adds the panel ExampleDockPanel to the client. + +QT4_WRAP_CPP(MOC_SRCS ExampleDockPanel.h) +QT4_WRAP_UI(UI_SRCS ExampleDockPanel.ui) + +ADD_PARAVIEW_DOCK_WINDOW( + OUTIFACES + OUTSRCS + CLASS_NAME ExampleDockPanel + DOCK_AREA Right) + +ADD_PARAVIEW_PLUGIN(ExampleDockPanel "1.0" + GUI_INTERFACES ${OUTIFACES} + GUI_SOURCES ${OUTSRCS} ${MOC_SRCS} ${UI_SRCS} ExampleDockPanel.cxx) + diff --git a/Examples/Plugins/DockWidget/ExampleDockPanel.cxx b/Examples/Plugins/DockWidget/ExampleDockPanel.cxx new file mode 100644 index 0000000000..7d080310f1 --- /dev/null +++ b/Examples/Plugins/DockWidget/ExampleDockPanel.cxx @@ -0,0 +1,11 @@ +#include "ExampleDockPanel.h" +#include "ui_ExampleDockPanel.h" + +void ExampleDockPanel::constructor() +{ + this->setWindowTitle("Example Dock Panel"); + QWidget* widget = new QWidget(this); + Ui::ExampleDockPanel ui; + ui.setupUi(widget); + this->setWidget(widget); +} diff --git a/Examples/Plugins/DockWidget/ExampleDockPanel.h b/Examples/Plugins/DockWidget/ExampleDockPanel.h new file mode 100644 index 0000000000..69e638c6b3 --- /dev/null +++ b/Examples/Plugins/DockWidget/ExampleDockPanel.h @@ -0,0 +1,16 @@ + +#include <QDockWidget> + + +class ExampleDockPanel : public QDockWidget +{ + Q_OBJECT + typedef QDockWidget Superclass; +public: + ExampleDockPanel(const QString &t, QWidget* p = 0, Qt::WindowFlags f=0): + Superclass(t, p, f) { this->constructor(); } + ExampleDockPanel(QWidget *p=0, Qt::WindowFlags f=0): + Superclass(p, f) { this->constructor(); } +private: + void constructor(); +}; diff --git a/Examples/Plugins/DockWidget/ExampleDockPanel.ui b/Examples/Plugins/DockWidget/ExampleDockPanel.ui new file mode 100644 index 0000000000..4f5ccf0321 --- /dev/null +++ b/Examples/Plugins/DockWidget/ExampleDockPanel.ui @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ExampleDockPanel</class> + <widget class="QWidget" name="ExampleDockPanel"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>207</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Helvetica'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Custom Dock Panel</span></p></body></html></string> + </property> + </widget> + </item> + <item> + <widget class="QListWidget" name="listWidget"> + <item> + <property name="text"> + <string>This is dock panel</string> + </property> + </item> + <item> + <property name="text"> + <string>Loaded Using a Plugin</string> + </property> + </item> + <item> + <property name="text"> + <string/> + </property> + </item> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ParaViewConfig.cmake.in b/ParaViewConfig.cmake.in index 99b62a25d0..8bb3c3ca41 100644 --- a/ParaViewConfig.cmake.in +++ b/ParaViewConfig.cmake.in @@ -21,8 +21,13 @@ SET(PARAVIEW_LIBRARY_DIRS "@PARAVIEW_LIBRARY_DIRS@") SET(PARAVIEW_GUI_INCLUDE_DIRS "@PARAVIEW_GUI_INCLUDE_DIRS@") SET(PARAVIEW_KWSYS_INCLUDE_DIRS "@PARAVIEW_KWSYS_INCLUDE_DIRS@") -SET(PARAVIEW_GUI_CLIENT_EXECUTABLE "@PARAVIEW_GUI_CLIENT_EXECUTABLE@") SET(PARAVIEW_BATCH_EXECUTABLE "@PARAVIEW_BATCH_EXECUTABLE@") +SET(PARAVIEW_PYTHON_EXECUTABLE "@PARAVIEW_PYTHON_EXECUTABLE@") +SET(PARAVIEW_SERVER_EXECUTABLE "@PARAVIEW_SERVER_EXECUTABLE@") +SET(PARAVIEW_DATA_SERVER_EXECUTABLE "@PARAVIEW_DATA_SERVER_EXECUTABLE@") +SET(PARAVIEW_RENDER_SERVER_EXECUTABLE "@PARAVIEW_RENDER_SERVER_EXECUTABLE@") +SET(PARAVIEW_SMTESTDRIVER_EXECUTABLE "@PARAVIEW_SMTESTDRIVER_EXECUTABLE@") + SET(PARAVIEW_PROCESS_XML_EXECUTABLE "@PARAVIEW_PROCESS_XML_EXECUTABLE@") SET(PARAVIEW_SERVER_MANAGER_RESOURCES_DIRECTORY "@PARAVIEW_SERVER_MANAGER_RESOURCES_DIRECTORY@") SET(VTKCS_SOURCE_DIR "@VTKCS_SOURCE_DIR@") @@ -35,10 +40,12 @@ IF(NOT PARAVIEW_NO_LIBRARY_DEPENDS) INCLUDE("@PARAVIEW_LIBRARY_DEPENDS_FILE@") ENDIF(NOT PARAVIEW_NO_LIBRARY_DEPENDS) +SET(PARAVIEW_MACROS_CMAKE_FILE "@PARAVIEW_MACROS_CMAKE_FILE@") SET(PARAVIEW_PLUGINS_CMAKE_FILE "@PARAVIEW_PLUGINS_CMAKE_FILE@") +SET(PARAVIEW_BRANDING_CMAKE_FILE "@PARAVIEW_BRANDING_CMAKE_FILE@") SET(VTK_MAKE_INSTANTIATOR "@VTK_MAKE_INSTANTIATOR@") - SET(VTK_ENCODESTRING_EXE "@VTK_ENCODESTRING_EXE@") -INCLUDE("@PARAVIEW_PLUGIN_CONFIG_FILE@") +INCLUDE(${PARAVIEW_MACROS_CMAKE_FILE}) +INCLUDE(${PARAVIEW_PLUGINS_CMAKE_FILE}) diff --git a/Qt/ApplicationComponents/CMakeLists.txt b/Qt/ApplicationComponents/CMakeLists.txt new file mode 100644 index 0000000000..2af4061901 --- /dev/null +++ b/Qt/ApplicationComponents/CMakeLists.txt @@ -0,0 +1,302 @@ +PROJECT(pqApplicationComponents) + +INCLUDE_DIRECTORIES( + ${pqApplicationComponents_SOURCE_DIR} + ${pqApplicationComponents_BINARY_DIR} + ${pqComponents_BINARY_DIR} + ${pqComponents_SOURCE_DIR} + ${pqCore_BINARY_DIR} + ${pqCore_SOURCE_DIR} + ${VTK_INCLUDE_DIR} + ${PARAVIEW_INCLUDE_DIRS} + ${ParaView_SOURCE_DIR}/VTK/GUISupport/Qt + ${ParaView_BINARY_DIR}/VTK/GUISupport/Qt + ${ParaView_SOURCE_DIR}/VTK/GUISupport/Qt/Chart + ${ParaView_BINARY_DIR}/VTK/GUISupport/Qt/Chart + ${QtTesting_SOURCE_DIR} + ${QtTesting_BINARY_DIR} + ${QtWidgets_SOURCE_DIR} + ${QtWidgets_BINARY_DIR} + ${QtPython_BINARY_DIR} + ${QtPython_SOURCE_DIR} + ${QT_QTASSISTANTCLIENT_INCLUDE_DIR}) + +# List headers to be processed by moc +SET (MOC_HEADERS + pqAboutDialogReaction.h + pqAlwaysConnectedBehavior.h + pqAnimationTimeToolbar.h + pqApplicationSettingsReaction.h + pqAutoLoadPluginXMLBehavior.h + pqAxesToolbar.h + pqCameraLinkReaction.h + pqCameraReaction.h + pqCameraToolbar.h + pqCameraUndoRedoReaction.h + pqCategoryToolbarsBehavior.h + pqChangePipelineInputReaction.h + pqColorToolbar.h + pqCommandLineOptionsBehavior.h + pqCrashRecoveryBehavior.h + pqCreateCustomFilterReaction.h + pqDataTimeStepBehavior.h + pqDefaultMainWindow.h + pqDefaultViewBehavior.h + pqDeleteBehavior.h + pqDeleteReaction.h + pqEditCameraReaction.h + pqEditColorMapReaction.h + pqExportReaction.h + pqFiltersMenuReaction.h + pqHelpReaction.h + pqIgnoreSourceTimeReaction.h + pqListNewProxyDefinitionsBehavior.h + pqLoadDataReaction.h + pqLoadStateReaction.h + pqMainControlsToolbar.h + pqManageCustomFiltersReaction.h + pqManageLinksReaction.h + pqManagePluginsReaction.h + pqParaViewBehaviors.h + pqPersistentMainWindowStateBehavior.h + pqPluginActionGroupBehavior.h + pqPluginDockWidgetsBehavior.h + pqProxyGroupMenuManager.h + pqPVAnimationWidget.h + pqPVApplicationCore.h + pqPVNewSourceBehavior.h + pqPythonShellReaction.h + pqReaction.h + pqRepresentationToolbar.h + pqResetScalarRangeReaction.h + pqSaveAnimationGeometryReaction.h + pqSaveAnimationReaction.h + pqSaveDataReaction.h + pqSaveScreenshotReaction.h + pqSaveStateReaction.h + pqScalarBarVisibilityReaction.h + pqSelectionInspectorWidget.h + pqSelectionToolbar.h + pqServerConnectReaction.h + pqServerDisconnectReaction.h + pqSourcesMenuReaction.h + pqStandardViewFrameActionGroup.h + pqStatusBar.h + pqTestingReaction.h + pqTimerLogReaction.h + pqUndoRedoBehavior.h + pqUndoRedoReaction.h + pqVCRToolbar.h + pqViewFrameActionsBehavior.h + pqViewMenuManager.h + pqViewSettingsManager.h + pqViewSettingsReaction.h +) + +# List UI files. +SET (UI_FILES + Resources/UI/pqAxesToolbar.ui + Resources/UI/pqCameraToolbar.ui + Resources/UI/pqColorToolbar.ui + Resources/UI/pqDefaultMainWindow.ui + Resources/UI/pqEditMenuBuilder.ui + Resources/UI/pqFileMenuBuilder.ui + Resources/UI/pqMainControlsToolbar.ui + Resources/UI/pqPipelineBrowserContextMenu.ui + Resources/UI/pqSelectionToolbar.ui + Resources/UI/pqVCRToolbar.ui +) + +# List qrc files +SET (UI_RESOURCES + Resources/pqApplicationComponents.qrc +) + +# List all source files. +SET (SOURCE_FILES + pqAboutDialogReaction.cxx + pqAboutDialogReaction.h + pqAlwaysConnectedBehavior.cxx + pqAlwaysConnectedBehavior.h + pqAnimationTimeToolbar.cxx + pqAnimationTimeToolbar.h + pqApplicationSettingsReaction.cxx + pqApplicationSettingsReaction.h + pqAutoLoadPluginXMLBehavior.cxx + pqAutoLoadPluginXMLBehavior.h + pqAxesToolbar.cxx + pqAxesToolbar.h + pqCameraLinkReaction.cxx + pqCameraLinkReaction.h + pqCameraReaction.cxx + pqCameraReaction.h + pqCameraToolbar.cxx + pqCameraToolbar.h + pqCameraUndoRedoReaction.cxx + pqCameraUndoRedoReaction.h + pqChangePipelineInputReaction.cxx + pqChangePipelineInputReaction.h + pqPVApplicationCore.cxx + pqPVApplicationCore.h + pqColorToolbar.cxx + pqColorToolbar.h + pqCommandLineOptionsBehavior.cxx + pqCommandLineOptionsBehavior.h + pqCrashRecoveryBehavior.cxx + pqCrashRecoveryBehavior.h + pqCreateCustomFilterReaction.cxx + pqCreateCustomFilterReaction.h + pqDataTimeStepBehavior.cxx + pqDataTimeStepBehavior.h + pqDefaultMainWindow.cxx + pqDefaultMainWindow.h + pqDefaultViewBehavior.cxx + pqDefaultViewBehavior.h + pqDeleteBehavior.cxx + pqDeleteBehavior.h + pqDeleteReaction.cxx + pqDeleteReaction.h + pqEditColorMapReaction.cxx + pqEditColorMapReaction.h + pqExportReaction.cxx + pqExportReaction.h + pqFiltersMenuReaction.cxx + pqFiltersMenuReaction.h + pqIgnoreSourceTimeReaction.cxx + pqIgnoreSourceTimeReaction.h + pqListNewProxyDefinitionsBehavior.cxx + pqListNewProxyDefinitionsBehavior.h + pqLoadDataReaction.cxx + pqLoadDataReaction.h + pqLoadStateReaction.cxx + pqLoadStateReaction.h + pqMainControlsToolbar.cxx + pqMainControlsToolbar.h + pqManageCustomFiltersReaction.cxx + pqManageCustomFiltersReaction.h + pqManageLinksReaction.cxx + pqManageLinksReaction.h + pqManagePluginsReaction.cxx + pqManagePluginsReaction.h + pqParaViewBehaviors.cxx + pqParaViewBehaviors.h + pqParaViewMenuBuilders.cxx + pqParaViewMenuBuilders.h + pqPersistentMainWindowStateBehavior.cxx + pqPersistentMainWindowStateBehavior.h + pqPluginActionGroupBehavior.cxx + pqPluginActionGroupBehavior.h + pqPluginDockWidgetsBehavior.cxx + pqPluginDockWidgetsBehavior.h + pqProxyGroupMenuManager.cxx + pqProxyGroupMenuManager.h + pqPVAnimationWidget.cxx + pqPVAnimationWidget.h + pqPVNewSourceBehavior.cxx + pqPVNewSourceBehavior.h + pqReaction.cxx + pqReaction.h + pqRepresentationToolbar.cxx + pqRepresentationToolbar.h + pqResetScalarRangeReaction.cxx + pqResetScalarRangeReaction.h + pqSaveAnimationGeometryReaction.cxx + pqSaveAnimationGeometryReaction.h + pqSaveAnimationReaction.cxx + pqSaveAnimationReaction.h + pqSaveScreenshotReaction.cxx + pqSaveScreenshotReaction.h + pqSaveStateReaction.cxx + pqSaveStateReaction.h + pqScalarBarVisibilityReaction.cxx + pqScalarBarVisibilityReaction.h + pqSelectionInspectorWidget.cxx + pqSelectionInspectorWidget.h + pqSelectionToolbar.cxx + pqSelectionToolbar.h + pqServerConnectReaction.cxx + pqServerConnectReaction.h + pqServerDisconnectReaction.cxx + pqServerDisconnectReaction.h + pqSourcesMenuReaction.cxx + pqSourcesMenuReaction.h + pqTestingReaction.cxx + pqTestingReaction.h + pqTimerLogReaction.cxx + pqTimerLogReaction.h + pqUndoRedoReaction.cxx + pqUndoRedoReaction.h + pqUndoRedoBehavior.cxx + pqUndoRedoBehavior.h + pqVCRToolbar.cxx + pqVCRToolbar.h + pqViewMenuManager.cxx + pqViewMenuManager.h + pqViewSettingsManager.cxx + pqViewSettingsManager.h + pqViewSettingsReaction.cxx + pqViewSettingsReaction.h + pqSaveDataReaction.cxx + pqSaveDataReaction.h + pqHelpReaction.cxx + pqHelpReaction.h + pqEditCameraReaction.cxx + pqEditCameraReaction.h + pqStandardViewFrameActionGroup.cxx + pqStandardViewFrameActionGroup.h + pqViewFrameActionsBehavior.cxx + pqViewFrameActionsBehavior.h + pqCategoryToolbarsBehavior.cxx + pqCategoryToolbarsBehavior.h + pqStatusBar.cxx + pqStatusBar.h + pqPythonShellReaction.cxx + pqPythonShellReaction.h +) + +#--------------------------------------------- +CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/pqApplicationComponentsExport.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/pqApplicationComponentsExport.h") + + +QT4_WRAP_CPP(MOC_BUILT_SOURCES + ${MOC_HEADERS} +) + +QT4_WRAP_UI(UI_BUILT_SOURCES + ${UI_FILES} +) + +QT4_ADD_RESOURCES(RCS_SOURCES + ${UI_RESOURCES} +) + +SOURCE_GROUP("Resources" FILES + ${UI_RESOURCES} + ${UI_FILES} +) + +SOURCE_GROUP("Generated" FILES + ${MOC_BUILT_SOURCES} + ${RCS_SOURCES} + ${UI_BUILT_SOURCES} + ${CMAKE_CURRENT_BINARY_DIR}/pqApplicationComponentsExport.h +) + +ADD_LIBRARY(pqApplicationComponents + ${SOURCE_FILES} + ${UI_BUILT_SOURCES} + ${MOC_BUILT_SOURCES} + ${RCS_SOURCES} + ) + +TARGET_LINK_LIBRARIES(pqApplicationComponents + pqComponents + ) + +INSTALL(TARGETS pqApplicationComponents + RUNTIME DESTINATION ${PV_INSTALL_BIN_DIR} COMPONENT Runtime + LIBRARY DESTINATION ${PV_INSTALL_LIB_DIR} COMPONENT Runtime + ARCHIVE DESTINATION ${PV_INSTALL_LIB_DIR} COMPONENT Development) + + diff --git a/Qt/ApplicationComponents/Resources/UI/pqAxesToolbar.ui b/Qt/ApplicationComponents/Resources/UI/pqAxesToolbar.ui new file mode 100644 index 0000000000..fdd84a887a --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqAxesToolbar.ui @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqAxesToolbar</class> + <widget class="QToolBar" name="axesToolbar" > + <property name="enabled" > + <bool>true</bool> + </property> + <property name="windowTitle" > + <string>Center Axes Controls</string> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <attribute name="toolBarArea" > + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak" > + <bool>false</bool> + </attribute> + + <action name="actionShowOrientationAxes" > + <property name="checkable" > + <bool>true</bool> + </property> + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../pqComponents.qrc">:/pqWidgets/Icons/pqShowOrientationAxes24.png</iconset> + </property> + <property name="text" > + <string>Show Orientation Axes</string> + </property> + <property name="statusTip" > + <string>Show/Hide orientation axes</string> + </property> + </action> + + <action name="actionShowCenterAxes" > + <property name="checkable" > + <bool>true</bool> + </property> + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqShowCenterAxes24.png</iconset> + </property> + <property name="text" > + <string>Show Center</string> + </property> + <property name="statusTip" > + <string>Show/Hide center of rotation</string> + </property> + </action> + <action name="actionPickCenter" > + <property name="checkable" > + <bool>true</bool> + </property> + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqPickCenter24.png</iconset> + </property> + <property name="text" > + <string>Pick Center</string> + </property> + <property name="iconText" > + <string>Pick Center</string> + </property> + <property name="toolTip" > + <string>Pick Center</string> + </property> + <property name="statusTip" > + <string>Mouse press to pick center of rotation</string> + </property> + </action> + <action name="actionResetCenter" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqResetCenter24.png</iconset> + </property> + <property name="text" > + <string>Reset Center</string> + </property> + <property name="statusTip" > + <string>Reset center of rotation</string> + </property> + </action> + + <addaction name="actionShowOrientationAxes" /> + <addaction name="actionShowCenterAxes" /> + <addaction name="actionResetCenter" /> + <addaction name="actionPickCenter" /> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqCameraToolbar.ui b/Qt/ApplicationComponents/Resources/UI/pqCameraToolbar.ui new file mode 100644 index 0000000000..1d8ced107e --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqCameraToolbar.ui @@ -0,0 +1,181 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqCameraToolbar</class> + <widget class="QToolBar" name="cameraToolbar" > + <property name="windowTitle" > + <string>Camera Controls</string> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <attribute name="toolBarArea" > + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak" > + <bool>false</bool> + </attribute> + <action name="actionResetCamera" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqResetCamera24.png</iconset> + </property> + <property name="text" > + <string>&Reset</string> + </property> + <property name="iconText" > + <string>Reset Camera</string> + </property> + <property name="statusTip" > + <string>Reset Camera</string> + </property> + </action> + <action name="actionPositiveX" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqXPlus24.png</iconset> + </property> + <property name="text" > + <string>+X</string> + </property> + <property name="toolTip" > + <string>Set view direction to +X</string> + </property> + <property name="statusTip" > + <string>Set view direction to +X</string> + </property> + <property name="whatsThis" > + <string>Set view direction to +X</string> + </property> + </action> + <action name="actionNegativeX" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqXMinus24.png</iconset> + </property> + <property name="text" > + <string>-X</string> + </property> + <property name="toolTip" > + <string>Set view direction to -X</string> + </property> + <property name="statusTip" > + <string>Set view direction to -X</string> + </property> + <property name="whatsThis" > + <string>Set view direction to -X</string> + </property> + </action> + <action name="actionPositiveY" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqYPlus24.png</iconset> + </property> + <property name="text" > + <string>+Y</string> + </property> + <property name="toolTip" > + <string>Set view direction to +Y</string> + </property> + <property name="statusTip" > + <string>Set view direction to +Y</string> + </property> + <property name="whatsThis" > + <string>Set view direction to +Y</string> + </property> + </action> + <action name="actionNegativeY" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqYMinus24.png</iconset> + </property> + <property name="text" > + <string>-Y</string> + </property> + <property name="toolTip" > + <string>Set view direction to -Y</string> + </property> + <property name="statusTip" > + <string>Set view direction to -Y</string> + </property> + <property name="whatsThis" > + <string>Set view direction to -Y</string> + </property> + </action> + <action name="actionPositiveZ" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqZPlus24.png</iconset> + </property> + <property name="text" > + <string>+Z</string> + </property> + <property name="toolTip" > + <string>Set view direction to +Z</string> + </property> + <property name="statusTip" > + <string>Set view direction to +Z</string> + </property> + <property name="whatsThis" > + <string>Set view direction to +Z</string> + </property> + </action> + <action name="actionNegativeZ" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqZMinus24.png</iconset> + </property> + <property name="text" > + <string>-Z</string> + </property> + <property name="toolTip" > + <string>Set view direction to -Z</string> + </property> + <property name="statusTip" > + <string>Set view direction to -Z</string> + </property> + <property name="whatsThis" > + <string>Set view direction to -Z</string> + </property> + </action> + <action name="actionZoomToBox" > + <property name="checkable" > + <bool>true</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqZoomToSelection24.png</iconset> + </property> + <property name="text" > + <string>Zoom to Box</string> + </property> + <property name="statusTip" > + <string>Zoom to Box</string> + </property> + </action> + <addaction name="actionResetCamera" /> + <addaction name="actionZoomToBox" /> + <addaction name="actionPositiveX" /> + <addaction name="actionNegativeX" /> + <addaction name="actionPositiveY" /> + <addaction name="actionNegativeY" /> + <addaction name="actionPositiveZ" /> + <addaction name="actionNegativeZ" /> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqColorToolbar.ui b/Qt/ApplicationComponents/Resources/UI/pqColorToolbar.ui new file mode 100644 index 0000000000..d6e79f0ce9 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqColorToolbar.ui @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqColorToolbar</class> + <widget class="QToolBar" name="variableToolbar" > + <property name="windowTitle" > + <string>Active Variable Controls</string> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <attribute name="toolBarArea" > + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak" > + <bool>false</bool> + </attribute> + <action name="actionScalarBarVisibility" > + <property name="checkable" > + <bool>true</bool> + </property> + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqScalarBar24.png</iconset> + </property> + <property name="text" > + <string>Show Color Legend</string> + </property> + <property name="toolTip" > + <string>Toggle Color Legend Visibility</string> + </property> + <property name="statusTip" > + <string>Toggle Color Legend Visibility</string> + </property> + </action> + <action name="actionEditColorMap" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqEditColor24.png</iconset> + </property> + <property name="text" > + <string>Edit Color Map</string> + </property> + <property name="statusTip" > + <string>Edit Color Map</string> + </property> + </action> + <action name="actionResetRange" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqResetRange24.png</iconset> + </property> + <property name="text" > + <string>Reset Range</string> + </property> + <property name="toolTip" > + <string>Rescale to Data Range</string> + </property> + <property name="statusTip" > + <string>Rescale to Data Range</string> + </property> + </action> + <addaction name="actionScalarBarVisibility" /> + <addaction name="actionEditColorMap" /> + <addaction name="actionResetRange" /> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqDefaultMainWindow.ui b/Qt/ApplicationComponents/Resources/UI/pqDefaultMainWindow.ui new file mode 100644 index 0000000000..28faa4d6d4 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqDefaultMainWindow.ui @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>600</height> + </rect> + </property> + <property name="windowTitle"> + <string>ParaView - The Beast UNLEASHED !!!</string> + </property> + <widget class="QWidget" name="centralwidget"/> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>27</height> + </rect> + </property> + <widget class="QMenu" name="menu_File"> + <property name="title"> + <string>&File</string> + </property> + <addaction name="actionE_xit"/> + </widget> + <widget class="QMenu" name="menu_Help"> + <property name="title"> + <string>&Help</string> + </property> + <addaction name="action_About"/> + </widget> + <addaction name="menu_File"/> + <addaction name="menu_Help"/> + </widget> + <widget class="QStatusBar" name="statusbar"/> + <action name="actionE_xit"> + <property name="text"> + <string>E&xit</string> + </property> + <property name="shortcut"> + <string>Ctrl+Q</string> + </property> + </action> + <action name="action_About"> + <property name="text"> + <string>&About</string> + </property> + </action> + </widget> + <resources/> + <connections> + <connection> + <sender>actionE_xit</sender> + <signal>triggered()</signal> + <receiver>MainWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel"> + <x>-1</x> + <y>-1</y> + </hint> + <hint type="destinationlabel"> + <x>399</x> + <y>299</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqEditMenuBuilder.ui b/Qt/ApplicationComponents/Resources/UI/pqEditMenuBuilder.ui new file mode 100644 index 0000000000..caf7ed7907 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqEditMenuBuilder.ui @@ -0,0 +1,148 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqEditMenuBuilder</class> + <widget class="QMenu" name="pqEditMenuBuilder"> + <property name="title"> + <string>&Edit</string> + </property> + <action name="actionEditUndo"> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqUndo24.png</normaloff>:/pqWidgets/Icons/pqUndo24.png</iconset> + </property> + <property name="text"> + <string>&Undo</string> + </property> + <property name="shortcut"> + <string>Ctrl+Z</string> + </property> + </action> + <action name="actionEditRedo"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqRedo24.png</normaloff>:/pqWidgets/Icons/pqRedo24.png</iconset> + </property> + <property name="text"> + <string>&Redo</string> + </property> + <property name="shortcut"> + <string>Ctrl+R</string> + </property> + </action> + <action name="actionEditCameraUndo"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqUndoCamera24.png</normaloff>:/pqWidgets/Icons/pqUndoCamera24.png</iconset> + </property> + <property name="text"> + <string>Camera Undo</string> + </property> + <property name="shortcut"> + <string>Ctrl+B</string> + </property> + </action> + <action name="actionEditCameraRedo"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqRedoCamera24.png</normaloff>:/pqWidgets/Icons/pqRedoCamera24.png</iconset> + </property> + <property name="text"> + <string>Camera Redo</string> + </property> + <property name="shortcut"> + <string>Ctrl+F</string> + </property> + </action> + <action name="actionChangeInput"> + <property name="text"> + <string>Change &Input...</string> + </property> + <property name="iconText"> + <string>Change Input...</string> + </property> + <property name="toolTip"> + <string>Change a Filter's Input</string> + </property> + <property name="statusTip"> + <string>Change a Filter's Input</string> + </property> + </action> + <action name="actionDelete"> + <property name="icon"> + <iconset> + <normaloff/> + </iconset> + </property> + <property name="text"> + <string>&Delete</string> + </property> + <property name="statusTip"> + <string>Delete</string> + </property> + </action> + <action name="actionDelete_All"> + <property name="text"> + <string>Delete All</string> + </property> + </action> + <action name="actionIgnoreTime"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="text"> + <string>Ignore Time</string> + </property> + <property name="toolTip"> + <string>Disregard this source/filter's time from animations</string> + </property> + <property name="statusTip"> + <string>Disregard this source/filter's time from animations</string> + </property> + <property name="whatsThis"> + <string>Disregard this source/filter's time from animations</string> + </property> + </action> + <action name="actionEditViewSettings"> + <property name="text"> + <string>View Settings...</string> + </property> + </action> + <action name="actionEditSettings"> + <property name="text"> + <string>Settings...</string> + </property> + <property name="iconText"> + <string>Settings</string> + </property> + <property name="toolTip"> + <string>Settings</string> + </property> + </action> + <addaction name="actionEditUndo"/> + <addaction name="actionEditRedo"/> + <addaction name="separator"/> + <addaction name="actionEditCameraUndo"/> + <addaction name="actionEditCameraRedo"/> + <addaction name="separator"/> + <addaction name="actionChangeInput"/> + <addaction name="actionIgnoreTime"/> + <addaction name="actionDelete"/> + <addaction name="actionDelete_All"/> + <addaction name="separator"/> + <addaction name="actionEditSettings"/> + <addaction name="actionEditViewSettings"/> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqFileMenuBuilder.ui b/Qt/ApplicationComponents/Resources/UI/pqFileMenuBuilder.ui new file mode 100644 index 0000000000..911f417ac3 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqFileMenuBuilder.ui @@ -0,0 +1,133 @@ +<ui version="4.0" > + <class>pqFileMenuBuilder</class> + <widget class="QMenu" name="pqFileMenuBuilder" > + <property name="title" > + <string>&File</string> + </property> + <widget class="QMenu" name="menuRecentFiles" > + <property name="title" > + <string>Recent Files</string> + </property> + </widget> + + <action name="actionServerConnect" > + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqConnect24.png</iconset> + </property> + <property name="text" > + <string>&Connect</string> + </property> + <property name="statusTip" > + <string>Connect</string> + </property> + </action> + <action name="actionServerDisconnect" > + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqDisconnect24.png</iconset> + </property> + <property name="text" > + <string>&Disconnect</string> + </property> + <property name="statusTip" > + <string>Disconnect</string> + </property> + </action> + <action name="actionFileSaveScreenshot" > + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqCaptureScreenshot24.png</iconset> + </property> + <property name="text" > + <string>Save Screenshot</string> + </property> + </action> + <action name="actionFileSaveAnimation" > + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqSaveAnimation24.png</iconset> + </property> + <property name="text" > + <string>Save &Animation</string> + </property> + </action> + <action name="actionFileSaveData" > + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqSave24.png</iconset> + </property> + <property name="text" > + <string>Save Data</string> + </property> + <property name="shortcut" > + <string>Ctrl+S</string> + </property> + </action> + <action name="actionFileLoadServerState" > + <property name="text" > + <string>&Load State</string> + </property> + </action> + <action name="actionFileSaveServerState" > + <property name="text" > + <string>&Save State</string> + </property> + </action> + <action name="actionFileSaveGeometry" > + <property name="text" > + <string>Save &Geometry</string> + </property> + </action> + <action name="actionFileOpen" > + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqOpen24.png</iconset> + </property> + <property name="text" > + <string>&Open</string> + </property> + <property name="statusTip" > + <string>Open</string> + </property> + <property name="shortcut" > + <string>Ctrl+O</string> + </property> + </action> + <action name="actionFileExit" > + <property name="icon" > + <iconset/> + </property> + <property name="text" > + <string>E&xit</string> + </property> + <property name="statusTip" > + <string>Exit</string> + </property> + <property name="shortcut" > + <string>Ctrl+Q</string> + </property> + </action> + <action name="actionExport" > + <property name="text" > + <string>Export</string> + </property> + </action> + + <addaction name="actionFileOpen" /> + <addaction name="menuRecentFiles" /> + <addaction name="separator" /> + <addaction name="actionFileLoadServerState" /> + <addaction name="actionFileSaveServerState" /> + <addaction name="separator" /> + <addaction name="actionFileSaveData" /> + <addaction name="actionFileSaveScreenshot" /> + <addaction name="actionExport" /> + <addaction name="separator" /> + <addaction name="actionFileSaveAnimation" /> + <addaction name="actionFileSaveGeometry" /> + <addaction name="separator" /> + <addaction name="actionServerConnect" /> + <addaction name="actionServerDisconnect" /> + <addaction name="separator" /> + <addaction name="actionFileExit" /> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc" /> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqMainControlsToolbar.ui b/Qt/ApplicationComponents/Resources/UI/pqMainControlsToolbar.ui new file mode 100644 index 0000000000..cc3d58ddd1 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqMainControlsToolbar.ui @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqMainControlsToolbar</class> + <widget class="QToolBar" name="pqMainControlsToolbar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>350</width> + <height>45</height> + </rect> + </property> + <property name="windowTitle"> + <string>Main Controls</string> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <action name="actionOpenData"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqOpen24.png</normaloff>:/pqWidgets/Icons/pqOpen24.png</iconset> + </property> + <property name="text"> + <string>&Open</string> + </property> + <property name="statusTip"> + <string>Open</string> + </property> + </action> + <action name="actionSaveData"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqSave24.png</normaloff>:/pqWidgets/Icons/pqSave24.png</iconset> + </property> + <property name="text"> + <string>Save Data</string> + </property> + </action> + <action name="actionServerConnect"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqConnect24.png</normaloff>:/pqWidgets/Icons/pqConnect24.png</iconset> + </property> + <property name="text"> + <string>&Connect</string> + </property> + <property name="statusTip"> + <string>Connect</string> + </property> + </action> + <action name="actionServerDisconnect"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqDisconnect24.png</normaloff>:/pqWidgets/Icons/pqDisconnect24.png</iconset> + </property> + <property name="text"> + <string>&Disconnect</string> + </property> + <property name="statusTip"> + <string>Disconnect</string> + </property> + </action> + <action name="actionHelp"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqHelp24.png</normaloff>:/pqWidgets/Icons/pqHelp24.png</iconset> + </property> + <property name="text"> + <string>Help</string> + </property> + </action> + <action name="actionUndo"> + <property name="icon"> + <iconset> + <normaloff>:pqWidgets/Icons/pqUndo24.png</normaloff>:pqWidgets/Icons/pqUndo24.png</iconset> + </property> + <property name="text"> + <string>&Undo</string> + </property> + </action> + <action name="actionRedo"> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqRedo24.png</normaloff>:/pqWidgets/Icons/pqRedo24.png</iconset> + </property> + <property name="text"> + <string>&Redo</string> + </property> + </action> + <addaction name="actionOpenData"/> + <addaction name="actionSaveData"/> + <addaction name="separator"/> + <addaction name="actionServerConnect"/> + <addaction name="actionServerDisconnect"/> + <addaction name="separator"/> + <addaction name="actionUndo"/> + <addaction name="actionRedo"/> + <addaction name="separator"/> + <addaction name="actionHelp"/> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqPipelineBrowserContextMenu.ui b/Qt/ApplicationComponents/Resources/UI/pqPipelineBrowserContextMenu.ui new file mode 100644 index 0000000000..fb227d7269 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqPipelineBrowserContextMenu.ui @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqPipelineBrowserContextMenu</class> + <widget class="QWidget" name="pqPipelineBrowserContextMenu"> + <action name="actionPBChangeInput"> + <property name="text"> + <string>Change &Input...</string> + </property> + <property name="iconText"> + <string>Change Input...</string> + </property> + <property name="toolTip"> + <string>Change a Filter's Input</string> + </property> + <property name="statusTip"> + <string>Change a Filter's Input</string> + </property> + </action> + <action name="actionPBDelete"> + <property name="icon"> + <iconset> + <normaloff/> + </iconset> + </property> + <property name="text"> + <string>&Delete</string> + </property> + <property name="statusTip"> + <string>Delete</string> + </property> + </action> + <action name="actionPBIgnoreTime"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="text"> + <string>Ignore Time</string> + </property> + <property name="toolTip"> + <string>Disregard this source/filter's time from animations</string> + </property> + <property name="statusTip"> + <string>Disregard this source/filter's time from animations</string> + </property> + <property name="whatsThis"> + <string>Disregard this source/filter's time from animations</string> + </property> + </action> + <action name="actionPBOpen" > + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqOpen24.png</iconset> + </property> + <property name="text" > + <string>&Open</string> + </property> + <property name="statusTip" > + <string>Open</string> + </property> + <property name="shortcut" > + <string>Ctrl+O</string> + </property> + </action> + <action name="actionPBCreateCustomFilter" > + <property name="text" > + <string>&Create Custom Filter...</string> + </property> + </action> + <addaction name="actionPBOpen" /> + <addaction name="actionPBCreateCustomFilter" /> + <addaction name="actionPBChangeInput"/> + <addaction name="actionPBIgnoreTime"/> + <addaction name="actionPBDelete"/> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> + diff --git a/Qt/ApplicationComponents/Resources/UI/pqSelectionToolbar.ui b/Qt/ApplicationComponents/Resources/UI/pqSelectionToolbar.ui new file mode 100644 index 0000000000..9625472a88 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqSelectionToolbar.ui @@ -0,0 +1,179 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqSelectionToolbar</class> + <widget class="QToolBar" name="pqSelectionToolbar" > + <property name="windowTitle" > + <string>Selection Controls</string> + </property> + <property name="toolTip" > + <string>Select Block</string> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <attribute name="toolBarArea" > + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak" > + <bool>false</bool> + </attribute> + <action name="actionMoveMode"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqRotate24.png</normaloff>:/pqWidgets/Icons/pqRotate24.png</iconset> + </property> + <property name="text"> + <string>Interact</string> + </property> + <property name="iconText"> + <string>Interact</string> + </property> + <property name="toolTip"> + <string>Interact</string> + </property> + <property name="statusTip"> + <string>Interact</string> + </property> + <property name="shortcut"> + <string/> + </property> + </action> + <action name="actionSelectionMode"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqSurfaceSelectionCell24.png</normaloff>:/pqWidgets/Icons/pqSurfaceSelectionCell24.png</iconset> + </property> + <property name="text"> + <string>Select Cells On</string> + </property> + <property name="iconText"> + <string>Select Cells On</string> + </property> + <property name="toolTip"> + <string>Select Cells On</string> + </property> + <property name="statusTip"> + <string>Select Cells On</string> + </property> + <property name="shortcut"> + <string>S</string> + </property> + </action> + <action name="actionSelect_Frustum"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqFrustumSelectionCell24.png</normaloff>:/pqWidgets/Icons/pqFrustumSelectionCell24.png</iconset> + </property> + <property name="text"> + <string>Select Cells Through</string> + </property> + <property name="iconText"> + <string>Select Cells Through</string> + </property> + <property name="toolTip"> + <string>Select Cells Through</string> + </property> + <property name="statusTip"> + <string>Select Cells Through</string> + </property> + </action> + <action name="actionSelectSurfacePoints"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqSurfaceSelectionPoint24.png</normaloff>:/pqWidgets/Icons/pqSurfaceSelectionPoint24.png</iconset> + </property> + <property name="text"> + <string>Select Points On</string> + </property> + <property name="iconText"> + <string>Select Points On</string> + </property> + <property name="toolTip"> + <string>Select Points On</string> + </property> + <property name="statusTip"> + <string>Select Points On</string> + </property> + </action> + <action name="actionSelectFrustumPoints"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqFrustumSelectionPoint24.png</normaloff>:/pqWidgets/Icons/pqFrustumSelectionPoint24.png</iconset> + </property> + <property name="text"> + <string>Select Points Through</string> + </property> + <property name="iconText"> + <string>Select Points Through</string> + </property> + <property name="toolTip"> + <string>Select Points Through</string> + </property> + <property name="statusTip"> + <string>Select Points Through</string> + </property> + </action> + <action name="actionSelect_Block"> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="icon"> + <iconset resource="../../../Components/Resources/pqComponents.qrc"> + <normaloff>:/pqWidgets/Icons/pqGroupExtract24.png</normaloff>:/pqWidgets/Icons/pqGroupExtract24.png</iconset> + </property> + <property name="text"> + <string>Select Block</string> + </property> + <property name="shortcut"> + <string>B</string> + </property> + </action> + + <addaction name="actionMoveMode" /> + <addaction name="actionSelectionMode" /> + <addaction name="actionSelectSurfacePoints" /> + <addaction name="actionSelect_Frustum" /> + <addaction name="actionSelectFrustumPoints" /> + <addaction name="actionSelect_Block" /> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/UI/pqVCRToolbar.ui b/Qt/ApplicationComponents/Resources/UI/pqVCRToolbar.ui new file mode 100644 index 0000000000..0f29acddf3 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/UI/pqVCRToolbar.ui @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>pqVCRToolbar</class> + <widget class="QToolBar" name="VCRToolbar" > + <property name="windowTitle" > + <string>VCR Controls</string> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <attribute name="toolBarArea" > + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak" > + <bool>false</bool> + </attribute> + <action name="actionVCRPlay" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqVcrPlay24.png</iconset> + </property> + <property name="text" > + <string>&Play</string> + </property> + </action> + + <action name="actionVCRPreviousFrame" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqVcrBack24.png</iconset> + </property> + <property name="text" > + <string>Pre&vious Frame</string> + </property> + </action> + <action name="actionVCRFirstFrame" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqVcrFirst24.png</iconset> + </property> + <property name="text" > + <string>&First Frame</string> + </property> + </action> + <action name="actionVCRNextFrame" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqVcrForward24.png</iconset> + </property> + <property name="text" > + <string>&Next Frame</string> + </property> + </action> + <action name="actionVCRLastFrame" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqVcrLast24.png</iconset> + </property> + <property name="text" > + <string>&Last Frame</string> + </property> + </action> + <action name="actionVCRLoop" > + <property name="checkable" > + <bool>true</bool> + </property> + <property name="enabled" > + <bool>false</bool> + </property> + <property name="icon" > + <iconset resource="../../../Components/Resources/pqComponents.qrc" >:/pqWidgets/Icons/pqVcrLoop24.png</iconset> + </property> + <property name="text" > + <string>L&oop</string> + </property> + <property name="iconText" > + <string>Loop</string> + </property> + <property name="toolTip" > + <string>Loop</string> + </property> + <property name="statusTip" > + <string>Loop</string> + </property> + </action> + + + <addaction name="actionVCRFirstFrame" /> + <addaction name="actionVCRPreviousFrame" /> + <addaction name="actionVCRPlay" /> + <addaction name="actionVCRNextFrame" /> + <addaction name="actionVCRLastFrame" /> + <addaction name="actionVCRLoop" /> + </widget> + <resources> + <include location="../../../Components/Resources/pqComponents.qrc"/> + </resources> + <connections/> +</ui> diff --git a/Qt/ApplicationComponents/Resources/pqApplicationComponents.qrc b/Qt/ApplicationComponents/Resources/pqApplicationComponents.qrc new file mode 100644 index 0000000000..514b8ccbd3 --- /dev/null +++ b/Qt/ApplicationComponents/Resources/pqApplicationComponents.qrc @@ -0,0 +1,4 @@ +<RCC> + <qresource prefix="/pqApplicationComponents"> + </qresource> +</RCC> diff --git a/Qt/ApplicationComponents/pqAboutDialogReaction.cxx b/Qt/ApplicationComponents/pqAboutDialogReaction.cxx new file mode 100644 index 0000000000..9ec76e0ede --- /dev/null +++ b/Qt/ApplicationComponents/pqAboutDialogReaction.cxx @@ -0,0 +1,50 @@ +/*========================================================================= + + Program: ParaView + Module: pqAboutDialogReaction.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 "pqAboutDialogReaction.h" + +#include "pqClientAboutDialog.h" +#include "pqCoreUtilities.h" + +//----------------------------------------------------------------------------- +pqAboutDialogReaction::pqAboutDialogReaction(QAction* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +void pqAboutDialogReaction::showAboutDialog() +{ + pqClientAboutDialog about_dialog(pqCoreUtilities::mainWidget()); + about_dialog.exec(); +} + + diff --git a/Qt/ApplicationComponents/pqAboutDialogReaction.h b/Qt/ApplicationComponents/pqAboutDialogReaction.h new file mode 100644 index 0000000000..4376a329e4 --- /dev/null +++ b/Qt/ApplicationComponents/pqAboutDialogReaction.h @@ -0,0 +1,62 @@ +/*========================================================================= + + Program: ParaView + Module: pqAboutDialogReaction.h + + 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. + +========================================================================*/ +#ifndef __pqAboutDialogReaction_h +#define __pqAboutDialogReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// pqAboutDialogReaction used to show the standard about dialog for the +/// application. +class PQAPPLICATIONCOMPONENTS_EXPORT pqAboutDialogReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqAboutDialogReaction(QAction* parent); + + /// Shows the about dialog for the application. + static void showAboutDialog(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqAboutDialogReaction::showAboutDialog(); } + + +private: + Q_DISABLE_COPY(pqAboutDialogReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqAlwaysConnectedBehavior.cxx b/Qt/ApplicationComponents/pqAlwaysConnectedBehavior.cxx new file mode 100644 index 0000000000..0f4c7cce9e --- /dev/null +++ b/Qt/ApplicationComponents/pqAlwaysConnectedBehavior.cxx @@ -0,0 +1,84 @@ +/*========================================================================= + + Program: ParaView + Module: pqAlwaysConnectedBehavior.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 "pqAlwaysConnectedBehavior.h" + +#include "pqApplicationCore.h" +#include "pqObjectBuilder.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" +#include "vtkProcessModule.h" + +//----------------------------------------------------------------------------- +pqAlwaysConnectedBehavior::pqAlwaysConnectedBehavior(QObject* parentObject) +: Superclass(parentObject), + DefaultServer("builtin:") +{ + this->Timer.setSingleShot(true); + this->Timer.setInterval(0); + QObject::connect(&this->Timer, SIGNAL(timeout()), + this, SLOT(serverCheck())); + + pqServerManagerModel* smmodel = + pqApplicationCore::instance()->getServerManagerModel(); + QObject::connect(smmodel, SIGNAL(finishedRemovingServer()), + this, SLOT(delayedServerCheck())); + this->serverCheck(); +} + +//----------------------------------------------------------------------------- +pqAlwaysConnectedBehavior::~pqAlwaysConnectedBehavior() +{ +} + +//----------------------------------------------------------------------------- +void pqAlwaysConnectedBehavior::delayedServerCheck() +{ + this->Timer.start(); +} + +//----------------------------------------------------------------------------- +void pqAlwaysConnectedBehavior::serverCheck() +{ + pqApplicationCore* core = pqApplicationCore::instance(); + if (core->getServerManagerModel()->getNumberOfItems<pqServer*>() != 0) + { + return; + } + if (vtkProcessModule::GetProcessModule()->IsAcceptingConnections()) + { + // Try again later, we are waiting for server to connect. + this->delayedServerCheck(); + return; + } + + core->getObjectBuilder()->createServer(this->DefaultServer); +} diff --git a/Qt/ApplicationComponents/pqAlwaysConnectedBehavior.h b/Qt/ApplicationComponents/pqAlwaysConnectedBehavior.h new file mode 100644 index 0000000000..83e89d7c5a --- /dev/null +++ b/Qt/ApplicationComponents/pqAlwaysConnectedBehavior.h @@ -0,0 +1,70 @@ +/*========================================================================= + + Program: ParaView + Module: pqAlwaysConnectedBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqAlwaysConnectedBehavior_h +#define __pqAlwaysConnectedBehavior_h + +#include <QObject> +#include <QTimer> +#include "pqApplicationComponentsExport.h" +#include "pqServerResource.h" + +/// @ingroup Behaviors +/// pqAlwaysConnectedBehavior ensures that the client always remains connected +/// to a server. +class PQAPPLICATIONCOMPONENTS_EXPORT pqAlwaysConnectedBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqAlwaysConnectedBehavior(QObject* parent=0); + ~pqAlwaysConnectedBehavior(); + + /// Get/Set the default server resource to connect to. + void setDefaultServer(const pqServerResource& resource) + { this->DefaultServer = resource; } + const pqServerResource& defaultServer() const + { return this->DefaultServer; } + +protected slots: + void delayedServerCheck(); + void serverCheck(); + +protected: + pqServerResource DefaultServer; + QTimer Timer; +private: + Q_DISABLE_COPY(pqAlwaysConnectedBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqAnimationTimeToolbar.cxx b/Qt/ApplicationComponents/pqAnimationTimeToolbar.cxx new file mode 100644 index 0000000000..2c8c20514d --- /dev/null +++ b/Qt/ApplicationComponents/pqAnimationTimeToolbar.cxx @@ -0,0 +1,47 @@ +/*========================================================================= + + Program: ParaView + Module: pqAnimationTimeToolbar.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 "pqAnimationTimeToolbar.h" + +#include "pqPVApplicationCore.h" +#include "pqAnimationManager.h" + +//----------------------------------------------------------------------------- +void pqAnimationTimeToolbar::constructor() +{ + this->setWindowTitle("Current Time Controls"); + QObject::connect(pqPVApplicationCore::instance()->animationManager(), + SIGNAL(activeSceneChanged(pqAnimationScene*)), + this, SLOT(setAnimationScene(pqAnimationScene*))); +} + + + diff --git a/Qt/ApplicationComponents/pqAnimationTimeToolbar.h b/Qt/ApplicationComponents/pqAnimationTimeToolbar.h new file mode 100644 index 0000000000..3dfec72d83 --- /dev/null +++ b/Qt/ApplicationComponents/pqAnimationTimeToolbar.h @@ -0,0 +1,64 @@ +/*========================================================================= + + Program: ParaView + Module: pqAnimationTimeToolbar.h + + 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. + +========================================================================*/ +#ifndef __pqAnimationTimeToolbar_h +#define __pqAnimationTimeToolbar_h + +#include "pqCurrentTimeToolbar.h" +#include "pqApplicationComponentsExport.h" + +/// pqAnimationTimeToolbar is subclass of pqCurrentTimeToolbar that connects to +/// the pqPVApplicationCore::animationManager() to keep track of the active scene. +class PQAPPLICATIONCOMPONENTS_EXPORT pqAnimationTimeToolbar : public pqCurrentTimeToolbar +{ + Q_OBJECT + typedef pqCurrentTimeToolbar Superclass; +public: + pqAnimationTimeToolbar(const QString &_title, QWidget *_parent = 0) + : Superclass(_title, _parent) + { + this->constructor(); + } + pqAnimationTimeToolbar(QWidget *_parent = 0) + : Superclass(_parent) + { + this->constructor(); + } + +private: + Q_DISABLE_COPY(pqAnimationTimeToolbar) + + void constructor(); +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqApplicationComponentsExport.h.in b/Qt/ApplicationComponents/pqApplicationComponentsExport.h.in new file mode 100644 index 0000000000..f788442f62 --- /dev/null +++ b/Qt/ApplicationComponents/pqApplicationComponentsExport.h.in @@ -0,0 +1,51 @@ +/*========================================================================= + + Program: ParaView + Module: pqApplicationComponentsExport.h.in + + Copyright (c) 2005-2008 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. + +=========================================================================*/ + +#ifndef _pqApplicationComponentsExport_h +#define _pqApplicationComponentsExport_h + +#ifndef PARAVIEW_BUILD_SHARED_LIBS +#cmakedefine PARAVIEW_BUILD_SHARED_LIBS +#endif + +#if defined(WIN32) && defined(PARAVIEW_BUILD_SHARED_LIBS) +# if defined(pqApplicationComponents_EXPORTS) +# define PQAPPLICATIONCOMPONENTS_EXPORT __declspec(dllexport) +# else +# define PQAPPLICATIONCOMPONENTS_EXPORT __declspec(dllimport) +# endif +#else +# define PQAPPLICATIONCOMPONENTS_EXPORT +#endif + +#endif // !_pqWidgetsExport_h + diff --git a/Qt/ApplicationComponents/pqApplicationSettingsReaction.cxx b/Qt/ApplicationComponents/pqApplicationSettingsReaction.cxx new file mode 100644 index 0000000000..58ab3c80e0 --- /dev/null +++ b/Qt/ApplicationComponents/pqApplicationSettingsReaction.cxx @@ -0,0 +1,65 @@ +/*========================================================================= + + Program: ParaView + Module: pqApplicationSettingsReaction.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 "pqApplicationSettingsReaction.h" + +#include "pqApplicationOptionsDialog.h" +#include "pqCoreUtilities.h" + + +QPointer<pqApplicationOptionsDialog> pqApplicationSettingsReaction::Dialog; + +//----------------------------------------------------------------------------- +pqApplicationSettingsReaction::pqApplicationSettingsReaction(QAction* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +pqApplicationSettingsReaction::~pqApplicationSettingsReaction() +{ + delete pqApplicationSettingsReaction::Dialog; +} + +//----------------------------------------------------------------------------- +void pqApplicationSettingsReaction::showApplicationSettingsDialog() +{ + if (!pqApplicationSettingsReaction::Dialog) + { + pqApplicationSettingsReaction::Dialog = new pqApplicationOptionsDialog( + pqCoreUtilities::mainWidget()); + pqApplicationSettingsReaction::Dialog->setObjectName("ApplicationSettings"); + pqApplicationSettingsReaction::Dialog->setAttribute(Qt::WA_QuitOnClose, false); + } + pqApplicationSettingsReaction::Dialog->show(); + pqApplicationSettingsReaction::Dialog->raise(); +} + diff --git a/Qt/ApplicationComponents/pqApplicationSettingsReaction.h b/Qt/ApplicationComponents/pqApplicationSettingsReaction.h new file mode 100644 index 0000000000..2289b3ba27 --- /dev/null +++ b/Qt/ApplicationComponents/pqApplicationSettingsReaction.h @@ -0,0 +1,68 @@ +/*========================================================================= + + Program: ParaView + Module: pqApplicationSettingsReaction.h + + 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. + +========================================================================*/ +#ifndef __pqApplicationSettingsReaction_h +#define __pqApplicationSettingsReaction_h + +#include "pqReaction.h" +#include <QPointer> + +class pqApplicationOptionsDialog; + +/// @ingroup Reactions +/// pqApplicationSettingsReaction is a reaction to popup the application +/// settings dialog. It creates pqApplicationOptionsDialog when required. +class PQAPPLICATIONCOMPONENTS_EXPORT pqApplicationSettingsReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqApplicationSettingsReaction(QAction* parent); + virtual ~pqApplicationSettingsReaction(); + + /// Show the application settings dialog. + static void showApplicationSettingsDialog(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqApplicationSettingsReaction::showApplicationSettingsDialog(); } + +private: + Q_DISABLE_COPY(pqApplicationSettingsReaction) + + static QPointer<pqApplicationOptionsDialog> Dialog; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.cxx b/Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.cxx new file mode 100644 index 0000000000..e6643da09c --- /dev/null +++ b/Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.cxx @@ -0,0 +1,92 @@ +/*========================================================================= + + Program: ParaView + Module: pqAutoLoadPluginXMLBehavior.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 "pqAutoLoadPluginXMLBehavior.h" + +#include "pqApplicationCore.h" +#include "pqPluginManager.h" + +#include <QDir> +#include "vtkObject.h" + +void getAllParaViewResourcesDirs(const QString& prefix, QSet<QString>& set) +{ + QDir dir(prefix); + if (!dir.exists()) + { + return; + } + if (prefix.endsWith("/ParaViewResources")) + { + QStringList contents = dir.entryList(QDir::Files); + foreach (QString file, contents) + { + set.insert(prefix + "/" + file); + } + return; + } + QStringList contents = dir.entryList(QDir::AllDirs); + foreach (QString sub_dir, contents) + { + getAllParaViewResourcesDirs(prefix + "/" + sub_dir, set); + } +} + +//----------------------------------------------------------------------------- +pqAutoLoadPluginXMLBehavior::pqAutoLoadPluginXMLBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + QObject::connect(pqApplicationCore::instance()->getPluginManager(), + SIGNAL(guiExtensionLoaded()), + this, SLOT(updateResources())); + QObject::connect(pqApplicationCore::instance()->getPluginManager(), + SIGNAL(serverManagerExtensionLoaded()), + this, SLOT(updateResources())); + this->updateResources(); +} + +//----------------------------------------------------------------------------- +void pqAutoLoadPluginXMLBehavior::updateResources() +{ + QSet<QString> xml_files; + ::getAllParaViewResourcesDirs(":", xml_files); + + foreach (QString dir, xml_files) + { + if (!this->PreviouslyParsedResources.contains(dir)) + { + pqApplicationCore::instance()->loadConfiguration(dir); + this->PreviouslyParsedResources.insert(dir); + } + } +} + + diff --git a/Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.h b/Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.h new file mode 100644 index 0000000000..e930fd6a80 --- /dev/null +++ b/Qt/ApplicationComponents/pqAutoLoadPluginXMLBehavior.h @@ -0,0 +1,66 @@ +/*========================================================================= + + Program: ParaView + Module: pqAutoLoadPluginXMLBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqAutoLoadPluginXMLBehavior_h +#define __pqAutoLoadPluginXMLBehavior_h + +#include <QObject> +#include <QSet> +#include "pqApplicationComponentsExport.h" + +/// @ingroup Behaviors +/// ParaView plugins can load gui configuration xmls eg. xmls for defining the +/// filters menu, readers etc. This behavior ensures that as soon as such +/// plugins are loaded if they provide any XMLs in the ":/.*/ParaViewResources/" +/// resource location, then such xmls are parsed and an attempt is made to load +/// them (by calling pqApplicationCore::loadConfiguration()). +/// +/// Without going into too much detail, if you want your application to +/// automatically load GUI configuration XMLs from plugins, instantiate this +/// behavior. +class PQAPPLICATIONCOMPONENTS_EXPORT pqAutoLoadPluginXMLBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqAutoLoadPluginXMLBehavior(QObject* parent=0); + +protected slots: + void updateResources(); + +private: + Q_DISABLE_COPY(pqAutoLoadPluginXMLBehavior) + QSet<QString> PreviouslyParsedResources; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqAxesToolbar.cxx b/Qt/ApplicationComponents/pqAxesToolbar.cxx new file mode 100644 index 0000000000..807bf133a1 --- /dev/null +++ b/Qt/ApplicationComponents/pqAxesToolbar.cxx @@ -0,0 +1,190 @@ +/*========================================================================= + + Program: ParaView + Module: pqAxesToolbar.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 "pqAxesToolbar.h" +#include "ui_pqAxesToolbar.h" + +#include "pqActiveObjects.h" +#include "pqRenderView.h" +#include "pqDataRepresentation.h" +#include "pqPickHelper.h" + + +class pqAxesToolbar::pqInternals : public Ui::pqAxesToolbar +{ +}; + +//----------------------------------------------------------------------------- +void pqAxesToolbar::constructor() +{ + this->Internals = new pqInternals(); + this->Internals->setupUi(this); + + this->PickHelper = new pqPickHelper(this); + QObject::connect(this->PickHelper, SIGNAL(enabled(bool)), + this->Internals->actionPickCenter, SLOT(setEnabled(bool))); + QObject::connect(this->PickHelper, SIGNAL(picking(bool)), + this->Internals->actionPickCenter, SLOT(setChecked(bool))); + QObject::connect(this->PickHelper, + SIGNAL(pickFinished(double, double, double)), + this, SLOT(pickCenterOfRotationFinished(double, double, double))); + + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnabledState()), + Qt::QueuedConnection); + + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(sourceChanged(pqPipelineSource*)), + this, SLOT(updateEnabledState())); + + QObject::connect(this->Internals->actionShowOrientationAxes, + SIGNAL(toggled(bool)), this, SLOT(showOrientationAxes(bool))); + + QObject::connect(this->Internals->actionShowCenterAxes, SIGNAL(toggled(bool)), + this, SLOT(showCenterAxes(bool))); + + QObject::connect(this->Internals->actionShowCenterAxes, SIGNAL(triggered()), + this, SLOT(resetCenterOfRotationToCenterOfCurrentData())); + + QObject::connect(this->Internals->actionPickCenter, SIGNAL(toggled(bool)), + this, SLOT(pickCenterOfRotation(bool))); + + this->updateEnabledState(); +} + +//----------------------------------------------------------------------------- +void pqAxesToolbar::updateEnabledState() +{ + pqRenderView* renderView = + qobject_cast<pqRenderView*>(pqActiveObjects::instance().activeView()); + + this->Internals->actionShowOrientationAxes->setEnabled(renderView != NULL); + this->Internals->actionShowOrientationAxes->blockSignals(true); + this->Internals->actionShowOrientationAxes->setChecked( + renderView? renderView->getOrientationAxesVisibility() : false); + this->Internals->actionShowOrientationAxes->blockSignals(false); + + this->Internals->actionShowCenterAxes->setEnabled(renderView != NULL); + this->Internals->actionShowCenterAxes->blockSignals(true); + this->Internals->actionShowCenterAxes->setChecked( + renderView? renderView->getCenterAxesVisibility() : false); + this->Internals->actionShowCenterAxes->blockSignals(false); + this->Internals->actionResetCenter->setEnabled( + pqActiveObjects::instance().activeRepresentation() != NULL); + this->PickHelper->setView(renderView); +} + +//----------------------------------------------------------------------------- +void pqAxesToolbar::showOrientationAxes(bool show) +{ + pqRenderView* renderView = + qobject_cast<pqRenderView*>(pqActiveObjects::instance().activeView()); + if (!renderView) + { + return; + } + + renderView->setOrientationAxesVisibility(show); + renderView->render(); +} + +//----------------------------------------------------------------------------- +void pqAxesToolbar::showCenterAxes(bool show) +{ + pqRenderView* renderView = + qobject_cast<pqRenderView*>(pqActiveObjects::instance().activeView()); + if (!renderView) + { + return; + } + + renderView->setCenterAxesVisibility(show); + renderView->render(); +} + +//----------------------------------------------------------------------------- +void pqAxesToolbar::resetCenterOfRotationToCenterOfCurrentData() +{ + pqRenderView* renderView = + qobject_cast<pqRenderView*>(pqActiveObjects::instance().activeView()); + pqDataRepresentation* repr = pqActiveObjects::instance().activeRepresentation(); + if (!repr || !renderView) + { + //qDebug() << "Active source not shown in active view. Cannot set center."; + return; + } + + double bounds[6]; + if (repr->getDataBounds(bounds)) + { + double center[3]; + center[0] = (bounds[1]+bounds[0])/2.0; + center[1] = (bounds[3]+bounds[2])/2.0; + center[2] = (bounds[5]+bounds[4])/2.0; + renderView->setCenterOfRotation(center); + renderView->render(); + } + +} + +//----------------------------------------------------------------------------- +void pqAxesToolbar::pickCenterOfRotation(bool begin) +{ + if (begin) + { + this->PickHelper->beginPick(); + } + else + { + this->PickHelper->endPick(); + } +} + +//----------------------------------------------------------------------------- +void pqAxesToolbar::pickCenterOfRotationFinished(double x, double y, double z) +{ + this->pickCenterOfRotation(false); + pqRenderView* rm = + qobject_cast<pqRenderView*>(pqActiveObjects::instance().activeView()); + if (!rm) + { + qDebug("No active render module. Cannot reset center of rotation."); + return; + } + + double center[3]; + center[0] = x; + center[1] = y; + center[2] = z; + rm->setCenterOfRotation(center); + rm->render(); +} diff --git a/Qt/ApplicationComponents/pqAxesToolbar.h b/Qt/ApplicationComponents/pqAxesToolbar.h new file mode 100644 index 0000000000..ca62ec27bf --- /dev/null +++ b/Qt/ApplicationComponents/pqAxesToolbar.h @@ -0,0 +1,78 @@ +/*========================================================================= + + Program: ParaView + Module: pqAxesToolbar.h + + 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. + +========================================================================*/ +#ifndef __pqAxesToolbar_h +#define __pqAxesToolbar_h + +#include <QToolBar> +#include "pqApplicationComponentsExport.h" + +class pqPickHelper; + +/// pqAxesToolbar is the toolbar that has buttons for setting the center +/// rotation axes, toggling its visibility etc. +class PQAPPLICATIONCOMPONENTS_EXPORT pqAxesToolbar : public QToolBar +{ + Q_OBJECT + typedef QToolBar Superclass; +public: + pqAxesToolbar(const QString& title, QWidget* parentObject=0) + : Superclass(title, parentObject) + { + this->constructor(); + } + pqAxesToolbar(QWidget* parentObject=0) + : Superclass(parentObject) + { + this->constructor(); + } + +protected slots: + void updateEnabledState(); + void showCenterAxes(bool); + void showOrientationAxes(bool); + void resetCenterOfRotationToCenterOfCurrentData(); + void pickCenterOfRotation(bool); + void pickCenterOfRotationFinished(double, double, double); + +private: + Q_DISABLE_COPY(pqAxesToolbar) + + pqPickHelper* PickHelper; + + class pqInternals; + pqInternals* Internals; + void constructor(); +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCameraLinkReaction.cxx b/Qt/ApplicationComponents/pqCameraLinkReaction.cxx new file mode 100644 index 0000000000..1285eea965 --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraLinkReaction.cxx @@ -0,0 +1,69 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraLinkReaction.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 "pqCameraLinkReaction.h" + +#include "pqActiveObjects.h" +#include "pqRenderView.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqCameraLinkReaction::pqCameraLinkReaction(QAction* parentObject) + : Superclass(parentObject) +{ + QObject::connect(&pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqCameraLinkReaction::updateEnableState() +{ + this->parentAction()->setEnabled( + qobject_cast<pqRenderView*>(pqActiveObjects::instance().activeView()) != + NULL); +} + +//----------------------------------------------------------------------------- +void pqCameraLinkReaction::addCameraLink() +{ + pqRenderView* rm = qobject_cast<pqRenderView*>( + pqActiveObjects::instance().activeView()); + if (rm) + { + rm->linkToOtherView(); + } + else + { + qCritical() << "No render module is active"; + } +} diff --git a/Qt/ApplicationComponents/pqCameraLinkReaction.h b/Qt/ApplicationComponents/pqCameraLinkReaction.h new file mode 100644 index 0000000000..bbff274d97 --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraLinkReaction.h @@ -0,0 +1,63 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraLinkReaction.h + + 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. + +========================================================================*/ +#ifndef __pqCameraLinkReaction_h +#define __pqCameraLinkReaction_h + +#include "pqReaction.h" + +class PQAPPLICATIONCOMPONENTS_EXPORT pqCameraLinkReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqCameraLinkReaction(QAction* parent); + + /// Adds camera link with the active view. + static void addCameraLink(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqCameraLinkReaction::addCameraLink(); } + +private: + Q_DISABLE_COPY(pqCameraLinkReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCameraReaction.cxx b/Qt/ApplicationComponents/pqCameraReaction.cxx new file mode 100644 index 0000000000..aa70c98b8a --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraReaction.cxx @@ -0,0 +1,159 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraReaction.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 "pqCameraReaction.h" + +#include "pqActiveObjects.h" +#include "pqRenderView.h" + +//----------------------------------------------------------------------------- +pqCameraReaction::pqCameraReaction(QAction* parentObject, + pqCameraReaction::Mode mode) + : Superclass(parentObject) +{ + this->ReactionMode = mode; + QObject::connect(&pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::updateEnableState() +{ + pqView* view = pqActiveObjects::instance().activeView(); + pqRenderView* rview = qobject_cast<pqRenderView*>(view); + if (view && this->ReactionMode == RESET_CAMERA) + { + this->parentAction()->setEnabled(true); + } + else if (rview) + { + this->parentAction()->setEnabled(true); + } + else + { + this->parentAction()->setEnabled(false); + } +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::onTriggered() +{ + switch (this->ReactionMode) + { + case RESET_CAMERA: + this->resetCamera(); + break; + + case RESET_POSITIVE_X: + this->resetPositiveX(); + break; + + case RESET_POSITIVE_Y: + this->resetPositiveY(); + break; + + case RESET_POSITIVE_Z: + this->resetPositiveZ(); + break; + + case RESET_NEGATIVE_X: + this->resetNegativeX(); + break; + + case RESET_NEGATIVE_Y: + this->resetNegativeY(); + break; + case RESET_NEGATIVE_Z: + this->resetNegativeZ(); + break; + } +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetCamera() +{ + pqView* view = pqActiveObjects::instance().activeView(); + if (view) + { + view->resetDisplay(); + } +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetDirection( + double look_x, double look_y, double look_z, + double up_x, double up_y, double up_z) +{ + pqRenderView* ren = qobject_cast<pqRenderView*>( + pqActiveObjects::instance().activeView()); + if (ren) + { + ren->resetViewDirection(look_x, look_y, look_z, up_x, up_y, up_z); + } +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetPositiveX() +{ + pqCameraReaction::resetDirection(1, 0, 0, 0, 0, 1); +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetNegativeX() +{ + pqCameraReaction::resetDirection(-1, 0, 0, 0, 0, 1); +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetPositiveY() +{ + pqCameraReaction::resetDirection(0, 1, 0, 0, 0, 1); +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetNegativeY() +{ + pqCameraReaction::resetDirection(0, -1, 0, 0, 0, 1); +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetPositiveZ() +{ + pqCameraReaction::resetDirection(0, 0, 1, 0, 1, 0); +} + +//----------------------------------------------------------------------------- +void pqCameraReaction::resetNegativeZ() +{ + pqCameraReaction::resetDirection(0, 0, -1, 0, 1, 0); +} + diff --git a/Qt/ApplicationComponents/pqCameraReaction.h b/Qt/ApplicationComponents/pqCameraReaction.h new file mode 100644 index 0000000000..59876617fe --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraReaction.h @@ -0,0 +1,85 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraReaction.h + + 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. + +========================================================================*/ +#ifndef __pqCameraReaction_h +#define __pqCameraReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// pqCameraReaction has the logic to handle common operations associated with +/// the camera such as reset view along X axis etc. +class PQAPPLICATIONCOMPONENTS_EXPORT pqCameraReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + enum Mode + { + RESET_CAMERA, + RESET_POSITIVE_X, + RESET_POSITIVE_Y, + RESET_POSITIVE_Z, + RESET_NEGATIVE_X, + RESET_NEGATIVE_Y, + RESET_NEGATIVE_Z + }; + + pqCameraReaction(QAction* parent, Mode mode); + + static void resetCamera(); + static void resetPositiveX(); + static void resetPositiveY(); + static void resetPositiveZ(); + static void resetNegativeX(); + static void resetNegativeY(); + static void resetNegativeZ(); + static void resetDirection( + double look_x, double look_y, double look_z, + double up_x, double up_y, double up_z); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered(); + +private: + Q_DISABLE_COPY(pqCameraReaction) + Mode ReactionMode; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCameraToolbar.cxx b/Qt/ApplicationComponents/pqCameraToolbar.cxx new file mode 100644 index 0000000000..180eb7c6dc --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraToolbar.cxx @@ -0,0 +1,79 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraToolbar.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 "pqCameraToolbar.h" +#include "ui_pqCameraToolbar.h" + +#include "pqCameraReaction.h" +#include "pqRubberBandHelper.h" +#include "pqActiveObjects.h" + +//----------------------------------------------------------------------------- +void pqCameraToolbar::constructor() +{ + Ui::pqCameraToolbar ui; + ui.setupUi(this); + new pqCameraReaction(ui.actionResetCamera, pqCameraReaction::RESET_CAMERA); + new pqCameraReaction(ui.actionPositiveX, pqCameraReaction::RESET_POSITIVE_X); + new pqCameraReaction(ui.actionNegativeX, pqCameraReaction::RESET_NEGATIVE_X); + new pqCameraReaction(ui.actionPositiveY, pqCameraReaction::RESET_POSITIVE_Y); + new pqCameraReaction(ui.actionNegativeY, pqCameraReaction::RESET_NEGATIVE_Y); + new pqCameraReaction(ui.actionPositiveZ, pqCameraReaction::RESET_POSITIVE_Z); + new pqCameraReaction(ui.actionNegativeZ, pqCameraReaction::RESET_NEGATIVE_Z); + + /// HACK: Please FIX me at some point. + this->SelectionHelper = new pqRubberBandHelper(this); + // Set up connection with selection helpers for all views. + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this->SelectionHelper, SLOT(setView(pqView*))); + QObject::connect(this->SelectionHelper, + SIGNAL(enableZoom(bool)), + ui.actionZoomToBox, SLOT(setEnabled(bool))); + QObject::connect(ui.actionZoomToBox, SIGNAL(triggered()), + this->SelectionHelper, SLOT(beginZoom())); + // When a selection is marked, we revert to interaction mode. + QObject::connect( + this->SelectionHelper, + SIGNAL(selectionFinished(int, int, int, int)), + this->SelectionHelper, SLOT(endSelection())); + QObject::connect( + this->SelectionHelper, + SIGNAL(selectionModeChanged(int)), + this, SLOT(onSelectionModeChanged(int))); + this->ZoomAction = ui.actionZoomToBox; +} + +//----------------------------------------------------------------------------- +void pqCameraToolbar::onSelectionModeChanged(int mode) +{ + this->ZoomAction->setChecked(mode == pqRubberBandHelper::ZOOM); +} diff --git a/Qt/ApplicationComponents/pqCameraToolbar.h b/Qt/ApplicationComponents/pqCameraToolbar.h new file mode 100644 index 0000000000..5c72a28cd4 --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraToolbar.h @@ -0,0 +1,75 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraToolbar.h + + 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. + +========================================================================*/ +#ifndef __pqCameraToolbar_h +#define __pqCameraToolbar_h + +#include <QToolBar> +#include "pqApplicationComponentsExport.h" + +class pqRubberBandHelper; + +/// pqCameraToolbar is the toolbar that has icons for resetting camera +/// orientation. +/// +/// CAVEATS: This class currently uses pqRubberBandHelper for zooming. That +/// needs to be cleaned up soon since pqRubberBandHelper is resulting in hacky +/// code in pqParaViewMenuBuilders::buildToolbars(). +class PQAPPLICATIONCOMPONENTS_EXPORT pqCameraToolbar : public QToolBar +{ + Q_OBJECT + typedef QToolBar Superclass; +public: + pqCameraToolbar(const QString& title, QWidget* parentObject=0) + : Superclass(title, parentObject) + { + this->constructor(); + } + pqCameraToolbar(QWidget* parentObject=0) + : Superclass(parentObject) + { + this->constructor(); + } + +private slots: + void onSelectionModeChanged(int mode); + +private: + Q_DISABLE_COPY(pqCameraToolbar) + void constructor(); + + QAction* ZoomAction; + pqRubberBandHelper* SelectionHelper; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCameraUndoRedoReaction.cxx b/Qt/ApplicationComponents/pqCameraUndoRedoReaction.cxx new file mode 100644 index 0000000000..ce3a3af327 --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraUndoRedoReaction.cxx @@ -0,0 +1,123 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraUndoRedoReaction.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 "pqCameraUndoRedoReaction.h" + + +#include "pqActiveObjects.h" +#include "pqView.h" + +//----------------------------------------------------------------------------- +pqCameraUndoRedoReaction::pqCameraUndoRedoReaction( + QAction* parentObject, bool undo_mode, pqView* view) +: Superclass(parentObject) +{ + this->Undo = undo_mode; + + if (view) + { + this->setActiveView(view); + } + else + { + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(viewChanged(pqView*)), + this, SLOT(setActiveView(pqView*))); + this->setActiveView(pqActiveObjects::instance().activeView()); + } +} + +//----------------------------------------------------------------------------- +void pqCameraUndoRedoReaction::undo(pqView* view) +{ + if (!view) + { + return; + } + view->undo(); + view->render(); +} + +//----------------------------------------------------------------------------- +void pqCameraUndoRedoReaction::redo(pqView* view) +{ + if (!view) + { + return; + } + view->redo(); + view->render(); +} + +//----------------------------------------------------------------------------- +void pqCameraUndoRedoReaction::setActiveView(pqView* view) +{ + if (this->LastView) + { + QObject::disconnect(this->LastView, 0, this, 0); + this->LastView = NULL; + } + + if (!view || !view->supportsUndo()) + { + this->setEnabled(false); + return; + } + + this->LastView = view; + + if (this->Undo) + { + this->setEnabled(view->canUndo()); + QObject::connect(view, SIGNAL(canUndoChanged(bool)), + this, SLOT(setEnabled(bool))); + } + else + { + this->setEnabled(view->canRedo()); + QObject::connect(view, SIGNAL(canRedoChanged(bool)), + this, SLOT(setEnabled(bool))); + } +} + +//----------------------------------------------------------------------------- +void pqCameraUndoRedoReaction::onTriggered() +{ + if (this->Undo) + { + pqCameraUndoRedoReaction::undo(this->LastView); + } + else + { + pqCameraUndoRedoReaction::redo(this->LastView); + } +} + diff --git a/Qt/ApplicationComponents/pqCameraUndoRedoReaction.h b/Qt/ApplicationComponents/pqCameraUndoRedoReaction.h new file mode 100644 index 0000000000..08cb033f10 --- /dev/null +++ b/Qt/ApplicationComponents/pqCameraUndoRedoReaction.h @@ -0,0 +1,77 @@ +/*========================================================================= + + Program: ParaView + Module: pqCameraUndoRedoReaction.h + + 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. + +========================================================================*/ +#ifndef __pqCameraUndoRedoReaction_h +#define __pqCameraUndoRedoReaction_h + +#include "pqReaction.h" +#include <QPointer> + +class pqView; + +/// @ingroup Reactions +/// Reaction for camera undo or redo. +class PQAPPLICATIONCOMPONENTS_EXPORT pqCameraUndoRedoReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor parent cannot be NULL. When undo is true, acts as + /// undo-reaction, else acts as redo reaction. + /// If \c view ==NULL then active view is used. + pqCameraUndoRedoReaction(QAction* parent, bool undo, pqView* view=0); + + /// undo. + static void undo(pqView* view); + + /// redo. + static void redo(pqView* view); + +protected slots: + void setEnabled(bool enable) + { + this->parentAction()->setEnabled(enable); + } + void setActiveView(pqView*); + +protected: + /// Called when the action is triggered. + virtual void onTriggered(); + +private: + Q_DISABLE_COPY(pqCameraUndoRedoReaction) + QPointer<pqView> LastView; + bool Undo; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCategoryToolbarsBehavior.cxx b/Qt/ApplicationComponents/pqCategoryToolbarsBehavior.cxx new file mode 100644 index 0000000000..d4cc1d2fb6 --- /dev/null +++ b/Qt/ApplicationComponents/pqCategoryToolbarsBehavior.cxx @@ -0,0 +1,80 @@ +/*========================================================================= + + Program: ParaView + Module: pqCategoryToolbarsBehavior.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 "pqCategoryToolbarsBehavior.h" + +#include "pqProxyGroupMenuManager.h" + +#include <QMainWindow> +#include <QToolBar> + +//----------------------------------------------------------------------------- +pqCategoryToolbarsBehavior::pqCategoryToolbarsBehavior( + pqProxyGroupMenuManager* menuManager, QMainWindow* mainWindow) + : Superclass(menuManager) +{ + Q_ASSERT(menuManager != 0); + Q_ASSERT(mainWindow != 0); + + this->MainWindow = mainWindow; + this->MenuManager = menuManager; + + QObject::connect(menuManager, SIGNAL(menuPopulated()), + this, SLOT(updateToolbars())); + this->updateToolbars(); +} + +//----------------------------------------------------------------------------- +void pqCategoryToolbarsBehavior::updateToolbars() +{ + QStringList toolbarCategories = this->MenuManager->getToolbarCategories(); + foreach (QString category, toolbarCategories) + { + QToolBar* toolbar = this->MainWindow->findChild<QToolBar*>(category); + if (!toolbar) + { + this->MainWindow->addToolBarBreak(); + toolbar = new QToolBar(this->MainWindow); + toolbar->setObjectName(category); + toolbar->setOrientation(Qt::Horizontal); + toolbar->setWindowTitle(category); // TODO: Get label from MenuManager. + this->MainWindow->addToolBar(toolbar); + } + QList<QAction*> toolbarActions = this->MenuManager->actions(category); + toolbar->clear(); + for (int cc=0; cc < toolbarActions.size(); cc++) + { + toolbar->addAction(toolbarActions[cc]); + } + } +} + + diff --git a/Qt/ApplicationComponents/pqCategoryToolbarsBehavior.h b/Qt/ApplicationComponents/pqCategoryToolbarsBehavior.h new file mode 100644 index 0000000000..e29f93094b --- /dev/null +++ b/Qt/ApplicationComponents/pqCategoryToolbarsBehavior.h @@ -0,0 +1,72 @@ +/*========================================================================= + + Program: ParaView + Module: pqCategoryToolbarsBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqCategoryToolbarsBehavior_h +#define __pqCategoryToolbarsBehavior_h + +#include <QObject> +#include <QPointer> +#include <QList> +#include "pqApplicationComponentsExport.h" + +class pqProxyGroupMenuManager; +class QMainWindow; + +/// @ingroup Behaviors +/// pqCategoryToolbarsBehavior is used when the application wants to enable +/// categories from a pqProxyGroupMenuManager to show up in a toolbar. +/// ex. One may want to have a toolbar listing all the filters in "Common" +/// category. This behavior also ensures that as plugins are loaded, if new +/// categories request that the be added as a toolbar, new toolbars for those +/// are added and also if new items get added to a category already shown as a +/// toolbar, then the toolbar is updated. +class PQAPPLICATIONCOMPONENTS_EXPORT pqCategoryToolbarsBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqCategoryToolbarsBehavior(pqProxyGroupMenuManager* menuManager, + QMainWindow* mainWindow); + +protected slots: + /// Called when menuManager fires the menuPopulated() signal. + void updateToolbars(); + +private: + Q_DISABLE_COPY(pqCategoryToolbarsBehavior) + + QPointer<QMainWindow> MainWindow; + QPointer<pqProxyGroupMenuManager> MenuManager; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqChangePipelineInputReaction.cxx b/Qt/ApplicationComponents/pqChangePipelineInputReaction.cxx new file mode 100644 index 0000000000..bebf14d73d --- /dev/null +++ b/Qt/ApplicationComponents/pqChangePipelineInputReaction.cxx @@ -0,0 +1,141 @@ +/*========================================================================= + + Program: ParaView + Module: pqChangePipelineInputReaction.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 "pqChangePipelineInputReaction.h" + +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFilterInputDialog.h" +#include "pqOutputPort.h" +#include "pqPipelineFilter.h" +#include "pqPipelineModel.h" +#include "pqServerManagerModel.h" +#include "pqServerManagerSelectionModel.h" +#include "pqUndoStack.h" +#include "vtkSMInputProperty.h" +#include "vtkSMProxy.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqChangePipelineInputReaction::pqChangePipelineInputReaction( + QAction* parentObject) +: Superclass(parentObject) +{ + pqApplicationCore* core = pqApplicationCore::instance(); + QObject::connect(core->getSelectionModel(), + SIGNAL( + selectionChanged(const pqServerManagerSelection&, + const pqServerManagerSelection&)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqChangePipelineInputReaction::updateEnableState() +{ + pqServerManagerSelectionModel* selModel= + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection& selection = *(selModel->selectedItems()); + if (selection.size() != 1) + { + this->parentAction()->setEnabled(false); + return; + } + pqPipelineFilter* filter = qobject_cast<pqPipelineFilter*>(selection[0]); + if (filter == NULL || filter->modifiedState() == pqProxy::UNINITIALIZED) + { + this->parentAction()->setEnabled(false); + return; + } + + this->parentAction()->setEnabled(true); +} + +//----------------------------------------------------------------------------- +void pqChangePipelineInputReaction::changeInput() +{ + pqServerManagerSelectionModel* selModel= + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection& selection = *(selModel->selectedItems()); + + // The change input dialog only supports one filter at a time. + if (selection.size() != 1) + { + qCritical() << "No active selection."; + return; + } + + pqPipelineFilter *filter = + qobject_cast<pqPipelineFilter *>(selection[0]); + if (!filter) + { + qCritical() << "No active filter."; + return; + } + + pqFilterInputDialog dialog(pqCoreUtilities::mainWidget()); + dialog.setObjectName("ChangeInputDialog"); + pqServerManagerModel *smModel = + pqApplicationCore::instance()->getServerManagerModel(); + pqPipelineModel model(*smModel); + dialog.setModelAndFilter(&model, filter, filter->getNamedInputs()); + if (QDialog::Accepted == dialog.exec()) + { + BEGIN_UNDO_SET(QString("Change Input for %1").arg( + filter->getSMName())); + for (int cc=0; cc < filter->getNumberOfInputPorts(); cc++) + { + QString inputPortName = filter->getInputPortName(cc); + QList<pqOutputPort*> inputs = dialog.getFilterInputs(inputPortName); + + vtkstd::vector<vtkSMProxy*> inputPtrs; + vtkstd::vector<unsigned int> inputPorts; + + foreach (pqOutputPort* opport, inputs) + { + inputPtrs.push_back(opport->getSource()->getProxy()); + inputPorts.push_back(opport->getPortNumber()); + } + + vtkSMInputProperty* ip =vtkSMInputProperty::SafeDownCast( + filter->getProxy()->GetProperty( + inputPortName.toAscii().data())); + ip->SetProxies(inputPtrs.size(), &inputPtrs[0], &inputPorts[0]); + } + filter->getProxy()->UpdateVTKObjects(); + END_UNDO_SET(); + + // render all views + pqApplicationCore::instance()->render(); + } +} + diff --git a/Qt/ApplicationComponents/pqChangePipelineInputReaction.h b/Qt/ApplicationComponents/pqChangePipelineInputReaction.h new file mode 100644 index 0000000000..2a1a9093df --- /dev/null +++ b/Qt/ApplicationComponents/pqChangePipelineInputReaction.h @@ -0,0 +1,65 @@ +/*========================================================================= + + Program: ParaView + Module: pqChangePipelineInputReaction.h + + 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. + +========================================================================*/ +#ifndef __pqChangePipelineInputReaction_h +#define __pqChangePipelineInputReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction for change pipeline input for the currently selected element. +class PQAPPLICATIONCOMPONENTS_EXPORT pqChangePipelineInputReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqChangePipelineInputReaction(QAction* parent=0); + + /// Changes the input for the active source. + static void changeInput(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqChangePipelineInputReaction::changeInput(); } + +private: + Q_DISABLE_COPY(pqChangePipelineInputReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqColorToolbar.cxx b/Qt/ApplicationComponents/pqColorToolbar.cxx new file mode 100644 index 0000000000..c8bb5632ee --- /dev/null +++ b/Qt/ApplicationComponents/pqColorToolbar.cxx @@ -0,0 +1,62 @@ +/*========================================================================= + + Program: ParaView + Module: pqColorToolbar.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 "pqColorToolbar.h" +#include "ui_pqColorToolbar.h" + +#include "pqActiveObjects.h" +#include "pqDisplayColorWidget.h" +#include "pqEditColorMapReaction.h" +#include "pqResetScalarRangeReaction.h" +#include "pqScalarBarVisibilityReaction.h" +#include "pqSetName.h" + +//----------------------------------------------------------------------------- +void pqColorToolbar::constructor() +{ + Ui::pqColorToolbar ui; + ui.setupUi(this); + + new pqScalarBarVisibilityReaction(ui.actionScalarBarVisibility); + new pqEditColorMapReaction(ui.actionEditColorMap); + new pqResetScalarRangeReaction(ui.actionResetRange); + + pqDisplayColorWidget* display_color = new pqDisplayColorWidget(this) + << pqSetName("displayColor"); + this->addWidget(display_color); + + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(representationChanged(pqDataRepresentation*)), + display_color, + SLOT(setRepresentation(pqDataRepresentation*))); +} + + diff --git a/Qt/ApplicationComponents/pqColorToolbar.h b/Qt/ApplicationComponents/pqColorToolbar.h new file mode 100644 index 0000000000..7c6cbf761b --- /dev/null +++ b/Qt/ApplicationComponents/pqColorToolbar.h @@ -0,0 +1,64 @@ +/*========================================================================= + + Program: ParaView + Module: pqColorToolbar.h + + 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. + +========================================================================*/ +#ifndef __pqColorToolbar_h +#define __pqColorToolbar_h + +#include <QToolBar> +#include "pqApplicationComponentsExport.h" + +/// pqColorToolbar is the toolbar that allows the user to choose the scalar +/// color or solid color for the active representation. +class PQAPPLICATIONCOMPONENTS_EXPORT pqColorToolbar : public QToolBar +{ + Q_OBJECT + typedef QToolBar Superclass; +public: + pqColorToolbar(const QString& title, QWidget* parentObject=0) + : Superclass(title, parentObject) + { + this->constructor(); + } + pqColorToolbar(QWidget* parentObject=0) + : Superclass(parentObject) + { + this->constructor(); + } + +private: + Q_DISABLE_COPY(pqColorToolbar) + + void constructor(); +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCommandLineOptionsBehavior.cxx b/Qt/ApplicationComponents/pqCommandLineOptionsBehavior.cxx new file mode 100644 index 0000000000..28bc292238 --- /dev/null +++ b/Qt/ApplicationComponents/pqCommandLineOptionsBehavior.cxx @@ -0,0 +1,207 @@ +/*========================================================================= + + Program: ParaView + Module: pqCommandLineOptionsBehavior.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 "pqCommandLineOptionsBehavior.h" + +#include "pqActiveObjects.h" +#include "pqComponentsTestUtility.h" +#include "pqCoreUtilities.h" +#include "pqDeleteReaction.h" +#include "pqEventDispatcher.h" +#include "pqFileDialog.h" +#include "pqLoadDataReaction.h" +#include "pqLoadStateReaction.h" +#include "pqObjectBuilder.h" +#include "pqOptions.h" +#include "pqPersistentMainWindowStateBehavior.h" +#include "pqPVApplicationCore.h" +#include "pqScalarsToColors.h" +#include "pqServerConnectReaction.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" +#include "pqTimeKeeper.h" +#include "pqUndoStack.h" +#include "pqRenderView.h" +#include "pqViewManager.h" +#include "vtkProcessModule.h" + +#include <QApplication> +#include <QDebug> +#include <QMainWindow> +#include <QStringList> +#include <QTimer> + +//----------------------------------------------------------------------------- +pqCommandLineOptionsBehavior::pqCommandLineOptionsBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + QTimer::singleShot(100, this, SLOT(processCommandLineOptions())); +} + +//----------------------------------------------------------------------------- +void pqCommandLineOptionsBehavior::processCommandLineOptions() +{ + pqOptions* options = pqOptions::SafeDownCast( + vtkProcessModule::GetProcessModule()->GetOptions()); + + // check for --server. + const char* serverresource_name = options->GetServerResourceName(); + if (serverresource_name) + { + pqServerConnectReaction::connectToServer(serverresource_name); + if (!pqActiveObjects::instance().activeServer()) + { + // FIXME: This warning is not showing up since pqAlwaysConnectedBehavior + // connects to a server. We need to check if active server is not same as + // requested server, then warn. + qCritical() << "Could not connect to requested server \"" + << serverresource_name + << "\". Creating default builtin connection."; + } + } + + // Now we are assured that some default server connection has been made + // (either the one requested by the user on the command line or simply the + // default one). + Q_ASSERT(pqActiveObjects::instance().activeServer() != 0); + + // check for --data option. + if (options->GetParaViewDataName()) + { + // We don't directly set the data file name instead use the dialog. This + // makes it possible to select a file group. + pqFileDialog dialog ( + pqActiveObjects::instance().activeServer(), + pqCoreUtilities::mainWidget(), + tr("Internal Open File"), QString(), + QString()); + dialog.setFileMode(pqFileDialog::ExistingFiles); + dialog.selectFile(options->GetParaViewDataName()); + pqLoadDataReaction::loadData(dialog.getSelectedFiles()); + } + else if (options->GetStateFileName()) + { + // check for --state option. (Bug #5711) + // NOTE: --data and --state cannnot be specifed at the same time. + pqLoadStateReaction::loadState(options->GetStateFileName()); + } + + if (options->GetNumberOfTestScripts() > 0) + { + QTimer::singleShot(1000, this, SLOT(playTests())); + } +} + +//----------------------------------------------------------------------------- +void pqCommandLineOptionsBehavior::playTests() +{ + pqOptions* options = pqOptions::SafeDownCast( + vtkProcessModule::GetProcessModule()->GetOptions()); + + pqPersistentMainWindowStateBehavior::saveState( + qobject_cast<QMainWindow*>(pqCoreUtilities::mainWidget())); + + bool success = true; + for (int cc=0; success && cc < options->GetNumberOfTestScripts(); cc++) + { + if (cc > 0) + { + this->resetApplication(); + } + + // Play the test script if specified. + pqTestUtility* testUtility = pqApplicationCore::instance()->testUtility(); + options->SetImageThreshold(options->GetTestImageThreshold(cc)); + cout << "Playing: " << options->GetTestScript(cc).toAscii().data() << endl; + success = testUtility->playTests(options->GetTestScript(cc)); + + if (success && !options->GetTestBaseline(cc).isEmpty()) + { + success = pqComponentsTestUtility::CompareView( + options->GetTestBaseline(cc), options->GetTestImageThreshold(cc), + options->GetTestDirectory()); + } + } + + if (options->GetExitAppWhenTestsDone()) + { + QApplication::instance()->exit(success? 0 : 1); + } +} + +//----------------------------------------------------------------------------- +void pqCommandLineOptionsBehavior::resetApplication() +{ + BEGIN_UNDO_EXCLUDE(); + + // delete all sources and representations + pqDeleteReaction::deleteAll(); + + // delete all views + QList<pqView*> current_views = + pqApplicationCore::instance()->getServerManagerModel()->findItems<pqView*>(); + foreach (pqView* view, current_views) + { + pqApplicationCore::instance()->getObjectBuilder()->destroy(view); + } + + // delete all looktables. + QList<pqScalarsToColors*> luts = + pqApplicationCore::instance()->getServerManagerModel()->findItems<pqScalarsToColors*>(); + foreach (pqScalarsToColors* lut, luts) + { + pqApplicationCore::instance()->getObjectBuilder()->destroy(lut); + } + + // reset view layout. + pqViewManager* viewManager = qobject_cast<pqViewManager*>( + pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + if (viewManager) + { + viewManager->reset(); + } + // create default render view. + pqApplicationCore::instance()->getObjectBuilder()->createView( + pqRenderView::renderViewType(), + pqActiveObjects::instance().activeServer()); + + // reset animation time. + pqActiveObjects::instance().activeServer()->getTimeKeeper()->setTime(0.0); + + // restore panels etc. + pqPersistentMainWindowStateBehavior::restoreState( + qobject_cast<QMainWindow*>(pqCoreUtilities::mainWidget())); + + pqEventDispatcher::processEventsAndWait(10); + + END_UNDO_EXCLUDE(); + CLEAR_UNDO_STACK(); +} diff --git a/Qt/ApplicationComponents/pqCommandLineOptionsBehavior.h b/Qt/ApplicationComponents/pqCommandLineOptionsBehavior.h new file mode 100644 index 0000000000..817889bce0 --- /dev/null +++ b/Qt/ApplicationComponents/pqCommandLineOptionsBehavior.h @@ -0,0 +1,63 @@ +/*========================================================================= + + Program: ParaView + Module: pqCommandLineOptionsBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqCommandLineOptionsBehavior_h +#define __pqCommandLineOptionsBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +/// @ingroup Behaviors +/// pqCommandLineOptionsBehavior processes command-line options on startup and +/// performs relevant actions such as loading data files, connecting to server +/// etc. +/// This also handles test playback and image comparison. +class PQAPPLICATIONCOMPONENTS_EXPORT pqCommandLineOptionsBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqCommandLineOptionsBehavior(QObject* parent=0); + + /// Used during testing to "initialize" application state as much as possible. + static void resetApplication(); + +protected slots: + void processCommandLineOptions(); + void playTests(); + +private: + Q_DISABLE_COPY(pqCommandLineOptionsBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCrashRecoveryBehavior.cxx b/Qt/ApplicationComponents/pqCrashRecoveryBehavior.cxx new file mode 100644 index 0000000000..41ea9be424 --- /dev/null +++ b/Qt/ApplicationComponents/pqCrashRecoveryBehavior.cxx @@ -0,0 +1,107 @@ +/*========================================================================= + + Program: ParaView + Module: pqCrashRecoveryBehavior.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 "pqCrashRecoveryBehavior.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqServerManagerModel.h" +#include "pqSettings.h" + +#include <QMessageBox> +#include <QFile> + +#define CrashRecoveryStateFile ".PV3CrashRecoveryState.pvsm" + +//----------------------------------------------------------------------------- +pqCrashRecoveryBehavior::pqCrashRecoveryBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + // Look for a crash recovery state file, nag user and load if desired. + pqSettings* settings = pqApplicationCore::instance()->settings(); + bool recoveryEnabled = settings->value("crashRecovery", false).toBool(); + if (recoveryEnabled && QFile::exists(CrashRecoveryStateFile)) + { + int recover = QMessageBox::question( + pqCoreUtilities::mainWidget(), + "ParaView3", + "A crash recovery state file has been found.\n" + "Would you like to restore ParaView to its pre-crash state?", + QMessageBox::Yes | QMessageBox::No, + QMessageBox::No); + if (recover==QMessageBox::Yes) + { + pqApplicationCore::instance()->loadState(CrashRecoveryStateFile, + pqActiveObjects::instance().activeServer()); + } + } + if (QFile::exists(CrashRecoveryStateFile)) + { + QFile::remove(CrashRecoveryStateFile); + } + QObject::connect(pqApplicationCore::instance()->getServerManagerModel(), + SIGNAL(dataUpdated(pqPipelineSource*)), + this, SLOT(delayedSaveRecoveryState())); + + this->Timer.setInterval(1000); + this->Timer.setSingleShot(true); + QObject::connect(&this->Timer, SIGNAL(timeout()),this, + SLOT(saveRecoveryState())); +} + +//----------------------------------------------------------------------------- +pqCrashRecoveryBehavior::~pqCrashRecoveryBehavior() +{ + // Paraview is closing all is well, remove the crash + // recovery file. + if (QFile::exists(CrashRecoveryStateFile)) + { + QFile::remove(CrashRecoveryStateFile); + } +} + +//----------------------------------------------------------------------------- +void pqCrashRecoveryBehavior::delayedSaveRecoveryState() +{ + this->Timer.start(); +} + +//----------------------------------------------------------------------------- +void pqCrashRecoveryBehavior::saveRecoveryState() +{ + pqSettings* settings = pqApplicationCore::instance()->settings(); + bool recoveryEnabled = settings->value("crashRecovery", false).toBool(); + if (recoveryEnabled) + { + pqApplicationCore::instance()->saveState(CrashRecoveryStateFile); + } +} diff --git a/Qt/ApplicationComponents/pqCrashRecoveryBehavior.h b/Qt/ApplicationComponents/pqCrashRecoveryBehavior.h new file mode 100644 index 0000000000..3d1fcb055c --- /dev/null +++ b/Qt/ApplicationComponents/pqCrashRecoveryBehavior.h @@ -0,0 +1,64 @@ +/*========================================================================= + + Program: ParaView + Module: pqCrashRecoveryBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqCrashRecoveryBehavior_h +#define __pqCrashRecoveryBehavior_h + +#include <QObject> +#include <QTimer> +#include "pqApplicationComponentsExport.h" + +/// @ingroup Behaviors +/// pqCrashRecoveryBehavior manages saving/loading of crash recovery state. If +/// you want your application to be able to recover from crashes, simply +/// instantiate this behavior and ensure that state saving/loading works +/// correctly. +class PQAPPLICATIONCOMPONENTS_EXPORT pqCrashRecoveryBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqCrashRecoveryBehavior(QObject* parent=0); + ~pqCrashRecoveryBehavior(); + +protected slots: + void delayedSaveRecoveryState(); + void saveRecoveryState(); + +private: + Q_DISABLE_COPY(pqCrashRecoveryBehavior) + + QTimer Timer; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqCreateCustomFilterReaction.cxx b/Qt/ApplicationComponents/pqCreateCustomFilterReaction.cxx new file mode 100644 index 0000000000..d5e1130721 --- /dev/null +++ b/Qt/ApplicationComponents/pqCreateCustomFilterReaction.cxx @@ -0,0 +1,110 @@ +/*========================================================================= + + Program: ParaView + Module: pqCreateCustomFilterReaction.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 "pqCreateCustomFilterReaction.h" + +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqCustomFilterDefinitionModel.h" +#include "pqCustomFilterDefinitionWizard.h" +#include "pqServerManagerSelectionModel.h" + +#include <QDebug> +#include <QMessageBox> + +//----------------------------------------------------------------------------- +pqCreateCustomFilterReaction::pqCreateCustomFilterReaction(QAction* parentObject) + : Superclass(parentObject) +{ + pqApplicationCore* core = pqApplicationCore::instance(); + QObject::connect(core->getSelectionModel(), + SIGNAL(selectionChanged(const pqServerManagerSelection&, + const pqServerManagerSelection&)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqCreateCustomFilterReaction::updateEnableState() +{ + pqServerManagerSelectionModel* selModel= + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection& selection = *(selModel->selectedItems()); + this->parentAction()->setEnabled(selection.size() > 0); +} + +//----------------------------------------------------------------------------- +void pqCreateCustomFilterReaction::createCustomFilter() +{ + // Get the selected sources from the application core. Notify the user + // if the selection is empty. + QWidget *mainWin = pqCoreUtilities::mainWidget(); + const pqServerManagerSelection *selections = + pqApplicationCore::instance()->getSelectionModel()->selectedItems(); + if (selections->size() == 0) + { + qCritical() << + "No pipeline objects are selected." + "To create a new custom filter, select the sources and " + "filters you want. Then, launch the creation wizard."; + return; + } + + // Create a custom filter definition model with the pipeline + // selection. The model only accepts pipeline sources. Notify the + // user if the model is empty. + pqCustomFilterDefinitionModel custom; + custom.setContents(selections); + if (!custom.hasChildren(QModelIndex())) + { + QMessageBox::warning(mainWin, "Create Custom Filter Error", + "The selected objects cannot be used to make a custom filter.\n" + "To create a new custom filter, select the sources and " + "filters you want.\nThen, launch the creation wizard.", + QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton); + return; + } + + pqCustomFilterDefinitionWizard wizard(&custom, mainWin); + if (wizard.exec() == QDialog::Accepted) + { + // Create a new compound proxy from the custom filter definition. + wizard.createCustomFilter(); + // QString customName = wizard.getCustomFilterName(); + // Not sure I want this anymore. + // // Launch the custom filter manager in case the user wants to save + // // the compound proxy definition. Select the new custom filter for + // // the user. + // this->onToolsManageCustomFilters(); + // this->Implementation->CustomFilterManager->selectCustomFilter(customName); + } +} + diff --git a/Qt/ApplicationComponents/pqCreateCustomFilterReaction.h b/Qt/ApplicationComponents/pqCreateCustomFilterReaction.h new file mode 100644 index 0000000000..aacab18cb8 --- /dev/null +++ b/Qt/ApplicationComponents/pqCreateCustomFilterReaction.h @@ -0,0 +1,66 @@ +/*========================================================================= + + Program: ParaView + Module: pqCreateCustomFilterReaction.h + + 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. + +========================================================================*/ +#ifndef __pqCreateCustomFilterReaction_h +#define __pqCreateCustomFilterReaction_h + +#include "pqReaction.h" + +/// pqCreateCustomFilterReaction popups the create-custom-filter wizard for the +/// active selection. +class PQAPPLICATIONCOMPONENTS_EXPORT pqCreateCustomFilterReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqCreateCustomFilterReaction(QAction* parent); + + /// Create custom filter. + static void createCustomFilter(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqCreateCustomFilterReaction::createCustomFilter(); } + +private: + Q_DISABLE_COPY(pqCreateCustomFilterReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqDataTimeStepBehavior.cxx b/Qt/ApplicationComponents/pqDataTimeStepBehavior.cxx new file mode 100644 index 0000000000..afb13e542d --- /dev/null +++ b/Qt/ApplicationComponents/pqDataTimeStepBehavior.cxx @@ -0,0 +1,87 @@ +/*========================================================================= + + Program: ParaView + Module: pqDataTimeStepBehavior.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 "pqDataTimeStepBehavior.h" + +#include "pqAnimationScene.h" +#include "pqApplicationCore.h" +#include "pqObjectBuilder.h" +#include "pqPipelineSource.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" +#include "pqTimeKeeper.h" +#include "vtkSMPropertyHelper.h" +#include "vtkSMProxy.h" + +//----------------------------------------------------------------------------- +pqDataTimeStepBehavior::pqDataTimeStepBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + QObject::connect(pqApplicationCore::instance()->getObjectBuilder(), + SIGNAL(readerCreated(pqPipelineSource*, const QStringList&)), + this, SLOT(onReaderCreated(pqPipelineSource*)), + Qt::QueuedConnection); +} + +//----------------------------------------------------------------------------- +void pqDataTimeStepBehavior::onReaderCreated(pqPipelineSource* reader) +{ + return; // disabled for now. + pqTimeKeeper* timeKeeper = reader->getServer()->getTimeKeeper(); + pqAnimationScene* scene = + pqApplicationCore::instance()->getServerManagerModel()->findItems<pqAnimationScene*>( + reader->getServer())[0]; + vtkSMProxy* readerProxy = reader->getProxy(); + if (readerProxy->GetProperty("TimestepValues")) + { + const double *timesteps = vtkSMPropertyHelper(readerProxy, + "TimestepValues").GetAsDoublePtr(); + unsigned int num_timesteps = vtkSMPropertyHelper(readerProxy, + "TimestepValues").GetNumberOfElements(); + if (num_timesteps > 1) + { + if (timeKeeper->getTime() < timesteps[num_timesteps-1]) + { + scene->setAnimationTime(timesteps[num_timesteps-1]); + } + } + } + else if (readerProxy->GetProperty("TimeRange")) + { + int max_time = vtkSMPropertyHelper(readerProxy, "TimeRange").GetAsDouble(1); + if (timeKeeper->getTime() < max_time) + { + scene->setAnimationTime(max_time); + } + } +} + + diff --git a/Qt/ApplicationComponents/pqDataTimeStepBehavior.h b/Qt/ApplicationComponents/pqDataTimeStepBehavior.h new file mode 100644 index 0000000000..11eb13ad97 --- /dev/null +++ b/Qt/ApplicationComponents/pqDataTimeStepBehavior.h @@ -0,0 +1,60 @@ +/*========================================================================= + + Program: ParaView + Module: pqDataTimeStepBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqDataTimeStepBehavior_h +#define __pqDataTimeStepBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class pqPipelineSource; + +/// @ingroup Behaviors +/// pqDataTimeStepBehavior ensures that whenever a file is opened with more +/// than 1 timestep, the application time >= the time for the last timestep. +class PQAPPLICATIONCOMPONENTS_EXPORT pqDataTimeStepBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqDataTimeStepBehavior(QObject* parent=0); + +protected slots: + /// called when a reader is created. + void onReaderCreated(pqPipelineSource* reader); + +private: + Q_DISABLE_COPY(pqDataTimeStepBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqDefaultMainWindow.cxx b/Qt/ApplicationComponents/pqDefaultMainWindow.cxx new file mode 100644 index 0000000000..b12be934fb --- /dev/null +++ b/Qt/ApplicationComponents/pqDefaultMainWindow.cxx @@ -0,0 +1,55 @@ +/*========================================================================= + + Program: ParaView + Module: pqDefaultMainWindow.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 "pqDefaultMainWindow.h" +#include "ui_pqDefaultMainWindow.h" + +class pqDefaultMainWindow::pqInternals : public Ui::MainWindow +{ +}; + +//----------------------------------------------------------------------------- +pqDefaultMainWindow::pqDefaultMainWindow( + QWidget* parentObject, Qt::WindowFlags winFlags): + Superclass(parentObject, winFlags) +{ + this->Internals = new pqInternals(); + this->Internals->setupUi(this); +} + +//----------------------------------------------------------------------------- +pqDefaultMainWindow::~pqDefaultMainWindow() +{ + delete this->Internals; + this->Internals = 0; +} + + diff --git a/Qt/ApplicationComponents/pqDefaultMainWindow.h b/Qt/ApplicationComponents/pqDefaultMainWindow.h new file mode 100644 index 0000000000..1d74aced7a --- /dev/null +++ b/Qt/ApplicationComponents/pqDefaultMainWindow.h @@ -0,0 +1,55 @@ +/*========================================================================= + + Program: ParaView + Module: pqDefaultMainWindow.h + + 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. + +========================================================================*/ +#ifndef __pqDefaultMainWindow_h +#define __pqDefaultMainWindow_h + +#include <QMainWindow> +#include "pqApplicationComponentsExport.h" +class PQAPPLICATIONCOMPONENTS_EXPORT pqDefaultMainWindow : public QMainWindow +{ + Q_OBJECT + typedef QMainWindow Superclass; +public: + pqDefaultMainWindow(QWidget* parent=0, Qt::WindowFlags flags=0); + ~pqDefaultMainWindow(); + +private: + pqDefaultMainWindow(const pqDefaultMainWindow&); // Not implemented. + void operator=(const pqDefaultMainWindow&); // Not implemented. + + class pqInternals; + pqInternals* Internals; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqDefaultViewBehavior.cxx b/Qt/ApplicationComponents/pqDefaultViewBehavior.cxx new file mode 100644 index 0000000000..524959adb0 --- /dev/null +++ b/Qt/ApplicationComponents/pqDefaultViewBehavior.cxx @@ -0,0 +1,112 @@ +/*========================================================================= + + Program: ParaView + Module: pqDefaultViewBehavior.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 "pqDefaultViewBehavior.h" + +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqObjectBuilder.h" +#include "pqRenderView.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" +#include "pqSettings.h" +#include "vtkProcessModule.h" +#include "vtkPVDisplayInformation.h" + +#include <QMessageBox> + +//----------------------------------------------------------------------------- +pqDefaultViewBehavior::pqDefaultViewBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + QObject::connect(pqApplicationCore::instance()->getServerManagerModel(), + SIGNAL(serverAdded(pqServer*)), + this, SLOT(onServerCreation(pqServer*))); +} + +//----------------------------------------------------------------------------- +void pqDefaultViewBehavior::onServerCreation(pqServer* server) +{ + pqApplicationCore* core = pqApplicationCore::instance(); + + // Check if it is possible to access display on the server. If not, we show a + // message. + vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); + vtkPVDisplayInformation* di = vtkPVDisplayInformation::New(); + pm->GatherInformation(server->GetConnectionID(), + vtkProcessModule::RENDER_SERVER, di, pm->GetProcessModuleID()); + if (!di->GetCanOpenDisplay()) + { + QMessageBox::warning(pqCoreUtilities::mainWidget(), + tr("Server DISPLAY not accessible"), + tr("Display is not accessible on the server side.\n" + "Remote rendering will be disabled."), + QMessageBox::Ok); + } + di->Delete(); + pqSettings* settings = core->settings(); + QString curView = settings->value("/defaultViewType", + pqRenderView::renderViewType()).toString(); + if (curView != "None" && !curView.isEmpty()) + { + // When a server is created, we create a new render view for it. + if (pqView* view = core->getObjectBuilder()->createView(curView, server)) + { + view->render(); + } + } + + // Show warning dialogs before server times out. + QObject::connect(server, SIGNAL(fiveMinuteTimeoutWarning()), + this, SLOT(fiveMinuteTimeoutWarning())); + QObject::connect(server, SIGNAL(finalTimeoutWarning()), + this, SLOT(finalTimeoutWarning())); +} + +//----------------------------------------------------------------------------- +void pqDefaultViewBehavior::fiveMinuteTimeoutWarning() +{ + QMessageBox::warning(pqCoreUtilities::mainWidget(), + tr("Server Timeout Warning"), + tr("The server connection will timeout under 5 minutes.\n" + "Please save your work."), + QMessageBox::Ok); +} + +//----------------------------------------------------------------------------- +void pqDefaultViewBehavior::finalTimeoutWarning() +{ + QMessageBox::critical(pqCoreUtilities::mainWidget(), + tr("Server Timeout Warning"), + tr("The server connection will timeout shortly.\n" + "Please save your work."), + QMessageBox::Ok); +} diff --git a/Qt/ApplicationComponents/pqDefaultViewBehavior.h b/Qt/ApplicationComponents/pqDefaultViewBehavior.h new file mode 100644 index 0000000000..25848035e6 --- /dev/null +++ b/Qt/ApplicationComponents/pqDefaultViewBehavior.h @@ -0,0 +1,62 @@ +/*========================================================================= + + Program: ParaView + Module: pqDefaultViewBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqDefaultViewBehavior_h +#define __pqDefaultViewBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class pqServer; + +/// @ingroup Behaviors +/// pqDefaultViewBehavior ensures that when a new server connection is made, +/// the default view of the user-specified type is automatically created. +/// This also has the logic to warn before server connection timesout. +class PQAPPLICATIONCOMPONENTS_EXPORT pqDefaultViewBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqDefaultViewBehavior(QObject* parent=0); + +protected slots: + void onServerCreation(pqServer*); + void fiveMinuteTimeoutWarning(); + void finalTimeoutWarning(); + +private: + Q_DISABLE_COPY(pqDefaultViewBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqDeleteBehavior.cxx b/Qt/ApplicationComponents/pqDeleteBehavior.cxx new file mode 100644 index 0000000000..653291cdf9 --- /dev/null +++ b/Qt/ApplicationComponents/pqDeleteBehavior.cxx @@ -0,0 +1,119 @@ +/*========================================================================= + + Program: ParaView + Module: pqDeleteBehavior.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 "pqDeleteBehavior.h" + +#include "pqApplicationCore.h" +#include "pqDataRepresentation.h" +#include "pqObjectBuilder.h" +#include "pqOutputPort.h" +#include "pqPipelineFilter.h" +#include "pqServer.h" +#include "pqServerManagerSelectionModel.h" +#include "pqView.h" + +//----------------------------------------------------------------------------- +pqDeleteBehavior::pqDeleteBehavior(QObject* parentObject): + Superclass(parentObject) +{ + QObject::connect( + pqApplicationCore::instance()->getObjectBuilder(), + SIGNAL(destroying(pqPipelineSource*)), + this, SLOT(removeSource(pqPipelineSource*))); +} + +//----------------------------------------------------------------------------- +void pqDeleteBehavior::removeSource(pqPipelineSource* source) +{ + // FIXME: updating of selection must happen even is the source is removed + // from python script or undo redo. + // If the source is selected, remove it from the selection. + pqApplicationCore *core = pqApplicationCore::instance(); + pqServerManagerSelectionModel *selectionModel = core->getSelectionModel(); + pqPipelineFilter *filter = qobject_cast<pqPipelineFilter *>(source); + if (selectionModel->isSelected(source) && selectionModel->selectedItems()->size() == 1) + { + // If the item is a filter and has only one input, set the + // input as the current item. Otherwise, select the server. + if (filter && filter->getInputCount() == 1) + { + selectionModel->setCurrentItem(filter->getInput(0), + pqServerManagerSelectionModel::ClearAndSelect); + } + else + { + selectionModel->setCurrentItem(source->getServer(), + pqServerManagerSelectionModel::ClearAndSelect); + } + } + + QList<pqView*> views = source->getViews(); + if (filter) + { + // Make all inputs visible in views that the removed source + // is currently visible in. + QList<pqOutputPort*> inputs = filter->getInputs(); + foreach(pqView* view, views) + { + pqDataRepresentation* src_disp = source->getRepresentation(view); + if (!src_disp || !src_disp->isVisible()) + { + continue; + } + // For each input, if it is not visible in any of the views + // that the delete filter is visible, we make the input visible. + for(int cc=0; cc < inputs.size(); ++cc) + { + pqPipelineSource* input = inputs[cc]->getSource(); + pqDataRepresentation* input_disp = input->getRepresentation(view); + if (input_disp && !input_disp->isVisible()) + { + input_disp->setVisible(true); + } + } + } + +// FIXME --- TODO +// if (filter->getProxy()->GetProperty("TimestepValues") +// || filter->getProxy()->GetProperty("TimeRange") ) +// { +// pqMainWindowCoreHideInputTimes(filter, false); +// } + } + + foreach (pqView* view, views) + { + // this triggers an eventually render call. + view->render(); + } +} + + diff --git a/Qt/ApplicationComponents/pqDeleteBehavior.h b/Qt/ApplicationComponents/pqDeleteBehavior.h new file mode 100644 index 0000000000..ac827c55e2 --- /dev/null +++ b/Qt/ApplicationComponents/pqDeleteBehavior.h @@ -0,0 +1,63 @@ +/*========================================================================= + + Program: ParaView + Module: pqDeleteBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqDeleteBehavior_h +#define __pqDeleteBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class pqPipelineSource; + +/// @ingroup Behaviors +/// pqDeleteBehavior handles a multitude of actions to be performed when a +/// source is deleted. This includes: +/// * make the input visible, if any +/// * make the input active, if any +/// This makes it easier to use the ParaView client when a source is deleted. +class PQAPPLICATIONCOMPONENTS_EXPORT pqDeleteBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqDeleteBehavior(QObject* parentObject=0); + +protected slots: + /// Called when the GUI initiates a source's removal. + void removeSource(pqPipelineSource* source); + +private: + Q_DISABLE_COPY(pqDeleteBehavior); +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqDeleteReaction.cxx b/Qt/ApplicationComponents/pqDeleteReaction.cxx new file mode 100644 index 0000000000..b4df66573f --- /dev/null +++ b/Qt/ApplicationComponents/pqDeleteReaction.cxx @@ -0,0 +1,176 @@ +/*========================================================================= + + Program: ParaView + Module: pqDeleteReaction.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 "pqDeleteReaction.h" + +#include "pqApplicationCore.h" +#include "pqOutputPort.h" +#include "pqPipelineSource.h" +#include "pqServerManagerModel.h" +#include "pqServerManagerSelectionModel.h" +#include "pqUndoStack.h" +#include "pqObjectBuilder.h" + +#include <QDebug> +#include <QSet> + +//----------------------------------------------------------------------------- +pqDeleteReaction::pqDeleteReaction(QAction* parentObject, bool delete_all) + : Superclass(parentObject) +{ + this->DeleteAll = delete_all; + if (!this->DeleteAll) + { + pqApplicationCore* core = pqApplicationCore::instance(); + QObject::connect(core->getSelectionModel(), + SIGNAL(selectionChanged(const pqServerManagerSelection&, + const pqServerManagerSelection&)), + this, SLOT(updateEnableState())); + } + + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqDeleteReaction::updateEnableState() +{ + if (this->DeleteAll) + { + this->parentAction()->setEnabled(true); + return; + } + + this->parentAction()->setEnabled(this->canDeleteSelected()); +} + +//----------------------------------------------------------------------------- +static void pqDeleteReactionGetSelectedSet( + const pqServerManagerSelection& selection, + QSet<pqPipelineSource*>& selectedSources) +{ + foreach (pqServerManagerModelItem* item, selection) + { + pqOutputPort* port = qobject_cast<pqOutputPort*>(item); + pqPipelineSource* source = port? port->getSource(): + qobject_cast<pqPipelineSource*>(item); + if (source) + { + selectedSources.insert(source); + } + } +} + +//----------------------------------------------------------------------------- +bool pqDeleteReaction::canDeleteSelected() +{ + pqServerManagerSelectionModel* selModel= + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection& selection = *(selModel->selectedItems()); + if (selection.size() == 0) + { + return false; + } + + QSet<pqPipelineSource*> selectedSources; + ::pqDeleteReactionGetSelectedSet(selection, selectedSources); + + if (selectedSources.size() == 0) + { + return false; + } + + // Now ensure that all consumers for the current sources don't have consumers + // outside the selectedSources, then alone can we delete the selected items. + foreach (pqPipelineSource* source, selectedSources) + { + QList<pqPipelineSource*> consumers = source->getAllConsumers(); + for (int cc=0; cc < consumers.size(); cc++) + { + pqPipelineSource* consumer = consumers[cc]; + if (consumer && !selectedSources.contains(consumer)) + { + return false; + } + } + } + + return true; +} + +//----------------------------------------------------------------------------- +void pqDeleteReaction::deleteAll() +{ + BEGIN_UNDO_SET("Delete All"); + pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder(); + builder->destroyPipelineProxies(); + END_UNDO_SET(); + pqApplicationCore::instance()->render(); +} + +//----------------------------------------------------------------------------- +void pqDeleteReaction::deleteSelected() +{ + if (!pqDeleteReaction::canDeleteSelected()) + { + qCritical() << "Cannot delete selected "; + return; + } + + pqServerManagerSelectionModel* selModel= + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection& selection = *(selModel->selectedItems()); + QSet<pqPipelineSource*> selectedSources; + ::pqDeleteReactionGetSelectedSet(selection, selectedSources); + + if (selectedSources.size() == 1) + { + pqPipelineSource* source = (*selectedSources.begin()); + BEGIN_UNDO_SET(QString("Delete %1").arg(source->getSMName())); + } + else + { + BEGIN_UNDO_SET("Delete Selection"); + } + while (selectedSources.size() > 0) + { + foreach (pqPipelineSource* source, selectedSources) + { + if (source && source->getNumberOfConsumers() == 0) + { + selectedSources.remove(source); + pqApplicationCore::instance()->getObjectBuilder()->destroy(source); + break; + } + } + } + END_UNDO_SET(); + pqApplicationCore::instance()->render(); +} diff --git a/Qt/ApplicationComponents/pqDeleteReaction.h b/Qt/ApplicationComponents/pqDeleteReaction.h new file mode 100644 index 0000000000..080e52ffcf --- /dev/null +++ b/Qt/ApplicationComponents/pqDeleteReaction.h @@ -0,0 +1,78 @@ +/*========================================================================= + + Program: ParaView + Module: pqDeleteReaction.h + + 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. + +========================================================================*/ +#ifndef __pqDeleteReaction_h +#define __pqDeleteReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction for delete sources (all or selected only). +class PQAPPLICATIONCOMPONENTS_EXPORT pqDeleteReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// if delete_all is false, then only selected items will be deleted if + /// possible. + pqDeleteReaction(QAction* parent, bool delete_all=false); + + static void deleteAll(); + static void deleteSelected(); + static bool canDeleteSelected(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { + if (this->DeleteAll) + { + pqDeleteReaction::deleteAll(); + } + else + { + pqDeleteReaction::deleteSelected(); + } + } + +private: + Q_DISABLE_COPY(pqDeleteReaction) + bool DeleteAll; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqEditCameraReaction.cxx b/Qt/ApplicationComponents/pqEditCameraReaction.cxx new file mode 100644 index 0000000000..729f11bb18 --- /dev/null +++ b/Qt/ApplicationComponents/pqEditCameraReaction.cxx @@ -0,0 +1,107 @@ +/*========================================================================= + + Program: ParaView + Module: pqEditCameraReaction.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 "pqEditCameraReaction.h" + +#include "pqActiveObjects.h" +#include "pqCameraDialog.h" +#include "pqCoreUtilities.h" +#include "pqRenderView.h" + +//----------------------------------------------------------------------------- +pqEditCameraReaction::pqEditCameraReaction(QAction* parentObject, pqView* view) + : Superclass(parentObject), View(view) +{ + if (!view) + { + QObject::connect(&pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + } + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqEditCameraReaction::updateEnableState() +{ + pqView *view = this->View; + if (!view) + { + view = pqActiveObjects::instance().activeView(); + } + if (qobject_cast<pqRenderView*>(view)) + { + this->parentAction()->setEnabled(true); + } + else + { + this->parentAction()->setEnabled(false); + } +} + +//----------------------------------------------------------------------------- +void pqEditCameraReaction::editCamera(pqView* view) +{ + static QPointer<pqCameraDialog> dialog; + + pqRenderView* renModule = qobject_cast<pqRenderView*>(view); + if (!renModule) + { + if (dialog) + { + dialog->SetCameraGroupsEnabled(false); + } + return; + } + + if (!dialog) + { + dialog = new pqCameraDialog(pqCoreUtilities::mainWidget()); + dialog->setWindowTitle("Adjust Camera"); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->setRenderModule(renModule); + dialog->show(); + } + else + { + dialog->SetCameraGroupsEnabled(true); + dialog->setRenderModule(renModule); + dialog->raise(); + dialog->activateWindow(); + } +} + +//----------------------------------------------------------------------------- +void pqEditCameraReaction::onTriggered() +{ + pqEditCameraReaction::editCamera(this->View); +} + + diff --git a/Qt/ApplicationComponents/pqEditCameraReaction.h b/Qt/ApplicationComponents/pqEditCameraReaction.h new file mode 100644 index 0000000000..61815c9d52 --- /dev/null +++ b/Qt/ApplicationComponents/pqEditCameraReaction.h @@ -0,0 +1,67 @@ +/*========================================================================= + + Program: ParaView + Module: pqEditCameraReaction.h + + 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. + +========================================================================*/ +#ifndef __pqEditCameraReaction_h +#define __pqEditCameraReaction_h + +#include "pqReaction.h" +#include <QPointer> + +class pqView; + +/// @ingroup Reactions +/// pqEditCameraReaction is a reaction to show the edit-camera dialog. +class PQAPPLICATIONCOMPONENTS_EXPORT pqEditCameraReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqEditCameraReaction(QAction* parent, pqView* view=0); + + /// Shows the dialog for the view. + static void editCamera(pqView*); +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered(); + +private: + Q_DISABLE_COPY(pqEditCameraReaction) + QPointer<pqView> View; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqEditColorMapReaction.cxx b/Qt/ApplicationComponents/pqEditColorMapReaction.cxx new file mode 100644 index 0000000000..3677a83818 --- /dev/null +++ b/Qt/ApplicationComponents/pqEditColorMapReaction.cxx @@ -0,0 +1,117 @@ +/*========================================================================= + + Program: ParaView + Module: pqEditColorMapReaction.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 "pqEditColorMapReaction.h" + +#include "pqActiveObjects.h" +#include "pqColorScaleEditor.h" +#include "pqCoreUtilities.h" +#include "pqPipelineRepresentation.h" +#include "pqSMAdaptor.h" +#include "pqUndoStack.h" +#include "vtkSMProxy.h" + +#include <QDebug> +#include <QColorDialog> + +//----------------------------------------------------------------------------- +pqEditColorMapReaction::pqEditColorMapReaction(QAction* parentObject) + : Superclass(parentObject) +{ + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(representationChanged(pqDataRepresentation*)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqEditColorMapReaction::updateEnableState() +{ + pqPipelineRepresentation* repr = qobject_cast<pqPipelineRepresentation*>( + pqActiveObjects::instance().activeRepresentation()); + this->parentAction()->setEnabled(repr != NULL); +} + +//----------------------------------------------------------------------------- +void pqEditColorMapReaction::editColorMap() +{ + pqPipelineRepresentation* repr = qobject_cast<pqPipelineRepresentation*>( + pqActiveObjects::instance().activeRepresentation()); + if (!repr) + { + qCritical() << "No active representation."; + return; + } + + if (repr->getColorField() == pqPipelineRepresentation::solidColor()) + { + // Get the color property. + vtkSMProxy *proxy = repr->getProxy(); + vtkSMProperty *diffuse = proxy->GetProperty("DiffuseColor"); + if (diffuse) + { + // Get the current color from the property. + QList<QVariant> rgb = + pqSMAdaptor::getMultipleElementProperty(diffuse); + QColor color(Qt::white); + if(rgb.size() >= 3) + { + color = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), + rgb[2].toDouble()); + } + + // Let the user pick a new color. + color = QColorDialog::getColor(color, pqCoreUtilities::mainWidget()); + if(color.isValid()) + { + // Set the properties to the new color. + rgb.clear(); + rgb.append(color.redF()); + rgb.append(color.greenF()); + rgb.append(color.blueF()); + BEGIN_UNDO_SET("Changed Solid Color"); + pqSMAdaptor::setMultipleElementProperty(diffuse, rgb); + pqSMAdaptor::setMultipleElementProperty( + proxy->GetProperty("AmbientColor"), rgb); + proxy->UpdateVTKObjects(); + END_UNDO_SET(); + } + } + } + else + { + // Create the color map editor if needed. + pqColorScaleEditor editor(pqCoreUtilities::mainWidget()); + editor.setRepresentation(repr); + editor.exec(); + } +} + diff --git a/Qt/ApplicationComponents/pqEditColorMapReaction.h b/Qt/ApplicationComponents/pqEditColorMapReaction.h new file mode 100644 index 0000000000..9edaf30745 --- /dev/null +++ b/Qt/ApplicationComponents/pqEditColorMapReaction.h @@ -0,0 +1,67 @@ +/*========================================================================= + + Program: ParaView + Module: pqEditColorMapReaction.h + + 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. + +========================================================================*/ +#ifndef __pqEditColorMapReaction_h +#define __pqEditColorMapReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction to edit the active representation's color map or solid color. +class PQAPPLICATIONCOMPONENTS_EXPORT pqEditColorMapReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqEditColorMapReaction(QAction* parent); + + /// Edit active representation's color map (or solid color). + static void editColorMap(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { + pqEditColorMapReaction::editColorMap(); + } + +private: + Q_DISABLE_COPY(pqEditColorMapReaction) +}; + +#endif + + diff --git a/Applications/Client/ProcessModuleGUIHelper.cxx b/Qt/ApplicationComponents/pqEditMenu.cxx similarity index 63% rename from Applications/Client/ProcessModuleGUIHelper.cxx rename to Qt/ApplicationComponents/pqEditMenu.cxx index 5d3e36e23b..705e34e06a 100644 --- a/Applications/Client/ProcessModuleGUIHelper.cxx +++ b/Qt/ApplicationComponents/pqEditMenu.cxx @@ -1,9 +1,9 @@ /*========================================================================= Program: ParaView -Module: ProcessModuleGUIHelper.cxx + Module: pqEditMenu.cxx - Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + Copyright (c) 2005,2006 Sandia Corporation, Kitware Inc. All rights reserved. ParaView is a free software; you can redistribute it and/or modify it @@ -28,42 +28,46 @@ 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 "pqEditMenu.h" +#include "ui_pqEditMenu.h" -#include "ProcessModuleGUIHelper.h" - -#include <pqClientMainWindow.h> - -#include <pqApplicationCore.h> -#include <vtkObjectFactory.h> - -#include "vtkPVConfig.h" - -vtkStandardNewMacro(ProcessModuleGUIHelper); -vtkCxxRevisionMacro(ProcessModuleGUIHelper, "1.13"); +class pqEditMenu::pqInternals : public Ui::pqEditMenu +{ +}; //----------------------------------------------------------------------------- -ProcessModuleGUIHelper::ProcessModuleGUIHelper() : - pqClientProcessModuleGUIHelper() +pqEditMenu::pqEditMenu(QWidget* parentObject) + : Superclass(parentObject), Internals(0) { + this->constructor(); } //----------------------------------------------------------------------------- -ProcessModuleGUIHelper::~ProcessModuleGUIHelper() +pqEditMenu::pqEditMenu(const QString& title, QWidget* parentObject) + : Superclass(title, parentObject), Internals(0) { + this->constructor(); + this->setTitle(title); } //----------------------------------------------------------------------------- -void ProcessModuleGUIHelper::PrintSelf(ostream& os, vtkIndent indent) +pqEditMenu::~pqEditMenu() { - this->Superclass::PrintSelf(os, indent); + delete this->Internals; } //----------------------------------------------------------------------------- -int ProcessModuleGUIHelper::RunGUIStart(int argc, char** argv, - int vtkNotUsed(numServerProcs), int vtkNotUsed(myId)) +void pqEditMenu::constructor() { - int status = this->Superclass::preAppExec(argc, argv, int(0), int(0)); + this->Internals = new pqEditMenu::pqInternals(); + this->Internals->setupUi(this); - return status; + // TODO: Connect to events of interest from the pqClientCore + // (replacement for pqMainWindowCore) or pqApplicationCore. +} + +//----------------------------------------------------------------------------- +void pqEditMenu::updateEnableState() +{ } diff --git a/Qt/ApplicationComponents/pqEditMenu.h b/Qt/ApplicationComponents/pqEditMenu.h new file mode 100644 index 0000000000..1a81f5ee50 --- /dev/null +++ b/Qt/ApplicationComponents/pqEditMenu.h @@ -0,0 +1,65 @@ +/*========================================================================= + + Program: ParaView + Module: pqEditMenu.h + + 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. + +========================================================================*/ +#ifndef __pqEditMenu_h +#define __pqEditMenu_h + +#include <QMenu> +#include "pqApplicationComponentsExport.h" + +class PQAPPLICATIONCOMPONENTS_EXPORT pqEditMenu : public QMenu +{ + Q_OBJECT + typedef QMenu Superclass; +public: + pqEditMenu(QWidget* parent=0); + pqEditMenu(const QString& title, QWidget* parent=0); + virtual ~pqEditMenu(); + +public slots: + /// Updates the enable state for all the actions. One does not need to connect + /// to this slot explicitly, it is called automatically when anything that + /// affects the enable state changes. + void updateEnableState(); + +private: + void constructor(); + class pqInternals; + pqInternals* Internals; + +private: + pqEditMenu(const pqEditMenu&); // Not implemented. + void operator=(const pqEditMenu&); // Not implemented. +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqExportReaction.cxx b/Qt/ApplicationComponents/pqExportReaction.cxx new file mode 100644 index 0000000000..7db55534d5 --- /dev/null +++ b/Qt/ApplicationComponents/pqExportReaction.cxx @@ -0,0 +1,86 @@ +/*========================================================================= + + Program: ParaView + Module: pqExportReaction.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 "pqExportReaction.h" + +#include "pqActiveObjects.h" +#include "pqCoreUtilities.h" +#include "pqViewExporterManager.h" +#include "pqFileDialog.h" + +//----------------------------------------------------------------------------- +pqExportReaction::pqExportReaction(QAction* parentObject) + : Superclass(parentObject) +{ + this->Exporter = new pqViewExporterManager(this); + + QObject::connect(this->Exporter, SIGNAL(exportable(bool)), + parentObject, SLOT(setEnabled(bool))); + + // load state enable state depends on whether we are connected to an active + // server or not and whether + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqExportReaction::updateEnableState() +{ + // this results in firing of exportable(bool) signal which updates the + // QAction's state. + this->Exporter->setView(pqActiveObjects::instance().activeView()); +} + +//----------------------------------------------------------------------------- +void pqExportReaction::exportActiveView() +{ + QString filters = this->Exporter->getSupportedFileTypes(); + if (filters.isEmpty()) + { + qCritical("Cannot export current view."); + return; + } + + pqFileDialog file_dialog(NULL, pqCoreUtilities::mainWidget(), + tr("Export View:"), QString(), filters); + file_dialog.setObjectName("FileExportDialog"); + file_dialog.setFileMode(pqFileDialog::AnyFile); + if (file_dialog.exec() == QDialog::Accepted && + file_dialog.getSelectedFiles().size() > 0) + { + if (!this->Exporter->write(file_dialog.getSelectedFiles()[0])) + { + qCritical("Failed to export correctly."); + } + } +} diff --git a/Qt/ApplicationComponents/pqExportReaction.h b/Qt/ApplicationComponents/pqExportReaction.h new file mode 100644 index 0000000000..7810a949d9 --- /dev/null +++ b/Qt/ApplicationComponents/pqExportReaction.h @@ -0,0 +1,71 @@ +/*========================================================================= + + Program: ParaView + Module: pqExportReaction.h + + 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. + +========================================================================*/ +#ifndef __pqExportReaction_h +#define __pqExportReaction_h + +#include "pqReaction.h" + +class pqViewExporterManager; + +/// @ingroup Reactions +/// Reaction for exporting a view. Uses pqViewExporterManager for actual +/// exporting. +class PQAPPLICATIONCOMPONENTS_EXPORT pqExportReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqExportReaction(QAction* parent); + + /// Exports the current view. + void exportActiveView(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { this->exportActiveView(); } + +private: + Q_DISABLE_COPY(pqExportReaction) + + pqViewExporterManager* Exporter; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqFiltersMenuReaction.cxx b/Qt/ApplicationComponents/pqFiltersMenuReaction.cxx new file mode 100644 index 0000000000..9f11e6a9fe --- /dev/null +++ b/Qt/ApplicationComponents/pqFiltersMenuReaction.cxx @@ -0,0 +1,296 @@ +/*========================================================================= + + Program: ParaView + Module: pqFiltersMenuReaction.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 "pqFiltersMenuReaction.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFilterInputDialog.h" +#include "pqObjectBuilder.h" +#include "pqOutputPort.h" +#include "pqPipelineFilter.h" +#include "pqPipelineModel.h" +#include "pqProxyGroupMenuManager.h" +#include "pqServer.h" +#include "pqServerManagerSelectionModel.h" +#include "pqUndoStack.h" +#include "vtkSmartPointer.h" +#include "vtkSMInputProperty.h" +#include "vtkSMPropertyIterator.h" +#include "vtkSMProxyManager.h" +#include "vtkSMSourceProxy.h" + +#include <QMap> +#include <QDebug> + +static vtkSMInputProperty* getInputProperty(vtkSMProxy* proxy) +{ + // if "Input" is present, we return that, otherwise the "first" + // vtkSMInputProperty encountered is returned. + + vtkSMInputProperty *prop = vtkSMInputProperty::SafeDownCast( + proxy->GetProperty("Input")); + vtkSMPropertyIterator* propIter = proxy->NewPropertyIterator(); + for (propIter->Begin(); !prop && !propIter->IsAtEnd(); propIter->Next()) + { + prop = vtkSMInputProperty::SafeDownCast(propIter->GetProperty()); + } + + propIter->Delete(); + return prop; +} + +//----------------------------------------------------------------------------- +pqFiltersMenuReaction::pqFiltersMenuReaction( + pqProxyGroupMenuManager* menuManager) +: Superclass(menuManager) +{ + QObject::connect(&this->Timer, SIGNAL(timeout()), + this, SLOT(updateEnableState())); + this->Timer.setInterval(100); + this->Timer.setSingleShot(true); + + QObject::connect( + menuManager, SIGNAL(triggered(const QString&, const QString&)), + this, SLOT(onTriggered(const QString&, const QString&))); + + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + &this->Timer, SLOT(start())); + QObject::connect(activeObjects, SIGNAL(portChanged(pqOutputPort*)), + &this->Timer, SLOT(start())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqFiltersMenuReaction::updateEnableState() +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + bool enabled = activeObjects->activeServer() != NULL; + + // selected ports. + QList<pqOutputPort*> outputPorts; + + // If active proxy is non-existent, then also the filters are disabled. + if (enabled) + { + pqApplicationCore* core = pqApplicationCore::instance(); + pqServerManagerSelection selected = + *core->getSelectionModel()->selectedItems(); + foreach (pqServerManagerModelItem* item, selected) + { + pqOutputPort* opPort = qobject_cast<pqOutputPort*>(item); + pqPipelineSource* source = qobject_cast<pqPipelineSource*>(item); + if (opPort) + { + source = opPort->getSource(); + } + else if (source) + { + opPort = source->getOutputPort(0); + } + if (source && source->modifiedState() == pqProxy::UNINITIALIZED) + { + enabled = false; + // we listen to state change so that we can update enable state when the + // proxy gets initialized. + QObject::connect(source, + SIGNAL(modifiedStateChanged(pqServerManagerModelItem*)), + this, SLOT(onModifiedStateChanged())); + break; + } + outputPorts.append(opPort); + } + if (selected.size()==0) + { + enabled = false; + } + } + + pqProxyGroupMenuManager* mgr = + static_cast<pqProxyGroupMenuManager*>(this->parent()); + mgr->setEnabled(enabled); + bool some_enabled = false; + foreach (QAction* action, mgr->actions()) + { + vtkSMProxy* prototype = mgr->getPrototype(action); + if (!prototype || !enabled) + { + action->setEnabled(false); + continue; + } + + int numProcs = outputPorts[0]->getServer()->getNumberOfPartitions(); + vtkSMSourceProxy* sp = vtkSMSourceProxy::SafeDownCast(prototype); + if (sp && ( + (sp->GetProcessSupport() == vtkSMSourceProxy::SINGLE_PROCESS && numProcs > 1) || + (sp->GetProcessSupport() == vtkSMSourceProxy::MULTIPLE_PROCESSES && numProcs == 1))) + { + // Skip single process filters when running in multiprocesses and vice + // versa. + action->setEnabled(false); + continue; + } + + // TODO: Handle case where a proxy has multiple input properties. + vtkSMInputProperty *input = ::getInputProperty(prototype); + if (input) + { + if(!input->GetMultipleInput() && outputPorts.size() > 1) + { + action->setEnabled(false); + continue; + } + + input->RemoveAllUncheckedProxies(); + for (int cc=0; cc < outputPorts.size(); cc++) + { + pqOutputPort* port = outputPorts[cc]; + input->AddUncheckedInputConnection( + port->getSource()->getProxy(), port->getPortNumber()); + } + + if(input->IsInDomains()) + { + action->setEnabled(true); + some_enabled = true; + } + else + { + action->setEnabled(false); + } + input->RemoveAllUncheckedProxies(); + } + } + + if (!some_enabled) + { + mgr->setEnabled(false); + } +} + +//----------------------------------------------------------------------------- +void pqFiltersMenuReaction::onModifiedStateChanged() +{ + QObject::disconnect(this->sender(), 0, this, 0); + this->Timer.start(10); +} + +//----------------------------------------------------------------------------- +pqPipelineSource* pqFiltersMenuReaction::createFilter( + const QString& xmlgroup, const QString& xmlname) +{ + pqServer* server = pqActiveObjects::instance().activeServer(); + pqApplicationCore* core = pqApplicationCore::instance(); + pqObjectBuilder* builder = core->getObjectBuilder(); + + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + vtkSMProxy* prototype = pxm->GetPrototypeProxy( + xmlgroup.toAscii().data(), xmlname.toAscii().data()); + if (!prototype) + { + qCritical() << "Unknown proxy type: " << xmlname; + return 0; + } + + // Get the list of selected sources. + pqServerManagerSelection selected = + *core->getSelectionModel()->selectedItems(); + + QMap<QString, QList<pqOutputPort*> > namedInputs; + QList<pqOutputPort*> selectedOutputPorts; + + // Determine the list of selected output ports. + foreach (pqServerManagerModelItem* item, selected) + { + pqOutputPort* opPort = qobject_cast<pqOutputPort*>(item); + pqPipelineSource* source = qobject_cast<pqPipelineSource*>(item); + if (opPort) + { + selectedOutputPorts.push_back(opPort); + } + else if (source) + { + selectedOutputPorts.push_back(source->getOutputPort(0)); + } + } + + QList<const char*> inputPortNames = pqPipelineFilter::getInputPorts(prototype); + namedInputs[inputPortNames[0]] = selectedOutputPorts; + + // If the filter has more than 1 input ports, we are simply going to ask the + // user to make selection for the inputs for each port. We may change that in + // future to be smarter. + int numInputPorts = inputPortNames.size(); + if (pqPipelineFilter::getRequiredInputPorts(prototype).size() > 1) + { + vtkSmartPointer<vtkSMProxy> filterProxy; + filterProxy.TakeReference(pxm->NewProxy("filters", xmlname.toAscii().data())); + filterProxy->SetConnectionID(server->GetConnectionID()); + + // Create a dummy pqPipelineFilter which we can use to + // pass on to the pqFilterInputDialog. + pqPipelineFilter filter (xmlname, filterProxy, server, NULL); + + pqFilterInputDialog dialog(pqCoreUtilities::mainWidget()); + dialog.setObjectName("SelectInputDialog"); + + pqServerManagerModel *smModel = + pqApplicationCore::instance()->getServerManagerModel(); + pqPipelineModel model(*smModel); + model.addSource(&filter); + foreach (pqOutputPort *outputPort, selectedOutputPorts) + { + model.addConnection(outputPort->getSource(), &filter, + outputPort->getPortNumber()); + } + + dialog.setModelAndFilter(&model, &filter, namedInputs); + if (QDialog::Accepted != dialog.exec()) + { + // User aborted creation. + return 0; + } + + for (int cc=0; cc < numInputPorts; cc++) + { + QString portName = filter.getInputPortName(cc); + namedInputs[portName] = dialog.getFilterInputs(portName); + } + } + + BEGIN_UNDO_SET(QString("Create '%1'").arg(xmlname)); + pqPipelineSource* filter = builder->createFilter("filters", xmlname, + namedInputs, server); + END_UNDO_SET(); + return filter; +} diff --git a/Qt/ApplicationComponents/pqFiltersMenuReaction.h b/Qt/ApplicationComponents/pqFiltersMenuReaction.h new file mode 100644 index 0000000000..223c4544f4 --- /dev/null +++ b/Qt/ApplicationComponents/pqFiltersMenuReaction.h @@ -0,0 +1,77 @@ +/*========================================================================= + + Program: ParaView + Module: pqFiltersMenuReaction.h + + 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. + +========================================================================*/ +#ifndef __pqFiltersMenuReaction_h +#define __pqFiltersMenuReaction_h + +#include <QObject> +#include <QTimer> + +#include "pqApplicationComponentsExport.h" + +class pqPipelineSource; +class pqProxyGroupMenuManager; + +/// @ingroup Reactions +/// Reaction to handle creation of filters from the filters menu. +/// pqFiltersMenuReaction knows when to enable/disable actions in the menu as +/// well as what to do when an action is triggered. +class PQAPPLICATIONCOMPONENTS_EXPORT pqFiltersMenuReaction : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqFiltersMenuReaction(pqProxyGroupMenuManager* menuManager); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + + /// Creates a filter of the given type. + static pqPipelineSource* createFilter( + const QString& group, const QString& name); + +protected slots: + /// Called when the action is triggered. + virtual void onTriggered(const QString& group, const QString& name) + { pqFiltersMenuReaction::createFilter(group, name); } + + void onModifiedStateChanged(); +private: + Q_DISABLE_COPY(pqFiltersMenuReaction) + + QTimer Timer; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqHelpReaction.cxx b/Qt/ApplicationComponents/pqHelpReaction.cxx new file mode 100644 index 0000000000..28bdba583d --- /dev/null +++ b/Qt/ApplicationComponents/pqHelpReaction.cxx @@ -0,0 +1,107 @@ +/*========================================================================= + + Program: ParaView + Module: pqHelpReaction.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 "pqHelpReaction.h" + +#include <QApplication> +#include <QDebug> +#include <QDir> +#include <QPointer> +#include <QStringList> + +#include "pqCoreUtilities.h" +#include "pqHelpWindow.h" + +//----------------------------------------------------------------------------- +pqHelpReaction::pqHelpReaction(QAction* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +void pqHelpReaction::showHelp() +{ + pqHelpReaction::showHelp(QString()); +} + +//----------------------------------------------------------------------------- +void pqHelpReaction::showHelp(const QString& url) +{ + static QPointer<pqHelpWindow> helpWindow; + if (helpWindow) + { + // raise assistant window; + helpWindow->show(); + helpWindow->raise(); + if (!url.isEmpty()) + { + helpWindow->showPage(url); + } + return; + } + + // * Discover help project files from the resources. + QDir dir(QString(":/%1/Documentation").arg(QApplication::applicationName())); + QStringList help_files; + if (dir.exists()) + { + QStringList filters; + filters << "*.qch"; + help_files = dir.entryList(filters, QDir::Files); + } + if (help_files.size() == 0) + { + qWarning() << "No Qt compressed help file (*.qch) was located."; + return; + } + + QString file = + QString(":/%1/Documentation/%2").arg(QApplication::applicationName()).arg(help_files[0]); + helpWindow = new pqHelpWindow( + QString("%1 Online Help").arg(QApplication::applicationName()), + pqCoreUtilities::mainWidget()); + QString namespace_name = helpWindow->registerDocumentation(file); + + help_files.pop_front(); + foreach (file, help_files) + { + helpWindow->registerDocumentation(file); + } + + helpWindow->showHomePage(namespace_name); + helpWindow->show(); + helpWindow->raise(); + if (!url.isEmpty()) + { + helpWindow->showPage(url); + } +} + diff --git a/Qt/ApplicationComponents/pqHelpReaction.h b/Qt/ApplicationComponents/pqHelpReaction.h new file mode 100644 index 0000000000..b7881f169e --- /dev/null +++ b/Qt/ApplicationComponents/pqHelpReaction.h @@ -0,0 +1,65 @@ +/*========================================================================= + + Program: ParaView + Module: pqHelpReaction.h + + 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. + +========================================================================*/ +#ifndef __pqHelpReaction_h +#define __pqHelpReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// pqHelpReaction is reaction to show application help using Qt assistant. +/// It searches for ":/<AppName>HelpCollection/*.qhc" files and shows the first +/// help collection file found as the help collection. +class PQAPPLICATIONCOMPONENTS_EXPORT pqHelpReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqHelpReaction(QAction* parent); + + /// Show help for the application. + static void showHelp(); + + /// Show a particular help page. + static void showHelp(const QString& url); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqHelpReaction::showHelp(); } + +private: + Q_DISABLE_COPY(pqHelpReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.cxx b/Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.cxx new file mode 100644 index 0000000000..0bdb591930 --- /dev/null +++ b/Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.cxx @@ -0,0 +1,139 @@ +/*========================================================================= + + Program: ParaView + Module: pqIgnoreSourceTimeReaction.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 "pqIgnoreSourceTimeReaction.h" + +#include "pqApplicationCore.h" +#include "pqOutputPort.h" +#include "pqPipelineSource.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" +#include "pqServerManagerSelectionModel.h" +#include "pqTimeKeeper.h" +#include "pqUndoStack.h" + +//----------------------------------------------------------------------------- +pqIgnoreSourceTimeReaction::pqIgnoreSourceTimeReaction(QAction* parentObject) + : Superclass(parentObject) +{ + parentObject->setCheckable(true); + + pqApplicationCore* core = pqApplicationCore::instance(); + QObject::connect(core->getSelectionModel(), + SIGNAL(selectionChanged(const pqServerManagerSelection&, + const pqServerManagerSelection&)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqIgnoreSourceTimeReaction::updateEnableState() +{ + pqServerManagerSelectionModel* selModel= + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection& selection = *(selModel->selectedItems()); + if (selection.size() < 1) + { + this->parentAction()->setEnabled(false); + return; + } + + // Decide enable state as well as check state for the action. + QAction* action = this->parentAction(); + bool prev = action->blockSignals(true); + bool enabled = true; + bool checked = false; + + // Now determine the check state for the action. + foreach (pqServerManagerModelItem* item, selection) + { + pqOutputPort* port = qobject_cast<pqOutputPort*>(item); + pqPipelineSource* source = port? port->getSource(): + qobject_cast<pqPipelineSource*>(item); + if (!source) + { + enabled = false; + break; + } + pqTimeKeeper* timekeeper = source->getServer()->getTimeKeeper(); + checked = checked || !timekeeper->isSourceAdded(source); + if (checked) + { + break; + } + } + action->setChecked(checked); + action->blockSignals(prev); + action->setEnabled(enabled); +} + +//----------------------------------------------------------------------------- +void pqIgnoreSourceTimeReaction::ignoreSourceTime(bool ignore) +{ + BEGIN_UNDO_SET("Toggle Ignore Time"); + pqServerManagerSelectionModel* selModel= + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection& selection = *(selModel->selectedItems()); + + // Now determine the check state for the action. + foreach (pqServerManagerModelItem* item, selection) + { + pqOutputPort* port = qobject_cast<pqOutputPort*>(item); + pqPipelineSource* source = port? port->getSource(): + qobject_cast<pqPipelineSource*>(item); + if (!source) + { + continue; + } + pqIgnoreSourceTimeReaction::ignoreSourceTime(source, ignore); + } + END_UNDO_SET(); +} + +//----------------------------------------------------------------------------- +void pqIgnoreSourceTimeReaction::ignoreSourceTime( + pqPipelineSource* source, bool ignore) +{ + if (!source) + { + return; + } + + pqTimeKeeper* timekeeper = source->getServer()->getTimeKeeper(); + if (ignore) + { + timekeeper->removeSource(source); + } + else + { + timekeeper->addSource(source); + } +} diff --git a/Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.h b/Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.h new file mode 100644 index 0000000000..5c1120f2c6 --- /dev/null +++ b/Qt/ApplicationComponents/pqIgnoreSourceTimeReaction.h @@ -0,0 +1,75 @@ +/*========================================================================= + + Program: ParaView + Module: pqIgnoreSourceTimeReaction.h + + 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. + +========================================================================*/ +#ifndef __pqIgnoreSourceTimeReaction_h +#define __pqIgnoreSourceTimeReaction_h + +#include "pqReaction.h" + +class pqPipelineSource; + +/// @ingroup Reactions +/// Reaction for ignoring a source's time information for animations etc. +/// It affects all selected sources. +class PQAPPLICATIONCOMPONENTS_EXPORT pqIgnoreSourceTimeReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqIgnoreSourceTimeReaction(QAction* parent); + + /// Ignore time from all selected sources. + static void ignoreSourceTime(bool ignore); + + /// Ignore time for the given source. + static void ignoreSourceTime(pqPipelineSource*, bool ignore); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { + pqIgnoreSourceTimeReaction::ignoreSourceTime( + this->parentAction()->isChecked()); + } + + +private: + Q_DISABLE_COPY(pqIgnoreSourceTimeReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.cxx b/Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.cxx new file mode 100644 index 0000000000..df3f4ed36a --- /dev/null +++ b/Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.cxx @@ -0,0 +1,173 @@ +/*========================================================================= + + Program: ParaView + Module: pqListNewProxyDefinitionsBehavior.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 "pqListNewProxyDefinitionsBehavior.h" + +#include "pqApplicationCore.h" +#include "pqObjectBuilder.h" +#include "pqPluginManager.h" +#include "pqProxyGroupMenuManager.h" +#include "pqServerManagerObserver.h" +#include "vtkSmartPointer.h" +#include "vtkSMInputProperty.h" +#include "vtkSMPropertyIterator.h" +#include "vtkSMProxyDefinitionIterator.h" +#include "vtkSMProxy.h" +#include "vtkSMProxyManager.h" +#include "vtkPVXMLElement.h" + +#include <QStringList> + +static bool HasInput(const char* xmlgroup, const char* xmlname) +{ + vtkSMProxy* prototype = + vtkSMProxyManager::GetProxyManager()->GetPrototypeProxy(xmlgroup, xmlname); + if (!prototype) + { + return false; + } + if (vtkSMInputProperty::SafeDownCast(prototype->GetProperty("Input"))) + { + return true; + } + + vtkSmartPointer<vtkSMPropertyIterator> propIter; + propIter.TakeReference(prototype->NewPropertyIterator()); + for (propIter->Begin(); !propIter->IsAtEnd(); propIter->Next()) + { + if (vtkSMInputProperty::SafeDownCast(propIter->GetProperty())) + { + return true; + } + } + return false; +} + +static bool HasShowHint(const char* xmlgroup, const char* xmlname) +{ + vtkSMProxy* prototype = + vtkSMProxyManager::GetProxyManager()->GetPrototypeProxy(xmlgroup, xmlname); + if (!prototype) + { + return false; + } + // check for the show option in the hints + vtkPVXMLElement* hints = prototype->GetHints(); + if(hints) + { + unsigned int numHints = hints->GetNumberOfNestedElements(); + for (unsigned int i = 0; i < numHints; i++) + { + vtkPVXMLElement *element = hints->GetNestedElement(i); + if (QString("Property") == element->GetName()) + { + QString propertyName = element->GetAttribute("name"); + int showProperty; + if (element->GetScalarAttribute("show", &showProperty)) + { + if (showProperty) + { + return true; + } + } + } + } + } + return false; +} + +//----------------------------------------------------------------------------- +static bool IsReader(const char* xmlgroup, const char* xmlname) +{ + vtkSMProxy* prototype = + vtkSMProxyManager::GetProxyManager()->GetPrototypeProxy(xmlgroup, xmlname); + if (!prototype) + { + return false; + } + return !pqObjectBuilder::getFileNamePropertyName(prototype).isEmpty(); +} + +//----------------------------------------------------------------------------- +pqListNewProxyDefinitionsBehavior::pqListNewProxyDefinitionsBehavior( + pqListNewProxyDefinitionsBehavior::eMode mode, + const QString& xmlgroup, + pqProxyGroupMenuManager* menuManager): + Superclass(menuManager) +{ + Q_ASSERT(menuManager != NULL); + + this->Mode = mode; + this->XMLGroup = xmlgroup; + this->MenuManager = menuManager; + + QObject::connect(pqApplicationCore::instance()->getPluginManager(), + SIGNAL(serverManagerExtensionLoaded()), + this, SLOT(update())); + QObject::connect(pqApplicationCore::instance()->getServerManagerObserver(), + SIGNAL(compoundProxyDefinitionRegistered(QString)), + this, SLOT(update())); + this->update(); +} + +//----------------------------------------------------------------------------- +void pqListNewProxyDefinitionsBehavior::update() +{ + bool something_added = false; + bool add_new = (this->AlreadySeenSet.size() != 0); + vtkSMProxyDefinitionIterator* iter = vtkSMProxyDefinitionIterator::New(); + for (iter->Begin(this->XMLGroup.toAscii().data()); !iter->IsAtEnd(); + iter->Next()) + { + QString key = iter->GetKey(); + bool is_custom_filter = iter->IsCustom(); + if ( (add_new || is_custom_filter) && !this->AlreadySeenSet.contains(key) ) + { + bool has_input = ::HasInput(iter->GetGroup(), iter->GetKey()); + if ( (this->Mode == SOURCES && !has_input && + (!::IsReader(iter->GetGroup(), iter->GetKey()) || + ::HasShowHint(iter->GetGroup(), iter->GetKey()))) || + (this->Mode == FILTERS && has_input) || + this->Mode == ANY) + { + this->MenuManager->addProxy(this->XMLGroup, key); + something_added = true; + } + } + this->AlreadySeenSet.insert(key); + } + iter->Delete(); + if (something_added) + { + this->MenuManager->populateMenu(); + } +} + diff --git a/Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.h b/Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.h new file mode 100644 index 0000000000..935fdc05cc --- /dev/null +++ b/Qt/ApplicationComponents/pqListNewProxyDefinitionsBehavior.h @@ -0,0 +1,84 @@ +/*========================================================================= + + Program: ParaView + Module: pqListNewProxyDefinitionsBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqListNewProxyDefinitionsBehavior_h +#define __pqListNewProxyDefinitionsBehavior_h + +#include <QObject> +#include <QSet> + +#include "pqApplicationComponentsExport.h" + +class pqProxyGroupMenuManager; + +/// @ingroup Behaviors +/// pqListNewProxyDefinitionsBehavior is associated with a +/// pqProxyGroupMenuManager. When created, it populates the +/// pqProxyGroupMenuManager with new proxy definitions that get added to a +/// specified group(or groups) automatically. +/// This also ensures that user-defined custom-filters are always shown in the +/// menu. +/// I am leaning towards not automatically added new filters/sources since large +/// plugins can bring in a plethora of filters, many of which may be internal. +class PQAPPLICATIONCOMPONENTS_EXPORT pqListNewProxyDefinitionsBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + enum eMode + { + SOURCES, // proxies that don't have inputs + FILTERS, // proxies that have inputs + ANY + }; + + /// menuManager cannnot be NULL. + pqListNewProxyDefinitionsBehavior(eMode mode, const QString& xmlgroup, + pqProxyGroupMenuManager* menuManager); + +protected slots: + /// This slot is called after plugins are loaded or after custom-filter + /// definitions are added. + void update(); + +protected: + pqProxyGroupMenuManager* MenuManager; + QSet<QString> AlreadySeenSet; + QString XMLGroup; + eMode Mode; + +private: + Q_DISABLE_COPY(pqListNewProxyDefinitionsBehavior) + +}; + +#endif + diff --git a/Qt/ApplicationComponents/pqLoadDataReaction.cxx b/Qt/ApplicationComponents/pqLoadDataReaction.cxx new file mode 100644 index 0000000000..95b8fee54d --- /dev/null +++ b/Qt/ApplicationComponents/pqLoadDataReaction.cxx @@ -0,0 +1,178 @@ +/*========================================================================= + + Program: ParaView + Module: pqLoadDataReaction.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 "pqLoadDataReaction.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFileDialog.h" +#include "pqObjectBuilder.h" +#include "pqPipelineSource.h" +#include "pqSelectReaderDialog.h" +#include "pqServer.h" +#include "pqServerResource.h" +#include "pqServerResources.h" +#include "pqUndoStack.h" +#include "vtkSMProxy.h" +#include "vtkSMProxyManager.h" +#include "vtkSMReaderFactory.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqLoadDataReaction::pqLoadDataReaction(QAction* parentObject) + : Superclass(parentObject) +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqLoadDataReaction::updateEnableState() +{ + pqActiveObjects& activeObjects = pqActiveObjects::instance(); + // TODO: also is there's a pending accept. + bool enable_state = (activeObjects.activeServer() != NULL); + this->parentAction()->setEnabled(enable_state); +} + +//----------------------------------------------------------------------------- +pqPipelineSource* pqLoadDataReaction::loadData() +{ + pqServer* server = pqActiveObjects::instance().activeServer(); + vtkSMReaderFactory* readerFactory = + vtkSMProxyManager::GetProxyManager()->GetReaderFactory(); + QString filters = readerFactory->GetSupportedFileTypes( + server->GetConnectionID()); + if (!filters.isEmpty()) + { + filters += ";;"; + } + filters += "All files (*)"; + pqFileDialog fileDialog(server, + pqCoreUtilities::mainWidget(), + tr("Open File:"), QString(), filters); + fileDialog.setObjectName("FileOpenDialog"); + fileDialog.setFileMode(pqFileDialog::ExistingFiles); + if (fileDialog.exec() == QDialog::Accepted) + { + return pqLoadDataReaction::loadData(fileDialog.getSelectedFiles()); + } + return NULL; +} + +//----------------------------------------------------------------------------- +pqPipelineSource* pqLoadDataReaction::loadData(const QStringList& files) +{ + if (files.empty()) + { + return NULL; + } + + pqServer* server = pqActiveObjects::instance().activeServer(); + if (!server) + { + qCritical() << "Cannot create reader without an active server."; + return NULL; + } + + vtkSMReaderFactory* readerFactory = + vtkSMProxyManager::GetProxyManager()->GetReaderFactory(); + + // For performance, only check if the first file is readable. + for (int i=0; i < 1 /*files.size()*/; i++) + { + if (!readerFactory->TestFileReadability(files[i].toAscii().data(), + server->GetConnectionID())) + { + qWarning() << "File '" << files[i] << "' cannot be read."; + return NULL; + } + } + + // Determine reader type based on first file. For now, we are relying + // on the user to avoid mixing file types. + QString filename = files[0]; + QString readerType, readerGroup; + if (readerFactory->CanReadFile(filename.toAscii().data(), + server->GetConnectionID())) + { + readerType = readerFactory->GetReaderName(); + readerGroup = readerFactory->GetReaderGroup(); + } + else + { + // The reader factory could not determine the type of reader to create for the + // file. Ask the user. + pqSelectReaderDialog prompt(filename, server, + readerFactory, pqCoreUtilities::mainWidget()); + if (prompt.exec() == QDialog::Accepted) + { + readerType = prompt.getReader(); + readerGroup = prompt.getGroup(); + } + else + { + // User didn't choose any reader. + return NULL; + } + } + + BEGIN_UNDO_SET("Create 'Reader'"); + pqObjectBuilder* builder = + pqApplicationCore::instance()->getObjectBuilder(); + pqPipelineSource* reader = builder->createReader(readerGroup, + readerType, files, server); + + if (reader) + { + pqApplicationCore* core = pqApplicationCore::instance(); + + // Add this to the list of recent server resources ... + pqServerResource resource = server->getResource(); + resource.setPath(files[0]); + resource.addData("readergroup", reader->getProxy()->GetXMLGroup()); + resource.addData("reader", reader->getProxy()->GetXMLName()); + resource.addData("extrafilesCount", QString("%1").arg(files.size()-1)); + for (int cc=1; cc < files.size(); cc++) + { + resource.addData(QString("file.%1").arg(cc-1), files[cc]); + } + core->serverResources().add(resource); + core->serverResources().save(*core->settings()); + } + END_UNDO_SET(); + return reader; +} + diff --git a/Qt/ApplicationComponents/pqLoadDataReaction.h b/Qt/ApplicationComponents/pqLoadDataReaction.h new file mode 100644 index 0000000000..6328f611bd --- /dev/null +++ b/Qt/ApplicationComponents/pqLoadDataReaction.h @@ -0,0 +1,84 @@ +/*========================================================================= + + Program: ParaView + Module: pqLoadDataReaction.h + + 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. + +========================================================================*/ +#ifndef __pqLoadDataReaction_h +#define __pqLoadDataReaction_h + +#include "pqReaction.h" + +class QStringList; +class pqPipelineSource; + +/// @ingroup Reactions +/// Reaction for open data files. +class PQAPPLICATIONCOMPONENTS_EXPORT pqLoadDataReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqLoadDataReaction(QAction* parent); + + /// Loads data files. Uses reader factory to determine what reader are + /// supported. Returns the reader is creation successful, otherwise returns + /// NULL. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static pqPipelineSource* loadData(const QStringList& files); + static pqPipelineSource* loadData(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +signals: + /// Fired when a dataset is loaded by this reaction. + void loadedData(pqPipelineSource*); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { + pqPipelineSource* source = pqLoadDataReaction::loadData(); + if (source) + { + emit this->loadedData(source); + } + } + +private: + Q_DISABLE_COPY(pqLoadDataReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqLoadStateReaction.cxx b/Qt/ApplicationComponents/pqLoadStateReaction.cxx new file mode 100644 index 0000000000..b154a2a64c --- /dev/null +++ b/Qt/ApplicationComponents/pqLoadStateReaction.cxx @@ -0,0 +1,110 @@ +/*========================================================================= + + Program: ParaView + Module: pqLoadStateReaction.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 "pqLoadStateReaction.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFileDialog.h" +#include "pqServer.h" +#include "pqServerResource.h" +#include "pqServerResources.h" +#include "vtkPVXMLParser.h" + +//----------------------------------------------------------------------------- +pqLoadStateReaction::pqLoadStateReaction(QAction* parentObject) + : Superclass(parentObject) +{ + // load state enable state depends on whether we are connected to an active + // server or not and whether + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqLoadStateReaction::updateEnableState() +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + this->parentAction()->setEnabled(activeObjects->activeServer() != NULL); +} + +//----------------------------------------------------------------------------- +void pqLoadStateReaction::loadState(const QString& filename) +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + pqServer *server = activeObjects->activeServer(); + + // Read in the xml file to restore. + vtkPVXMLParser *xmlParser = vtkPVXMLParser::New(); + xmlParser->SetFileName(filename.toAscii().data()); + xmlParser->Parse(); + + // Get the root element from the parser. + vtkPVXMLElement *root = xmlParser->GetRootElement(); + if (root) + { + pqApplicationCore::instance()->loadState(root, server); + + // Add this to the list of recent server resources ... + pqServerResource resource; + resource.setScheme("session"); + resource.setPath(filename); + resource.setSessionServer(server->getResource()); + pqApplicationCore::instance()->serverResources().add(resource); + pqApplicationCore::instance()->serverResources().save( + *pqApplicationCore::instance()->settings()); + } + else + { + qCritical("Root does not exist. Either state file could not be opened " + "or it does not contain valid xml"); + } + xmlParser->Delete(); +} + +//----------------------------------------------------------------------------- +void pqLoadStateReaction::loadState() +{ + pqFileDialog fileDialog(NULL, + pqCoreUtilities::mainWidget(), + tr("Load State File"), QString(), + "ParaView state file (*.pvsm);;All files (*)"); + fileDialog.setObjectName("FileLoadServerStateDialog"); + fileDialog.setFileMode(pqFileDialog::ExistingFile); + if (fileDialog.exec() == QDialog::Accepted) + { + QString selectedFile = fileDialog.getSelectedFiles()[0]; + pqLoadStateReaction::loadState(selectedFile); + } +} diff --git a/Qt/ApplicationComponents/pqLoadStateReaction.h b/Qt/ApplicationComponents/pqLoadStateReaction.h new file mode 100644 index 0000000000..a27864c94f --- /dev/null +++ b/Qt/ApplicationComponents/pqLoadStateReaction.h @@ -0,0 +1,69 @@ +/*========================================================================= + + Program: ParaView + Module: pqLoadStateReaction.h + + 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. + +========================================================================*/ +#ifndef __pqLoadStateReaction_h +#define __pqLoadStateReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction for load state action. +class PQAPPLICATIONCOMPONENTS_EXPORT pqLoadStateReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqLoadStateReaction(QAction *parent); + + /// Loads the state file. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static void loadState(const QString& filename); + static void loadState(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqLoadStateReaction::loadState(); } + +private: + Q_DISABLE_COPY(pqLoadStateReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqMainControlsToolbar.cxx b/Qt/ApplicationComponents/pqMainControlsToolbar.cxx new file mode 100644 index 0000000000..fedef0c229 --- /dev/null +++ b/Qt/ApplicationComponents/pqMainControlsToolbar.cxx @@ -0,0 +1,57 @@ +/*========================================================================= + + Program: ParaView + Module: pqMainControlsToolbar.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 "pqMainControlsToolbar.h" +#include "ui_pqMainControlsToolbar.h" + +#include "pqHelpReaction.h" +#include "pqLoadDataReaction.h" +#include "pqSaveDataReaction.h" +#include "pqServerConnectReaction.h" +#include "pqServerDisconnectReaction.h" +#include "pqUndoRedoReaction.h" + +//----------------------------------------------------------------------------- +void pqMainControlsToolbar::constructor() +{ + Ui::pqMainControlsToolbar ui; + ui.setupUi(this); + new pqLoadDataReaction(ui.actionOpenData); + new pqSaveDataReaction(ui.actionSaveData); + new pqServerConnectReaction(ui.actionServerConnect); + new pqServerDisconnectReaction(ui.actionServerDisconnect); + new pqUndoRedoReaction(ui.actionUndo, true); + new pqUndoRedoReaction(ui.actionRedo, false); + new pqHelpReaction(ui.actionHelp); +} + + + diff --git a/Qt/ApplicationComponents/pqMainControlsToolbar.h b/Qt/ApplicationComponents/pqMainControlsToolbar.h new file mode 100644 index 0000000000..e3adc85119 --- /dev/null +++ b/Qt/ApplicationComponents/pqMainControlsToolbar.h @@ -0,0 +1,67 @@ +/*========================================================================= + + Program: ParaView + Module: pqMainControlsToolbar.h + + 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. + +========================================================================*/ +#ifndef __pqMainControlsToolbar_h +#define __pqMainControlsToolbar_h + +#include <QToolBar> +#include "pqApplicationComponentsExport.h" + +/// pqMainControlsToolbar is the toolbar with actions (and reactions) for the +/// "Main Controls" toolbar in ParaView. It includes buttons like "Open Data", +/// "Save Data", "Connect", "Disconnect", "Undo", "Redo". +/// Simply instantiate this and put it in your application UI file or +/// QMainWindow to use it. +class PQAPPLICATIONCOMPONENTS_EXPORT pqMainControlsToolbar : public QToolBar +{ + Q_OBJECT + typedef QToolBar Superclass; +public: + pqMainControlsToolbar(const QString& title, QWidget* parentObject=0) + : Superclass(title, parentObject) + { + this->constructor(); + } + pqMainControlsToolbar(QWidget* parentObject=0) + : Superclass(parentObject) + { + this->constructor(); + } + +private: + Q_DISABLE_COPY(pqMainControlsToolbar) + + void constructor(); +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqManageCustomFiltersReaction.cxx b/Qt/ApplicationComponents/pqManageCustomFiltersReaction.cxx new file mode 100644 index 0000000000..56aee36f40 --- /dev/null +++ b/Qt/ApplicationComponents/pqManageCustomFiltersReaction.cxx @@ -0,0 +1,65 @@ +/*========================================================================= + + Program: ParaView + Module: pqManageCustomFiltersReaction.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 "pqManageCustomFiltersReaction.h" + +#include "pqApplicationCore.h" +#include "pqCustomFilterManager.h" +#include "pqCustomFilterManagerModel.h" +#include "pqServerManagerObserver.h" +#include "pqCoreUtilities.h" + +//----------------------------------------------------------------------------- +pqManageCustomFiltersReaction::pqManageCustomFiltersReaction(QAction* parentObject) + : Superclass(parentObject) +{ + this->Model = new pqCustomFilterManagerModel(this); + + // Listen for compound proxy register events. + pqServerManagerObserver *observer = + pqApplicationCore::instance()->getServerManagerObserver(); + this->connect(observer, SIGNAL(compoundProxyDefinitionRegistered(QString)), + this->Model, SLOT(addCustomFilter(QString))); + this->connect(observer, SIGNAL(compoundProxyDefinitionUnRegistered(QString)), + this->Model, SLOT(removeCustomFilter(QString))); + + this->Model->importCustomFiltersFromSettings(); +} + +//----------------------------------------------------------------------------- +void pqManageCustomFiltersReaction::manageCustomFilters() +{ + pqCustomFilterManager dialog(this->Model, pqCoreUtilities::mainWidget()); + dialog.exec(); +} + + + diff --git a/Qt/ApplicationComponents/pqManageCustomFiltersReaction.h b/Qt/ApplicationComponents/pqManageCustomFiltersReaction.h new file mode 100644 index 0000000000..cadf033769 --- /dev/null +++ b/Qt/ApplicationComponents/pqManageCustomFiltersReaction.h @@ -0,0 +1,64 @@ +/*========================================================================= + + Program: ParaView + Module: pqManageCustomFiltersReaction.h + + 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. + +========================================================================*/ +#ifndef __pqManageCustomFiltersReaction_h +#define __pqManageCustomFiltersReaction_h + +#include "pqReaction.h" + +class pqCustomFilterManagerModel; + +/// @ingroup Reactions +/// Reaction for showing the custom-filter manager dialog. +/// For now, this also manages loading and saving of custom filters in the +/// application settings. We may want to move that code to a separate behavior. +class PQAPPLICATIONCOMPONENTS_EXPORT pqManageCustomFiltersReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqManageCustomFiltersReaction(QAction* parentObject); + + /// Pops up the manage custom filters dialog. + void manageCustomFilters(); + +protected: + virtual void onTriggered() + { this->manageCustomFilters(); } + +private: + Q_DISABLE_COPY(pqManageCustomFiltersReaction) + pqCustomFilterManagerModel* Model; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqManageLinksReaction.cxx b/Qt/ApplicationComponents/pqManageLinksReaction.cxx new file mode 100644 index 0000000000..daaafd071b --- /dev/null +++ b/Qt/ApplicationComponents/pqManageLinksReaction.cxx @@ -0,0 +1,47 @@ +/*========================================================================= + + Program: ParaView + Module: pqManageLinksReaction.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 "pqManageLinksReaction.h" + +#include "pqLinksManager.h" +#include "pqCoreUtilities.h" + +//----------------------------------------------------------------------------- +void pqManageLinksReaction::manageLinks() +{ + pqLinksManager dialog(pqCoreUtilities::mainWidget()); + dialog.setWindowTitle("Link Manager"); + dialog.setObjectName("pqLinksManager"); + dialog.exec(); +} + + + diff --git a/Qt/ApplicationComponents/pqManageLinksReaction.h b/Qt/ApplicationComponents/pqManageLinksReaction.h new file mode 100644 index 0000000000..ac0b719550 --- /dev/null +++ b/Qt/ApplicationComponents/pqManageLinksReaction.h @@ -0,0 +1,60 @@ +/*========================================================================= + + Program: ParaView + Module: pqManageLinksReaction.h + + 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. + +========================================================================*/ +#ifndef __pqManageLinksReaction_h +#define __pqManageLinksReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// pqManageLinksReaction is the reaction to pop-up the links manager dialog. +class PQAPPLICATIONCOMPONENTS_EXPORT pqManageLinksReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqManageLinksReaction(QAction* action): Superclass(action) { } + + /// Pops-up the pqLinksManager dialog. + static void manageLinks(); + +protected: + virtual void onTriggered() + { + pqManageLinksReaction::manageLinks(); + } +private: + Q_DISABLE_COPY(pqManageLinksReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqManagePluginsReaction.cxx b/Qt/ApplicationComponents/pqManagePluginsReaction.cxx new file mode 100644 index 0000000000..2269f5710c --- /dev/null +++ b/Qt/ApplicationComponents/pqManagePluginsReaction.cxx @@ -0,0 +1,46 @@ +/*========================================================================= + + Program: ParaView + Module: pqManagePluginsReaction.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 "pqManagePluginsReaction.h" + +#include "pqActiveObjects.h" +#include "pqCoreUtilities.h" +#include "pqPluginDialog.h" + +//----------------------------------------------------------------------------- +void pqManagePluginsReaction::managePlugins() +{ + pqPluginDialog dialog(pqActiveObjects::instance().activeServer(), + pqCoreUtilities::mainWidget()); + dialog.setObjectName("PluginManagerDialog"); + dialog.exec(); +} + diff --git a/Qt/ApplicationComponents/pqManagePluginsReaction.h b/Qt/ApplicationComponents/pqManagePluginsReaction.h new file mode 100644 index 0000000000..96fce3c46a --- /dev/null +++ b/Qt/ApplicationComponents/pqManagePluginsReaction.h @@ -0,0 +1,60 @@ +/*========================================================================= + + Program: ParaView + Module: pqManagePluginsReaction.h + + 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. + +========================================================================*/ +#ifndef __pqManagePluginsReaction_h +#define __pqManagePluginsReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// pqManagePluginsReaction is the reaction to pop-up the plugins manager dialog. +class PQAPPLICATIONCOMPONENTS_EXPORT pqManagePluginsReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqManagePluginsReaction(QAction* action): Superclass(action) { } + + /// Pops-up the pqPluginDialog dialog. + static void managePlugins(); + +protected: + virtual void onTriggered() + { + pqManagePluginsReaction::managePlugins(); + } +private: + Q_DISABLE_COPY(pqManagePluginsReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPVAnimationWidget.cxx b/Qt/ApplicationComponents/pqPVAnimationWidget.cxx new file mode 100644 index 0000000000..ec155fdeb8 --- /dev/null +++ b/Qt/ApplicationComponents/pqPVAnimationWidget.cxx @@ -0,0 +1,47 @@ +/*========================================================================= + + Program: ParaView + Module: pqPVAnimationWidget.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 "pqPVAnimationWidget.h" + +#include "pqPVApplicationCore.h" +#include "pqAnimationManager.h" + +//----------------------------------------------------------------------------- +pqPVAnimationWidget::pqPVAnimationWidget(QWidget* parentObject) + : Superclass(parentObject) +{ + pqAnimationManager* mgr = pqPVApplicationCore::instance()->animationManager(); + QObject::connect(mgr, SIGNAL(activeSceneChanged(pqAnimationScene*)), + this, SLOT(setScene(pqAnimationScene*))); +} + + + diff --git a/Qt/ApplicationComponents/pqPVAnimationWidget.h b/Qt/ApplicationComponents/pqPVAnimationWidget.h new file mode 100644 index 0000000000..7e3c4cf1c3 --- /dev/null +++ b/Qt/ApplicationComponents/pqPVAnimationWidget.h @@ -0,0 +1,53 @@ +/*========================================================================= + + Program: ParaView + Module: pqPVAnimationWidget.h + + 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. + +========================================================================*/ +#ifndef __pqPVAnimationWidget_h +#define __pqPVAnimationWidget_h + +#include "pqAnimationViewWidget.h" +#include "pqApplicationComponentsExport.h" + +/// pqPVAnimationWidget is subclass of pqAnimationViewWidget that connects with +/// the pqAnimationManager maintained by pqPVApplicationCore. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPVAnimationWidget : public pqAnimationViewWidget +{ + Q_OBJECT + typedef pqAnimationViewWidget Superclass; +public: + pqPVAnimationWidget(QWidget* parent=0); + +private: + Q_DISABLE_COPY(pqPVAnimationWidget) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPVApplicationCore.cxx b/Qt/ApplicationComponents/pqPVApplicationCore.cxx new file mode 100644 index 0000000000..fd3d8e4c17 --- /dev/null +++ b/Qt/ApplicationComponents/pqPVApplicationCore.cxx @@ -0,0 +1,143 @@ +/*========================================================================= + + Program: ParaView + Module: pqPVApplicationCore.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 "pqPVApplicationCore.h" +#include "vtkPQConfig.h" + +#include "pqActiveObjects.h" +#include "pqAnimationManager.h" +#include "pqComponentsInit.h" +#include "pqComponentsTestUtility.h" +#include "pqCoreUtilities.h" +#include "pqPQLookupTableManager.h" +#include "pqQuickLaunchDialog.h" +#include "pqSelectionManager.h" +#include "pqSetName.h" + +#ifdef PARAVIEW_ENABLE_PYTHON +#include "pqPythonManager.h" +#endif + +#include <QAction> +#include <QShortcut> + +//----------------------------------------------------------------------------- +pqPVApplicationCore::pqPVApplicationCore( + int& argc, char** argv, pqOptions* options) +: Superclass(argc, argv, options) +{ + // Initialize pqComponents resources. + pqComponentsInit(); + + this->AnimationManager = new pqAnimationManager(this); + this->SelectionManager = new pqSelectionManager(this); + + this->PythonManager = 0; +#ifdef PARAVIEW_ENABLE_PYTHON + this->PythonManager = new pqPythonManager(this); +#endif + + // Lookuptable management will soon enough move to the server manager. + this->setLookupTableManager(new pqPQLookupTableManager(this)); + + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(serverChanged(pqServer*)), + this->AnimationManager, SLOT(onActiveServerChanged(pqServer*))); +} + +//----------------------------------------------------------------------------- +pqPVApplicationCore::~pqPVApplicationCore() +{ + delete this->AnimationManager; + delete this->SelectionManager; +#ifdef PARAVIEW_ENABLE_PYTHON + delete this->PythonManager; +#endif +} + +//----------------------------------------------------------------------------- +void pqPVApplicationCore::registerForQuicklaunch(QWidget* menu) +{ + if (menu) + { + this->QuickLaunchMenus.push_back(menu); + } +} + +//----------------------------------------------------------------------------- +void pqPVApplicationCore::quickLaunch() +{ + if (this->QuickLaunchMenus.size() > 0) + { + pqQuickLaunchDialog dialog(pqCoreUtilities::mainWidget()); + foreach (QWidget* menu, this->QuickLaunchMenus) + { + if (menu) + { + // don't use QMenu::actions() since that includes only the top-level + // actions. + dialog.addActions(menu->findChildren<QAction*>()); + } + } + dialog.exec(); + } +} + +//----------------------------------------------------------------------------- +pqSelectionManager* pqPVApplicationCore::selectionManager() const +{ + return this->SelectionManager; +} + +//----------------------------------------------------------------------------- +pqAnimationManager* pqPVApplicationCore::animationManager() const +{ + return this->AnimationManager; +} + +//----------------------------------------------------------------------------- +pqPythonManager* pqPVApplicationCore::pythonManager() const +{ +#ifdef PARAVIEW_ENABLE_PYTHON + return this->PythonManager; +#endif + return 0; +} + +//----------------------------------------------------------------------------- +pqTestUtility* pqPVApplicationCore::testUtility() +{ + if (!this->TestUtility) + { + this->TestUtility = new pqComponentsTestUtility(this); + } + return this->TestUtility; +} diff --git a/Qt/ApplicationComponents/pqPVApplicationCore.h b/Qt/ApplicationComponents/pqPVApplicationCore.h new file mode 100644 index 0000000000..ac4fd1d183 --- /dev/null +++ b/Qt/ApplicationComponents/pqPVApplicationCore.h @@ -0,0 +1,103 @@ +/*========================================================================= + + Program: ParaView + Module: pqPVApplicationCore.h + + 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. + +========================================================================*/ +#ifndef __pqPVApplicationCore_h +#define __pqPVApplicationCore_h + +#include "pqApplicationCore.h" +#include "pqApplicationComponentsExport.h" + +#include <QPointer> +#include <QList> + +class pqAnimationManager; +class pqPythonManager; +class pqSelectionManager; +class pqTestUtility; +class QMenu; +class QWidget; + +/// pqPVApplicationCore is the application code used by ParaView-based +/// applications that use more of ParaView's functionality than that provided by +/// pqApplicationCore such as the the selection manager, animation manager etc. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPVApplicationCore : public pqApplicationCore +{ + Q_OBJECT + typedef pqApplicationCore Superclass; +public: + pqPVApplicationCore(int& argc, char** argv, pqOptions* options=0); + ~pqPVApplicationCore(); + + /// Returns the pqPVApplicationCore instance. If no pqPVApplicationCore has been + /// created then return NULL. + static pqPVApplicationCore* instance() + { return qobject_cast<pqPVApplicationCore*>(Superclass::instance()); } + + /// Provides access to the selection manager. Selection manager provides + /// access to the ParaView wide data selection mechanism. This must not be + /// confused with the active-object selection. + pqSelectionManager* selectionManager() const; + + /// Provides access to the animation manager. Animation manager helps with the + //animation subsystem -- saving movies, creating scenes etc. + pqAnimationManager* animationManager() const; + + /// Provides access to the test utility. + virtual pqTestUtility* testUtility(); + + /// Provides access to the python manager. This is non-null only when paraview + /// is compiled with python support i.e. PARAVIEW_ENABLE_PYTHON is ON. + pqPythonManager* pythonManager() const; + + /// ParaView provides a mechanism to trigger menu actions using a quick-launch + /// dialog. Applications can register menus action from which should be + /// launch-able from the quick-launch dialog. Typical candidates are the + /// sources menu, filters menu etc. + virtual void registerForQuicklaunch(QWidget*); + +public slots: + /// Pops-up the quick launch dialog. + void quickLaunch(); + +protected: + QPointer<pqSelectionManager> SelectionManager; + QPointer<pqAnimationManager> AnimationManager; + + pqPythonManager* PythonManager; + QList<QPointer<QWidget> > QuickLaunchMenus; + +private: + Q_DISABLE_COPY(pqPVApplicationCore) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPVNewSourceBehavior.cxx b/Qt/ApplicationComponents/pqPVNewSourceBehavior.cxx new file mode 100644 index 0000000000..534b530995 --- /dev/null +++ b/Qt/ApplicationComponents/pqPVNewSourceBehavior.cxx @@ -0,0 +1,97 @@ +/*========================================================================= + + Program: ParaView + Module: pqPVNewSourceBehavior.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 "pqPVNewSourceBehavior.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqIgnoreSourceTimeReaction.h" +#include "pqObjectBuilder.h" +#include "pqPipelineFilter.h" +#include "vtkSMProxy.h" +#include "pqOutputPort.h" + +//----------------------------------------------------------------------------- +pqPVNewSourceBehavior::pqPVNewSourceBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + QObject::connect(pqApplicationCore::instance()->getObjectBuilder(), + SIGNAL(proxyCreated(pqProxy*)), + this, SLOT(activate(pqProxy*))); +} + +// Go upstream till we find an input that has timesteps and hide its time. +static void pqPVNewSourceBehaviorHideInputTimes(pqPipelineFilter* filter, + bool hide) +{ + if (!filter) + { + return; + } + QList<pqOutputPort*> inputs = filter->getAllInputs(); + foreach (pqOutputPort* input, inputs) + { + pqPipelineSource* source = input->getSource(); + if ( source->getProxy()->GetProperty("TimestepValues") + || source->getProxy()->GetProperty("TimeRange") ) + { + pqIgnoreSourceTimeReaction::ignoreSourceTime(source, hide); + } + else + { + pqPVNewSourceBehaviorHideInputTimes( + qobject_cast<pqPipelineFilter*>(source), hide); + } + } +} + +//----------------------------------------------------------------------------- +void pqPVNewSourceBehavior::activate(pqProxy* proxy) +{ + pqPipelineSource* src = qobject_cast<pqPipelineSource*>(proxy); + if (src) + { + pqActiveObjects::instance().setActiveSource(src); + } + + // If the newly created source is a filter has TimestepValues or TimeRange + // then we assume that this is a "temporal" filter which may distort the + // time. So we hide the timesteps from all the inputs. + pqPipelineFilter* filter = qobject_cast<pqPipelineFilter*>(proxy); + if (filter && + (filter->getProxy()->GetProperty("TimestepValues") + || filter->getProxy()->GetProperty("TimeRange"))) + { + pqPVNewSourceBehaviorHideInputTimes(filter, true); + } +} + + diff --git a/Qt/ApplicationComponents/pqPVNewSourceBehavior.h b/Qt/ApplicationComponents/pqPVNewSourceBehavior.h new file mode 100644 index 0000000000..a4b87c5dcc --- /dev/null +++ b/Qt/ApplicationComponents/pqPVNewSourceBehavior.h @@ -0,0 +1,65 @@ +/*========================================================================= + + Program: ParaView + Module: pqPVNewSourceBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqPVNewSourceBehavior_h +#define __pqPVNewSourceBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class pqProxy; + +/// @ingroup Behaviors +/// ParaView has quite a few peculiar activities that it likes to do when a new +/// source/filter is created e.g. +/// \li The new source is made active. +/// \li If the new source is a temporal filter, ensure that the timesteps +/// provided by the input are not considered in the animation. +/// +/// All these are managed by this class. Note that this class performs any tasks +/// only when the source was created using the pqObjectBuilder. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPVNewSourceBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqPVNewSourceBehavior(QObject* parent=0); + +protected slots: + void activate(pqProxy*); + +private: + Q_DISABLE_COPY(pqPVNewSourceBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqParaViewBehaviors.cxx b/Qt/ApplicationComponents/pqParaViewBehaviors.cxx new file mode 100644 index 0000000000..1e3f383ba1 --- /dev/null +++ b/Qt/ApplicationComponents/pqParaViewBehaviors.cxx @@ -0,0 +1,90 @@ +/*========================================================================= + + Program: ParaView + Module: pqParaViewBehaviors.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 "pqParaViewBehaviors.h" + +#include "pqAlwaysConnectedBehavior.h" +#include "pqApplicationCore.h" +#include "pqAutoLoadPluginXMLBehavior.h" +#include "pqCommandLineOptionsBehavior.h" +#include "pqCrashRecoveryBehavior.h" +#include "pqDataTimeStepBehavior.h" +#include "pqDefaultViewBehavior.h" +#include "pqDeleteBehavior.h" +#include "pqPersistentMainWindowStateBehavior.h" +#include "pqPluginActionGroupBehavior.h" +#include "pqPluginDockWidgetsBehavior.h" +#include "pqPluginManager.h" +#include "pqPVNewSourceBehavior.h" +#include "pqStandardViewModules.h" +#include "pqUndoRedoBehavior.h" +#include "pqViewFrameActionsBehavior.h" + +#include <QShortcut> +#include <QMainWindow> + +//----------------------------------------------------------------------------- +pqParaViewBehaviors::pqParaViewBehaviors( + QMainWindow* mainWindow, QObject* parentObject) + : Superclass(parentObject) +{ + // Register ParaView interfaces. + pqPluginManager* pgm = pqApplicationCore::instance()->getPluginManager(); + + // * adds support for standard paraview views. + pgm->addInterface(new pqStandardViewModules(pgm)); + + // Define application behaviors. + new pqDataTimeStepBehavior(this); + new pqViewFrameActionsBehavior(this); + new pqDefaultViewBehavior(this); + new pqAlwaysConnectedBehavior(this); + new pqPVNewSourceBehavior(this); + new pqDeleteBehavior(this); + new pqUndoRedoBehavior(this); + new pqPersistentMainWindowStateBehavior(mainWindow); + new pqCrashRecoveryBehavior(this); + new pqAutoLoadPluginXMLBehavior(this); + new pqPluginDockWidgetsBehavior(mainWindow); + new pqPluginActionGroupBehavior(mainWindow); + new pqCommandLineOptionsBehavior(this); + + // Setup quick-launch shortcuts. + QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, + mainWindow); + QObject::connect(ctrlSpace, SIGNAL(activated()), + pqApplicationCore::instance(), SLOT(quickLaunch())); + QShortcut *altSpace = new QShortcut(Qt::ALT + Qt::Key_Space, + mainWindow); + QObject::connect(altSpace, SIGNAL(activated()), + pqApplicationCore::instance(), SLOT(quickLaunch())); +} + diff --git a/Qt/ApplicationComponents/pqParaViewBehaviors.h b/Qt/ApplicationComponents/pqParaViewBehaviors.h new file mode 100644 index 0000000000..08950ce7ff --- /dev/null +++ b/Qt/ApplicationComponents/pqParaViewBehaviors.h @@ -0,0 +1,63 @@ +/*========================================================================= + + Program: ParaView + Module: pqParaViewBehaviors.h + + 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. + +========================================================================*/ +#ifndef __pqParaViewBehaviors_h +#define __pqParaViewBehaviors_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class QMainWindow; + +/// @defgroup Behaviors ParaView Behaviors +/// Behaviors are classes that manage certain behaviors in the application. +/// Developers should simply instantiate behaviors if the expect that +/// behavior in their client. + + +/// @ingroup Behaviors +/// pqParaViewBehaviors creates all the behaviors used by ParaView. If your +/// client is merely a branded version of ParaView, then you may want to simply +/// use this behavior. +class PQAPPLICATIONCOMPONENTS_EXPORT pqParaViewBehaviors : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqParaViewBehaviors(QMainWindow* window, QObject* parent=0); + +private: + Q_DISABLE_COPY(pqParaViewBehaviors) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqParaViewMenuBuilders.cxx b/Qt/ApplicationComponents/pqParaViewMenuBuilders.cxx new file mode 100644 index 0000000000..70a8986735 --- /dev/null +++ b/Qt/ApplicationComponents/pqParaViewMenuBuilders.cxx @@ -0,0 +1,337 @@ +/*========================================================================= + + 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 "vtkPQConfig.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 "pqCategoryToolbarsBehavior.h" +#include "pqChangePipelineInputReaction.h" +#include "pqColorToolbar.h" +#include "pqCreateCustomFilterReaction.h" +#include "pqDeleteReaction.h" +#include "pqExportReaction.h" +#include "pqFiltersMenuReaction.h" +#include "pqHelpReaction.h" +#include "pqIgnoreSourceTimeReaction.h" +#include "pqListNewProxyDefinitionsBehavior.h" +#include "pqLoadDataReaction.h" +#include "pqLoadStateReaction.h" +#include "pqMainControlsToolbar.h" +#include "pqManageCustomFiltersReaction.h" +#include "pqManageLinksReaction.h" +#include "pqManagePluginsReaction.h" +#include "pqProxyGroupMenuManager.h" +#include "pqPVApplicationCore.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 "pqSelectionToolbar.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" +#include "pqViewSettingsReaction.h" + +#ifdef PARAVIEW_ENABLE_PYTHON +#include "pqPythonManager.h" +#endif + +#include <QDockWidget> +#include <QKeySequence> +#include <QLayout> +#include <QMainWindow> +#include <QMenu> + +//----------------------------------------------------------------------------- +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); +} + +//----------------------------------------------------------------------------- +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 pqApplicationSettingsReaction(ui.actionEditSettings); + new pqViewSettingsReaction(ui.actionEditViewSettings); +} + +//----------------------------------------------------------------------------- +void pqParaViewMenuBuilders::buildSourcesMenu(QMenu& menu, + QMainWindow* mainWindow) +{ + pqProxyGroupMenuManager* mgr = new pqProxyGroupMenuManager(&menu, "ParaViewSources"); + new pqSourcesMenuReaction(mgr); + new pqListNewProxyDefinitionsBehavior( + pqListNewProxyDefinitionsBehavior::SOURCES, "sources", mgr); + pqPVApplicationCore::instance()->registerForQuicklaunch(&menu); + 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->setRecentlyUsedMenuSize(10); + new pqFiltersMenuReaction(mgr); + new pqListNewProxyDefinitionsBehavior( + pqListNewProxyDefinitionsBehavior::FILTERS, "filters", mgr); + pqPVApplicationCore::instance()->registerForQuicklaunch(&menu); + + 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")); + menu.addSeparator(); + new pqManageCustomFiltersReaction(menu.addAction("Manage Custom Filters") + << pqSetName("actionToolsManageCustomFilters")); + new pqManageLinksReaction(menu.addAction("Manage Links") << + pqSetName("actionToolsManageLinks")); + //<addaction name="actionToolsAddCameraLink" /> + new pqManagePluginsReaction(menu.addAction("Manage Plugins") << + pqSetName("actionManage_Plugins")); + menu.addSeparator(); + //<addaction name="actionToolsDumpWidgetNames" /> + new pqTestingReaction(menu.addAction("Record Test") + << pqSetName("actionToolsRecordTest"), + pqTestingReaction::RECORD); + new pqTestingReaction(menu.addAction("Play Test") + << pqSetName("actionToolsPlayTest"), + pqTestingReaction::PLAYBACK); + new pqTestingReaction(menu.addAction("Lock View Size") + << pqSetName("actionTesting_Window_Size"), + pqTestingReaction::LOCK_VIEW_SIZE); + 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")); +} + +//----------------------------------------------------------------------------- +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); + + if (widget.metaObject()->indexOfSignal("deleteKey()") != -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 pqCreateCustomFilterReaction(ui.actionPBCreateCustomFilter); + new pqIgnoreSourceTimeReaction(ui.actionPBIgnoreTime); + new pqDeleteReaction(ui.actionPBDelete); +} + +//----------------------------------------------------------------------------- +void pqParaViewMenuBuilders::buildMacrosMenu(QMenu& menu) +{ +#ifdef PARAVIEW_ENABLE_PYTHON + // Give the macros menu to the pqPythonMacroSupervisor + pqPythonManager* manager = pqPVApplicationCore::instance()->pythonManager(); + if (manager) + { + manager->addWidgetForMacros(&menu); + } +#endif +} + +//----------------------------------------------------------------------------- +void pqParaViewMenuBuilders::buildHelpMenu(QMenu& menu) +{ + QAction * help = menu.addAction("Help") << + pqSetName("actionHelp"); + help->setShortcut(QKeySequence::HelpContents); + new pqHelpReaction(help); + + new pqAboutDialogReaction( + menu.addAction("About") + << pqSetName("actionAbout")); +} + +//----------------------------------------------------------------------------- +void pqParaViewMenuBuilders::buildToolbars(QMainWindow& mainWindow) +{ + // So that on Mac the icons don't appear too big. + mainWindow.setIconSize(QSize(24, 24)); + + QToolBar* mainToolBar = new pqMainControlsToolbar(&mainWindow) + << pqSetName("MainControlsToolbar"); + mainToolBar->layout()->setSpacing(0); + mainWindow.addToolBar(Qt::TopToolBarArea, mainToolBar); + + QToolBar* selectionToolbar = new pqSelectionToolbar(&mainWindow) + << pqSetName("selectionToolbar"); + selectionToolbar->layout()->setSpacing(0); + mainWindow.addToolBar(Qt::TopToolBarArea, selectionToolbar); + + 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<pqPythonManager*>( + pqApplicationCore::instance()->manager("PYTHON_MANAGER")); + if (manager) + { + QToolBar* macrosToolbar = new QToolBar("Macros Toolbars", &mainWindow) + << pqSetName("MacrosToolbar"); + manager->addWidgetForMacros(macrosToolbar); + mainWindow.addToolBar(Qt::TopToolBarArea, macrosToolbar); + } +#endif +} diff --git a/Qt/ApplicationComponents/pqParaViewMenuBuilders.h b/Qt/ApplicationComponents/pqParaViewMenuBuilders.h new file mode 100644 index 0000000000..1c96624f76 --- /dev/null +++ b/Qt/ApplicationComponents/pqParaViewMenuBuilders.h @@ -0,0 +1,88 @@ +/*========================================================================= + + Program: ParaView + Module: pqParaViewMenuBuilders.h + + 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. + +========================================================================*/ +#ifndef __pqParaViewMenuBuilders_h +#define __pqParaViewMenuBuilders_h + +#include "pqApplicationComponentsExport.h" + +class QMenu; +class QWidget; +class QMainWindow; + +/// pqParaViewMenuBuilders provides helper methods to build menus that are +/// exactly as used by ParaView client. Simply call the appropriate method with +/// the menu as an argument, and it will be populated with actions and reactions +/// for standard ParaView behavior. +class PQAPPLICATIONCOMPONENTS_EXPORT pqParaViewMenuBuilders +{ +public: + /// Builds standard File menu. + static void buildFileMenu(QMenu& menu); + + /// Builds the standard Edit menu. + static void buildEditMenu(QMenu& menu); + + /// Builds "Sources" menu. + /// If you want to automatically add toolbars for sources as requested in the + /// configuration pass in a non-null main window. + static void buildSourcesMenu(QMenu& menu, QMainWindow* mainWindow =0); + + /// Builds "Filters" menu. + /// If you want to automatically add toolbars for filters as requested in the + /// configuration pass in a non-null main window. + static void buildFiltersMenu(QMenu& menu, QMainWindow* mainWindow=0); + + /// Builds the "Tools" menu. + static void buildToolsMenu(QMenu& menu); + + /// Builds the "View" menu. + static void buildViewMenu(QMenu& menu, QMainWindow& window); + + /// Builds the "Macros" menu. This menu is automatically hidden is python + /// support is not enabled. + static void buildMacrosMenu(QMenu& menu); + + /// Builds the help menu. + static void buildHelpMenu(QMenu& menu); + + /// Builds the context menu shown over the pipeline browser for some common + /// pipeline operations. + static void buildPipelineBrowserContextMenu(QWidget&); + + /// Builds and adds all standard ParaView toolbars. + static void buildToolbars(QMainWindow& mainWindow); + +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.cxx b/Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.cxx new file mode 100644 index 0000000000..dea38b4ad7 --- /dev/null +++ b/Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.cxx @@ -0,0 +1,87 @@ +/*========================================================================= + + Program: ParaView + Module: pqPersistentMainWindowStateBehavior.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 "pqPersistentMainWindowStateBehavior.h" + +#include "pqSettings.h" +#include "pqApplicationCore.h" + +#include <QMainWindow> +#include <QCoreApplication> +#include <QTimer> + +//----------------------------------------------------------------------------- +pqPersistentMainWindowStateBehavior::pqPersistentMainWindowStateBehavior( + QMainWindow* parentWindow) +: Superclass(parentWindow) +{ + Q_ASSERT(parentWindow != NULL); + QObject::connect(QCoreApplication::instance(), + SIGNAL(aboutToQuit()), + this, SLOT(saveState())); + + // This is done after a slight delay so that any GUI elements that get created + // as a consequence of loading of the configuration files will have their + // state restored as well. + QTimer::singleShot(10, this, SLOT(restoreState())); +} + +//----------------------------------------------------------------------------- +pqPersistentMainWindowStateBehavior::~pqPersistentMainWindowStateBehavior() +{ +} + +//----------------------------------------------------------------------------- +void pqPersistentMainWindowStateBehavior::restoreState(QMainWindow* window) +{ + pqApplicationCore::instance()->settings()->restoreState("MainWindow", + *window); +} + +//----------------------------------------------------------------------------- +void pqPersistentMainWindowStateBehavior::saveState(QMainWindow* window) +{ + pqApplicationCore::instance()->settings()->saveState(*window, "MainWindow"); +} + +//----------------------------------------------------------------------------- +void pqPersistentMainWindowStateBehavior::restoreState() +{ + QMainWindow* window = qobject_cast<QMainWindow*>(this->parent()); + pqPersistentMainWindowStateBehavior::restoreState(window); +} + +//----------------------------------------------------------------------------- +void pqPersistentMainWindowStateBehavior::saveState() +{ + QMainWindow* window = qobject_cast<QMainWindow*>(this->parent()); + pqPersistentMainWindowStateBehavior::saveState(window); +} diff --git a/Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.h b/Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.h new file mode 100644 index 0000000000..e133b949ab --- /dev/null +++ b/Qt/ApplicationComponents/pqPersistentMainWindowStateBehavior.h @@ -0,0 +1,66 @@ +/*========================================================================= + + Program: ParaView + Module: pqPersistentMainWindowStateBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqPersistentMainWindowStateBehavior_h +#define __pqPersistentMainWindowStateBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class QMainWindow; + +/// @ingroup Behaviors +/// pqPersistentMainWindowStateBehavior saves and restores the MainWindow state +/// on shutdown and restart. Simply instantiate this behavior if you want your +/// main window layout to be persistent. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPersistentMainWindowStateBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + /// Parent cannot be NULL. + pqPersistentMainWindowStateBehavior(QMainWindow* parent); + virtual ~pqPersistentMainWindowStateBehavior(); + + static void restoreState(QMainWindow*); + static void saveState(QMainWindow*); + +protected slots: + void saveState(); + void restoreState(); + +private: + Q_DISABLE_COPY(pqPersistentMainWindowStateBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPluginActionGroupBehavior.cxx b/Qt/ApplicationComponents/pqPluginActionGroupBehavior.cxx new file mode 100644 index 0000000000..ddaa2a4418 --- /dev/null +++ b/Qt/ApplicationComponents/pqPluginActionGroupBehavior.cxx @@ -0,0 +1,127 @@ +/*========================================================================= + + Program: ParaView + Module: pqPluginActionGroupBehavior.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 "pqPluginActionGroupBehavior.h" + +#include "pqPluginManager.h" +#include "pqApplicationCore.h" +#include "pqActionGroupInterface.h" + +#include <QMainWindow> +#include <QMenu> +#include <QMenuBar> +#include <QToolBar> + +//----------------------------------------------------------------------------- +pqPluginActionGroupBehavior::pqPluginActionGroupBehavior(QMainWindow* parentObject) + : Superclass(parentObject) +{ + pqPluginManager* pm = pqApplicationCore::instance()->getPluginManager(); + QObject::connect(pm, SIGNAL(guiInterfaceLoaded(QObject*)), + this, SLOT(addPluginInterface(QObject*))); + foreach (QObject* iface, pm->interfaces()) + { + this->addPluginInterface(iface); + } +} + +//----------------------------------------------------------------------------- +void pqPluginActionGroupBehavior::addPluginInterface(QObject* iface) +{ + pqActionGroupInterface* agi = qobject_cast<pqActionGroupInterface*>(iface); + if (!agi) + { + return; + } + + QMainWindow* mainWindow = qobject_cast<QMainWindow*>(this->parent()); + if (!mainWindow) + { + qWarning("Could not find MainWindow. Cannot load actions from the plugin."); + return; + } + + QString name = agi->groupName(); + QStringList splitName = name.split('/', QString::SkipEmptyParts); + + if (splitName.size() == 2 && splitName[0] == "ToolBar") + { + QToolBar* tb = new QToolBar(splitName[1], mainWindow); + tb->setObjectName(splitName[1]); + tb->addActions(agi->actionGroup()->actions()); + mainWindow->addToolBar(tb); + } + else if(splitName.size() == 2 && splitName[0] == "MenuBar") + { + QMenu *menu = NULL; + QList<QAction *> menuBarActions = mainWindow->menuBar()->actions(); + foreach(QAction *existingMenuAction, menuBarActions) + { + QString menuName = existingMenuAction->text(); + menuName.remove('&'); + if (menuName == splitName[1]) + { + menu = existingMenuAction->menu(); + break; + } + } + if (menu) + { + // Add to existing menu. + QAction *a; + a = menu->addSeparator(); + foreach(a, agi->actionGroup()->actions()) + { + menu->addAction(a); + } + } + else + { + // Create new menu. + menu = new QMenu(splitName[1], mainWindow); + menu->setObjectName(splitName[1]); + menu->addActions(agi->actionGroup()->actions()); + mainWindow->menuBar()->addMenu(menu); + } + } + else if (splitName.size()) + { + QString msg = + QString("Do not know what action group \"%1\" is").arg(splitName[0]); + qWarning(msg.toAscii().data()); + } + else + { + qWarning("Action group doesn't have an identifier."); + } +} + + diff --git a/Qt/ApplicationComponents/pqPluginActionGroupBehavior.h b/Qt/ApplicationComponents/pqPluginActionGroupBehavior.h new file mode 100644 index 0000000000..fc6090f24b --- /dev/null +++ b/Qt/ApplicationComponents/pqPluginActionGroupBehavior.h @@ -0,0 +1,60 @@ +/*========================================================================= + + Program: ParaView + Module: pqPluginActionGroupBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqPluginActionGroupBehavior_h +#define __pqPluginActionGroupBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class QMainWindow; + +/// @ingroup Behaviors +/// pqPluginActionGroupBehavior adds support for loading menus/toolbars from +/// plugins. In other words, it adds support for plugins created using +/// ADD_PARAVIEW_ACTION_GROUP. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPluginActionGroupBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqPluginActionGroupBehavior(QMainWindow* parent=0); + +public slots: + void addPluginInterface(QObject* iface); + +private: + Q_DISABLE_COPY(pqPluginActionGroupBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.cxx b/Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.cxx new file mode 100644 index 0000000000..fc90bb1d42 --- /dev/null +++ b/Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.cxx @@ -0,0 +1,90 @@ +/*========================================================================= + + Program: ParaView + Module: pqPluginDockWidgetsBehavior.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 "pqPluginDockWidgetsBehavior.h" + +#include "pqPluginManager.h" +#include "pqApplicationCore.h" +#include "pqDockWindowInterface.h" + +#include <QDockWidget> +#include <QMainWindow> + +//----------------------------------------------------------------------------- +pqPluginDockWidgetsBehavior::pqPluginDockWidgetsBehavior(QMainWindow* parentObject) + : Superclass(parentObject) +{ + pqPluginManager* pm = pqApplicationCore::instance()->getPluginManager(); + QObject::connect(pm, SIGNAL(guiInterfaceLoaded(QObject*)), + this, SLOT(addPluginInterface(QObject*))); + foreach (QObject* iface, pm->interfaces()) + { + this->addPluginInterface(iface); + } +} + +//----------------------------------------------------------------------------- +void pqPluginDockWidgetsBehavior::addPluginInterface(QObject* iface) +{ + pqDockWindowInterface* dwi = qobject_cast<pqDockWindowInterface*>(iface); + if (!dwi) + { + return; + } + QMainWindow* mainWindow = qobject_cast<QMainWindow*>(this->parent()); + if (!mainWindow) + { + qWarning("Could not find MainWindow. Cannot load dock widgets from the plugin."); + return; + } + + // Get the dock area. + QString area = dwi->dockArea(); + Qt::DockWidgetArea dArea = Qt::LeftDockWidgetArea; + if(area.compare("Right", Qt::CaseInsensitive) == 0) + { + dArea = Qt::RightDockWidgetArea; + } + else if(area.compare("Top", Qt::CaseInsensitive) == 0) + { + dArea = Qt::TopDockWidgetArea; + } + else if(area.compare("Bottom", Qt::CaseInsensitive) == 0) + { + dArea = Qt::BottomDockWidgetArea; + } + + // Create the dock window. + QDockWidget *dock = dwi->dockWindow(mainWindow); + mainWindow->addDockWidget(dArea, dock); +} + + diff --git a/Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.h b/Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.h new file mode 100644 index 0000000000..80e2306a8d --- /dev/null +++ b/Qt/ApplicationComponents/pqPluginDockWidgetsBehavior.h @@ -0,0 +1,60 @@ +/*========================================================================= + + Program: ParaView + Module: pqPluginDockWidgetsBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqPluginDockWidgetsBehavior_h +#define __pqPluginDockWidgetsBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class QMainWindow; + +/// @ingroup Behaviors +/// pqPluginDockWidgetsBehavior adds support for loading dock widgets from +/// plugins. In other words, it adds support for plugins created using +/// ADD_PARAVIEW_DOCK_WINDOW. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPluginDockWidgetsBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqPluginDockWidgetsBehavior(QMainWindow* parent=0); + +public slots: + void addPluginInterface(QObject* iface); + +private: + Q_DISABLE_COPY(pqPluginDockWidgetsBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPluginPathBehavior.cxx b/Qt/ApplicationComponents/pqPluginPathBehavior.cxx new file mode 100644 index 0000000000..25dd72694e --- /dev/null +++ b/Qt/ApplicationComponents/pqPluginPathBehavior.cxx @@ -0,0 +1,45 @@ +/*========================================================================= + + Program: ParaView + Module: pqPluginPathBehavior.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 "pqPluginPathBehavior.h" + +//----------------------------------------------------------------------------- +pqPluginPathBehavior::pqPluginPathBehavior(QObject* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +void pqPluginPathBehavior::loadDefaultPlugins(pqServer*) +{ +} + + diff --git a/Qt/ApplicationComponents/pqPluginPathBehavior.h b/Qt/ApplicationComponents/pqPluginPathBehavior.h new file mode 100644 index 0000000000..1babe474ab --- /dev/null +++ b/Qt/ApplicationComponents/pqPluginPathBehavior.h @@ -0,0 +1,68 @@ +/*========================================================================= + + Program: ParaView + Module: pqPluginPathBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqPluginPathBehavior_h +#define __pqPluginPathBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class pqServer; + +/// @ingroup Behaviors +/// Applications may want to support auto-loading of plugins from certain +/// locations when a client-server connection is made. In case of ParaView, +/// PV_PLUGIN_PATH environment variable is used to locate such auto-load plugin +/// locations. This behavior encapsulates this functionality. +/// Currently, besides the environment_variable specified in the constructor, +/// this class is hard-coded to look at a few locations relative to the +/// executable. That can be changed in future allow application to customize +/// those locations as well. +/// TODO: This class is work in progress. Due to lack of time I am deferring +/// this until later. Currently pqPluginManager does this work, we need to move +/// the corresponding code to this behavior to allow better customization. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPluginPathBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqPluginPathBehavior(const QString& environment_variable, QObject* parent=0); + +protected slots: + void loadDefaultPlugins(pqServer*); + +private: + Q_DISABLE_COPY(pqPluginPathBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqProxyGroupMenuManager.cxx b/Qt/ApplicationComponents/pqProxyGroupMenuManager.cxx new file mode 100644 index 0000000000..0dec945f34 --- /dev/null +++ b/Qt/ApplicationComponents/pqProxyGroupMenuManager.cxx @@ -0,0 +1,504 @@ +/*========================================================================= + + Program: ParaView + Module: pqProxyGroupMenuManager.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 "pqProxyGroupMenuManager.h" + +#include "pqApplicationCore.h" +#include "pqSetData.h" +#include "pqSetName.h" +#include "pqSettings.h" +#include "vtkPVXMLElement.h" +#include "vtkSMProxy.h" +#include "vtkSMProxyManager.h" + +#include <QMenu> +#include <QMap> +#include <QPointer> +#include <QPair> + +class pqProxyGroupMenuManager::pqInternal +{ +public: + struct Info + { + QString Icon; //<-- Name of the icon to use, if any. + QPointer<QAction> Action; //<-- Action for this proxy. + }; + + typedef QMap<QPair<QString, QString>, Info> ProxyInfoMap; + + struct CategoryInfo + { + QString Label; + bool PreserveOrder; + bool ShowInToolbar; + QList<QPair<QString, QString> > Proxies; + CategoryInfo() + { + this->PreserveOrder = false; + this->ShowInToolbar = false; + } + }; + + typedef QMap<QString, CategoryInfo> CategoryInfoMap; + + void addProxy(const QString& pgroup, const QString& pname, const QString& icon) + { + if (!pname.isEmpty() && !pgroup.isEmpty()) + { + Info& info = this->Proxies[QPair<QString, QString>(pgroup, pname)]; + if (!icon.isEmpty()) + { + info.Icon = icon; + } + } + } + + // Proxies and Categories is what gets shown in the menu. + ProxyInfoMap Proxies; + CategoryInfoMap Categories; + QList<QPair<QString, QString> > RecentlyUsed; + QWidget Widget; +}; + +//----------------------------------------------------------------------------- +pqProxyGroupMenuManager::pqProxyGroupMenuManager( + QMenu* _menu, const QString& resourceTagName) : Superclass(_menu) +{ + this->ResourceTagName = resourceTagName; + this->Internal = new pqInternal(); + this->RecentlyUsedMenuSize = 0; + this->Enabled = true; + + QObject::connect(pqApplicationCore::instance(), + SIGNAL(loadXML(vtkPVXMLElement*)), + this, SLOT(loadConfiguration(vtkPVXMLElement*))); +} + +//----------------------------------------------------------------------------- +pqProxyGroupMenuManager::~pqProxyGroupMenuManager() +{ + delete this->Internal; + this->Internal = 0; +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::addProxy( + const QString& xmlgroup, const QString& xmlname) +{ + this->Internal->addProxy(xmlgroup.toAscii().data(), + xmlname.toAscii().data(), QString()); +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::loadConfiguration(vtkPVXMLElement* root) +{ + if (!root || !root->GetName()) + { + return; + } + if (this->ResourceTagName != root->GetName()) + { + this->loadConfiguration(root->FindNestedElementByName( + this->ResourceTagName.toAscii().data())); + return; + } + + // Iterate over Category elements and find items with tag name "Proxy". + // Iterate over elements with tag "Proxy" and add them to the + // this->Internal->Proxies map. + unsigned int numElems = root->GetNumberOfNestedElements(); + for (unsigned int cc=0; cc < numElems; cc++) + { + vtkPVXMLElement* curElem = root->GetNestedElement(cc); + if (!curElem || !curElem->GetName()) + { + continue; + } + + if (strcmp(curElem->GetName(), "Category") == 0 && + curElem->GetAttribute("name")) + { + // We need to ascertain if this group is for the elements we are concerned + // with. i.e. is there atleast one element with tag "Proxy" in this + // category? + if (!curElem->FindNestedElementByName("Proxy")) + { + continue; + } + QString categoryName = curElem->GetAttribute("name"); + QString categoryLabel = curElem->GetAttribute("menu_label")? + curElem->GetAttribute("menu_label") : categoryName; + int preserve_order = 0; + curElem->GetScalarAttribute("preserve_order", &preserve_order); + int show_in_toolbar=0; + curElem->GetScalarAttribute("show_in_toolbar", &show_in_toolbar); + + // Valid category encountered. Update the Internal datastructures. + pqInternal::CategoryInfo& category = this->Internal->Categories[categoryName]; + category.Label = categoryLabel; + category.PreserveOrder = category.PreserveOrder || (preserve_order==1); + category.ShowInToolbar = category.ShowInToolbar || (show_in_toolbar==1); + unsigned int numCategoryElems = curElem->GetNumberOfNestedElements(); + for (unsigned int kk=0; kk < numCategoryElems; ++kk) + { + vtkPVXMLElement* child = curElem->GetNestedElement(kk); + if (child && child->GetName() && strcmp(child->GetName(), "Proxy") == 0) + { + const char* name = child->GetAttribute("name"); + const char* group = child->GetAttribute("group"); + const char* icon = child->GetAttribute("icon"); + if (!name || !group) + { + continue; + } + this->Internal->addProxy(group, name, icon); + if (!category.Proxies.contains(QPair<QString, QString>(group, name))) + { + category.Proxies.push_back(QPair<QString, QString>(group, name)); + } + } + } + } + else if (strcmp(curElem->GetName(), "Proxy")==0) + { + const char* name = curElem->GetAttribute("name"); + const char* group = curElem->GetAttribute("group"); + const char* icon = curElem->GetAttribute("icon"); + if (!name || !group) + { + continue; + } + this->Internal->addProxy(group, name, icon); + } + } + + this->populateMenu(); +} + +static bool actionTextSort(QAction* a, QAction *b) +{ + return a->text() < b->text(); +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::populateRecentlyUsedMenu(QMenu* rmenu) +{ + QMenu* recentMenu = rmenu? rmenu : this->menu()->findChild<QMenu*>("Recent"); + if (recentMenu) + { + recentMenu->clear(); + for (int cc=0; cc < this->Internal->RecentlyUsed.size(); cc++) + { + QPair<QString, QString> key = this->Internal->RecentlyUsed[cc]; + QAction* action = this->getAction(key.first, key.second); + if (action) + { + recentMenu->addAction(action); + } + } + } +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::loadRecentlyUsedItems() +{ + this->Internal->RecentlyUsed.clear(); + pqSettings* settings = pqApplicationCore::instance()->settings(); + QString key = QString("recent.%1/").arg(this->ResourceTagName); + if (settings->contains(key)) + { + QString list = settings->value(key).toString(); + QStringList parts = list.split("|", QString::SkipEmptyParts); + foreach (QString part, parts) + { + QStringList pieces = part.split(";", QString::SkipEmptyParts); + if (pieces.size() == 2) + { + QPair<QString, QString> key(pieces[0], pieces[1]); + this->Internal->RecentlyUsed.push_back(key); + } + } + } +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::saveRecentlyUsedItems() +{ + pqSettings* settings = pqApplicationCore::instance()->settings(); + QString key = QString("recent.%1/").arg(this->ResourceTagName); + QString value; + for (int cc=0; cc < this->Internal->RecentlyUsed.size(); cc++) + { + value += QString("%1;%2|").arg(this->Internal->RecentlyUsed[cc].first) + .arg(this->Internal->RecentlyUsed[cc].second); + } + settings->setValue(key, value); +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::populateMenu() +{ + // We reuse QAction instances, yet we don't want to have callbacks set up for + // actions that are no longer shown in the menu. Hence we disconnect all + // signal connections. + QMenu* _menu = this->menu(); + QList<QAction*> menuActions = _menu->actions(); + foreach (QAction* action, menuActions) + { + QObject::disconnect(action, 0, this, 0); + } + menuActions.clear(); + + QList<QMenu*> submenus = _menu->findChildren<QMenu*>(); + foreach (QMenu* submenu, submenus) + { + delete submenu; + } + _menu->clear(); + + if (this->RecentlyUsedMenuSize > 0) + { + QMenu* recentMenu = _menu->addMenu("&Recent") << pqSetName("Recent"); + this->loadRecentlyUsedItems(); + this->populateRecentlyUsedMenu(recentMenu); + } + + // Add categories. + pqInternal::CategoryInfoMap::iterator categoryIter = + this->Internal->Categories.begin(); + for (; categoryIter != this->Internal->Categories.end(); ++categoryIter) + { + QMenu* categoryMenu = _menu->addMenu(categoryIter.value().Label) + << pqSetName(categoryIter.key()); + QList<QAction*> action_list = this->actions(categoryIter.key()); + foreach (QAction* action, action_list) + { + categoryMenu->addAction(action); + } + } + + // Add alphabetical list. + QMenu* alphabeticalMenu = _menu; + if (this->Internal->Categories.size() > 0 || this->RecentlyUsedMenuSize > 0) + { + alphabeticalMenu = _menu->addMenu("&Alphabetical") + << pqSetName("Alphabetical"); + } + + pqInternal::ProxyInfoMap::iterator proxyIter = + this->Internal->Proxies.begin(); + + QList<QAction*> actions; + for (; proxyIter != this->Internal->Proxies.end(); ++proxyIter) + { + QAction* action = this->getAction(proxyIter.key().first, + proxyIter.key().second); + if (action) + { + actions.push_back(action); + } + } + + // Now sort all actions added in temp based on their texts. + qSort(actions.begin(), actions.end(), ::actionTextSort); + foreach (QAction* action, actions) + { + alphabeticalMenu->addAction(action); + } + + emit this->menuPopulated(); +} + +//----------------------------------------------------------------------------- +QAction* pqProxyGroupMenuManager::getAction( + const QString& pgroup, const QString& pname) +{ + if (pname.isEmpty() ||pgroup.isEmpty()) + { + return 0; + } + + // Since Proxies map keeps the QAction instance, we will reuse the QAction + // instance whenever possible. + QPair<QString, QString> key(pgroup, pname); + pqInternal::ProxyInfoMap::iterator iter = this->Internal->Proxies.find(key); + QString name = QString("%1").arg(pname); + if (iter == this->Internal->Proxies.end()) + { + return 0; + } + + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + vtkSMProxy* prototype = pxm->GetPrototypeProxy( + pgroup.toAscii().data(), pname.toAscii().data()); + if (prototype) + { + QString label = prototype->GetXMLLabel()? prototype->GetXMLLabel() : pname; + QAction* action = iter.value().Action; + if (!action) + { + action = new QAction(this); + QStringList data_list; + data_list << pgroup << pname; + action << pqSetName(name) << pqSetData(data_list); + this->Internal->Widget.addAction(action); // we add action to ourselves so it won't get + // deleted as we are updating the menu. + } + action->setText(label); + QString icon = this->Internal->Proxies[key].Icon; + + // Try to add some default icons if none is specified. + if (icon.isEmpty() && prototype->IsA("vtkSMCompoundSourceProxy")) + { + icon = ":/pqWidgets/Icons/pqBundle32.png"; + } + + if (!icon.isEmpty()) + { + action->setIcon(QIcon(icon)); + } + + QObject::connect(action, SIGNAL(triggered(bool)), + this, SLOT(triggered())); + return action; + } + return 0; +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::triggered() +{ + QAction* action = qobject_cast<QAction*>(this->sender()); + if (!action) + { + return; + } + QStringList data_list = action->data().toStringList(); + if (data_list.size() != 2) + { + return; + } + QPair<QString, QString> key (data_list[0], data_list[1]); + emit this->triggered(key.first, key.second); + if (this->RecentlyUsedMenuSize > 0) + { + this->Internal->RecentlyUsed.removeAll(key); + this->Internal->RecentlyUsed.push_front(key); + while (this->Internal->RecentlyUsed.size() > + static_cast<int>(this->RecentlyUsedMenuSize)) + { + this->Internal->RecentlyUsed.pop_back(); + } + this->populateRecentlyUsedMenu(0); + this->saveRecentlyUsedItems(); + } +} + +//----------------------------------------------------------------------------- +QList<QAction*> pqProxyGroupMenuManager::actions() const +{ + return this->Internal->Widget.actions(); +} + +//----------------------------------------------------------------------------- +vtkSMProxy* pqProxyGroupMenuManager::getPrototype(QAction* action) const +{ + if (!action) + { + return NULL; + } + QStringList data_list = action->data().toStringList(); + if (data_list.size() != 2) + { + return NULL; + } + + QPair<QString, QString> key (data_list[0], data_list[1]); + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + return pxm->GetPrototypeProxy( + key.first.toAscii().data(), key.second.toAscii().data()); +} + +//----------------------------------------------------------------------------- +QStringList pqProxyGroupMenuManager::getToolbarCategories() const +{ + QStringList categories_in_toolbar; + + pqInternal::CategoryInfoMap::iterator categoryIter = + this->Internal->Categories.begin(); + for (; categoryIter != this->Internal->Categories.end(); ++categoryIter) + { + if (categoryIter.value().ShowInToolbar) + { + categories_in_toolbar.push_back(categoryIter.key()); + } + } + return categories_in_toolbar; +} + +//----------------------------------------------------------------------------- +QList<QAction*> pqProxyGroupMenuManager::actions(const QString& category) +{ + QList<QAction*> category_actions; + pqInternal::CategoryInfoMap::iterator categoryIter = + this->Internal->Categories.find(category); + if (categoryIter == this->Internal->Categories.end()) + { + return category_actions; + } + + for (int cc=0; cc < categoryIter.value().Proxies.size(); cc++) + { + QPair<QString, QString> pname = categoryIter.value().Proxies[cc]; + QAction* action = this->getAction(pname.first, pname.second); + if (action) + { + // build an action list, so that we can sort it and then add to the + // menu (BUG #8364). + category_actions.push_back(action); + } + } + if (categoryIter.value().PreserveOrder == false) + { + // sort unless the XML overrode the sorting using the "preserve_order" + // attribute. + qSort(category_actions.begin(), category_actions.end(), ::actionTextSort); + } + return category_actions; +} + +//----------------------------------------------------------------------------- +void pqProxyGroupMenuManager::setEnabled(bool enable) +{ + this->Enabled = enable; + this->menu()->setEnabled(enable); +} diff --git a/Qt/ApplicationComponents/pqProxyGroupMenuManager.h b/Qt/ApplicationComponents/pqProxyGroupMenuManager.h new file mode 100644 index 0000000000..ba22c29154 --- /dev/null +++ b/Qt/ApplicationComponents/pqProxyGroupMenuManager.h @@ -0,0 +1,130 @@ +/*========================================================================= + + Program: ParaView + Module: pqProxyGroupMenuManager.h + + 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. + +========================================================================*/ +#ifndef __pqProxyGroupMenuManager_h +#define __pqProxyGroupMenuManager_h + +#include <QMenu> +#include "pqApplicationComponentsExport.h" + +class vtkPVXMLElement; +class vtkSMProxy; + +/// pqProxyGroupMenuManager is a menu-populator that fills up a menu with +/// proxies defined in an XML configuration file. This is use to automatically +/// build the sources and filters menu in ParaView. +class PQAPPLICATIONCOMPONENTS_EXPORT pqProxyGroupMenuManager : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + /// Constructor. + /// \c menu is the Menu to be populated. + /// \c resourceTagName is the tag name eg. "ParaViewSources" in the client + /// configuration files which contains lists the items shown by this menu. + pqProxyGroupMenuManager(QMenu* menu, const QString& resourceTagName); + ~pqProxyGroupMenuManager(); + + /// Access the menu. + QMenu* menu() const + { return static_cast<QMenu*>(this->parent()); } + + /// When size>0 a recently used category will be added to the menu. + /// One must call update() or initialize() after changing this value. + void setRecentlyUsedMenuSize(unsigned int val) + { this->RecentlyUsedMenuSize = val; } + + unsigned int recentlyUsedMenuSize() const + { return this->RecentlyUsedMenuSize; } + + /// returns the actions created by this menu manager. + QList<QAction*> actions() const; + + /// Returns the prototype proxy for the action. + vtkSMProxy* getPrototype(QAction* action) const; + + /// Provides mechanism to explicitly add a proxy to the menu. + void addProxy(const QString& xmlgroup, const QString& xmlname); + + /// Forces a re-population of the menu. Any need to call this only after + /// addProxy() has been used to explicitly add entries. + void populateMenu(); + + /// Returns a list of categories that have the "show_in_toolbar" attribute set + /// to 1. + QStringList getToolbarCategories() const; + + /// Returns the list of actions in a category. + QList<QAction*> actions(const QString& category); + +public slots: + /// Load a configuration XML. It will find the elements with resourceTagName + /// in the XML and populate the menu accordingly. Applications do not need to + /// call this method directly, it's by default connected to + /// pqApplicationCore::loadXML() + void loadConfiguration(vtkPVXMLElement*); + + /// Enable/disable the menu and the actions. + void setEnabled(bool enable); + +signals: + void triggered(const QString& group, const QString& name); + + /// fired when the menu gets repopulated,typically means that the actions have + /// been updated. + void menuPopulated(); + +protected slots: + void triggered(); + +protected: + QString ResourceTagName; + vtkPVXMLElement* MenuRoot; + int RecentlyUsedMenuSize; + bool Enabled; + + void loadRecentlyUsedItems(); + void saveRecentlyUsedItems(); + void populateRecentlyUsedMenu(QMenu*); + + /// Returns the action for a given proxy. + QAction* getAction(const QString& pgroup, const QString& proxyname); + +private: + Q_DISABLE_COPY(pqProxyGroupMenuManager) + + class pqInternal; + pqInternal* Internal; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqPythonShellReaction.cxx b/Qt/ApplicationComponents/pqPythonShellReaction.cxx new file mode 100644 index 0000000000..6278a09603 --- /dev/null +++ b/Qt/ApplicationComponents/pqPythonShellReaction.cxx @@ -0,0 +1,70 @@ +/*========================================================================= + + Program: ParaView + Module: pqPythonShellReaction.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 "pqPythonShellReaction.h" + +#include "vtkPVConfig.h" +#include "pqPVApplicationCore.h" + +#ifdef PARAVIEW_ENABLE_PYTHON +#include "pqPythonManager.h" +#include "pqPythonDialog.h" +#endif + +//----------------------------------------------------------------------------- +pqPythonShellReaction::pqPythonShellReaction(QAction* parentObject) + : Superclass(parentObject) +{ + parentObject->setEnabled(false); +#ifdef PARAVIEW_ENABLE_PYTHON + parentObject->setEnabled(true); +#endif +} + +//----------------------------------------------------------------------------- +void pqPythonShellReaction::showPythonShell() +{ +#ifdef PARAVIEW_ENABLE_PYTHON + pqPythonManager* manager = pqPVApplicationCore::instance()->pythonManager(); + if (manager) + { + pqPythonDialog* dialog = manager->pythonShellDialog(); + dialog->show(); + dialog->raise(); + dialog->activateWindow(); + return; + } +#endif + + qCritical("Python support not enabled."); +} + + diff --git a/Qt/ApplicationComponents/pqPythonShellReaction.h b/Qt/ApplicationComponents/pqPythonShellReaction.h new file mode 100644 index 0000000000..374dbe4ada --- /dev/null +++ b/Qt/ApplicationComponents/pqPythonShellReaction.h @@ -0,0 +1,63 @@ +/*========================================================================= + + Program: ParaView + Module: pqPythonShellReaction.h + + 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. + +========================================================================*/ +#ifndef __pqPythonShellReaction_h +#define __pqPythonShellReaction_h + +#include "pqReaction.h" +#include "pqApplicationComponentsExport.h" + +/// @ingroup Reactions +/// pqPythonShellReaction is a reaction to handle showing of the python shell. +class PQAPPLICATIONCOMPONENTS_EXPORT pqPythonShellReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqPythonShellReaction(QAction* parent); + + /// Pops up the python shell dialog when compiled with PARAVIEW_ENABLE_PYTHON + /// flag on. + static void showPythonShell(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqPythonShellReaction::showPythonShell(); } + + +private: + Q_DISABLE_COPY(pqPythonShellReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqReaction.cxx b/Qt/ApplicationComponents/pqReaction.cxx new file mode 100644 index 0000000000..811a1321f3 --- /dev/null +++ b/Qt/ApplicationComponents/pqReaction.cxx @@ -0,0 +1,48 @@ +/*========================================================================= + + Program: ParaView + Module: pqReaction.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 "pqReaction.h" + +//----------------------------------------------------------------------------- +pqReaction::pqReaction(QAction* parentObject) : Superclass(parentObject) +{ + Q_ASSERT(parentObject != NULL); + + QObject::connect(parentObject, SIGNAL(triggered(bool)), + this, SLOT(onTriggered())); +} + +//----------------------------------------------------------------------------- +pqReaction::~pqReaction() +{ +} + + diff --git a/Qt/ApplicationComponents/pqReaction.h b/Qt/ApplicationComponents/pqReaction.h new file mode 100644 index 0000000000..64ed5ffd4b --- /dev/null +++ b/Qt/ApplicationComponents/pqReaction.h @@ -0,0 +1,73 @@ +/*========================================================================= + + Program: ParaView + Module: pqReaction.h + + 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. + +========================================================================*/ +#ifndef __pqReaction_h +#define __pqReaction_h + +#include <QObject> +#include <QAction> +#include "pqApplicationComponentsExport.h" + +/// @defgroup Reactions ParaView Reactions +/// ParaView client relies of a collection of reactions that autonomous entities +/// that use pqApplicationCore and other core components to get their work done which +/// keeping track for their own enabled state without any external input. To +/// use, simple create this reaction and assign it to a menu +/// and add it to menus/toolbars whatever. + +/// @ingroup Reactions +/// This is a superclass just to make it easier to collect all such reactions. +class PQAPPLICATIONCOMPONENTS_EXPORT pqReaction : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqReaction(QAction* parent); + virtual ~pqReaction(); + + /// Provides access to the parent action. + QAction* parentAction() const + { + return qobject_cast<QAction*>(this->parent()); + } + +protected slots: + /// Called when the action is triggered. + virtual void onTriggered(){ } + +private: + Q_DISABLE_COPY(pqReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqRepresentationToolbar.cxx b/Qt/ApplicationComponents/pqRepresentationToolbar.cxx new file mode 100644 index 0000000000..99f58a23b6 --- /dev/null +++ b/Qt/ApplicationComponents/pqRepresentationToolbar.cxx @@ -0,0 +1,50 @@ +/*========================================================================= + + Program: ParaView + Module: pqRepresentationToolbar.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 "pqRepresentationToolbar.h" + +#include "pqActiveObjects.h" +#include "pqDisplayRepresentationWidget.h" +#include "pqSetName.h" + +//----------------------------------------------------------------------------- +void pqRepresentationToolbar::constructor() +{ + this->setWindowTitle("Representation Toolbar"); + pqDisplayRepresentationWidget* widget = new pqDisplayRepresentationWidget(this) + << pqSetName("displayRepresentation"); + this->addWidget(widget); + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(representationChanged(pqDataRepresentation*)), + widget, + SLOT(setRepresentation(pqDataRepresentation*))); +} + diff --git a/Qt/ApplicationComponents/pqRepresentationToolbar.h b/Qt/ApplicationComponents/pqRepresentationToolbar.h new file mode 100644 index 0000000000..aa8e3b13d4 --- /dev/null +++ b/Qt/ApplicationComponents/pqRepresentationToolbar.h @@ -0,0 +1,64 @@ +/*========================================================================= + + Program: ParaView + Module: pqRepresentationToolbar.h + + 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. + +========================================================================*/ +#ifndef __pqRepresentationToolbar_h +#define __pqRepresentationToolbar_h + +#include <QToolBar> +#include "pqApplicationComponentsExport.h" + +/// pqRepresentationToolbar is the toolbar which allows the user to choose the +/// representation type for the active representation. +/// Uses pqDisplayRepresentationWidget internally. +class PQAPPLICATIONCOMPONENTS_EXPORT pqRepresentationToolbar : public QToolBar +{ + Q_OBJECT + typedef QToolBar Superclass; +public: + pqRepresentationToolbar(const QString& title, QWidget* parentObject=0) + : Superclass(title, parentObject) + { + this->constructor(); + } + pqRepresentationToolbar(QWidget* parentObject=0) + : Superclass(parentObject) + { + this->constructor(); + } + +private: + Q_DISABLE_COPY(pqRepresentationToolbar) + void constructor(); +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqResetScalarRangeReaction.cxx b/Qt/ApplicationComponents/pqResetScalarRangeReaction.cxx new file mode 100644 index 0000000000..4d85796c6b --- /dev/null +++ b/Qt/ApplicationComponents/pqResetScalarRangeReaction.cxx @@ -0,0 +1,73 @@ +/*========================================================================= + + Program: ParaView + Module: pqResetScalarRangeReaction.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 "pqResetScalarRangeReaction.h" + +#include "pqActiveObjects.h" +#include "pqPipelineRepresentation.h" +#include "pqUndoStack.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqResetScalarRangeReaction::pqResetScalarRangeReaction(QAction* parentObject) + : Superclass(parentObject) +{ + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(representationChanged(pqDataRepresentation*)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqResetScalarRangeReaction::updateEnableState() +{ + pqPipelineRepresentation* repr = qobject_cast<pqPipelineRepresentation*>( + pqActiveObjects::instance().activeRepresentation()); + this->parentAction()->setEnabled(repr != NULL); +} + +//----------------------------------------------------------------------------- +void pqResetScalarRangeReaction::resetScalarRange() +{ + pqPipelineRepresentation* repr = qobject_cast<pqPipelineRepresentation*>( + pqActiveObjects::instance().activeRepresentation()); + if (!repr) + { + qCritical() << "No active representation."; + return; + } + + BEGIN_UNDO_SET("Reset Range"); + repr->resetLookupTableScalarRange(); + repr->renderViewEventually(); + END_UNDO_SET(); +} diff --git a/Qt/ApplicationComponents/pqResetScalarRangeReaction.h b/Qt/ApplicationComponents/pqResetScalarRangeReaction.h new file mode 100644 index 0000000000..dc100b45f2 --- /dev/null +++ b/Qt/ApplicationComponents/pqResetScalarRangeReaction.h @@ -0,0 +1,67 @@ +/*========================================================================= + + Program: ParaView + Module: pqResetScalarRangeReaction.h + + 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. + +========================================================================*/ +#ifndef __pqResetScalarRangeReaction_h +#define __pqResetScalarRangeReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction to reset the active lookup table's range to match the active +/// representation. +class PQAPPLICATIONCOMPONENTS_EXPORT pqResetScalarRangeReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqResetScalarRangeReaction(QAction* parent); + + static void resetScalarRange(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { + pqResetScalarRangeReaction::resetScalarRange(); + } + +private: + Q_DISABLE_COPY(pqResetScalarRangeReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.cxx b/Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.cxx new file mode 100644 index 0000000000..67217307e2 --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.cxx @@ -0,0 +1,119 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveAnimationGeometryReaction.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 "pqSaveAnimationGeometryReaction.h" + +#include "pqActiveObjects.h" +#include "pqAnimationManager.h" +#include "pqPVApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFileDialog.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqSaveAnimationGeometryReaction::pqSaveAnimationGeometryReaction( + QAction* parentObject): Superclass(parentObject) +{ + // load state enable state depends on whether we are connected to an active + // server or not and whether + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + this, SLOT(updateEnableState())); + QObject::connect(activeObjects, SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqSaveAnimationGeometryReaction::updateEnableState() +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + bool is_enabled = (activeObjects->activeServer() != NULL && + activeObjects->activeView() != NULL); + this->parentAction()->setEnabled(is_enabled); +} + +//----------------------------------------------------------------------------- +void pqSaveAnimationGeometryReaction::saveAnimationGeometry() +{ + pqAnimationManager* mgr = pqPVApplicationCore::instance()->animationManager(); + if (!mgr || !mgr->getActiveScene()) + { + qDebug() << "Cannot save animation since no active scene is present."; + return; + } + + pqView* view = pqActiveObjects::instance().activeView(); + if (!view) + { + qDebug() << "Cannot save animation geometry since no active view."; + return; + } + + QString filters = "ParaView Data files (*.pvd);;All files (*)"; + pqFileDialog fileDialog (pqActiveObjects::instance().activeServer(), + pqCoreUtilities::mainWidget(), + tr("Save Animation Geometry"), + QString(), + filters); + fileDialog.setObjectName("FileSaveAnimationDialog"); + fileDialog.setFileMode(pqFileDialog::AnyFile); + if (fileDialog.exec() == QDialog::Accepted) + { + pqSaveAnimationGeometryReaction::saveAnimationGeometry( + fileDialog.getSelectedFiles()[0]); + } +} + +//----------------------------------------------------------------------------- +void pqSaveAnimationGeometryReaction::saveAnimationGeometry( + const QString& filename) +{ + pqAnimationManager* mgr = pqPVApplicationCore::instance()->animationManager(); + if (!mgr || !mgr->getActiveScene()) + { + qDebug() << "Cannot save animation since no active scene is present."; + return; + } + + pqView* view = pqActiveObjects::instance().activeView(); + if (!view) + { + qDebug() << "Cannot save animation geometry since no active view."; + return; + } + + if (!mgr->saveGeometry(filename, view)) + { + qDebug() << "Animation save geometry failed!"; + } +} diff --git a/Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.h b/Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.h new file mode 100644 index 0000000000..52b571bab1 --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveAnimationGeometryReaction.h @@ -0,0 +1,70 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveAnimationGeometryReaction.h + + 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. + +========================================================================*/ +#ifndef __pqSaveAnimationGeometryReaction_h +#define __pqSaveAnimationGeometryReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction to save animation geometry. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSaveAnimationGeometryReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqSaveAnimationGeometryReaction(QAction* parent); + + /// Saves the animation from the active scene. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static void saveAnimationGeometry(); + static void saveAnimationGeometry(const QString& filename); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqSaveAnimationGeometryReaction::saveAnimationGeometry(); } + +private: + pqSaveAnimationGeometryReaction(const pqSaveAnimationGeometryReaction&); // Not implemented. + void operator=(const pqSaveAnimationGeometryReaction&); // Not implemented. +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqSaveAnimationReaction.cxx b/Qt/ApplicationComponents/pqSaveAnimationReaction.cxx new file mode 100644 index 0000000000..0a34353d8c --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveAnimationReaction.cxx @@ -0,0 +1,72 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveAnimationReaction.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 "pqSaveAnimationReaction.h" + +#include "pqActiveObjects.h" +#include "pqAnimationManager.h" +#include "pqPVApplicationCore.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqSaveAnimationReaction::pqSaveAnimationReaction(QAction* parentObject) + : Superclass(parentObject) +{ + // load state enable state depends on whether we are connected to an active + // server or not and whether + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqSaveAnimationReaction::updateEnableState() +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + bool is_enabled = (activeObjects->activeServer() != NULL); + this->parentAction()->setEnabled(is_enabled); +} + +//----------------------------------------------------------------------------- +void pqSaveAnimationReaction::saveAnimation() +{ + pqAnimationManager* mgr = pqPVApplicationCore::instance()->animationManager(); + if (!mgr || !mgr->getActiveScene()) + { + qDebug() << "Cannot save animation since no active scene is present."; + return; + } + mgr->saveAnimation(); +} + + diff --git a/Qt/ApplicationComponents/pqSaveAnimationReaction.h b/Qt/ApplicationComponents/pqSaveAnimationReaction.h new file mode 100644 index 0000000000..3e36b7bce7 --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveAnimationReaction.h @@ -0,0 +1,67 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveAnimationReaction.h + + 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. + +========================================================================*/ +#ifndef __pqSaveAnimationReaction_h +#define __pqSaveAnimationReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction to save animation. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSaveAnimationReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqSaveAnimationReaction(QAction* parent); + + /// Saves the animation from the active scene. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static void saveAnimation(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqSaveAnimationReaction::saveAnimation(); } + +private: + Q_DISABLE_COPY(pqSaveAnimationReaction) +}; + +#endif + diff --git a/Qt/ApplicationComponents/pqSaveDataReaction.cxx b/Qt/ApplicationComponents/pqSaveDataReaction.cxx new file mode 100644 index 0000000000..9ad02a2623 --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveDataReaction.cxx @@ -0,0 +1,180 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveDataReaction.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 "pqSaveDataReaction.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFileDialog.h" +#include "pqOptions.h" +#include "pqOutputPort.h" +#include "pqPipelineSource.h" +#include "pqServer.h" +#include "pqTestUtility.h" +#include "pqWriterDialog.h" +#include "vtkSmartPointer.h" +#include "vtkSMProxyManager.h" +#include "vtkSMSourceProxy.h" +#include "vtkSMWriterFactory.h" + +#include <QMessageBox> +#include <QDebug> + +//----------------------------------------------------------------------------- +pqSaveDataReaction::pqSaveDataReaction(QAction* parentObject) + : Superclass(parentObject) +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(portChanged(pqOutputPort*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqSaveDataReaction::updateEnableState() +{ + pqActiveObjects& activeObjects = pqActiveObjects::instance(); + // TODO: also is there's a pending accept. + pqOutputPort* port = activeObjects.activePort(); + bool enable_state = (port != NULL); + if (enable_state) + { + vtkSMWriterFactory* writerFactory = + vtkSMProxyManager::GetProxyManager()->GetWriterFactory(); + enable_state = writerFactory->CanWrite( + vtkSMSourceProxy::SafeDownCast(port->getSource()->getProxy()), + port->getPortNumber()); + } + this->parentAction()->setEnabled(enable_state); +} + +//----------------------------------------------------------------------------- +bool pqSaveDataReaction::saveActiveData() +{ + pqServer* server = pqActiveObjects::instance().activeServer(); + // TODO: also is there's a pending accept. + pqOutputPort* port = pqActiveObjects::instance().activePort(); + if (!server || !port) + { + qCritical("No active source located."); + return false; + } + + vtkSMWriterFactory* writerFactory = + vtkSMProxyManager::GetProxyManager()->GetWriterFactory(); + QString filters = writerFactory->GetSupportedFileTypes( + vtkSMSourceProxy::SafeDownCast(port->getSource()->getProxy()), + port->getPortNumber()); + if (filters.isEmpty()) + { + qCritical("Cannot determine writer to use."); + return false; + } + + pqFileDialog fileDialog(server, + pqCoreUtilities::mainWidget(), + tr("Save File:"), QString(), filters); + // FIXME: fileDialog.setRecentlyUsedExtension(this->DataExtension); + fileDialog.setObjectName("FileSaveDialog"); + fileDialog.setFileMode(pqFileDialog::AnyFile); + if (fileDialog.exec() == QDialog::Accepted) + { + return pqSaveDataReaction::saveActiveData(fileDialog.getSelectedFiles()[0]); + } + return false; +} + +//----------------------------------------------------------------------------- +bool pqSaveDataReaction::saveActiveData(const QString& filename) +{ + pqServer* server = pqActiveObjects::instance().activeServer(); + // TODO: also is there's a pending accept. + pqOutputPort* port = pqActiveObjects::instance().activePort(); + if (!server || !port) + { + qCritical("No active source located."); + return false; + } + + vtkSMWriterFactory* writerFactory = + vtkSMProxyManager::GetProxyManager()->GetWriterFactory(); + vtkSmartPointer<vtkSMProxy> proxy; + proxy.TakeReference(writerFactory->CreateWriter(filename.toAscii().data(), + vtkSMSourceProxy::SafeDownCast(port->getSource()->getProxy()), + port->getPortNumber())); + vtkSMSourceProxy* writer = vtkSMSourceProxy::SafeDownCast(proxy); + if (!writer) + { + qCritical() << "Failed to create writer for: " << filename; + return false; + } + + if (writer->IsA("vtkSMPSWriterProxy") && port->getServer()->getNumberOfPartitions() > 1) + { + pqOptions* options = pqApplicationCore::instance()->getOptions(); + // To avoid showing the dialog when running tests. + if (!pqApplicationCore::instance()->testUtility()->playingTest()) + { + QMessageBox::StandardButton result = + QMessageBox::question( + pqCoreUtilities::mainWidget(), + "Serial Writer Warning", + "This writer will collect all of the data to the first node before " + "writing because it does not support parallel IO. This may cause the " + "first node to run out of memory if the data is large. " + "Are you sure you want to continue?", + QMessageBox::Ok | QMessageBox::Cancel, + QMessageBox::Cancel); + if (result == QMessageBox::Cancel) + { + return false; + } + } + } + + pqWriterDialog dialog(writer); + + // Check to see if this writer has any properties that can be configured by + // the user. If it does, display the dialog. + if (dialog.hasConfigurableProperties()) + { + dialog.exec(); + if(dialog.result() == QDialog::Rejected) + { + // The user pressed Cancel so don't write + return false; + } + } + writer->UpdateVTKObjects(); + writer->UpdatePipeline(); + return true; +} diff --git a/Qt/ApplicationComponents/pqSaveDataReaction.h b/Qt/ApplicationComponents/pqSaveDataReaction.h new file mode 100644 index 0000000000..8fb46091a3 --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveDataReaction.h @@ -0,0 +1,72 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveDataReaction.h + + 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. + +========================================================================*/ +#ifndef __pqSaveDataReaction_h +#define __pqSaveDataReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction to save data files. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSaveDataReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqSaveDataReaction(QAction* parent); + + /// Save data files from active port. Users the vtkSMWriterFactory to decide + /// what writes are available. Returns true if the creation is + /// successful, otherwise returns false. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static bool saveActiveData(const QString& files); + static bool saveActiveData(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqSaveDataReaction::saveActiveData(); } + +private: + pqSaveDataReaction(const pqSaveDataReaction&); // Not implemented. + void operator=(const pqSaveDataReaction&); // Not implemented. +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqSaveScreenshotReaction.cxx b/Qt/ApplicationComponents/pqSaveScreenshotReaction.cxx new file mode 100644 index 0000000000..1aecf0a778 --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveScreenshotReaction.cxx @@ -0,0 +1,186 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveScreenshotReaction.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 "pqSaveScreenshotReaction.h" + +#include "pqActiveObjects.h" +#include "pqCoreUtilities.h" +#include "pqPVApplicationCore.h" +#include "pqFileDialog.h" +#include "pqImageUtil.h" +#include "pqSaveSnapshotDialog.h" +#include "pqSettings.h" +#include "pqView.h" +#include "pqViewManager.h" +#include "vtkImageData.h" +#include "vtkPVXMLElement.h" +#include "vtkSmartPointer.h" + +#include <QDebug> +#include <QFileInfo> + +//----------------------------------------------------------------------------- +pqSaveScreenshotReaction::pqSaveScreenshotReaction(QAction* parentObject) + : Superclass(parentObject) +{ + // load state enable state depends on whether we are connected to an active + // server or not and whether + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + this, SLOT(updateEnableState())); + QObject::connect(activeObjects, SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqSaveScreenshotReaction::updateEnableState() +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + bool is_enabled = (activeObjects->activeView() && activeObjects->activeServer()); + this->parentAction()->setEnabled(is_enabled); +} + +//----------------------------------------------------------------------------- +void pqSaveScreenshotReaction::saveScreenshot() +{ + pqViewManager* viewManager = qobject_cast<pqViewManager*>( + pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + if (!viewManager) + { + qCritical("Could not locate pqViewManager. If using custom-widget as the " + "central widget, you cannot use pqSaveScreenshotReaction."); + return; + } + + pqView* view = pqActiveObjects::instance().activeView(); + if (!view) + { + qDebug() << "Cannnot save image. No active view."; + return; + } + + pqSaveSnapshotDialog ssDialog(pqCoreUtilities::mainWidget()); + ssDialog.setViewSize(view->getSize()); + ssDialog.setAllViewsSize(viewManager->clientSize()); + + if (ssDialog.exec() != QDialog::Accepted) + { + return; + } + + QString lastUsedExt; + // Load the most recently used file extensions from QSettings, if available. + pqSettings* settings = pqApplicationCore::instance()->settings(); + if (settings->contains("extensions/ScreenshotExtension")) + { + lastUsedExt = + settings->value("extensions/ScreenshotExtension").toString(); + } + + QString filters; + filters += "PNG image (*.png)"; + filters += ";;BMP image (*.bmp)"; + filters += ";;TIFF image (*.tif)"; + filters += ";;PPM image (*.ppm)"; + filters += ";;JPG image (*.jpg)"; + filters += ";;PDF file (*.pdf)"; + pqFileDialog file_dialog(NULL, + pqCoreUtilities::mainWidget(), + tr("Save Screenshot:"), QString(), filters); + file_dialog.setRecentlyUsedExtension(lastUsedExt); + file_dialog.setObjectName("FileSaveScreenshotDialog"); + file_dialog.setFileMode(pqFileDialog::AnyFile); + if (file_dialog.exec() != QDialog::Accepted) + { + return; + } + + QString file = file_dialog.getSelectedFiles()[0]; + QFileInfo fileInfo = QFileInfo( file ); + lastUsedExt = QString("*.") + fileInfo.suffix(); + settings->setValue("extensions/ScreenshotExtension", lastUsedExt); + + QSize size = ssDialog.viewSize(); + QString palette = ssDialog.palette(); + + // temporarily load the color palette chosen by the user. + vtkSmartPointer<vtkPVXMLElement> currentPalette; + pqApplicationCore* core = pqApplicationCore::instance(); + if (!palette.isEmpty()) + { + currentPalette.TakeReference(core->getCurrrentPalette()); + core->loadPalette(palette); + } + + pqSaveScreenshotReaction::saveScreenshot(file, + size, ssDialog.quality(), ssDialog.saveAllViews()); + + // restore palette. + if (!palette.isEmpty()) + { + core->loadPalette(currentPalette); + } +} + +//----------------------------------------------------------------------------- +void pqSaveScreenshotReaction::saveScreenshot( + const QString& filename, const QSize& size, int quality, bool all_views) +{ + pqViewManager* viewManager = qobject_cast<pqViewManager*>( + pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + if (!viewManager) + { + qCritical("Could not locate pqViewManager. If using custom-widget as the " + "central widget, you cannot use pqSaveScreenshotReaction."); + return; + } + pqView* view = pqActiveObjects::instance().activeView(); + vtkSmartPointer<vtkImageData> img; + if (all_views) + { + img.TakeReference( + viewManager->captureImage(size.width(), size.height())); + } + else if (view) + { + img.TakeReference(view->captureImage(size)); + } + + if (img.GetPointer() == NULL) + { + qCritical() << "Save Image failed."; + } + else + { + pqImageUtil::saveImage(img, filename, quality); + } +} diff --git a/Qt/ApplicationComponents/pqSaveScreenshotReaction.h b/Qt/ApplicationComponents/pqSaveScreenshotReaction.h new file mode 100644 index 0000000000..c17d86adf8 --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveScreenshotReaction.h @@ -0,0 +1,72 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveScreenshotReaction.h + + 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. + +========================================================================*/ +#ifndef __pqSaveScreenshotReaction_h +#define __pqSaveScreenshotReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction to save a screen shot. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSaveScreenshotReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqSaveScreenshotReaction(QAction* parent); + + /// Saves the screenshot. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static void saveScreenshot(); + static void saveScreenshot(const QString& filename, + const QSize& size, + int quality, + bool all_views=false); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqSaveScreenshotReaction::saveScreenshot(); } + +private: + Q_DISABLE_COPY(pqSaveScreenshotReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqSaveStateReaction.cxx b/Qt/ApplicationComponents/pqSaveStateReaction.cxx new file mode 100644 index 0000000000..df8afd3a4b --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveStateReaction.cxx @@ -0,0 +1,91 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveStateReaction.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 "pqSaveStateReaction.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFileDialog.h" +#include "pqServer.h" +#include "pqServerResource.h" +#include "pqServerResources.h" + +//----------------------------------------------------------------------------- +pqSaveStateReaction::pqSaveStateReaction(QAction* parentObject) + : Superclass(parentObject) +{ + // save state enable state depends on whether we are connected to an active + // server or not and whether + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqSaveStateReaction::updateEnableState() +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + this->parentAction()->setEnabled(activeObjects->activeServer() != NULL); +} + +//----------------------------------------------------------------------------- +void pqSaveStateReaction::saveState() +{ + pqFileDialog fileDialog(NULL, + pqCoreUtilities::mainWidget(), + tr("Load State File"), QString(), + tr("ParaView state file (*.pvsm);;All files (*)")); + fileDialog.setObjectName("FileSaveServerStateDialog"); + fileDialog.setFileMode(pqFileDialog::AnyFile); + if (fileDialog.exec() == QDialog::Accepted) + { + QString selectedFile = fileDialog.getSelectedFiles()[0]; + pqSaveStateReaction::saveState(selectedFile); + } +} + +//----------------------------------------------------------------------------- +void pqSaveStateReaction::saveState(const QString& filename) +{ + pqApplicationCore::instance()->saveState(filename); + pqServer *server = pqActiveObjects::instance().activeServer(); + // Add this to the list of recent server resources ... + pqServerResource resource; + resource.setScheme("session"); + resource.setPath(filename); + resource.setSessionServer(server->getResource()); + pqApplicationCore::instance()->serverResources().add(resource); + pqApplicationCore::instance()->serverResources().save( + *pqApplicationCore::instance()->settings()); +} + diff --git a/Qt/ApplicationComponents/pqSaveStateReaction.h b/Qt/ApplicationComponents/pqSaveStateReaction.h new file mode 100644 index 0000000000..0efd5c4fcf --- /dev/null +++ b/Qt/ApplicationComponents/pqSaveStateReaction.h @@ -0,0 +1,70 @@ +/*========================================================================= + + Program: ParaView + Module: pqSaveStateReaction.h + + 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. + +========================================================================*/ +#ifndef __pqSaveStateReaction_h +#define __pqSaveStateReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction for saving state file. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSaveStateReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqSaveStateReaction(QAction* parent); + ~pqSaveStateReaction() {} + + /// Saves the state file. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static void saveState(const QString& filename); + static void saveState(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqSaveStateReaction::saveState(); } + +private: + Q_DISABLE_COPY(pqSaveStateReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqScalarBarVisibilityReaction.cxx b/Qt/ApplicationComponents/pqScalarBarVisibilityReaction.cxx new file mode 100644 index 0000000000..dafd4b4b12 --- /dev/null +++ b/Qt/ApplicationComponents/pqScalarBarVisibilityReaction.cxx @@ -0,0 +1,137 @@ +/*========================================================================= + + Program: ParaView + Module: pqScalarBarVisibilityReaction.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 "pqScalarBarVisibilityReaction.h" + +#include "pqActiveObjects.h" +#include "pqLookupTableManager.h" +#include "pqPipelineRepresentation.h" +#include "pqRenderViewBase.h" +#include "pqScalarBarRepresentation.h" +#include "pqScalarsToColors.h" +#include "pqUndoStack.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqScalarBarVisibilityReaction::pqScalarBarVisibilityReaction(QAction* parentObject) + : Superclass(parentObject) +{ + parentObject->setCheckable(true); + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(representationChanged(pqDataRepresentation*)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqScalarBarVisibilityReaction::updateEnableState() +{ + if (this->CachedRepresentation) + { + QObject::disconnect(this->CachedRepresentation, 0, this, 0); + this->CachedRepresentation = 0; + } + if (this->CachedLUT) + { + QObject::disconnect(this->CachedLUT, 0, this, 0); + this->CachedLUT = 0; + } + + pqPipelineRepresentation* repr = qobject_cast<pqPipelineRepresentation*>( + pqActiveObjects::instance().activeRepresentation()); + + bool can_show_sb = repr && repr->getColorField() != + pqPipelineRepresentation::solidColor(); + bool is_shown = false; + + this->CachedRepresentation = repr; + if (repr) + { + QObject::connect(repr, SIGNAL(colorChanged()), this, + SLOT(updateEnableState()), Qt::QueuedConnection); + + pqScalarsToColors* lut = repr->getLookupTable(); + this->CachedLUT = lut; + if (lut) + { + QObject::connect(lut, SIGNAL(scalarBarsChanged()), this, + SLOT(updateEnableState()), Qt::QueuedConnection); + + pqScalarBarRepresentation* sb = lut->getScalarBar( + qobject_cast<pqRenderViewBase*>(repr->getView())); + this->CachedScalarBar = sb; + if (sb) + { + QObject::connect(sb, SIGNAL(visibilityChanged(bool)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + is_shown = sb->isVisible(); + } + } + } + + QAction* parent_action = this->parentAction(); + parent_action->setEnabled(can_show_sb); + bool prev = parent_action->blockSignals(true); + parent_action->setChecked(is_shown); + parent_action->blockSignals(prev); +} + +//----------------------------------------------------------------------------- +void pqScalarBarVisibilityReaction::setScalarBarVisibility(bool visible) +{ + pqApplicationCore* core = pqApplicationCore::instance(); + pqLookupTableManager* lut_mgr = core->getLookupTableManager(); + if (!lut_mgr) + { + qCritical() << "Cannot locate pqLookupTableManager."; + return; + } + + pqRenderViewBase* view = qobject_cast<pqRenderViewBase*>( + pqActiveObjects::instance().activeView()); + pqDataRepresentation* repr = + pqActiveObjects::instance().activeRepresentation(); + if (!view || !repr) + { + qCritical() << "Required active objects are not available."; + return; + } + + BEGIN_UNDO_SET( "Toggle Color Legend Visibility"); + pqScalarBarRepresentation* scalar_bar = + lut_mgr->setScalarBarVisibility(view, repr->getLookupTable(), visible); + END_UNDO_SET(); + if (scalar_bar) + { + scalar_bar->renderViewEventually(); + } +} diff --git a/Qt/ApplicationComponents/pqScalarBarVisibilityReaction.h b/Qt/ApplicationComponents/pqScalarBarVisibilityReaction.h new file mode 100644 index 0000000000..62681fa68a --- /dev/null +++ b/Qt/ApplicationComponents/pqScalarBarVisibilityReaction.h @@ -0,0 +1,73 @@ +/*========================================================================= + + Program: ParaView + Module: pqScalarBarVisibilityReaction.h + + 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. + +========================================================================*/ +#ifndef __pqScalarBarVisibilityReaction_h +#define __pqScalarBarVisibilityReaction_h + +#include "pqReaction.h" +#include <QPointer> + +/// @ingroup Reactions +/// Reaction to toggle scalar bar visibility +class PQAPPLICATIONCOMPONENTS_EXPORT pqScalarBarVisibilityReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqScalarBarVisibilityReaction(QAction* parent); + + /// Set the scalar bar visibility for the active representation. + static void setScalarBarVisibility(bool visible); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { + pqScalarBarVisibilityReaction::setScalarBarVisibility( + this->parentAction()->isChecked()); + } + +private: + Q_DISABLE_COPY(pqScalarBarVisibilityReaction) + + QPointer<QObject> CachedRepresentation; + QPointer<QObject> CachedLUT; + QPointer<QObject> CachedScalarBar; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqSelectionInspectorWidget.cxx b/Qt/ApplicationComponents/pqSelectionInspectorWidget.cxx new file mode 100644 index 0000000000..734c3ad0d2 --- /dev/null +++ b/Qt/ApplicationComponents/pqSelectionInspectorWidget.cxx @@ -0,0 +1,43 @@ +/*========================================================================= + + Program: ParaView + Module: pqSelectionInspectorWidget.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 "pqSelectionInspectorWidget.h" + +#include "pqPVApplicationCore.h" + +//----------------------------------------------------------------------------- +pqSelectionInspectorWidget::pqSelectionInspectorWidget( + QWidget* parentObject) :Superclass(parentObject) +{ + this->setSelectionManager( + pqPVApplicationCore::instance()->selectionManager()); +} + diff --git a/Qt/ApplicationComponents/pqSelectionInspectorWidget.h b/Qt/ApplicationComponents/pqSelectionInspectorWidget.h new file mode 100644 index 0000000000..bc9c1f9777 --- /dev/null +++ b/Qt/ApplicationComponents/pqSelectionInspectorWidget.h @@ -0,0 +1,55 @@ +/*========================================================================= + + Program: ParaView + Module: pqSelectionInspectorWidget.h + + 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. + +========================================================================*/ +#ifndef __pqSelectionInspectorWidget_h +#define __pqSelectionInspectorWidget_h + +#include "pqSelectionInspectorPanel.h" +#include "pqApplicationComponentsExport.h" + +/// pqSelectionInspectorWidget simply extends pqSelectionInspectorPanel to use +/// the selection manager provided by pqPVApplicationCore as the selection manager +/// for the application. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSelectionInspectorWidget : public pqSelectionInspectorPanel +{ + Q_OBJECT + typedef pqSelectionInspectorPanel Superclass; +public: + pqSelectionInspectorWidget(QWidget* parent=0); + +private: + Q_DISABLE_COPY(pqSelectionInspectorWidget) + +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqSelectionToolbar.cxx b/Qt/ApplicationComponents/pqSelectionToolbar.cxx new file mode 100644 index 0000000000..6d93cf0ca9 --- /dev/null +++ b/Qt/ApplicationComponents/pqSelectionToolbar.cxx @@ -0,0 +1,168 @@ +/*========================================================================= + + Program: ParaView + Module: pqSelectionToolbar.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 "pqSelectionToolbar.h" +#include "ui_pqSelectionToolbar.h" + +#include "pqRubberBandHelper.h" +#include "pqActiveObjects.h" + +#include <QActionGroup> + +class pqSelectionToolbar::pqUI : public Ui::pqSelectionToolbar +{ +}; + +//----------------------------------------------------------------------------- +void pqSelectionToolbar::constructor() +{ + this->SelectionHelper = new pqRubberBandHelper(this); + // Set up connection with selection helpers for all views. + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this->SelectionHelper, SLOT(setView(pqView*))); + + this->UI = new pqUI(); + Ui::pqSelectionToolbar &ui = *this->UI; + ui.setupUi(this); + + // Setup the 'modes' so that they are exclusively selected + QActionGroup *modeGroup = new QActionGroup(this); + modeGroup->addAction(ui.actionMoveMode); + modeGroup->addAction(ui.actionSelectionMode); + modeGroup->addAction(ui.actionSelectSurfacePoints); + modeGroup->addAction(ui.actionSelect_Frustum); + modeGroup->addAction(ui.actionSelectFrustumPoints); + modeGroup->addAction(ui.actionSelect_Block); + + // Set up selection buttons. + QObject::connect( + ui.actionMoveMode, SIGNAL(triggered()), + this->SelectionHelper, SLOT(endSelection())); + + // 3d Selection Modes + QObject::connect( + this->SelectionHelper, + SIGNAL(enableSurfaceSelection(bool)), + ui.actionSelectionMode, SLOT(setEnabled(bool))); + QObject::connect( + this->SelectionHelper, + SIGNAL(enableSurfacePointsSelection(bool)), + ui.actionSelectSurfacePoints, SLOT(setEnabled(bool))); + QObject::connect( + this->SelectionHelper, + SIGNAL(enableFrustumSelection(bool)), + ui.actionSelect_Frustum, SLOT(setEnabled(bool))); + QObject::connect( + this->SelectionHelper, + SIGNAL(enableFrustumPointSelection(bool)), + ui.actionSelectFrustumPoints, SLOT(setEnabled(bool))); + QObject::connect( + this->SelectionHelper, + SIGNAL(enableBlockSelection(bool)), + ui.actionSelect_Block, SLOT(setEnabled(bool))); + + QObject::connect( + ui.actionSelectionMode, SIGNAL(triggered()), + this->SelectionHelper, SLOT(beginSurfaceSelection())); + QObject::connect( + ui.actionSelectSurfacePoints, SIGNAL(triggered()), + this->SelectionHelper, SLOT(beginSurfacePointsSelection())); + QObject::connect( + ui.actionSelect_Frustum, SIGNAL(triggered()), + this->SelectionHelper, SLOT(beginFrustumSelection())); + QObject::connect( + ui.actionSelectFrustumPoints, SIGNAL(triggered()), + this->SelectionHelper, SLOT(beginFrustumPointsSelection())); + QObject::connect( + ui.actionSelect_Block, SIGNAL(triggered()), + this->SelectionHelper, + SLOT(beginBlockSelection())); + + QObject::connect( + this->SelectionHelper, + SIGNAL(selectionModeChanged(int)), + this, SLOT(onSelectionModeChanged(int))); + QObject::connect( + this->SelectionHelper, + SIGNAL(interactionModeChanged(bool)), + ui.actionMoveMode, SLOT(setChecked(bool))); + + // When a selection is marked, we revert to interaction mode. + QObject::connect( + this->SelectionHelper, + SIGNAL(selectionFinished(int, int, int, int)), + this->SelectionHelper, SLOT(endSelection())); +} + +//----------------------------------------------------------------------------- +pqSelectionToolbar::~pqSelectionToolbar() +{ + delete this->UI; + this->UI = NULL; +} + +//----------------------------------------------------------------------------- +void pqSelectionToolbar::onSelectionModeChanged(int mode) +{ + if (this->isEnabled()) + { + switch (mode) + { + case pqRubberBandHelper::SELECT://surface selection + this->UI->actionSelectionMode->setChecked(true); + break; + + case pqRubberBandHelper::SELECT_POINTS: //surface selection + this->UI->actionSelectSurfacePoints->setChecked(true); + break; + + case pqRubberBandHelper::FRUSTUM: + this->UI->actionSelect_Frustum->setChecked(true); + break; + + case pqRubberBandHelper::FRUSTUM_POINTS: + this->UI->actionSelectFrustumPoints->setChecked(true); + break; + + case pqRubberBandHelper::BLOCKS: + this->UI->actionSelect_Block->setChecked(true); + break; + + case pqRubberBandHelper::INTERACT: + this->UI->actionMoveMode->setChecked(true); + break; + + default: + break; + } + } +} diff --git a/Qt/ApplicationComponents/pqSelectionToolbar.h b/Qt/ApplicationComponents/pqSelectionToolbar.h new file mode 100644 index 0000000000..79890bcf63 --- /dev/null +++ b/Qt/ApplicationComponents/pqSelectionToolbar.h @@ -0,0 +1,78 @@ +/*========================================================================= + + Program: ParaView + Module: pqSelectionToolbar.h + + 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. + +========================================================================*/ +#ifndef __pqSelectionToolbar_h +#define __pqSelectionToolbar_h + +#include <QToolBar> +#include "pqApplicationComponentsExport.h" + +class pqRubberBandHelper; + +/// pqSelectionToolbar is the toolbar with buttons for selecting data. +/// Simply instantiate this and put it in your application UI file or +/// QMainWindow to use it. +/// +/// CAVEATS: This class needs to be rewritten. For shortage of time, I am just +/// using pqRubberBandHelper internally instead of cleaning it up into reactions +/// etc. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSelectionToolbar : public QToolBar +{ + Q_OBJECT + typedef QToolBar Superclass; +public: + pqSelectionToolbar(const QString& title, QWidget* parentObject=0) + : Superclass(title, parentObject) + { + this->constructor(); + } + pqSelectionToolbar(QWidget* parentObject=0) + : Superclass(parentObject) + { + this->constructor(); + } + ~pqSelectionToolbar(); + +private slots: + void onSelectionModeChanged(int mode); + +private: + Q_DISABLE_COPY(pqSelectionToolbar) + + void constructor(); + pqRubberBandHelper* SelectionHelper; + class pqUI; + pqUI* UI; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqServerConnectReaction.cxx b/Qt/ApplicationComponents/pqServerConnectReaction.cxx new file mode 100644 index 0000000000..5007ae41ac --- /dev/null +++ b/Qt/ApplicationComponents/pqServerConnectReaction.cxx @@ -0,0 +1,106 @@ +/*========================================================================= + + Program: ParaView + Module: pqServerConnectReaction.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 "pqServerConnectReaction.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqPipelineSource.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" +#include "pqServerStartupBrowser.h" +#include "pqServerStartups.h" +#include "pqSimpleServerStartup.h" + +#include <QMessageBox> + +//----------------------------------------------------------------------------- +pqServerConnectReaction::pqServerConnectReaction(QAction* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +void pqServerConnectReaction::connectToServerWithWarning() +{ + pqApplicationCore* core = pqApplicationCore::instance(); + pqServerManagerModel* smmodel = core->getServerManagerModel(); + + pqServer* server = pqActiveObjects::instance().activeServer(); + + if (smmodel->findItems<pqPipelineSource*>(server).size() > 0) + { + int ret = QMessageBox::warning( + pqCoreUtilities::mainWidget(), + tr("Disconnect from current server?"), + tr("Before connecting to a new server, \n" + "the current connection will be closed and \n" + "the state will be discarded.\n\n" + "Are you sure you want to continue?"), + QMessageBox::Yes | QMessageBox::No); + if (ret == QMessageBox::No) + { + return; + } + } + + pqServerConnectReaction::connectToServer(); +} + +//----------------------------------------------------------------------------- +void pqServerConnectReaction::connectToServer() +{ + pqApplicationCore* core = pqApplicationCore::instance(); + pqServerStartupBrowser server_browser (core->serverStartups(), + pqCoreUtilities::mainWidget()); + QStringList ignoreList; + ignoreList << "builtin"; + server_browser.setIgnoreList(ignoreList); + server_browser.exec(); +} + +//----------------------------------------------------------------------------- +void pqServerConnectReaction::connectToServer( + const char* serverresource_name) +{ + if (serverresource_name) + { + pqServerStartup* startUp = + pqApplicationCore::instance()->serverStartups().getStartup(serverresource_name); + if (startUp) + { + pqSimpleServerStartup starter; + starter.startServerBlocking(*startUp); + } + } +} + diff --git a/Qt/ApplicationComponents/pqServerConnectReaction.h b/Qt/ApplicationComponents/pqServerConnectReaction.h new file mode 100644 index 0000000000..72d24c06ae --- /dev/null +++ b/Qt/ApplicationComponents/pqServerConnectReaction.h @@ -0,0 +1,65 @@ +/*========================================================================= + + Program: ParaView + Module: pqServerConnectReaction.h + + 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. + +========================================================================*/ +#ifndef __pqServerConnectReaction_h +#define __pqServerConnectReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction for connecting to a server. +class PQAPPLICATIONCOMPONENTS_EXPORT pqServerConnectReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqServerConnectReaction(QAction* parent); + + /// Creates a server connection. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static void connectToServerWithWarning(); + static void connectToServer(); + static void connectToServer(const char* server_resource_name); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqServerConnectReaction::connectToServerWithWarning(); } + +private: + Q_DISABLE_COPY(pqServerConnectReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqServerDisconnectReaction.cxx b/Qt/ApplicationComponents/pqServerDisconnectReaction.cxx new file mode 100644 index 0000000000..9f6e499cdd --- /dev/null +++ b/Qt/ApplicationComponents/pqServerDisconnectReaction.cxx @@ -0,0 +1,84 @@ +/*========================================================================= + + Program: ParaView + Module: pqServerDisconnectReaction.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 "pqServerDisconnectReaction.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqObjectBuilder.h" +#include "pqPipelineSource.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" + +#include <QMessageBox> + +//----------------------------------------------------------------------------- +pqServerDisconnectReaction::pqServerDisconnectReaction(QAction* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +void pqServerDisconnectReaction::disconnectFromServerWithWarning() +{ + pqApplicationCore* core = pqApplicationCore::instance(); + pqServerManagerModel* smmodel = core->getServerManagerModel(); + pqServer* server = pqActiveObjects::instance().activeServer(); + + if (server && smmodel->findItems<pqPipelineSource*>(server).size() > 0) + { + int ret = QMessageBox::warning(pqCoreUtilities::mainWidget(), + tr("Disconnect from current server?"), + tr("The current connection will be closed and \n" + "the state will be discarded.\n\n" + "Are you sure you want to continue?"), + QMessageBox::Yes | QMessageBox::No); + if (ret == QMessageBox::No) + { + return; + } + } + + pqServerDisconnectReaction::disconnectFromServer(); +} + +//----------------------------------------------------------------------------- +void pqServerDisconnectReaction::disconnectFromServer() +{ + pqApplicationCore* core = pqApplicationCore::instance(); + pqServer* server = pqActiveObjects::instance().activeServer(); + if (server) + { + core->getObjectBuilder()->removeServer(server); + } +} + diff --git a/Qt/ApplicationComponents/pqServerDisconnectReaction.h b/Qt/ApplicationComponents/pqServerDisconnectReaction.h new file mode 100644 index 0000000000..814f4a4733 --- /dev/null +++ b/Qt/ApplicationComponents/pqServerDisconnectReaction.h @@ -0,0 +1,64 @@ +/*========================================================================= + + Program: ParaView + Module: pqServerDisconnectReaction.h + + 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. + +========================================================================*/ +#ifndef __pqServerDisconnectReaction_h +#define __pqServerDisconnectReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction to disconnect from a server. +class PQAPPLICATIONCOMPONENTS_EXPORT pqServerDisconnectReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// Constructor. Parent cannot be NULL. + pqServerDisconnectReaction(QAction* parent); + + /// Disconnects from active server. + /// Note that this method is static. Applications can simply use this without + /// having to create a reaction instance. + static void disconnectFromServerWithWarning(); + static void disconnectFromServer(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqServerDisconnectReaction::disconnectFromServerWithWarning(); } + +private: + Q_DISABLE_COPY(pqServerDisconnectReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqSourcesMenuReaction.cxx b/Qt/ApplicationComponents/pqSourcesMenuReaction.cxx new file mode 100644 index 0000000000..0d3c8c2e50 --- /dev/null +++ b/Qt/ApplicationComponents/pqSourcesMenuReaction.cxx @@ -0,0 +1,83 @@ +/*========================================================================= + + Program: ParaView + Module: pqSourcesMenuReaction.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 "pqSourcesMenuReaction.h" + +#include "pqProxyGroupMenuManager.h" +#include "pqActiveObjects.h" +#include "pqUndoStack.h" +#include "pqObjectBuilder.h" + +//----------------------------------------------------------------------------- +pqSourcesMenuReaction::pqSourcesMenuReaction( + pqProxyGroupMenuManager* menuManager) +: Superclass(menuManager) +{ + QObject::connect( + menuManager, SIGNAL(triggered(const QString&, const QString&)), + this, SLOT(onTriggered(const QString&, const QString&))); + + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + QObject::connect(activeObjects, SIGNAL(serverChanged(pqServer*)), + this, SLOT(updateEnableState())); + QObject::connect(menuManager, SIGNAL(menuPopulated()), + this, SLOT(updateEnableState())); + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +void pqSourcesMenuReaction::updateEnableState() +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + bool enabled = activeObjects->activeServer() != NULL; + pqProxyGroupMenuManager* mgr = + static_cast<pqProxyGroupMenuManager*>(this->parent()); + mgr->setEnabled(enabled); + foreach (QAction* action, mgr->actions()) + { + action->setEnabled(enabled); + } +} + +//----------------------------------------------------------------------------- +pqPipelineSource* pqSourcesMenuReaction::createSource( + const QString& group, const QString& name) +{ + pqActiveObjects* activeObjects = &pqActiveObjects::instance(); + pqApplicationCore* core = pqApplicationCore::instance(); + pqObjectBuilder* builder = core->getObjectBuilder(); + + BEGIN_UNDO_SET(QString("Create '%1'").arg(name)); + pqPipelineSource* source = + builder->createSource(group, name, activeObjects->activeServer()); + END_UNDO_SET(); + return source; +} diff --git a/Qt/ApplicationComponents/pqSourcesMenuReaction.h b/Qt/ApplicationComponents/pqSourcesMenuReaction.h new file mode 100644 index 0000000000..ce4e5cbbeb --- /dev/null +++ b/Qt/ApplicationComponents/pqSourcesMenuReaction.h @@ -0,0 +1,69 @@ +/*========================================================================= + + Program: ParaView + Module: pqSourcesMenuReaction.h + + 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. + +========================================================================*/ +#ifndef __pqSourcesMenuReaction_h +#define __pqSourcesMenuReaction_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +class pqPipelineSource; +class pqProxyGroupMenuManager; + +/// @ingroup Reactions +/// Reaction to handle creation of sources from the sources menu. +class PQAPPLICATIONCOMPONENTS_EXPORT pqSourcesMenuReaction : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqSourcesMenuReaction(pqProxyGroupMenuManager* menuManager); + + static pqPipelineSource* createSource( + const QString& group, const QString& name); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected slots: + /// Called when the action is triggered. + virtual void onTriggered(const QString& group, const QString& name) + { pqSourcesMenuReaction::createSource(group, name); } + +private: + Q_DISABLE_COPY(pqSourcesMenuReaction) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqStandardViewFrameActionGroup.cxx b/Qt/ApplicationComponents/pqStandardViewFrameActionGroup.cxx new file mode 100644 index 0000000000..5bf88fa416 --- /dev/null +++ b/Qt/ApplicationComponents/pqStandardViewFrameActionGroup.cxx @@ -0,0 +1,105 @@ +/*========================================================================= + + Program: ParaView + Module: pqStandardViewFrameActionGroup.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 "pqStandardViewFrameActionGroup.h" + +#include "pqRenderView.h" +#include "pqEditCameraReaction.h" +#include "pqViewSettingsReaction.h" +#include "pqCameraUndoRedoReaction.h" +#include "pqMultiViewFrame.h" + +//----------------------------------------------------------------------------- +pqStandardViewFrameActionGroup::pqStandardViewFrameActionGroup(QObject* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +bool pqStandardViewFrameActionGroup::connect(pqMultiViewFrame *frame, pqView *view) +{ + pqRenderView* const render_module = qobject_cast<pqRenderView*>(view); + if (render_module) + { + QAction* cameraAction = new QAction(QIcon(":/pqWidgets/Icons/pqEditCamera16.png"), + "Adjust Camera", + this); + cameraAction->setObjectName("CameraButton"); + frame->addTitlebarAction(cameraAction); + new pqEditCameraReaction(cameraAction, view); + } + + QAction* optionsAction = new QAction( + QIcon(":/pqWidgets/Icons/pqOptions16.png"), "Edit View Options", this); + optionsAction->setObjectName("OptionsButton"); + frame->addTitlebarAction(optionsAction); + new pqViewSettingsReaction(optionsAction, view); + + if (view->supportsUndo()) + { + // Setup undo/redo connections if the view module + // supports interaction undo. + QAction* forwardAction = new QAction(QIcon(":/pqWidgets/Icons/pqRedoCamera24.png"), + "", + this); + forwardAction->setObjectName("ForwardButton"); + frame->addTitlebarAction(forwardAction); + new pqCameraUndoRedoReaction(forwardAction, false, view); + + QAction* backAction = new QAction(QIcon(":/pqWidgets/Icons/pqUndoCamera24.png"), + "", + this); + backAction->setObjectName("BackButton"); + frame->addTitlebarAction(backAction); + new pqCameraUndoRedoReaction(backAction, true, view); + } + return true; +} + +inline void REMOVE_ACTION(const char* name, pqMultiViewFrame* frame) +{ + QAction* action = frame->getAction(name); + if (action) + { + frame->removeTitlebarAction(action); + delete action; + } +} +//----------------------------------------------------------------------------- +bool pqStandardViewFrameActionGroup::disconnect(pqMultiViewFrame *frame, pqView *) +{ + REMOVE_ACTION("CameraButton", frame); + REMOVE_ACTION("OptionsButton", frame); + REMOVE_ACTION("ForwardButton", frame); + REMOVE_ACTION("BackButton", frame); + return true; +} + diff --git a/Qt/ApplicationComponents/pqStandardViewFrameActionGroup.h b/Qt/ApplicationComponents/pqStandardViewFrameActionGroup.h new file mode 100644 index 0000000000..9aff1cfd26 --- /dev/null +++ b/Qt/ApplicationComponents/pqStandardViewFrameActionGroup.h @@ -0,0 +1,57 @@ +/*========================================================================= + + Program: ParaView + Module: pqStandardViewFrameActionGroup.h + + 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. + +========================================================================*/ +#ifndef __pqStandardViewFrameActionGroup_h +#define __pqStandardViewFrameActionGroup_h + +#include "pqViewFrameActionGroup.h" +#include "pqApplicationComponentsExport.h" + +class PQAPPLICATIONCOMPONENTS_EXPORT pqStandardViewFrameActionGroup : public pqViewFrameActionGroup +{ + Q_OBJECT + typedef pqViewFrameActionGroup Superclass; +public: + pqStandardViewFrameActionGroup(QObject* parent=0); + + // Description: + // Tries to add/remove this group's actions to/from the frame if the + // view type is supported. Returns whether or not they were. + virtual bool connect(pqMultiViewFrame *frame, pqView *view); + virtual bool disconnect(pqMultiViewFrame *frame, pqView *view); + +private: + Q_DISABLE_COPY(pqStandardViewFrameActionGroup) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqStatusBar.cxx b/Qt/ApplicationComponents/pqStatusBar.cxx new file mode 100644 index 0000000000..474b4f5a29 --- /dev/null +++ b/Qt/ApplicationComponents/pqStatusBar.cxx @@ -0,0 +1,71 @@ +/*========================================================================= + + Program: ParaView + Module: pqStatusBar.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 "pqStatusBar.h" + +#include "pqApplicationCore.h" +#include "pqProgressManager.h" +#include "pqProgressWidget.h" + +#include <QToolButton> + +//----------------------------------------------------------------------------- +pqStatusBar::pqStatusBar(QWidget* parentObject) + : Superclass(parentObject) +{ + pqProgressWidget* const progress_bar = new pqProgressWidget(this); + this->addPermanentWidget(progress_bar); + + pqProgressManager* progress_manager = + pqApplicationCore::instance()->getProgressManager(); + + QObject::connect(progress_manager, SIGNAL(enableProgress(bool)), + progress_bar, SLOT(enableProgress(bool))); + + QObject::connect(progress_manager, SIGNAL(progress(const QString&, int)), + progress_bar, SLOT(setProgress(const QString&, int))); + + QObject::connect(progress_manager, SIGNAL(enableAbort(bool)), + progress_bar, SLOT(enableAbort(bool))); + + QObject::connect(progress_bar, SIGNAL(abortPressed()), + progress_manager, SLOT(triggerAbort())); + + progress_manager->addNonBlockableObject(progress_bar); + progress_manager->addNonBlockableObject(progress_bar->getAbortButton()); +} + +//----------------------------------------------------------------------------- +pqStatusBar::~pqStatusBar() +{ +} + + diff --git a/Qt/ApplicationComponents/pqStatusBar.h b/Qt/ApplicationComponents/pqStatusBar.h new file mode 100644 index 0000000000..e9d419db2e --- /dev/null +++ b/Qt/ApplicationComponents/pqStatusBar.h @@ -0,0 +1,56 @@ +/*========================================================================= + + Program: ParaView + Module: pqStatusBar.h + + 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. + +========================================================================*/ +#ifndef __pqStatusBar_h +#define __pqStatusBar_h + +#include <QStatusBar> + +#include "pqApplicationComponentsExport.h" + +/// pqStatusBar extends QStatusBar to support showing paraview progress. +/// It uses pqProgressManager provided by pqApplicationCore to show the +/// progress values. Internally uses pqProgressWidget to show the progress. +class PQAPPLICATIONCOMPONENTS_EXPORT pqStatusBar : public QStatusBar +{ + Q_OBJECT + typedef QStatusBar Superclass; +public: + pqStatusBar(QWidget* parent=0); + virtual ~pqStatusBar(); + +private: + Q_DISABLE_COPY(pqStatusBar) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqTestingReaction.cxx b/Qt/ApplicationComponents/pqTestingReaction.cxx new file mode 100644 index 0000000000..6bdb9a1fc1 --- /dev/null +++ b/Qt/ApplicationComponents/pqTestingReaction.cxx @@ -0,0 +1,117 @@ +/*========================================================================= + + Program: ParaView + Module: pqTestingReaction.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 "pqTestingReaction.h" + +#include "pqPVApplicationCore.h" +#include "pqCoreUtilities.h" +#include "pqFileDialog.h" +#include "pqTestUtility.h" +#include "pqViewManager.h" + + +//----------------------------------------------------------------------------- +void pqTestingReaction::recordTest() +{ + QString filters; + filters += "XML Files (*.xml);;"; +#ifdef QT_TESTING_WITH_PYTHON + filters += "Python Files (*.py);;"; +#endif + filters += "All Files (*)"; + pqFileDialog fileDialog (NULL, + pqCoreUtilities::mainWidget(), + tr("Record Test"), QString(), filters); + fileDialog.setObjectName("ToolsRecordTestDialog"); + fileDialog.setFileMode(pqFileDialog::AnyFile); + if (fileDialog.exec() == QDialog::Accepted) + { + pqTestingReaction::recordTest(fileDialog.getSelectedFiles()[0]); + } +} + +//----------------------------------------------------------------------------- +void pqTestingReaction::recordTest(const QString& filename) +{ + if (!filename.isEmpty()) + { + pqApplicationCore::instance()->testUtility()->recordTests(filename); + } +} + +//----------------------------------------------------------------------------- +void pqTestingReaction::playTest() +{ + QString filters; + filters += "XML Files (*.xml);;"; +#ifdef QT_TESTING_WITH_PYTHON + filters += "Python Files (*.py);;"; +#endif + filters += "All Files (*)"; + pqFileDialog fileDialog (NULL, + pqCoreUtilities::mainWidget(), + tr("Play Test"), QString(), filters); + fileDialog.setObjectName("ToolsPlayTestDialog"); + fileDialog.setFileMode(pqFileDialog::ExistingFile); + if (fileDialog.exec() == QDialog::Accepted) + { + pqTestingReaction::playTest(fileDialog.getSelectedFiles()[0]); + } +} + +//----------------------------------------------------------------------------- +void pqTestingReaction::playTest(const QString& filename) +{ + if (!filename.isEmpty()) + { + pqApplicationCore::instance()->testUtility()->playTests(filename); + } +} + +//----------------------------------------------------------------------------- +void pqTestingReaction::lockViewSize(bool lock) +{ + pqViewManager* viewManager = qobject_cast<pqViewManager*>( + pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + if (viewManager) + { + viewManager->setMaxViewWindowSize(lock? QSize(300, 300) : QSize(-1, -1)); + } + else + { + qCritical("pqTestingReaction requires pqViewManager."); + } +} + + + + + diff --git a/Qt/ApplicationComponents/pqTestingReaction.h b/Qt/ApplicationComponents/pqTestingReaction.h new file mode 100644 index 0000000000..33e9d38edf --- /dev/null +++ b/Qt/ApplicationComponents/pqTestingReaction.h @@ -0,0 +1,94 @@ +/*========================================================================= + + Program: ParaView + Module: pqTestingReaction.h + + 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. + +========================================================================*/ +#ifndef __pqTestingReaction_h +#define __pqTestingReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// pqTestingReaction can be used to recording or playing back tests. +class PQAPPLICATIONCOMPONENTS_EXPORT pqTestingReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + enum Mode + { + RECORD, + PLAYBACK, + LOCK_VIEW_SIZE + }; + + pqTestingReaction(QAction* parentObject, Mode mode): Superclass(parentObject) + { + this->ReactionMode = mode; + if (mode == LOCK_VIEW_SIZE) + { + parentObject->setCheckable(true); + } + } + + /// Records test. + static void recordTest(const QString& filename); + static void recordTest(); + + /// Plays test. + static void playTest(const QString& filename); + static void playTest(); + + /// Locks the view size for testing. + static void lockViewSize(bool); + +protected: + virtual void onTriggered() + { + switch (this->ReactionMode) + { + case RECORD: + pqTestingReaction::recordTest(); + break; + case PLAYBACK: + pqTestingReaction::playTest(); + break; + case LOCK_VIEW_SIZE: + pqTestingReaction::lockViewSize(this->parentAction()->isChecked()); + break; + } + } +private: + Q_DISABLE_COPY(pqTestingReaction) + Mode ReactionMode; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqTimerLogReaction.cxx b/Qt/ApplicationComponents/pqTimerLogReaction.cxx new file mode 100644 index 0000000000..a696fffc05 --- /dev/null +++ b/Qt/ApplicationComponents/pqTimerLogReaction.cxx @@ -0,0 +1,46 @@ +/*========================================================================= + + Program: ParaView + Module: pqTimerLogReaction.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 "pqTimerLogReaction.h" + +#include "pqTimerLogDisplay.h" + +//----------------------------------------------------------------------------- +void pqTimerLogReaction::showTimerLog() +{ + static pqTimerLogDisplay dialog; + dialog.setAttribute(Qt::WA_QuitOnClose, false); + dialog.show(); + dialog.raise(); + dialog.activateWindow(); + dialog.refresh(); +} + diff --git a/Qt/ApplicationComponents/pqTimerLogReaction.h b/Qt/ApplicationComponents/pqTimerLogReaction.h new file mode 100644 index 0000000000..7a3048cd58 --- /dev/null +++ b/Qt/ApplicationComponents/pqTimerLogReaction.h @@ -0,0 +1,61 @@ +/*========================================================================= + + Program: ParaView + Module: pqTimerLogReaction.h + + 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. + +========================================================================*/ +#ifndef __pqTimerLogReaction_h +#define __pqTimerLogReaction_h + +#include "pqReaction.h" + +/// @ingroup Reactions +/// Reaction for showing the timer log dialog. +class PQAPPLICATIONCOMPONENTS_EXPORT pqTimerLogReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + pqTimerLogReaction(QAction* parentObject): Superclass(parentObject) { } + + /// Pops up (or raises) the timer log dialog. + static void showTimerLog(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqTimerLogReaction::showTimerLog(); } + +private: + Q_DISABLE_COPY(pqTimerLogReaction) + +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqUndoRedoBehavior.cxx b/Qt/ApplicationComponents/pqUndoRedoBehavior.cxx new file mode 100644 index 0000000000..9f5a04831a --- /dev/null +++ b/Qt/ApplicationComponents/pqUndoRedoBehavior.cxx @@ -0,0 +1,99 @@ +/*========================================================================= + + Program: ParaView + Module: pqUndoRedoBehavior.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 "pqUndoRedoBehavior.h" + +#include "pqApplicationCore.h" +#include "pqCloseViewUndoElement.h" +#include "pqSplitViewUndoElement.h" +#include "pqUndoStackBuilder.h" +#include "pqUndoStack.h" +#include "pqActiveObjects.h" +#include "pqServerManagerModel.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqUndoRedoBehavior::pqUndoRedoBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + pqApplicationCore* core = pqApplicationCore::instance(); + if (core->getUndoStack()) + { + qCritical() << "Application wide undo-stack has already been initialized."; + return; + } + + // setup Undo Stack. + pqUndoStackBuilder* builder = pqUndoStackBuilder::New(); + pqUndoStack* stack = new pqUndoStack(false, builder, this); + builder->Delete(); + + // TODO: I don't know how to handle the registering of undo-elements. + + pqSplitViewUndoElement* svu_elem = pqSplitViewUndoElement::New(); + stack->registerElementForLoader(svu_elem); + svu_elem->Delete(); + + pqCloseViewUndoElement* cvu_elem = pqCloseViewUndoElement::New(); + stack->registerElementForLoader(cvu_elem); + cvu_elem->Delete(); + + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(serverChanged(pqServer*)), + stack, SLOT(setActiveServer(pqServer*))); + stack->setActiveServer(pqActiveObjects::instance().activeServer()); + + // clear undo stack when state is loaded. + QObject::connect(core, + SIGNAL(stateLoaded(vtkPVXMLElement*, vtkSMProxyLocator*)), + stack, SLOT(clear())); + + // clear stack when server connects/disconnects. + QObject::connect(core->getServerManagerModel(), + SIGNAL(serverAdded(pqServer*)), + stack, SLOT(clear())); + QObject::connect(core->getServerManagerModel(), + SIGNAL(finishedRemovingServer()), + stack, SLOT(clear())); + + // FIXME QObject::connect( + // FIXME &this->Implementation->VCRController, SIGNAL(beginNonUndoableChanges()), + // FIXME this->Implementation->UndoStack, SLOT(beginNonUndoableChanges())); + // FIXME QObject::connect( + // FIXME &this->Implementation->VCRController, SIGNAL(endNonUndoableChanges()), + // FIXME this->Implementation->UndoStack, SLOT(endNonUndoableChanges())); + + core->setUndoStack(stack); +} + + + diff --git a/Qt/ApplicationComponents/pqUndoRedoBehavior.h b/Qt/ApplicationComponents/pqUndoRedoBehavior.h new file mode 100644 index 0000000000..10de95247a --- /dev/null +++ b/Qt/ApplicationComponents/pqUndoRedoBehavior.h @@ -0,0 +1,53 @@ +/*========================================================================= + + Program: ParaView + Module: pqUndoRedoBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqUndoRedoBehavior_h +#define __pqUndoRedoBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" + +/// @ingroup Behaviors +/// pqUndoRedoBehavior enables application wide undo-redo. +class PQAPPLICATIONCOMPONENTS_EXPORT pqUndoRedoBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqUndoRedoBehavior(QObject* parent=0); + +private: + Q_DISABLE_COPY(pqUndoRedoBehavior) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqUndoRedoReaction.cxx b/Qt/ApplicationComponents/pqUndoRedoReaction.cxx new file mode 100644 index 0000000000..7799a72f7c --- /dev/null +++ b/Qt/ApplicationComponents/pqUndoRedoReaction.cxx @@ -0,0 +1,128 @@ +/*========================================================================= + + Program: ParaView + Module: pqUndoRedoReaction.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 "pqUndoRedoReaction.h" + +#include "pqApplicationCore.h" +#include "pqUndoStack.h" + +//----------------------------------------------------------------------------- +pqUndoRedoReaction::pqUndoRedoReaction(QAction* parentObject, bool undo) + : Superclass(parentObject) +{ + this->Undo = undo; + this->enable(false); + + pqUndoStack* stack = pqApplicationCore::instance()->getUndoStack(); + if (!stack) + { + QObject::connect(pqApplicationCore::instance(), + SIGNAL(undoStackChanged(pqUndoStack*)), + this, SLOT(setUndoStack(pqUndoStack*))); + } + else + { + this->setUndoStack(stack); + } +} + +//----------------------------------------------------------------------------- +void pqUndoRedoReaction::setUndoStack(pqUndoStack* stack) +{ + if (this->Undo) + { + QObject::connect(stack, SIGNAL(canUndoChanged(bool)), + this, SLOT(enable(bool))); + QObject::connect(stack, SIGNAL(undoLabelChanged(const QString&)), + this, SLOT(setLabel(const QString&))); + } + else + { + QObject::connect(stack, SIGNAL(canRedoChanged(bool)), + this, SLOT(enable(bool))); + QObject::connect(stack, SIGNAL(redoLabelChanged(const QString&)), + this, SLOT(setLabel(const QString&))); + } +} + +//----------------------------------------------------------------------------- +void pqUndoRedoReaction::undo() +{ + pqUndoStack* stack = pqApplicationCore::instance()->getUndoStack(); + if (!stack) + { + qCritical("No application wide undo stack."); + return; + } + stack->undo(); +} + +//----------------------------------------------------------------------------- +void pqUndoRedoReaction::redo() +{ + pqUndoStack* stack = pqApplicationCore::instance()->getUndoStack(); + if (!stack) + { + qCritical("No application wide undo stack."); + return; + } + stack->redo(); +} + +//----------------------------------------------------------------------------- +void pqUndoRedoReaction::enable(bool can_undo) +{ + this->parentAction()->setEnabled(can_undo); +} + +//----------------------------------------------------------------------------- +void pqUndoRedoReaction::setLabel(const QString& label) +{ + if (this->Undo) + { + this->parentAction()->setText( + label.isEmpty() ? tr("Can't Undo") : QString(tr("&Undo %1")).arg(label)); + this->parentAction()->setStatusTip( + label.isEmpty() ? tr("Can't Undo") : QString(tr("Undo %1")).arg(label)); + } + else + { + this->parentAction()->setText( + label.isEmpty() ? tr("Can't Redo") : QString(tr("&Redo %1")).arg(label)); + this->parentAction()->setStatusTip( + label.isEmpty() ? tr("Can't Redo") : QString(tr("Redo %1")).arg(label)); + } +} + + + + + diff --git a/Qt/ApplicationComponents/pqUndoRedoReaction.h b/Qt/ApplicationComponents/pqUndoRedoReaction.h new file mode 100644 index 0000000000..750321e6f3 --- /dev/null +++ b/Qt/ApplicationComponents/pqUndoRedoReaction.h @@ -0,0 +1,83 @@ +/*========================================================================= + + Program: ParaView + Module: pqUndoRedoReaction.h + + 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. + +========================================================================*/ +#ifndef __pqUndoRedoReaction_h +#define __pqUndoRedoReaction_h + +#include "pqReaction.h" + +class pqUndoStack; + +/// @ingroup Reactions +/// Reaction for application undo-redo. +class PQAPPLICATIONCOMPONENTS_EXPORT pqUndoRedoReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// if \c undo is set to true, then this behaves as an undo-reaction otherwise + /// as a redo-reaction. + pqUndoRedoReaction(QAction* parent, bool undo); + + /// undo. + static void undo(); + + /// redo. + static void redo(); + +protected slots: + void enable(bool); + void setLabel(const QString& label); + void setUndoStack(pqUndoStack*); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { + if (this->Undo) + { + pqUndoRedoReaction::undo(); + } + else + { + pqUndoRedoReaction::redo(); + } + } + +private: + Q_DISABLE_COPY(pqUndoRedoReaction) + + bool Undo; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqVCRToolbar.cxx b/Qt/ApplicationComponents/pqVCRToolbar.cxx new file mode 100644 index 0000000000..0e6a2428ec --- /dev/null +++ b/Qt/ApplicationComponents/pqVCRToolbar.cxx @@ -0,0 +1,130 @@ +/*========================================================================= + + Program: ParaView + Module: pqVCRToolbar.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 "pqVCRToolbar.h" +#include "ui_pqVCRToolbar.h" + +#include "pqActiveObjects.h" +#include "pqPVApplicationCore.h" +#include "pqVCRController.h" +#include "pqUndoStack.h" +#include "pqAnimationManager.h" + +class pqVCRToolbar::pqInternals : public Ui::pqVCRToolbar +{ +}; + +//----------------------------------------------------------------------------- +void pqVCRToolbar::constructor() +{ + this->UI = new pqInternals(); + Ui::pqVCRToolbar &ui = *this->UI; + ui.setupUi(this); + + pqVCRController* controller = new pqVCRController(this); + this->Controller = controller; + QObject::connect(pqPVApplicationCore::instance()->animationManager(), + SIGNAL(activeSceneChanged(pqAnimationScene*)), + controller, SLOT(setAnimationScene(pqAnimationScene*))); + + // Ideally pqVCRController needs to be deprecated in lieu of a more + // action-reaction friendly implementation. But for now, I am simply reusing + // the old code. + QObject::connect(ui.actionVCRPlay, SIGNAL(triggered()), + controller, SLOT(onPlay())); + QObject::connect(ui.actionVCRFirstFrame, SIGNAL(triggered()), + controller, SLOT(onFirstFrame())); + QObject::connect(ui.actionVCRPreviousFrame, SIGNAL(triggered()), + controller, SLOT(onPreviousFrame())); + QObject::connect(ui.actionVCRNextFrame, SIGNAL(triggered()), + controller, SLOT(onNextFrame())); + QObject::connect(ui.actionVCRLastFrame, SIGNAL(triggered()), + controller, SLOT(onLastFrame())); + QObject::connect(ui.actionVCRLoop, SIGNAL(toggled(bool)), + controller, SLOT(onLoop(bool))); + + QObject::connect(controller, SIGNAL(enabled(bool)), + ui.actionVCRPlay, SLOT(setEnabled(bool))); + QObject::connect(controller, SIGNAL(enabled(bool)), + ui.actionVCRFirstFrame, SLOT(setEnabled(bool))); + QObject::connect(controller, SIGNAL(enabled(bool)), + ui.actionVCRPreviousFrame, SLOT(setEnabled(bool))); + QObject::connect(controller, SIGNAL(enabled(bool)), + ui.actionVCRNextFrame, SLOT(setEnabled(bool))); + QObject::connect(controller, SIGNAL(enabled(bool)), + ui.actionVCRLastFrame, SLOT(setEnabled(bool))); + QObject::connect(controller, SIGNAL(enabled(bool)), + ui.actionVCRLoop, SLOT(setEnabled(bool))); + QObject::connect(controller, SIGNAL(timeRanges(double, double)), + this, SLOT(setTimeRanges(double, double))); + QObject::connect(controller, SIGNAL(loop(bool)), + ui.actionVCRLoop, SLOT(setChecked(bool))); + QObject::connect(controller, SIGNAL(playing(bool)), + this, SLOT(onPlaying(bool))); +} + +//----------------------------------------------------------------------------- +void pqVCRToolbar::setTimeRanges(double start, double end) +{ + this->UI->actionVCRFirstFrame->setToolTip( + QString("First Frame (%1)").arg(start, 0, 'g')); + this->UI->actionVCRLastFrame->setToolTip( + QString("Last Frame (%1)").arg(end, 0, 'g')); +} + +//----------------------------------------------------------------------------- +void pqVCRToolbar::onPlaying(bool playing) +{ + if(playing) + { + disconnect(this->UI->actionVCRPlay, SIGNAL(triggered()), + this->Controller, SLOT(onPlay())); + connect(this->UI->actionVCRPlay, SIGNAL(triggered()), + this->Controller, SLOT(onPause())); + this->UI->actionVCRPlay->setIcon( + QIcon(":/pqWidgets/Icons/pqVcrPause24.png")); + this->UI->actionVCRPlay->setText("Pa&use"); + } + else + { + connect(this->UI->actionVCRPlay, SIGNAL(triggered()), + this->Controller, SLOT(onPlay())); + disconnect(this->UI->actionVCRPlay, SIGNAL(triggered()), + this->Controller, SLOT(onPause())); + this->UI->actionVCRPlay->setIcon( + QIcon(":/pqWidgets/Icons/pqVcrPlay24.png")); + this->UI->actionVCRPlay->setText("&Play"); + } + + // this becomes a behavior. + // this->Implementation->Core->setSelectiveEnabledState(!playing); +} + diff --git a/Qt/Widgets/pqLookmarkToolbar.h b/Qt/ApplicationComponents/pqVCRToolbar.h similarity index 56% rename from Qt/Widgets/pqLookmarkToolbar.h rename to Qt/ApplicationComponents/pqVCRToolbar.h index 4e2445704a..12ec25455b 100644 --- a/Qt/Widgets/pqLookmarkToolbar.h +++ b/Qt/ApplicationComponents/pqVCRToolbar.h @@ -1,14 +1,14 @@ /*========================================================================= Program: ParaView - Module: pqLookmarkToolbar.h + Module: pqVCRToolbar.h - Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + 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. @@ -29,55 +29,47 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ========================================================================*/ - -/// \file pqLookmarkToolbar.h -/// \date 7/3/2006 - -#ifndef _pqLookmarkToolbar_h -#define _pqLookmarkToolbar_h - - -#include "QtWidgetsExport.h" +#ifndef __pqVCRToolbar_h +#define __pqVCRToolbar_h #include <QToolBar> +#include "pqApplicationComponentsExport.h" -class QAction; -class QImage; - +class pqVCRController; -class QTWIDGETS_EXPORT pqLookmarkToolbar : public QToolBar +/// pqVCRToolbar is the toolbar with VCR controls. +/// Simply instantiate this and put it in your application UI file or +/// QMainWindow to use it. +class PQAPPLICATIONCOMPONENTS_EXPORT pqVCRToolbar : public QToolBar { Q_OBJECT - + typedef QToolBar Superclass; public: - pqLookmarkToolbar(const QString &title, QWidget* p=0); - pqLookmarkToolbar(QWidget* p=0); - ~pqLookmarkToolbar(){} - -public slots: - void onLookmarkRemoved(const QString &name); - void onLookmarkAdded(const QString &name, const QImage &icon); - void onLookmarkNameChanged(const QString &oldName, const QString &newName); - - void showContextMenu(const QPoint &pos); - void editCurrentLookmark(); - void removeCurrentLookmark(); - + pqVCRToolbar(const QString& title, QWidget* parentObject=0) + : Superclass(title, parentObject) + { + this->constructor(); + } + pqVCRToolbar(QWidget* parentObject=0) + : Superclass(parentObject) + { + this->constructor(); + } protected slots: - void onLoadLookmark(QAction*); + void setTimeRanges(double, double); + void onPlaying(bool); -signals: - void loadLookmark(const QString &name); - void editLookmark(const QString &name); - void removeLookmark(const QString &name); +private: + Q_DISABLE_COPY(pqVCRToolbar) + + void constructor(); -protected: - void connectActions(); + class pqInternals; + pqInternals* UI; -private: - QAction *ActionEdit; - QAction *ActionRemove; - QAction *CurrentLookmark; + pqVCRController* Controller; }; #endif + + diff --git a/Qt/ApplicationComponents/pqViewFrameActionsBehavior.cxx b/Qt/ApplicationComponents/pqViewFrameActionsBehavior.cxx new file mode 100644 index 0000000000..a896256101 --- /dev/null +++ b/Qt/ApplicationComponents/pqViewFrameActionsBehavior.cxx @@ -0,0 +1,57 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewFrameActionsBehavior.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 "pqViewFrameActionsBehavior.h" + +#include "pqApplicationCore.h" +#include "pqPluginManager.h" +#include "pqStandardViewFrameActionGroup.h" +#include "pqViewFrameActionGroupInterface.h" + +//----------------------------------------------------------------------------- +pqViewFrameActionsBehavior::pqViewFrameActionsBehavior(QObject* parentObject) + : Superclass(parentObject) +{ + this->Interface = new pqViewFrameActionsBehaviorInterface(); + Q_ASSERT(qobject_cast<pqViewFrameActionGroupInterface*>(this->Interface)); + this->Interface->Group = new pqStandardViewFrameActionGroup(this); + pqApplicationCore::instance()->getPluginManager()->addInterface( + this->Interface); +} + +//----------------------------------------------------------------------------- +pqViewFrameActionsBehavior::~pqViewFrameActionsBehavior() +{ + pqApplicationCore::instance()->getPluginManager()->removeInterface( + this->Interface); + delete this->Interface; +} + diff --git a/Qt/ApplicationComponents/pqViewFrameActionsBehavior.h b/Qt/ApplicationComponents/pqViewFrameActionsBehavior.h new file mode 100644 index 0000000000..1993789e7b --- /dev/null +++ b/Qt/ApplicationComponents/pqViewFrameActionsBehavior.h @@ -0,0 +1,77 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewFrameActionsBehavior.h + + 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. + +========================================================================*/ +#ifndef __pqViewFrameActionsBehavior_h +#define __pqViewFrameActionsBehavior_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" +#include "pqViewFrameActionGroupInterface.h" +#include "pqViewFrameActionGroup.h" + +class pqViewFrameActionsBehaviorInterface; + +/// @ingroup Behaviors +/// pqViewFrameActionsBehavior manages the setting up of the actions that are +/// shown above the view frames. This simply creates the +/// pqStandardViewFrameActions and registers it with the plugin manager. +class PQAPPLICATIONCOMPONENTS_EXPORT pqViewFrameActionsBehavior : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqViewFrameActionsBehavior(QObject* parent=0); + virtual ~pqViewFrameActionsBehavior(); + +private: + Q_DISABLE_COPY(pqViewFrameActionsBehavior) + pqViewFrameActionsBehaviorInterface* Interface; + +}; + +class pqViewFrameActionsBehaviorInterface : + public QObject, public pqViewFrameActionGroupInterface +{ + Q_OBJECT + Q_INTERFACES(pqViewFrameActionGroupInterface) +public: + virtual bool connect(pqMultiViewFrame* frame, pqView* view) + { return this->Group->connect(frame, view); } + virtual bool disconnect(pqMultiViewFrame* frame, pqView* view) + { return this->Group->disconnect(frame, view); } + virtual pqViewFrameActionGroup* actionGroup() + { return this->Group; } + pqViewFrameActionGroup* Group; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqViewMenuManager.cxx b/Qt/ApplicationComponents/pqViewMenuManager.cxx new file mode 100644 index 0000000000..ec17ce57d8 --- /dev/null +++ b/Qt/ApplicationComponents/pqViewMenuManager.cxx @@ -0,0 +1,129 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewMenuManager.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 "pqViewMenuManager.h" + +#include "pqPVApplicationCore.h" +#include "pqSetName.h" +#include "pqViewManager.h" + +#include <QDockWidget> +#include <QMainWindow> +#include <QMenu> +#include <QToolBar> + +//----------------------------------------------------------------------------- +pqViewMenuManager::pqViewMenuManager(QMainWindow* mainWindow, QMenu* menu) + : Superclass(mainWindow) +{ + Q_ASSERT(mainWindow != NULL); + Q_ASSERT(menu != NULL); + + this->Menu = menu; + this->Window = mainWindow; + + // essential to ensure that the full screen shortcut is setup correctly. + this->buildMenu(); + + QObject::connect(menu, SIGNAL(aboutToShow()), this, SLOT(buildMenu())); +} + +//----------------------------------------------------------------------------- +void pqViewMenuManager::buildMenu() +{ + this->Menu->clear(); + QList<QMenu*> child_menus = this->Menu->findChildren<QMenu*>(); + foreach (QMenu* menu, child_menus) + { + delete menu; + } + + QMenu* toolbars = this->Menu->addMenu("Toolbars") + << pqSetName("Toolbars"); + QList<QToolBar*> all_toolbars = this->Window->findChildren<QToolBar*>(); + foreach (QToolBar* toolbar, all_toolbars) + { + toolbars->addAction(toolbar->toggleViewAction()); + } + + QMenu* panels = this->Menu->addMenu("Panels") + << pqSetName("Panels"); + foreach (QDockWidget* dock_widget, this->Window->findChildren<QDockWidget*>()) + { + panels->addAction(dock_widget->toggleViewAction()); + } + + QAction* action = this->Menu->addSeparator(); + action->setText("Toolbars"); + // Add menus for all toolbars and actions from them. + // This puts menu actions for all toolbars making it possible to access all + // toolbar actions even when the toolbar are not visible. + // I wonder if I should ignore the pqMainControlsToolbar since those actions + // are already placed at other places. + foreach (QToolBar* toolbar, all_toolbars) + { + QMenu* sub_menu = new QMenu(this->Menu) + << pqSetName(toolbar->windowTitle()); + bool added = false; + foreach (QAction* action, toolbar->actions()) + { + if (!action->text().isEmpty()) + { + added = true; + sub_menu->addAction(action); + } + } + if (added) + { + QAction* menu_action = this->Menu->addMenu(sub_menu); + menu_action->setText(toolbar->windowTitle()); + } + else + { + delete sub_menu; + } + } + + this->Menu->addSeparator(); + + pqViewManager* viewManager = qobject_cast<pqViewManager*>( + pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + if (viewManager) + { + QAction* fullscreen = this->Menu->addAction("Full Screen"); + fullscreen->setObjectName("actionFullScreen"); + fullscreen->setShortcut(QKeySequence("F11")); + QObject::connect(fullscreen, SIGNAL(triggered()), + viewManager, SLOT(toggleFullScreen())); + } +} + + diff --git a/Qt/ApplicationComponents/pqViewMenuManager.h b/Qt/ApplicationComponents/pqViewMenuManager.h new file mode 100644 index 0000000000..5cca06046c --- /dev/null +++ b/Qt/ApplicationComponents/pqViewMenuManager.h @@ -0,0 +1,61 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewMenuManager.h + + 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. + +========================================================================*/ +#ifndef __pqViewMenuManager_h +#define __pqViewMenuManager_h + +#include <QObject> +#include "pqApplicationComponentsExport.h" +class QMenu; +class QMainWindow; + +/// pqViewMenuManager keeps ParaView View menu populated with all the available +/// dock widgets and toolbars. This needs special handling since new dock +/// widget/toolbars may get added when plugins are loaded. +class PQAPPLICATIONCOMPONENTS_EXPORT pqViewMenuManager : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqViewMenuManager(QMainWindow* mainWindow, QMenu* menu); + +private slots: + void buildMenu(); + +private: + Q_DISABLE_COPY(pqViewMenuManager) + QMainWindow* Window; + QMenu* Menu; +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqViewSettingsManager.cxx b/Qt/ApplicationComponents/pqViewSettingsManager.cxx new file mode 100644 index 0000000000..82e0a6a140 --- /dev/null +++ b/Qt/ApplicationComponents/pqViewSettingsManager.cxx @@ -0,0 +1,96 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewSettingsManager.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 "pqViewSettingsManager.h" + +#include "pqActiveChartOptions.h" +#include "pqActiveObjects.h" +#include "pqActiveRenderViewOptions.h" +#include "pqActiveTwoDRenderViewOptions.h" +#include "pqApplicationCore.h" +#include "pqBarChartView.h" +#include "pqLineChartView.h" +#include "pqPluginManager.h" +#include "pqTwoDRenderView.h" +#include "pqViewOptionsInterface.h" + +//----------------------------------------------------------------------------- +pqViewSettingsManager::pqViewSettingsManager(QObject* parentObject) + : Superclass(parentObject) +{ + this->setRenderViewOptions(new pqActiveRenderViewOptions(this)); + pqActiveChartOptions *chartOptions = new pqActiveChartOptions(this); + this->registerOptions(pqBarChartView::barChartViewType(), chartOptions); + this->registerOptions(pqLineChartView::lineChartViewType(), chartOptions); + pqActiveTwoDRenderViewOptions* twoDOptions = + new pqActiveTwoDRenderViewOptions(this); + this->registerOptions(pqTwoDRenderView::twoDRenderViewType(), twoDOptions); + + /// Add panes as plugins are loaded. + QObject::connect(pqApplicationCore::instance()->getPluginManager(), + SIGNAL(guiInterfaceLoaded(QObject*)), + this, SLOT(pluginLoaded(QObject*))); + + // Load panes from already loaded plugins. + foreach (QObject* plugin_interface, + pqApplicationCore::instance()->getPluginManager()->interfaces()) + { + this->pluginLoaded(plugin_interface); + } + + QObject::connect(&pqActiveObjects::instance(), + SIGNAL(viewChanged(pqView*)), + this, SLOT(setActiveView(pqView*))); + this->setActiveView(pqActiveObjects::instance().activeView()); +} + +//----------------------------------------------------------------------------- +void pqViewSettingsManager::pluginLoaded(QObject* iface) +{ + pqViewOptionsInterface* viewOptions = + qobject_cast<pqViewOptionsInterface*>(iface); + if(viewOptions) + { + foreach(QString viewtype, viewOptions->viewTypes()) + { + + // Try to create active view options + pqActiveViewOptions* options = + viewOptions->createActiveViewOptions(viewtype, this); + if (options) + { + this->registerOptions(viewtype, options); + } + } + } +} + + diff --git a/Qt/ApplicationComponents/pqViewSettingsManager.h b/Qt/ApplicationComponents/pqViewSettingsManager.h new file mode 100644 index 0000000000..137db2f94c --- /dev/null +++ b/Qt/ApplicationComponents/pqViewSettingsManager.h @@ -0,0 +1,58 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewSettingsManager.h + + 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. + +========================================================================*/ +#ifndef __pqViewSettingsManager_h +#define __pqViewSettingsManager_h + +#include "pqActiveViewOptionsManager.h" +#include "pqApplicationComponentsExport.h" + +/// pqViewSettingsManager is a temporary class used by +/// pqActiveViewSettingsReaction to manage the view options using +/// pqActiveViewOptionsManager. Ideally, I'd like to deprecate +/// pqActiveViewOptionsManager for something with fewer cross dependencies. +class PQAPPLICATIONCOMPONENTS_EXPORT pqViewSettingsManager : public pqActiveViewOptionsManager +{ + Q_OBJECT + typedef pqActiveViewOptionsManager Superclass; +public: + pqViewSettingsManager(QObject* parent=0); + +protected slots: + void pluginLoaded(QObject* plugin_interface); + +private: + Q_DISABLE_COPY(pqViewSettingsManager) +}; + +#endif + + diff --git a/Qt/ApplicationComponents/pqViewSettingsReaction.cxx b/Qt/ApplicationComponents/pqViewSettingsReaction.cxx new file mode 100644 index 0000000000..4651a4c9c5 --- /dev/null +++ b/Qt/ApplicationComponents/pqViewSettingsReaction.cxx @@ -0,0 +1,98 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewSettingsReaction.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 "pqViewSettingsReaction.h" + +#include "pqActiveObjects.h" +#include "pqViewSettingsManager.h" +#include "pqView.h" + +QPointer<pqViewSettingsManager> pqViewSettingsReaction::Manager; +int pqViewSettingsReaction::Count = 0; + +//----------------------------------------------------------------------------- +pqViewSettingsReaction::pqViewSettingsReaction(QAction* parentObject, + pqView* view /*=0*/) + : Superclass(parentObject), View(view) +{ + pqViewSettingsReaction::Count++; + if (!view) + { + QObject::connect(&pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(updateEnableState()), Qt::QueuedConnection); + } + this->updateEnableState(); +} + +//----------------------------------------------------------------------------- +pqViewSettingsReaction::~pqViewSettingsReaction() +{ + pqViewSettingsReaction::Count--; + if (pqViewSettingsReaction::Count == 0) + { + delete pqViewSettingsReaction::Manager; + } +} + +//----------------------------------------------------------------------------- +pqViewSettingsManager* pqViewSettingsReaction::GetManager() +{ + if (!pqViewSettingsReaction::Manager) + { + pqViewSettingsReaction::Manager = new pqViewSettingsManager(); + } + return pqViewSettingsReaction::Manager; +} + +//----------------------------------------------------------------------------- +void pqViewSettingsReaction::updateEnableState() +{ + pqView *view = this->View; + if (!view) + { + view = pqActiveObjects::instance().activeView(); + } + if (view && this->GetManager()->canShowOptions(view)) + { + this->parentAction()->setEnabled(true); + } + else + { + this->parentAction()->setEnabled(false); + } +} + +//----------------------------------------------------------------------------- +void pqViewSettingsReaction::showViewSettingsDialog() +{ + pqViewSettingsReaction::GetManager()->showOptions(); +} + diff --git a/Qt/ApplicationComponents/pqViewSettingsReaction.h b/Qt/ApplicationComponents/pqViewSettingsReaction.h new file mode 100644 index 0000000000..1f52b6b5a1 --- /dev/null +++ b/Qt/ApplicationComponents/pqViewSettingsReaction.h @@ -0,0 +1,80 @@ +/*========================================================================= + + Program: ParaView + Module: pqViewSettingsReaction.h + + 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. + +========================================================================*/ +#ifndef __pqViewSettingsReaction_h +#define __pqViewSettingsReaction_h + +#include "pqReaction.h" +#include <QPointer> + +class pqViewSettingsManager; +class pqView; + +/// @ingroup Reactions +/// pqViewSettingsReaction is a reaction to popup active view settings dialog. +/// It uses pqViewSettingsManager to determine what dialog to show etc. +class PQAPPLICATIONCOMPONENTS_EXPORT pqViewSettingsReaction : public pqReaction +{ + Q_OBJECT + typedef pqReaction Superclass; +public: + /// if \c view is non-null, then it is used to determine the enabled state of + /// the action. Ideally, I'd like the options dialog to be shown for the \c + /// view as well. But pqActiveViewOptionsManager relies on active view. Once + /// that's fixed, it will be easier to change this reaction. + pqViewSettingsReaction(QAction* parent, pqView* view=0); + ~pqViewSettingsReaction(); + + /// Show the view settings dialog. + static void showViewSettingsDialog(); + +public slots: + /// Updates the enabled state. Applications need not explicitly call + /// this. + void updateEnableState(); + +protected: + /// Called when the action is triggered. + virtual void onTriggered() + { pqViewSettingsReaction::showViewSettingsDialog(); } + +private: + Q_DISABLE_COPY(pqViewSettingsReaction) + QPointer<pqView> View; + + static pqViewSettingsManager* GetManager(); + static QPointer<pqViewSettingsManager> Manager; + static int Count; +}; + +#endif + + diff --git a/Qt/CMakeLists.txt b/Qt/CMakeLists.txt index 449ec7c43d..a34b159a54 100644 --- a/Qt/CMakeLists.txt +++ b/Qt/CMakeLists.txt @@ -73,5 +73,6 @@ IF(PARAVIEW_ENABLE_PYTHON) ENDIF(PARAVIEW_ENABLE_PYTHON) ADD_SUBDIRECTORY(Components) +ADD_SUBDIRECTORY(ApplicationComponents) ENDIF(QT4_FOUND) diff --git a/Qt/Components/CMakeLists.txt b/Qt/Components/CMakeLists.txt index 565521fadd..3a35c5e00a 100644 --- a/Qt/Components/CMakeLists.txt +++ b/Qt/Components/CMakeLists.txt @@ -51,6 +51,7 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pq3DWidget.h pqActiveChartOptions.h pqActiveRenderViewOptions.h + pqActiveObjects.h pqActiveServer.h pqActiveTwoDRenderViewOptions.h pqActiveView.h @@ -76,7 +77,6 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqChartViewContextMenuHandler.h pqChartSeriesEditorModel.h pqClientAboutDialog.h - pqClientMainWindow.h pqClipPanel.h pqColorMapModel.h pqColorPresetManager.h @@ -127,18 +127,9 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqLinksEditor.h pqLinksManager.h pqLoadedFormObjectPanel.h - pqLookmarkDefinitionWizard.h - pqLookmarkBrowser.h - pqLookmarkBrowserModel.h - pqLookmarkInspector.h - pqLookmarkManagerModel.h - pqLookmarkModel.h - pqLookmarkSourceDialog.h - pqMainWindowCore.h pqMultiView.h pqMultiViewFrame.h pqNamedObjectPanel.h - pqObjectInspectorDriver.h pqObjectInspectorWidget.h pqObjectPanel.h pqOptionsContainer.h @@ -150,8 +141,8 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES # pqParticleTracerPanel.h pqPQLookupTableManager.h pqPipelineBrowser.h + pqPipelineBrowserWidget.h pqPipelineBrowserContextMenu.h - pqPipelineBrowserStateManager.h pqPipelineMenu.h pqPipelineModel.h pqPipelineModelSelectionAdaptor.h @@ -192,11 +183,6 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqSelectionInputWidget.h pqSimpleServerStartup.h pqSourceComboBox.h - #pqSourceHistoryModel.h - #pqSourceInfoFilterModel.h - #pqSourceInfoGroupMap.h - #pqSourceInfoIcons.h - #pqSourceInfoModel.h pqSourcesMenuManager.h pqSphereWidget.h pqSplineWidget.h @@ -220,6 +206,7 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqWidgetRangeDomain.h pqWriterDialog.h pqXDMFPanel.h + pqComponentsTestUtility.h ${EXTRA_PQ_COMPONENT_MOC_SOURCES} ) @@ -239,7 +226,6 @@ SET(UI_FORMS Resources/UI/pqCameraKeyFrameWidget.ui Resources/UI/pqChartOptionsWidget.ui Resources/UI/pqClientAboutDialog.ui - Resources/UI/pqClientMainWindow.ui Resources/UI/pqColorPresetDialog.ui Resources/UI/pqColorScaleDialog.ui Resources/UI/pqComparativeVisPanel.ui @@ -267,9 +253,6 @@ SET(UI_FORMS Resources/UI/pqLineSourceControls.ui Resources/UI/pqLinksEditor.ui Resources/UI/pqLinksManager.ui - Resources/UI/pqLookmarkDefinitionWizard.ui - Resources/UI/pqLookmarkBrowser.ui - Resources/UI/pqLookmarkInspector.ui Resources/UI/pqMultiViewFrameMenu.ui Resources/UI/pqOptionsDialog.ui Resources/UI/pqOrbitCreatorDialog.ui @@ -309,29 +292,19 @@ QT4_WRAP_UI(UI_BUILT_SOURCES ) SET(STANDARD_GUI_RESOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/XML/ParaViewWriters.xml - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/XML/ParaViewReaders.xml - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/XML/ParaViewFilters.xml - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/XML/ParaViewSources.xml - ${ParaView_SOURCE_DIR}/Documentation/pqClient.qch + ${CMAKE_CURRENT_SOURCE_DIR}/Resources/XML/Placeholder.xml ) + SET(ALL_GUI_RESOURCES ${STANDARD_GUI_RESOURCES} ${PARAVIEW_EXTRA_GUI_RESOURCES} ) -SET(QT_COMPONENTS_GUI_RESOURCES_CONTENTS) -FOREACH(RESOURCE ${ALL_GUI_RESOURCES}) - GET_FILENAME_COMPONENT(ALIAS ${RESOURCE} NAME) - FILE(RELATIVE_PATH RESOURCE ${CMAKE_CURRENT_BINARY_DIR} "${RESOURCE}") - FILE(TO_NATIVE_PATH "${RESOURCE}" RESOURCE) - SET(QT_COMPONENTS_GUI_RESOURCES_CONTENTS - "${QT_COMPONENTS_GUI_RESOURCES_CONTENTS} <file alias=\"${ALIAS}\">${RESOURCE}</file>\n") -ENDFOREACH(RESOURCE) - -CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/pqExtraResources.qrc.in" - "${CMAKE_CURRENT_BINARY_DIR}/pqExtraResources.qrc" @ONLY) - +GENERATE_QT_RESOURCE_FROM_FILES( + "${CMAKE_CURRENT_BINARY_DIR}/pqExtraResources.qrc" + "/ParaViewResources" + ${ALL_GUI_RESOURCES}) + SET(UI_RESOURCES Resources/pqComponents.qrc "${CMAKE_CURRENT_BINARY_DIR}/pqExtraResources.qrc" @@ -360,6 +333,8 @@ ADD_LIBRARY(pqComponents pqActiveChartOptions.h pqActiveRenderViewOptions.cxx pqActiveRenderViewOptions.h + pqActiveObjects.cxx + pqActiveObjects.h pqActiveServer.cxx pqActiveServer.h pqActiveTwoDRenderViewOptions.cxx @@ -424,10 +399,6 @@ ADD_LIBRARY(pqComponents pqChartSeriesEditorModel.h pqClientAboutDialog.cxx pqClientAboutDialog.h - pqClientMainWindow.cxx - pqClientMainWindow.h - pqClientProcessModuleGUIHelper.cxx - pqClientProcessModuleGUIHelper.h pqClipPanel.cxx pqClipPanel.h pqCloseViewUndoElement.cxx @@ -449,6 +420,8 @@ ADD_LIBRARY(pqComponents pqComparativeVisPanel.cxx pqComparativeVisPanel.h pqComponentsExport.h + pqComponentsTestUtility.cxx + pqComponentsTestUtility.h pqComponentsInit.cxx pqComponentsInit.h pqContourPanel.cxx @@ -539,24 +512,6 @@ ADD_LIBRARY(pqComponents pqLinksManager.h pqLoadedFormObjectPanel.cxx pqLoadedFormObjectPanel.h - pqLookmarkBrowser.cxx - pqLookmarkBrowser.h - pqLookmarkBrowserModel.cxx - pqLookmarkBrowserModel.h - pqLookmarkDefinitionWizard.cxx - pqLookmarkDefinitionWizard.h - pqLookmarkInspector.cxx - pqLookmarkInspector.h - pqLookmarkManagerModel.cxx - pqLookmarkManagerModel.h - pqLookmarkModel.cxx - pqLookmarkModel.h - pqLookmarkSourceDialog.cxx - pqLookmarkSourceDialog.h - pqLookmarkStateLoader.cxx - pqLookmarkStateLoader.h - pqMainWindowCore.cxx - pqMainWindowCore.h pqMultiView.cxx pqMultiView.h pqMultiViewFrame.cxx @@ -565,8 +520,6 @@ ADD_LIBRARY(pqComponents pqNamedObjectPanel.h pqNamedWidgets.cxx pqNamedWidgets.h - pqObjectInspectorDriver.cxx - pqObjectInspectorDriver.h pqObjectInspectorWidget.cxx pqObjectInspectorWidget.h pqObjectPanel.cxx @@ -589,10 +542,10 @@ ADD_LIBRARY(pqComponents # pqParticleTracerPanel.h pqPipelineBrowser.cxx pqPipelineBrowser.h + pqPipelineBrowserWidget.cxx + pqPipelineBrowserWidget.h pqPipelineBrowserContextMenu.cxx pqPipelineBrowserContextMenu.h - pqPipelineBrowserStateManager.cxx - pqPipelineBrowserStateManager.h pqPipelineMenu.cxx pqPipelineMenu.h pqPipelineModel.cxx @@ -673,18 +626,6 @@ ADD_LIBRARY(pqComponents pqSimpleServerStartup.h pqSourceComboBox.cxx pqSourceComboBox.h - #pqSourceHistoryModel.cxx - #pqSourceHistoryModel.h - #pqSourceInfoFilterModel.cxx - #pqSourceInfoFilterModel.h - #pqSourceInfoGroupMap.cxx - #pqSourceInfoGroupMap.h - #pqSourceInfoIcons.cxx - #pqSourceInfoIcons.h - #pqSourceInfoModel.cxx - #pqSourceInfoModel.h - #pqSourceProxyInfo.cxx - #pqSourceProxyInfo.h pqSourcesMenuManager.cxx pqSourcesMenuManager.h pqSphereWidget.cxx @@ -693,8 +634,6 @@ ADD_LIBRARY(pqComponents pqSplineWidget.h pqSplitViewUndoElement.cxx pqSplitViewUndoElement.h - pqStateLoader.cxx - pqStateLoader.h pqSpreadSheetDisplayEditor.cxx pqSpreadSheetDisplayEditor.h pqSpreadSheetViewDecorator.cxx diff --git a/Qt/Components/Resources/Icons/pqLookmark16.png b/Qt/Components/Resources/Icons/pqLookmark16.png deleted file mode 100644 index aa3e813864b70e1d6688f1271ba4aa847cad33f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmV-21I_%2P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt007q5 z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!#7RU!RCwBS zQ%z73VHkeIMO;z9MZ^Gw1gF77kwnl;JXCt<V0rUW-I}`8RF@9rp=rG3q0V{o>`iNO z5~pSuX_N$05=Jn0CI7(j4>gCr-4=#%>YaJ^-PwKL=Xt)LmqK1VeAIuNq#**8_$fxv zHS~HUj{ii#8G>cn3KL_KgQm)`I<}2;@_1Av<Y6MP=Mz$5;|r2{`GU+A1v#Y@2-HTP zxb(EQyQ7gvQ3x&l#FYR00I9p1C6JJ256J@!wQBqQzGh@j3Luv%2^3(o6?_RSMguIS zYIM3B5QTCf;SHD#<zP4WVX4vLD0u=|rbHmnR#kyrPvY&!2cphG%~U|A)u_b1$`Po# z+pWSYyOoAcqr~3o5lW<Gs9?096{SSI2A0}dQX+$=-Ocyi$tMVeqMNYQRl`5eq0?za zBAgHi=pqH|u2w|i9Ox2-K+sU%$oF*-7sf2Xa4^Eb*<{6ZXc?_d^*G&2gAH>6iKE4h z-J=tDeY40&ia^Via5|hh7ZP$L-;z6fvE=SC=wcedB@Q>Qd*J){8Is?Hcr!RCSREZ3 zhd&TRfutBV+oc>qA^&i<*;G`KtjluVh&Y?T)hq2-VSgdK_yg;S1Ug)9Y$sFj&wPbm zZz2RPO#8p6>~`~{MBIzv;NlW&7i|cJqrzJI`)*+~u?F2a9eS?a!1HG>@!;N5=nWQf zC!~a=MQ|ZF@cDu}EzbHbqtR?y-`IduDg${(o%sS7rV@u_4_M+Pz7j)leiq)T_lU<M zNT&}{h1ugE%OEy)dRv{BF)=xT(83}nyq^%5n*qDVf#p~*>Pj%>8aSHU$f?K?jV{Ef zyh}C8t*xel^K&Y_!3<Al4^h_$_*ZzR#`zRDJ52BRbv=3f3WtaL1P4U<@7zQp3qmHU w+44!g_AG%>{9zKaphA!mM_WMtH2x7_0DwmQ#d}2>8UO$Q07*qoM6N<$f*nS8tpET3 diff --git a/Qt/Components/Resources/Icons/pqLookmarkThumbnail.png b/Qt/Components/Resources/Icons/pqLookmarkThumbnail.png deleted file mode 100644 index ff9c86ae6aae43e8381f1503167bb0fcfcb0665c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2393 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 BsR;l8 diff --git a/Qt/Components/Resources/UI/pqClientAboutDialog.ui b/Qt/Components/Resources/UI/pqClientAboutDialog.ui index 8f00aa5e8b..2feefb8f05 100644 --- a/Qt/Components/Resources/UI/pqClientAboutDialog.ui +++ b/Qt/Components/Resources/UI/pqClientAboutDialog.ui @@ -10,9 +10,7 @@ </rect> </property> <property name="sizePolicy" > - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>1</vsizetype> + <sizepolicy vsizetype="Minimum" hsizetype="Minimum" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -24,10 +22,22 @@ <bool>true</bool> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > + <number>6</number> + </property> + <property name="verticalSpacing" > <number>6</number> </property> <item row="1" column="1" > @@ -64,11 +74,9 @@ </widget> </item> <item row="0" column="0" colspan="3" > - <widget class="QLabel" name="label" > + <widget class="QLabel" name="Image" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -91,12 +99,21 @@ <string>Client Information</string> </attribute> <layout class="QVBoxLayout" > - <property name="margin" > - <number>9</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>9</number> + </property> + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> <item> <widget class="QTreeWidget" name="ClientInformation" > <property name="alternatingRowColors" > @@ -124,10 +141,22 @@ <string>Connection Information</string> </attribute> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > + <number>6</number> + </property> + <property name="verticalSpacing" > <number>6</number> </property> <item row="0" column="0" > @@ -156,12 +185,21 @@ </item> <item row="3" column="0" colspan="3" > <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> <item> <spacer> <property name="orientation" > diff --git a/Qt/Components/Resources/UI/pqClientMainWindow.ui b/Qt/Components/Resources/UI/pqClientMainWindow.ui deleted file mode 100644 index 4b57a5ed64..0000000000 --- a/Qt/Components/Resources/UI/pqClientMainWindow.ui +++ /dev/null @@ -1,1425 +0,0 @@ -<ui version="4.0" > - <class>pqClientMainWindow</class> - <widget class="QMainWindow" name="pqClientMainWindow" > - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>970</width> - <height>700</height> - </rect> - </property> - <property name="windowTitle" > - <string>pqClientMainWindow</string> - </property> - <property name="windowIcon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqAppIcon64.png</iconset> - </property> - <property name="toolButtonStyle" > - <enum>Qt::ToolButtonIconOnly</enum> - </property> - <widget class="QWidget" name="centralwidget" /> - <widget class="QMenuBar" name="menubar" > - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>970</width> - <height>30</height> - </rect> - </property> - <widget class="QMenu" name="menuHelp" > - <property name="title" > - <string>&Help</string> - </property> - <addaction name="actionHelpAbout" /> - <addaction name="actionHelpHelp" /> - <addaction name="separator" /> - <addaction name="actionHelpEnableTooltips" /> - </widget> - <widget class="QMenu" name="menuFile" > - <property name="title" > - <string>&File</string> - </property> - <widget class="QMenu" name="menuRecentFiles" > - <property name="title" > - <string>Recent Files</string> - </property> - </widget> - <addaction name="actionFileOpen" /> - <addaction name="menuRecentFiles" /> - <addaction name="separator" /> - <addaction name="actionFileLoadServerState" /> - <addaction name="actionFileSaveServerState" /> - <addaction name="separator" /> - <addaction name="actionFileSaveData" /> - <addaction name="actionFileSaveScreenshot" /> - <addaction name="actionExport" /> - <addaction name="separator" /> - <addaction name="actionFileSaveAnimation" /> - <addaction name="actionFileSaveGeometry" /> - <addaction name="separator" /> - <addaction name="actionServerConnect" /> - <addaction name="actionServerDisconnect" /> - <addaction name="separator" /> - <addaction name="actionFileExit" /> - </widget> - <widget class="QMenu" name="menuEdit" > - <property name="title" > - <string>&Edit</string> - </property> - <addaction name="actionEditUndo" /> - <addaction name="actionEditRedo" /> - <addaction name="separator" /> - <addaction name="actionEditCameraUndo" /> - <addaction name="actionEditCameraRedo" /> - <addaction name="separator" /> - <addaction name="actionChangeInput" /> - <addaction name="actionIgnoreTime" /> - <addaction name="actionDelete" /> - <addaction name="actionDelete_All" /> - <addaction name="separator" /> - <addaction name="actionMoveMode" /> - <addaction name="actionSelectionMode" /> - <addaction name="actionSelectSurfacePoints" /> - <addaction name="actionSelect_Frustum" /> - <addaction name="actionSelectFrustumPoints" /> - <addaction name="actionSelect_Block" /> - <addaction name="separator" /> - <addaction name="actionEditSettings" /> - <addaction name="actionEditViewSettings" /> - </widget> - <widget class="QMenu" name="menuView" > - <property name="title" > - <string>&View</string> - </property> - <widget class="QMenu" name="menuToolbars" > - <property name="title" > - <string>Toolbars</string> - </property> - </widget> - <widget class="QMenu" name="menuCamera" > - <property name="title" > - <string>Camera</string> - </property> - <addaction name="actionResetCamera" /> - <addaction name="actionZoomToBox" /> - <addaction name="actionPositiveX" /> - <addaction name="actionNegativeX" /> - <addaction name="actionPositiveY" /> - <addaction name="actionNegativeY" /> - <addaction name="actionPositiveZ" /> - <addaction name="actionNegativeZ" /> - </widget> - <addaction name="menuCamera" /> - <addaction name="separator" /> - <addaction name="actionShowOrientationAxes" /> - <addaction name="actionShowCenterAxes" /> - <addaction name="actionResetCenter" /> - <addaction name="actionPickCenter" /> - <addaction name="actionScalarBarVisibility" /> - <addaction name="separator" /> - <addaction name="actionFullScreen" /> - <addaction name="separator" /> - <addaction name="menuToolbars" /> - <addaction name="separator" /> - </widget> - <widget class="QMenu" name="menuSources" > - <property name="title" > - <string>&Sources</string> - </property> - </widget> - <widget class="QMenu" name="menuFilters" > - <property name="title" > - <string>F&ilters</string> - </property> - </widget> - <widget class="QMenu" name="menuAnimation" > - <property name="title" > - <string>A&nimation</string> - </property> - <addaction name="actionVCRFirstFrame" /> - <addaction name="actionVCRPreviousFrame" /> - <addaction name="actionVCRPlay" /> - <addaction name="actionVCRNextFrame" /> - <addaction name="actionVCRLastFrame" /> - <addaction name="actionVCRLoop" /> - </widget> - <widget class="QMenu" name="menuTools" > - <property name="title" > - <string>&Tools</string> - </property> - <addaction name="actionToolsCreateCustomFilter" /> - <addaction name="actionToolsManageCustomFilters" /> - <addaction name="actionToolsCreateLookmark" /> - <addaction name="actionToolsManageLinks" /> - <addaction name="actionToolsAddCameraLink" /> - <addaction name="actionManage_Plugins" /> - <addaction name="separator" /> - <addaction name="actionToolsDumpWidgetNames" /> - <addaction name="actionToolsRecordTest" /> - <addaction name="actionToolsRecordTestScreenshot" /> - <addaction name="actionToolsPlayTest" /> - <addaction name="actionTesting_Window_Size" /> - <addaction name="separator" /> - <addaction name="actionToolsTimerLog" /> - <addaction name="actionToolsOutputWindow" /> - <addaction name="separator" /> - <addaction name="actionToolsPythonShell" /> - </widget> - <widget class="QMenu" name="menuMacros" > - <property name="title" > - <string>&Macros</string> - </property> - </widget> - <addaction name="menuFile" /> - <addaction name="menuEdit" /> - <addaction name="menuView" /> - <addaction name="menuSources" /> - <addaction name="menuFilters" /> - <addaction name="menuAnimation" /> - <addaction name="menuTools" /> - <addaction name="menuMacros" /> - <addaction name="menuHelp" /> - </widget> - <widget class="QStatusBar" name="statusbar" /> - <widget class="QDockWidget" name="pipelineBrowserDock" > - <property name="allowedAreas" > - <set>Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea</set> - </property> - <property name="windowTitle" > - <string>Pipeline Browser</string> - </property> - <attribute name="dockWidgetArea" > - <number>1</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_2" > - <property name="minimumSize" > - <size> - <width>100</width> - <height>16</height> - </size> - </property> - </widget> - </widget> - <widget class="QDockWidget" name="objectInspectorDock" > - <property name="allowedAreas" > - <set>Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea</set> - </property> - <property name="windowTitle" > - <string>Object Inspector</string> - </property> - <attribute name="dockWidgetArea" > - <number>1</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_3" /> - </widget> - <widget class="QDockWidget" name="statisticsViewDock" > - <property name="allowedAreas" > - <set>Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea</set> - </property> - <property name="windowTitle" > - <string>Statistics View</string> - </property> - <attribute name="dockWidgetArea" > - <number>8</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_4" /> - </widget> - <widget class="QToolBar" name="mainToolBar" > - <property name="windowTitle" > - <string>Main Controls</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - <addaction name="actionFileOpen" /> - <addaction name="actionFileSaveData" /> - <addaction name="separator" /> - <addaction name="actionServerConnect" /> - <addaction name="actionServerDisconnect" /> - <addaction name="separator" /> - <addaction name="actionHelpHelp" /> - </widget> - <widget class="QToolBar" name="selectionToolbar" > - <property name="windowTitle" > - <string>Selection Controls</string> - </property> - <property name="toolTip" > - <string>Select Block</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - <addaction name="actionMoveMode" /> - <addaction name="actionSelectionMode" /> - <addaction name="actionSelectSurfacePoints" /> - <addaction name="actionSelect_Frustum" /> - <addaction name="actionSelectFrustumPoints" /> - <addaction name="actionSelect_Block" /> - </widget> - <widget class="QToolBar" name="undoRedoToolbar" > - <property name="windowTitle" > - <string>Undo/Redo Controls</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - <addaction name="actionEditUndo" /> - <addaction name="actionEditRedo" /> - </widget> - <widget class="QToolBar" name="VCRToolbar" > - <property name="windowTitle" > - <string>VCR Controls</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - <addaction name="actionVCRFirstFrame" /> - <addaction name="actionVCRPreviousFrame" /> - <addaction name="actionVCRPlay" /> - <addaction name="actionVCRNextFrame" /> - <addaction name="actionVCRLastFrame" /> - <addaction name="actionVCRLoop" /> - </widget> - <widget class="pqCurrentTimeToolbar" name="currentTimeToolbar" > - <property name="windowTitle" > - <string>Current Time Controls</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - </widget> - <widget class="QToolBar" name="variableToolbar" > - <property name="windowTitle" > - <string>Active Variable Controls</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - <addaction name="actionScalarBarVisibility" /> - <addaction name="actionEditColorMap" /> - <addaction name="actionResetRange" /> - </widget> - <widget class="QToolBar" name="representationToolbar" > - <property name="windowTitle" > - <string>Representation</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - </widget> - <widget class="QToolBar" name="lookmarkToolbar" > - <property name="contextMenuPolicy" > - <enum>Qt::CustomContextMenu</enum> - </property> - <property name="windowTitle" > - <string>Lookmarks</string> - </property> - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="iconSize" > - <size> - <width>48</width> - <height>48</height> - </size> - </property> - <attribute name="toolBarArea" > - <enum>RightToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - </widget> - <widget class="QToolBar" name="cameraToolbar" > - <property name="windowTitle" > - <string>Camera Controls</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - <addaction name="actionResetCamera" /> - <addaction name="actionZoomToBox" /> - <addaction name="actionPositiveX" /> - <addaction name="actionNegativeX" /> - <addaction name="actionPositiveY" /> - <addaction name="actionNegativeY" /> - <addaction name="actionPositiveZ" /> - <addaction name="actionNegativeZ" /> - </widget> - <widget class="QToolBar" name="axesToolbar" > - <property name="enabled" > - <bool>true</bool> - </property> - <property name="windowTitle" > - <string>Center Axes Controls</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - <addaction name="actionShowOrientationAxes" /> - <addaction name="actionShowCenterAxes" /> - <addaction name="actionResetCenter" /> - <addaction name="actionPickCenter" /> - </widget> - <widget class="QDockWidget" name="lookmarkBrowserDock" > - <property name="sizePolicy" > - <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="floating" > - <bool>false</bool> - </property> - <property name="allowedAreas" > - <set>Qt::RightDockWidgetArea</set> - </property> - <property name="windowTitle" > - <string>Lookmark Browser</string> - </property> - <attribute name="dockWidgetArea" > - <number>2</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_6" /> - </widget> - <widget class="QDockWidget" name="lookmarkInspectorDock" > - <property name="allowedAreas" > - <set>Qt::RightDockWidgetArea</set> - </property> - <property name="windowTitle" > - <string>Lookmark Inspector</string> - </property> - <attribute name="dockWidgetArea" > - <number>2</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_7" /> - </widget> - <widget class="QToolBar" name="commonFilters" > - <property name="windowTitle" > - <string>Common Filters</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - </widget> - <widget class="QToolBar" name="macroToolbar" > - <property name="windowTitle" > - <string>Macro Toolbar</string> - </property> - <attribute name="toolBarArea" > - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak" > - <bool>false</bool> - </attribute> - </widget> - <widget class="QDockWidget" name="comparativePanelDock" > - <property name="windowTitle" > - <string>Comparative View Inspector</string> - </property> - <attribute name="dockWidgetArea" > - <number>1</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_11" /> - </widget> - <widget class="QDockWidget" name="animationViewDock" > - <property name="windowTitle" > - <string>Animation View</string> - </property> - <attribute name="dockWidgetArea" > - <number>8</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_9" /> - </widget> - <widget class="QDockWidget" name="selectionInspectorDock" > - <property name="allowedAreas" > - <set>Qt::AllDockWidgetAreas</set> - </property> - <property name="windowTitle" > - <string>Selection Inspector</string> - </property> - <attribute name="dockWidgetArea" > - <number>1</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents_8" /> - </widget> - <action name="actionFileOpen" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqOpen24.png</iconset> - </property> - <property name="text" > - <string>&Open</string> - </property> - <property name="statusTip" > - <string>Open</string> - </property> - <property name="shortcut" > - <string>Ctrl+O</string> - </property> - </action> - <action name="actionFileExit" > - <property name="icon" > - <iconset/> - </property> - <property name="text" > - <string>E&xit</string> - </property> - <property name="statusTip" > - <string>Exit</string> - </property> - <property name="shortcut" > - <string>Ctrl+Q</string> - </property> - </action> - <action name="actionHelpAbout" > - <property name="icon" > - <iconset/> - </property> - <property name="text" > - <string>About</string> - </property> - <property name="statusTip" > - <string>About</string> - </property> - </action> - <action name="actionHelpHelp" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqHelp24.png</iconset> - </property> - <property name="text" > - <string>Help</string> - </property> - <property name="shortcut" > - <string>F1</string> - </property> - </action> - <action name="actionScalarBarVisibility" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqScalarBar24.png</iconset> - </property> - <property name="text" > - <string>Show Color Legend</string> - </property> - <property name="toolTip" > - <string>Toggle Color Legend Visibility</string> - </property> - <property name="statusTip" > - <string>Toggle Color Legend Visibility</string> - </property> - </action> - <action name="actionServerConnect" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqConnect24.png</iconset> - </property> - <property name="text" > - <string>&Connect</string> - </property> - <property name="statusTip" > - <string>Connect</string> - </property> - </action> - <action name="actionServerDisconnect" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqDisconnect24.png</iconset> - </property> - <property name="text" > - <string>&Disconnect</string> - </property> - <property name="statusTip" > - <string>Disconnect</string> - </property> - </action> - <action name="actionFileSaveScreenshot" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqCaptureScreenshot24.png</iconset> - </property> - <property name="text" > - <string>Save Screenshot</string> - </property> - </action> - <action name="actionFileSaveAnimation" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqSaveAnimation24.png</iconset> - </property> - <property name="text" > - <string>Save &Animation</string> - </property> - </action> - <action name="actionVCRPreviousFrame" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqVcrBack24.png</iconset> - </property> - <property name="text" > - <string>Pre&vious Frame</string> - </property> - </action> - <action name="actionVCRFirstFrame" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqVcrFirst24.png</iconset> - </property> - <property name="text" > - <string>&First Frame</string> - </property> - </action> - <action name="actionVCRNextFrame" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqVcrForward24.png</iconset> - </property> - <property name="text" > - <string>&Next Frame</string> - </property> - </action> - <action name="actionVCRLastFrame" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqVcrLast24.png</iconset> - </property> - <property name="text" > - <string>&Last Frame</string> - </property> - </action> - <action name="actionFileSaveData" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqSave24.png</iconset> - </property> - <property name="text" > - <string>Save Data</string> - </property> - <property name="shortcut" > - <string>Ctrl+S</string> - </property> - </action> - <action name="actionFileLoadServerState" > - <property name="text" > - <string>&Load State</string> - </property> - </action> - <action name="actionFileSaveServerState" > - <property name="text" > - <string>&Save State</string> - </property> - </action> - <action name="actionHelpEnableTooltips" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="checked" > - <bool>true</bool> - </property> - <property name="text" > - <string>Enable Tooltips</string> - </property> - </action> - <action name="actionMoveMode" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="checked" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>true</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqRotate24.png</iconset> - </property> - <property name="text" > - <string>Interact</string> - </property> - <property name="iconText" > - <string>Interact</string> - </property> - <property name="toolTip" > - <string>Interact</string> - </property> - <property name="statusTip" > - <string>Interact</string> - </property> - <property name="shortcut" > - <string/> - </property> - </action> - <action name="actionSelectionMode" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqSurfaceSelectionCell24.png</iconset> - </property> - <property name="text" > - <string>Select Cells On</string> - </property> - <property name="iconText" > - <string>Select Cells On</string> - </property> - <property name="toolTip" > - <string>Select Cells On</string> - </property> - <property name="statusTip" > - <string>Select Cells On</string> - </property> - <property name="shortcut" > - <string>S</string> - </property> - </action> - <action name="actionSelect_Frustum" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqFrustumSelectionCell24.png</iconset> - </property> - <property name="text" > - <string>Select Cells Through</string> - </property> - <property name="iconText" > - <string>Select Cells Through</string> - </property> - <property name="toolTip" > - <string>Select Cells Through</string> - </property> - <property name="statusTip" > - <string>Select Cells Through</string> - </property> - </action> - <action name="actionSelectSurfacePoints" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqSurfaceSelectionPoint24.png</iconset> - </property> - <property name="text" > - <string>Select Points On</string> - </property> - <property name="iconText" > - <string>Select Points On</string> - </property> - <property name="toolTip" > - <string>Select Points On</string> - </property> - <property name="statusTip" > - <string>Select Points On</string> - </property> - </action> - <action name="actionSelectFrustumPoints" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqFrustumSelectionPoint24.png</iconset> - </property> - <property name="text" > - <string>Select Points Through</string> - </property> - <property name="iconText" > - <string>Select Points Through</string> - </property> - <property name="toolTip" > - <string>Select Points Through</string> - </property> - <property name="statusTip" > - <string>Select Points Through</string> - </property> - </action> - <action name="actionSelect_Thresholds" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqThreshold24.png</iconset> - </property> - <property name="text" > - <string>Select Thresholds</string> - </property> - </action> - <action name="actionEditUndo" > - <property name="checkable" > - <bool>false</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqUndo24.png</iconset> - </property> - <property name="text" > - <string>&Undo</string> - </property> - <property name="shortcut" > - <string>Ctrl+Z</string> - </property> - </action> - <action name="actionEditRedo" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqRedo24.png</iconset> - </property> - <property name="text" > - <string>&Redo</string> - </property> - <property name="shortcut" > - <string>Ctrl+R</string> - </property> - </action> - <action name="actionEditCameraUndo" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqUndoCamera24.png</iconset> - </property> - <property name="text" > - <string>Camera Undo</string> - </property> - <property name="shortcut" > - <string>Ctrl+B</string> - </property> - </action> - <action name="actionEditCameraRedo" > - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqRedoCamera24.png</iconset> - </property> - <property name="text" > - <string>Camera Redo</string> - </property> - <property name="shortcut" > - <string>Ctrl+F</string> - </property> - </action> - <action name="actionToolsDumpWidgetNames" > - <property name="text" > - <string>&Dump Widget Names</string> - </property> - </action> - <action name="actionToolsRecordTest" > - <property name="text" > - <string>&Record Test</string> - </property> - </action> - <action name="actionToolsRecordTestScreenshot" > - <property name="text" > - <string>Record &Test Screenshot</string> - </property> - </action> - <action name="actionToolsPythonShell" > - <property name="text" > - <string>Python &Shell</string> - </property> - </action> - <action name="actionToolsCreateCustomFilter" > - <property name="text" > - <string>&Create Custom Filter...</string> - </property> - </action> - <action name="actionToolsManageCustomFilters" > - <property name="text" > - <string>&Manage Custom Filters...</string> - </property> - </action> - <action name="actionVCRPlay" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqVcrPlay24.png</iconset> - </property> - <property name="text" > - <string>&Play</string> - </property> - </action> - <action name="actionToolsPlayTest" > - <property name="text" > - <string>Play Test</string> - </property> - </action> - <action name="actionEditSettings" > - <property name="text" > - <string>Settings...</string> - </property> - <property name="iconText" > - <string>Settings</string> - </property> - <property name="toolTip" > - <string>Settings</string> - </property> - </action> - <action name="actionResetCamera" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqResetCamera24.png</iconset> - </property> - <property name="text" > - <string>&Reset</string> - </property> - <property name="iconText" > - <string>Reset Camera</string> - </property> - <property name="statusTip" > - <string>Reset Camera</string> - </property> - </action> - <action name="actionPositiveX" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqXPlus24.png</iconset> - </property> - <property name="text" > - <string>+X</string> - </property> - <property name="toolTip" > - <string>Set view direction to +X</string> - </property> - <property name="statusTip" > - <string>Set view direction to +X</string> - </property> - <property name="whatsThis" > - <string>Set view direction to +X</string> - </property> - </action> - <action name="actionNegativeX" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqXMinus24.png</iconset> - </property> - <property name="text" > - <string>-X</string> - </property> - <property name="toolTip" > - <string>Set view direction to -X</string> - </property> - <property name="statusTip" > - <string>Set view direction to -X</string> - </property> - <property name="whatsThis" > - <string>Set view direction to -X</string> - </property> - </action> - <action name="actionPositiveY" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqYPlus24.png</iconset> - </property> - <property name="text" > - <string>+Y</string> - </property> - <property name="toolTip" > - <string>Set view direction to +Y</string> - </property> - <property name="statusTip" > - <string>Set view direction to +Y</string> - </property> - <property name="whatsThis" > - <string>Set view direction to +Y</string> - </property> - </action> - <action name="actionNegativeY" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqYMinus24.png</iconset> - </property> - <property name="text" > - <string>-Y</string> - </property> - <property name="toolTip" > - <string>Set view direction to -Y</string> - </property> - <property name="statusTip" > - <string>Set view direction to -Y</string> - </property> - <property name="whatsThis" > - <string>Set view direction to -Y</string> - </property> - </action> - <action name="actionPositiveZ" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqZPlus24.png</iconset> - </property> - <property name="text" > - <string>+Z</string> - </property> - <property name="toolTip" > - <string>Set view direction to +Z</string> - </property> - <property name="statusTip" > - <string>Set view direction to +Z</string> - </property> - <property name="whatsThis" > - <string>Set view direction to +Z</string> - </property> - </action> - <action name="actionNegativeZ" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqZMinus24.png</iconset> - </property> - <property name="text" > - <string>-Z</string> - </property> - <property name="toolTip" > - <string>Set view direction to -Z</string> - </property> - <property name="statusTip" > - <string>Set view direction to -Z</string> - </property> - <property name="whatsThis" > - <string>Set view direction to -Z</string> - </property> - </action> - <action name="actionHistogram" > - <property name="text" > - <string>&Histogram</string> - </property> - </action> - <action name="actionXY_Plot" > - <property name="text" > - <string>XY &Plot</string> - </property> - </action> - <action name="actionTesting_Window_Size" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="checked" > - <bool>false</bool> - </property> - <property name="text" > - <string>Max Window Size: 300x300</string> - </property> - </action> - <action name="actionTable_View" > - <property name="text" > - <string>Table View</string> - </property> - </action> - <action name="actionShowOrientationAxes" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc">:/pqWidgets/Icons/pqShowOrientationAxes24.png</iconset> - </property> - <property name="text" > - <string>Show Orientation Axes</string> - </property> - <property name="statusTip" > - <string>Show/Hide orientation axes</string> - </property> - </action> - <action name="actionShowCenterAxes" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqShowCenterAxes24.png</iconset> - </property> - <property name="text" > - <string>Show Center</string> - </property> - <property name="statusTip" > - <string>Show/Hide center of rotation</string> - </property> - </action> - <action name="actionFullScreen" > - <property name="text" > - <string>Full Screen</string> - </property> - <property name="statusTip" > - <string>Switch to full screen mode. Hit Esc to return to normal mode.</string> - </property> - <property name="shortcut" > - <string>F11</string> - </property> - </action> - <action name="actionResetCenter" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqResetCenter24.png</iconset> - </property> - <property name="text" > - <string>Reset Center</string> - </property> - <property name="statusTip" > - <string>Reset center of rotation</string> - </property> - </action> - <action name="actionAddSource" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="text" > - <string>Add &Source...</string> - </property> - <property name="iconText" > - <string>Add Source...</string> - </property> - <property name="toolTip" > - <string>Add a Source to the Pipeline</string> - </property> - <property name="statusTip" > - <string>Add a Source to the Pipeline</string> - </property> - </action> - <action name="actionAddFilter" > - <property name="text" > - <string>Add &Filter...</string> - </property> - <property name="iconText" > - <string>Add Filter...</string> - </property> - <property name="toolTip" > - <string>Add a Filter to the Pipeline</string> - </property> - <property name="statusTip" > - <string>Add a Filter to the Pipeline</string> - </property> - </action> - <action name="actionChangeInput" > - <property name="text" > - <string>Change &Input...</string> - </property> - <property name="iconText" > - <string>Change Input...</string> - </property> - <property name="toolTip" > - <string>Change a Filter's Input</string> - </property> - <property name="statusTip" > - <string>Change a Filter's Input</string> - </property> - </action> - <action name="actionDelete" > - <property name="icon" > - <iconset/> - </property> - <property name="text" > - <string>&Delete</string> - </property> - <property name="statusTip" > - <string>Delete</string> - </property> - </action> - <action name="actionDelete_All" > - <property name="text" > - <string>Delete All</string> - </property> - </action> - <action name="actionToolsManageLinks" > - <property name="text" > - <string>Manage Links...</string> - </property> - </action> - <action name="actionFileSaveGeometry" > - <property name="text" > - <string>Save &Geometry</string> - </property> - </action> - <action name="actionVCRLoop" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqVcrLoop24.png</iconset> - </property> - <property name="text" > - <string>L&oop</string> - </property> - <property name="iconText" > - <string>Loop</string> - </property> - <property name="toolTip" > - <string>Loop</string> - </property> - <property name="statusTip" > - <string>Loop</string> - </property> - </action> - <action name="actionToolsOutputWindow" > - <property name="text" > - <string>&Output Window</string> - </property> - </action> - <action name="actionToolsTimerLog" > - <property name="text" > - <string>Timer &Log</string> - </property> - </action> - <action name="actionManage_Plugins" > - <property name="text" > - <string>Manage Plugins/Extensions...</string> - </property> - </action> - <action name="actionToolsCreateLookmark" > - <property name="text" > - <string>Create Lookmark</string> - </property> - </action> - <action name="actionToolsAddCameraLink" > - <property name="text" > - <string>Add Camera Link...</string> - </property> - </action> - <action name="actionPickCenter" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqPickCenter24.png</iconset> - </property> - <property name="text" > - <string>Pick Center</string> - </property> - <property name="iconText" > - <string>Pick Center</string> - </property> - <property name="toolTip" > - <string>Pick Center</string> - </property> - <property name="statusTip" > - <string>Mouse press to pick center of rotation</string> - </property> - </action> - <action name="actionEnterCenter" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqEnterCenter24.png</iconset> - </property> - <property name="text" > - <string>Enter Center</string> - </property> - <property name="iconText" > - <string>Enter Center</string> - </property> - <property name="toolTip" > - <string>Enter Center</string> - </property> - <property name="statusTip" > - <string>Enter coordinates of center of rotation</string> - </property> - </action> - <action name="actionEditViewSettings" > - <property name="text" > - <string>View Settings...</string> - </property> - </action> - <action name="actionSelect_Block" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqGroupExtract24.png</iconset> - </property> - <property name="text" > - <string>Select Block</string> - </property> - <property name="shortcut" > - <string>B</string> - </property> - </action> - <action name="actionExport" > - <property name="text" > - <string>Export</string> - </property> - </action> - <action name="actionEditColorMap" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqEditColor24.png</iconset> - </property> - <property name="text" > - <string>Edit Color Map</string> - </property> - <property name="statusTip" > - <string>Edit Color Map</string> - </property> - </action> - <action name="actionResetRange" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqResetRange24.png</iconset> - </property> - <property name="text" > - <string>Reset Range</string> - </property> - <property name="toolTip" > - <string>Rescale to Data Range</string> - </property> - <property name="statusTip" > - <string>Rescale to Data Range</string> - </property> - </action> - <action name="actionIgnoreTime" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="text" > - <string>Ignore Time</string> - </property> - <property name="toolTip" > - <string>Disregard this source/filter's time from animations</string> - </property> - <property name="statusTip" > - <string>Disregard this source/filter's time from animations</string> - </property> - <property name="whatsThis" > - <string>Disregard this source/filter's time from animations</string> - </property> - </action> - <action name="actionZoomToBox" > - <property name="checkable" > - <bool>true</bool> - </property> - <property name="icon" > - <iconset resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqZoomToSelection24.png</iconset> - </property> - <property name="text" > - <string>Zoom to Box</string> - </property> - <property name="statusTip" > - <string>Zoom to Box</string> - </property> - </action> - </widget> - <customwidgets> - <customwidget> - <class>pqCurrentTimeToolbar</class> - <extends>QToolBar</extends> - <header>pqCurrentTimeToolbar.h</header> - </customwidget> - </customwidgets> - <resources> - <include location="../pqComponents.qrc" /> - </resources> - <connections/> -</ui> diff --git a/Qt/Components/Resources/UI/pqLookmarkBrowser.ui b/Qt/Components/Resources/UI/pqLookmarkBrowser.ui deleted file mode 100644 index 4c096cb6ed..0000000000 --- a/Qt/Components/Resources/UI/pqLookmarkBrowser.ui +++ /dev/null @@ -1,138 +0,0 @@ -<ui version="4.0" > - <class>pqLookmarkBrowser</class> - <widget class="QWidget" name="pqLookmarkBrowser" > - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>353</width> - <height>558</height> - </rect> - </property> - <property name="windowTitle" > - <string>Form</string> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>9</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QFrame" name="ButtonFrame" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>24</width> - <height>30</height> - </size> - </property> - <property name="frameShape" > - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Raised</enum> - </property> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>2</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" > - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="ImportButton" > - <property name="minimumSize" > - <size> - <width>0</width> - <height>24</height> - </size> - </property> - <property name="text" > - <string>Import</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="ExportButton" > - <property name="minimumSize" > - <size> - <width>0</width> - <height>24</height> - </size> - </property> - <property name="text" > - <string>Export</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="RemoveButton" > - <property name="text" > - <string>Delete</string> - </property> - </widget> - </item> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" > - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QListView" name="LookmarkList" > - <property name="selectionMode" > - <enum>QAbstractItemView::ExtendedSelection</enum> - </property> - <property name="selectionBehavior" > - <enum>QAbstractItemView::SelectItems</enum> - </property> - <property name="isWrapping" stdset="0" > - <bool>false</bool> - </property> - <property name="resizeMode" > - <enum>QListView::Adjust</enum> - </property> - <property name="spacing" > - <number>4</number> - </property> - </widget> - </item> - </layout> - </widget> - <resources> - <include location="../pqComponents.qrc" /> - </resources> - <connections/> -</ui> diff --git a/Qt/Components/Resources/UI/pqLookmarkDefinitionWizard.ui b/Qt/Components/Resources/UI/pqLookmarkDefinitionWizard.ui deleted file mode 100644 index 874d06cd67..0000000000 --- a/Qt/Components/Resources/UI/pqLookmarkDefinitionWizard.ui +++ /dev/null @@ -1,300 +0,0 @@ -<ui version="4.0" > - <class>pqLookmarkDefinitionWizard</class> - <widget class="QDialog" name="pqLookmarkDefinitionWizard" > - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>370</width> - <height>267</height> - </rect> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="windowTitle" > - <string>Create Lookmark</string> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>9</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QFrame" name="TitleFrame" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>70</height> - </size> - </property> - <property name="maximumSize" > - <size> - <width>16777215</width> - <height>70</height> - </size> - </property> - <property name="frameShape" > - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Plain</enum> - </property> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>0</number> - </property> - <item> - <widget class="QLabel" name="WizardImage" > - <property name="minimumSize" > - <size> - <width>178</width> - <height>0</height> - </size> - </property> - <property name="text" > - <string/> - </property> - <property name="pixmap" > - <pixmap resource="../pqComponents.qrc" >:/pqWidgets/Icons/pqAppIcon64.png</pixmap> - </property> - <property name="alignment" > - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="margin" > - <number>16</number> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text" > - <string>You are about to create a Lookmark of a view. Please give the Lookmark a unique name that describes what it is a view of.</string> - </property> - <property name="wordWrap" > - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QFrame" name="frame_4" > - <property name="frameShape" > - <enum>QFrame::HLine</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Sunken</enum> - </property> - </widget> - </item> - <item> - <widget class="QFrame" name="InputFrame" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape" > - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Plain</enum> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>9</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QLabel" name="label_2" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>80</width> - <height>0</height> - </size> - </property> - <property name="text" > - <string>Name:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="LookmarkName" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="whatsThis" > - <string>Enter the custom filter name here.</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QLabel" name="label_3" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>80</width> - <height>0</height> - </size> - </property> - <property name="text" > - <string>Description: </string> - </property> - <property name="alignment" > - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item> - <widget class="QTextEdit" name="LookmarkComments" /> - </item> - </layout> - </item> - <item> - <widget class="QCheckBox" name="SaveImage" > - <property name="text" > - <string>Capture screenshot for lookmark thumbnail</string> - </property> - <property name="checked" > - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QFrame" name="frame_5" > - <property name="frameShape" > - <enum>QFrame::HLine</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Sunken</enum> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" > - <size> - <width>80</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="FinishButton" > - <property name="text" > - <string>Create</string> - </property> - <property name="autoDefault" > - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="CancelButton" > - <property name="text" > - <string>Cancel</string> - </property> - <property name="autoDefault" > - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <tabstops> - <tabstop>FinishButton</tabstop> - <tabstop>CancelButton</tabstop> - </tabstops> - <resources> - <include location="../pqComponents.qrc" /> - </resources> - <connections/> -</ui> diff --git a/Qt/Components/Resources/UI/pqLookmarkInspector.ui b/Qt/Components/Resources/UI/pqLookmarkInspector.ui deleted file mode 100644 index e69c4d75b9..0000000000 --- a/Qt/Components/Resources/UI/pqLookmarkInspector.ui +++ /dev/null @@ -1,350 +0,0 @@ -<ui version="4.0" > - <class>pqLookmarkInspector</class> - <widget class="QWidget" name="pqLookmarkInspector" > - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>326</width> - <height>393</height> - </rect> - </property> - <property name="windowTitle" > - <string>Form</string> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>9</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QFrame" name="ButtonFrame" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>30</height> - </size> - </property> - <property name="frameShape" > - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Raised</enum> - </property> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>2</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" > - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="LoadButton" > - <property name="minimumSize" > - <size> - <width>0</width> - <height>24</height> - </size> - </property> - <property name="text" > - <string>Display</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="SaveButton" > - <property name="minimumSize" > - <size> - <width>0</width> - <height>24</height> - </size> - </property> - <property name="text" > - <string>Save</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="DeleteButton" > - <property name="text" > - <string>Delete</string> - </property> - </widget> - </item> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" > - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QFrame" name="PropertiesFrame" > - <property name="minimumSize" > - <size> - <width>0</width> - <height>100</height> - </size> - </property> - <property name="frameShape" > - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Raised</enum> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>2</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <widget class="QLabel" name="LookmarkIcon" > - <property name="frameShape" > - <enum>QFrame::NoFrame</enum> - </property> - <property name="text" > - <string/> - </property> - <property name="pixmap" > - <pixmap/> - </property> - <property name="alignment" > - <set>Qt::AlignCenter</set> - </property> - <property name="margin" > - <number>2</number> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>2</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QLabel" name="label_2" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="text" > - <string>Name: </string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="LookmarkName" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>18</height> - </size> - </property> - <property name="alignment" > - <set>Qt::AlignLeading</set> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="pqCollapsedGroup" native="1" name="groupBox" > - <property name="title" > - <string>Pipeline View</string> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>2</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <widget class="pqFlatTreeView" native="1" name="PipelineView" /> - </item> - </layout> - </widget> - </item> - <item> - <widget class="pqCollapsedGroup" native="1" name="groupBox_2" > - <property name="title" > - <string>Description</string> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>2</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <widget class="QTextEdit" name="LookmarkComments" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>18</height> - </size> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QFrame" name="ControlsFrame" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>34</height> - </size> - </property> - <property name="frameShape" > - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Raised</enum> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>2</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <widget class="QCheckBox" name="RestoreCamera" > - <property name="minimumSize" > - <size> - <width>0</width> - <height>18</height> - </size> - </property> - <property name="text" > - <string>Use Lookmark's camera settings</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="RestoreTime" > - <property name="text" > - <string>Use Lookmark's time value</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" > - <size> - <width>308</width> - <height>51</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>pqCollapsedGroup</class> - <extends>QWidget</extends> - <header>pqCollapsedGroup.h</header> - <container>1</container> - </customwidget> - <customwidget> - <class>pqFlatTreeView</class> - <extends>QAbstractScrollArea</extends> - <header>pqFlatTreeView.h</header> - <container>1</container> - </customwidget> - <customwidget> - <class>QAbstractScrollArea</class> - <extends>QWidget</extends> - <header>qabstractscrollarea.h</header> - <container>1</container> - </customwidget> - </customwidgets> - <resources> - <include location="../pqComponents.qrc" /> - </resources> - <connections/> -</ui> diff --git a/Qt/Components/Resources/XML/ParaViewFilters.xml b/Qt/Components/Resources/XML/ParaViewFilters.xml deleted file mode 100644 index ca4ce744dd..0000000000 --- a/Qt/Components/Resources/XML/ParaViewFilters.xml +++ /dev/null @@ -1,164 +0,0 @@ -<ParaViewFilters> - <Category name="Common" menu_label="&Common" preserve_order="1"> - <Filter name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> - <Filter name="Contour" icon=":/pqWidgets/Icons/pqIsosurface24.png"/> - <Filter name="Clip" icon=":/pqWidgets/Icons/pqClip24.png"/> - <Filter name="Cut" icon=":/pqWidgets/Icons/pqSlice24.png"/> - <Filter name="Threshold" icon=":/pqWidgets/Icons/pqThreshold24.png"/> - <Filter name="ExtractGrid" icon=":/pqWidgets/Icons/pqExtractGrid24.png"/> - <Filter name="Glyph" icon=":/pqWidgets/Icons/pqGlyph24.png"/> - <Filter name="StreamTracer" icon=":/pqWidgets/Icons/pqStreamTracer24.png"/> - <Filter name="WarpVector" icon=":/pqWidgets/Icons/pqWarp24.png"/> - <Filter name="GroupDataSets" icon=":/pqWidgets/Icons/pqGroup24.png"/> - <Filter name="ExtractHierarchicalLevel" icon=":/pqWidgets/Icons/pqGroupExtract24.png"/> - </Category> - - <Category name="DataAnalysis" menu_label="&Data Analysis"> - <Filter name="Calculator" icon=":/pqWidgets/Icons/pqCalculator24.png"/> - <Filter name="ExtractSelection" - icon=":/pqWidgets/Icons/pqExtractSelection24.png" /> - <Filter name="ExtractSelectionOverTime" - icon=":/pqWidgets/Icons/pqPlotCellOverTime24.png" /> - <Filter name="ExtractHistogram" - icon=":/pqWidgets/Icons/pqHistogram24.png"/> - <Filter name="IntegrateAttributes" /> - <Filter name="ExtractFieldDataOverTime" /> - <Filter name="ProbeLine" - icon=":/pqWidgets/Icons/pqPlotLineOverTime24.png" /> - <Filter name="ProbePoint" - icon=":/pqWidgets/Icons/pqProbeLocation24.png" /> - <Filter name="PlotAttributes" /> - <Filter name="PlotOnSortedLines" /> - <Filter name="PlotOnIntersectionCurves" /> - <Filter name="ProgrammableFilter" - icon=":/pqWidgets/Icons/pqProgrammableFilter24.png"/> - </Category> - - <Category name="Statistics" menu_label="&Statistics"> - <Filter name="ContingencyStatistics"/> - <Filter name="DescriptiveStatistics"/> - <Filter name="KMeans"/> - <Filter name="MulticorrelativeStatistics"/> - <Filter name="PCAStatistics"/> - </Category> - - <Category name="Temporal" menu_label="&Temporal"> - <Filter name="ParticleTracer" /> - <Filter name="ParticlePathLines" /> - <Filter name="TemporalCache" /> - <Filter name="TemporalInterpolator" /> - <Filter name="TemporalSnapToTimeStep" /> - <Filter name="TemporalShiftScale" /> - <Filter name="TemporalStatistics" /> - <Filter name="TimeToTextConvertor" /> - </Category> - - <Filter name="AMRDualContour" /> - <Filter name="Append" /> - <Filter name="AppendAttributes" /> - <Filter name="AppendPolyData" /> - <Filter name="ArbitrarySourceGlyph" /> - <Filter name="ArbitrarySourceStreamTracer" /> - <Filter name="BlockIdScalars" /> - <Filter name="BrownianPoints" /> - <Filter name="Calculator" /> - <Filter name="CellCenters" /> - <Filter name="CellDataToPointData" /> - <Filter name="CellDerivatives"/> - <Filter name="CleanPolyData" /> - <Filter name="CleanUnstructuredGrid" /> - <Filter name="Clip" /> - <Filter name="Contour" /> - <Filter name="CTHFragmentConnect"/> - <Filter name="CTHFragmentIntersect"/> - <Filter name="CTHPart" /> - <Filter name="Curvatures" /> - <Filter name="Cut" /> - <Filter name="D3" /> - <Filter name="DataSetSurfaceFilter" /> - <Filter name="DataSetTriangleFilter" /> - <Filter name="DecimatePro" /> - <Filter name="Delaunay2D" /> - <Filter name="Delaunay3D" /> - <Filter name="ElevationFilter" /> - <Filter name="ExtractBlock" /> - <Filter name="ExtractEdges" /> - <Filter name="ExtractGeometry" /> - <Filter name="ExtractGrid" /> - <Filter name="ExtractHistogram" /> - <Filter name="ExtractHierarchicalLevel" /> - <Filter name="ExtractSelection" /> - <Filter name="ExtractSelectionOverTime" /> - <Filter name="ExtractHierarchicalDataSets" /> - <Filter name="FeatureEdges" /> - <Filter name="FFTSelectionOverTime" /> - <Filter name="GenerateIdScalars"/> - <Filter name="Glyph" /> - <Filter name="Gradient" /> - <Filter name="GridConnectivity" /> - <Filter name="GroupDataSets" /> - <Filter name="IntegrateAttributes" /> - <Filter name="IntegrateFlowThroughSurface" /> - <Filter name="LevelIdScalars" /> - <Filter name="LinearExtrusionFilter" /> - <Filter name="LoopSubdivisionFilter" /> - <Filter name="MaskPoints" /> - <Filter name="Median" /> - <Filter name="MergeBlocks" /> - <Filter name="MeshQuality" /> - <Filter name="OctreeDepthLimit" /> - <Filter name="OctreeDepthScalars" /> - <Filter name="OutlineCornerFilter" /> - <Filter name="OutlineFilter" /> - <Filter name="ParticlePathLines" /> - <Filter name="ParticleTracer" /> - <Filter name="PlotAttributes" /> - <Filter name="PlotOnIntersectionCurves" /> - <Filter name="PlotOnSortedLines" /> - <Filter name="PointDataToCellData" /> - <Filter name="PolyDataNormals" /> - <Filter name="Probe" /> - <Filter name="ProbeLine" /> - <Filter name="ProbePoint" /> - <Filter name="ProcessIdScalars" /> - <Filter name="ProgrammableFilter" /> - <Filter name="PVConnectivityFilter" /> - <Filter name="PythonCalculator" /> - <Filter name="QuadraturePointInterpolator" /> - <Filter name="QuadraturePointsGenerator" /> - <Filter name="QuadraturePointStatistics" /> - <Filter name="QuadratureSchemeDictionaryGenerator" /> - <Filter name="QuadricClustering" /> - <Filter name="ReflectionFilter" /> - <Filter name="RibbonFilter" /> - <Filter name="RotationalExtrusionFilter" /> - <Filter name="ScatterPlot"/> - <Filter name="ShrinkFilter" /> - <Filter name="SmoothPolyDataFilter" /> - <Filter name="StreamTracer" /> - <Filter name="Stripper" /> - <Filter name="StructuredGridOutlineFilter" /> - <Filter name="Subdivide" /> - <Filter name="SurfaceVectors" /> - <Filter name="TemporalCache" /> - <Filter name="TemporalInterpolator" /> - <Filter name="TemporalSnapToTimeStep" /> - <Filter name="TemporalShiftScale" /> - <Filter name="TemporalStatistics" /> - <Filter name="TessellatorFilter" /> - <Filter name="TextureMapToCylinder" /> - <Filter name="TextureMapToPlane" /> - <Filter name="TextureMapToSphere" /> - <Filter name="Threshold" /> - <Filter name="TimeToTextConvertor" /> - <Filter name="TransformFilter" /> - <Filter name="TriangleFilter" /> - <Filter name="TubeFilter" /> - <Filter name="UnstructuredGradient" /> - <Filter name="WarpScalar" /> - <Filter name="WarpVector" /> - <Filter name="NormalGlyphs" /> - <Filter name="TableToPolyData" /> - <Filter name="TableToStructuredGrid" /> - -</ParaViewFilters> diff --git a/Qt/Components/Resources/XML/ParaViewReaders.xml b/Qt/Components/Resources/XML/ParaViewReaders.xml deleted file mode 100644 index 19c5e8d98e..0000000000 --- a/Qt/Components/Resources/XML/ParaViewReaders.xml +++ /dev/null @@ -1,233 +0,0 @@ -<ParaViewReaders> - <!-- - NOTE: Readers are tried in reverse order that they are present in this - list i.e. if two readers can read the same extension, then the reader - apperaring later will be tried first when reading the file. - --> - <Reader name="LSDynaReader" - extensions="d3plot k lsdyna" - file_description="LSDyna"> - </Reader> - <Reader name="PVDReader" - extensions="pvd" - file_description="ParaView Data Files"> - </Reader> - <Reader name="XMLPolyDataReader" - extensions="vtp" - file_description="VTK PolyData Files"> - </Reader> - <Reader name="XMLUnstructuredGridReader" - extensions="vtu" - file_description="VTK UnstructuredGrid Files"> - </Reader> - <Reader name="XMLImageDataReader" - extensions="vti" - file_description="VTK ImageData Files"> - </Reader> - <Reader name="XMLStructuredGridReader" - extensions="vts" - file_description="VTK StructuredGrid Files"> - </Reader> - <Reader name="XMLRectilinearGridReader" - extensions="vtr" - file_description="VTK RectilinearGrid Files"> - </Reader> - <Reader name="XMLPPolyDataReader" - extensions="pvtp" - file_description="VTK PolyData Files (partitioned)"> - </Reader> - <Reader name="XMLPUnstructuredGridReader" - extensions="pvtu" - file_description="VTK UnstructuredGrid Files (partitioned)"> - </Reader> - <Reader name="XMLPImageDataReader" - extensions="pvti" - file_description="VTK ImageData Files (partitioned)"> - </Reader> - <Reader name="XMLPStructuredGridReader" - extensions="pvts" - file_description="VTK StructuredGrid Files (partitioned)"> - </Reader> - <Reader name="XMLPRectilinearGridReader" - extensions="pvtr" - file_description="VTK RectilinearGrid Files (partitioned)"> - </Reader> - <Reader name="XMLMultiBlockDataReader" - extensions="vtm vtmb" - file_description="VTK MultiBlock Data Files"> - </Reader> - <Reader name="XMLHierarchicalBoxDataReader" - extensions="vtm vthb" - file_description="VTK Hierarchical Box Data Files"> - </Reader> - <Reader name="LegacyVTKFileReader" - extensions="vtk" - file_description="Legacy VTK files"> - </Reader> - <Reader name="pvtkfile" - extensions="pvtk" - file_description="Legacy VTK Files (partitioned)"> - </Reader> - <Reader name="ensight" - extensions="case CASE Case encas ENCAS Encas EnCas" - file_description="EnSight Files"> - </Reader> - <Reader name="ensightMS" - extensions="sos SOS" - file_description="EnSight Master Server Files"> - </Reader> - <Reader name="TecplotReader" - extensions="tec TEC Tec tp TP" - file_description="Tecplot Files"> - </Reader> - <Reader name="netCDFReader" - extensions="ncdf nc" - file_description="netCDF Files"> - </Reader> - <Reader name="byureader" - extensions="g" - file_description="BYU Files"> - </Reader> - <Reader name="XdmfReader2" - extensions="xmf xdmf" - file_description="Xdmf Reader"> - </Reader> - <Reader name="pdbreader" - extensions="pdb" - file_description="Protein Data Bank Files"> - </Reader> - <Reader name="xyzreader" - extensions="xyz" - file_description="XMol Molecule Files"> - </Reader> - <Reader name="P3DReader" - extensions="xyz" - file_description="PLOT3D Files"> - </Reader> - - <Reader name="spcthreader" - extensions="spcth 0" - file_description="SpyPlot CTH dataset"> - </Reader> - - <Reader name="SPCTHRestartReader" - extensions="spcth-timeseries" - file_description="Case file for restarted CTH outputs"> - </Reader> - - <Reader name="DEMReader" - extensions="dem" - file_description="Digital Elevation Map Files"> - </Reader> - <Reader name="vrmlreader" - extensions="wrl vrml" - file_description="VRML 2 Files"> - </Reader> - <Reader name="plyreader" - extensions="ply" - file_description="PLY Polygonal File Format"> - </Reader> - <Reader name="stlreader" - extensions="stl" - file_description="Stereo Lithography"> - </Reader> - <Reader name="gaussiancubereader" - extensions="cube" - file_description="Gaussian Cube Files"> - </Reader> - <Reader name="ImageReader" - extensions="raw" - file_description="Raw (binary) Files" > - </Reader> - <Reader name="popreader" - extensions="pop" - file_description="POP Ocean Files"> - </Reader> - - <Reader name="AVSucdSeriesReader" - extensions="inp" - file_description="AVS UCD Binary/ASCII Files"> - </Reader> - <Reader name="Meta Image Reader" - extensions="mhd mha" - file_description="Meta Image Data Files"> - </Reader> - <Reader name="Facet Reader" - extensions="facet" - file_description="Facet Polygonal Data Files"> - </Reader> - <Reader name="PNGReader" - extensions="png" - file_description="PNG Image Files"> - </Reader> - - <Reader name="TIFFReader" - extensions="tif" - file_description="TIFF Image Files"> - </Reader> - - <Reader name="PhastaReader" - extensions="pht" - file_description="Phasta Files"> - </Reader> - <Reader name="SESAMEReader" - extensions="sesame asc" - file_description="SESAME"> - </Reader> - - <Reader name="CSVReader" - extensions="csv" - file_description="Comma-separated-values"> - </Reader> - - <Reader name="MFIXReader" - extensions="RES" - file_description="MFIX Unstructured Grid Files"> - </Reader> - - <Reader name="FLUENTReader" - extensions="cas" - file_description="Fluent Case Files"> - </Reader> - - <Reader name="OpenFOAMReader" - extensions="foam" - file_description="OpenFOAM Files"> - </Reader> - - <Reader name="CosmoReader" - extensions="cosmo" - file_description="Cosmology files"> - </Reader> - - <Reader name="SiloReader" - extensions="silo" - file_description="Silo files"> - </Reader> - - <Reader name="ExodusIIReader" - extensions="g e ex2 ex2v2 exo gen exoII 0 00 000 0000 exii h" - file_description="ExodusII"> - </Reader> - - <Reader name="ExodusRestartReader" - extensions="ex-timeseries" - file_description="Metafile for restarted exodus outputs"> - </Reader> - - <Reader name="SLACReader" - extensions="ncdf nc" - file_description="SLAC Mesh Files"> - </Reader> - - <Reader name="SLACParticleReader" - extensions="ncdf netcdf" - file_description="SLAC Particle Files"> - </Reader> - - <Reader name="ParticleReader" - extensions="particles" - file_description="VTK Particle Files"> - </Reader> - -</ParaViewReaders> diff --git a/Qt/Components/Resources/XML/ParaViewSources.xml b/Qt/Components/Resources/XML/ParaViewSources.xml deleted file mode 100644 index 7b5385779a..0000000000 --- a/Qt/Components/Resources/XML/ParaViewSources.xml +++ /dev/null @@ -1,27 +0,0 @@ -<ParaViewSources> - <Source name="GlyphSource2D" /> - <Source name="VectorText" /> - <Source name="TimeToTextConvertorSource" /> - <Source name="ArrowSource" /> - <Source name="Axes" /> - <Source name="CubeSource" /> - <Source name="ConeSource" /> - <Source name="CylinderSource" /> - <Source name="DataObjectGenerator" /> - <Source name="DiskSource" /> - <Source name="HierarchicalFractal" /> - <Source name="LineSource" /> - <Source name="ImageMandelbrotSource" /> - <Source name="OctreeFractal" /> - <Source name="OutlineSource" /> - <Source name="PlaneSource" /> - <Source name="PointSource" /> - <Source name="ProgrammableSource" /> - <Source name="SphereSource" /> - <Source name="SplineSource" /> - <Source name="SuperquadricSource" /> - <Source name="TextSource" /> - <Source name="TimeSource" /> - <Source name="Ruler" /> - <Source name="RTAnalyticSource" /> -</ParaViewSources> diff --git a/Qt/Components/Resources/XML/ParaViewWriters.xml b/Qt/Components/Resources/XML/ParaViewWriters.xml deleted file mode 100644 index 5eb3c778be..0000000000 --- a/Qt/Components/Resources/XML/ParaViewWriters.xml +++ /dev/null @@ -1,77 +0,0 @@ -<ParaViewWriters> - <Writer name="XMLPVDWriter" - extensions="pvd" - file_description="ParaView Data Files"/> - <Writer name="XMLPolyDataWriter" - extensions="vtp" - file_description="VTK PolyData Files"/> - <Writer name="XMLUnstructuredGridWriter" - extensions="vtu" - file_description="VTK UnstructuredGrid Files"/> - <Writer name="XMLStructuredGridWriter" - extensions="vts" - file_description="VTK StructuredGrid Files"/> - <Writer name="XMLRectilinearGridWriter" - extensions="vtr" - file_description="VTK RectilinearGrid Files"/> - <Writer name="XMLImageDataWriter" - extensions="vti" - file_description="VTK ImageData Files"/> - <Writer name="XMLPPolyDataWriter" - extensions="pvtp" - file_description="PVTK PolyData Files"/> - <Writer name="XMLPUnstructuredGridWriter" - extensions="pvtu" - file_description="PVTK UnstructuredGrid Files"/> - <Writer name="XMLPStructuredGridWriter" - extensions="pvts" - file_description="PVTK StructuredGrid Files"/> - <Writer name="XMLPRectilinearGridWriter" - extensions="pvtr" - file_description="PVTK RectilinearGrid Files"/> - <Writer name="XMLPImageDataWriter" - extensions="pvti" - file_description="PVTK ImageData Files"/> - <Writer name="XMLMultiBlockDataWriter" - extensions="vtm" - file_description="VTK Multi Block Files"/> - <Writer name="XMLHierarchicalBoxDataWriter" - extensions="vthb" - file_description="VTK Hierarchical Box Files"/> - <Writer name="DataSetWriter" - extensions="vtk" - file_description="Legacy VTK Files"/> - <Writer name="PDataSetWriter" - extensions="vtk" - file_description="Legacy VTK Files"/> - <Writer name="PLYWriter" - extensions="ply" - file_description="PLY Polygonal File Format"/> - <Writer name="PPLYWriter" - extensions="ply" - file_description="PLY Polygonal File Format"/> - <Writer name="PSTLWriter" - extensions="stl" - file_description="Stereo Lithography File Format"/> - <Writer name="MetaImageWriter" - extensions="mhd" - file_description="Meta Image Files"/> - <Writer name="PNGWriter" - extensions="png" - file_description="PNG Image Files"/> - <Writer name="XdmfWriter2" - extensions="xmf" - file_description="Xdmf Data File"/> - <Writer name="ExodusIIWriter" - extensions="g e ex2 ex2v2 exo gen exoII exoii" - file_description="Exodus II File"/> - <Writer name="EnSightWriter" - extensions="case" - file_description="EnSight File"/> - <Writer name="CSVWriter" - extensions="csv" - file_description="CSV File"/> - <Writer name="DataSetCSVWriter" - extensions="csv" - file_description="CSV File"/> -</ParaViewWriters> diff --git a/Qt/Components/Resources/XML/Placeholder.xml b/Qt/Components/Resources/XML/Placeholder.xml new file mode 100644 index 0000000000..f7eda52f59 --- /dev/null +++ b/Qt/Components/Resources/XML/Placeholder.xml @@ -0,0 +1,5 @@ +<?xml version="1.0"?> +<XML> + <!-- Refer to Applications/ParaView/*.xml for the paraview GUI configuration + xmls --> +</XML> diff --git a/Qt/Components/Resources/pqComponents.qrc b/Qt/Components/Resources/pqComponents.qrc index 667008e266..1d11ab4f25 100644 --- a/Qt/Components/Resources/pqComponents.qrc +++ b/Qt/Components/Resources/pqComponents.qrc @@ -88,8 +88,6 @@ <file>Icons/pqLinkBack16.png</file> <file>Icons/pqLinkIn16.png</file> <file>Icons/pqLock24.png</file> - <file>Icons/pqLookmark16.png</file> - <file>Icons/pqLookmarkThumbnail.png</file> <file>Icons/pqMeasure24.png</file> <file>Icons/pqMinus16.png</file> <file>Icons/pqMouseMove15.png</file> diff --git a/Qt/Components/pqActiveChartOptions.cxx b/Qt/Components/pqActiveChartOptions.cxx index c4cb261dd7..fb7466df99 100644 --- a/Qt/Components/pqActiveChartOptions.cxx +++ b/Qt/Components/pqActiveChartOptions.cxx @@ -49,7 +49,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqOptionsDialog.h" #include "pqStackedChartOptionsEditor.h" #include "pqStackedChartOptionsHandler.h" -#include "pqUndoStack.h" #include <QString> #include <QVariant> @@ -390,21 +389,10 @@ void pqActiveChartOptions::cleanupDialog() void pqActiveChartOptions::openUndoSet() { - pqUndoStack *stack = pqApplicationCore::instance()->getUndoStack(); - if(stack) - { - stack->beginUndoSet("Chart Options"); - } } void pqActiveChartOptions::closeUndoSet() { - pqUndoStack *stack = pqApplicationCore::instance()->getUndoStack(); - if(stack) - { - stack->endUndoSet(); - } - pqView *view = this->Chart->getView(); if(view) { diff --git a/Qt/Components/pqActiveObjects.cxx b/Qt/Components/pqActiveObjects.cxx new file mode 100644 index 0000000000..97da055779 --- /dev/null +++ b/Qt/Components/pqActiveObjects.cxx @@ -0,0 +1,208 @@ +/*========================================================================= + + Program: ParaView + Module: pqActiveObjects.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 "pqActiveObjects.h" + +#include "pqActiveView.h" +#include "pqApplicationCore.h" +#include "pqDataRepresentation.h" +#include "pqOutputPort.h" +#include "pqPipelineSource.h" +#include "pqServer.h" +#include "pqServerManagerModel.h" +#include "pqServerManagerSelectionModel.h" +#include "pqView.h" + +#include <QDebug> + +//----------------------------------------------------------------------------- +pqActiveObjects& pqActiveObjects::instance() +{ + static pqActiveObjects activeObject; + return activeObject; +} + +//----------------------------------------------------------------------------- +pqActiveObjects::pqActiveObjects() +{ + this->CachedSource = 0; + this->CachedView = 0; + this->CachedPort = 0; + this->CachedServer = 0; + + pqActiveView* activeView = &pqActiveView::instance(); + QObject::connect(activeView, SIGNAL(changed(pqView*)), + this, SLOT(activeViewChanged(pqView*))); + + pqServerManagerSelectionModel *selection = + pqApplicationCore::instance()->getSelectionModel(); + QObject::connect(selection, SIGNAL(currentChanged(pqServerManagerModelItem*)), + this, SLOT(onSelectionChanged())); + QObject::connect(selection, + SIGNAL(selectionChanged( + const pqServerManagerSelection&, const pqServerManagerSelection&)), + this, SLOT(onSelectionChanged())); + + pqServerManagerModel* smmodel = + pqApplicationCore::instance()->getServerManagerModel(); + QObject::connect(smmodel, SIGNAL(serverAdded(pqServer*)), + this, SLOT(onServerChanged())); + QObject::connect(smmodel, SIGNAL(serverRemoved(pqServer*)), + this, SLOT(onServerChanged())); + + QObject::connect(this, SIGNAL(viewChanged(pqView*)), + this, SLOT(updateRepresentation())); + QObject::connect(this, SIGNAL(portChanged(pqOutputPort*)), + this, SLOT(updateRepresentation())); +} + +//----------------------------------------------------------------------------- +pqActiveObjects::~pqActiveObjects() +{ + +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::activeViewChanged(pqView* newView) +{ + if (newView) + { + QObject::connect(newView, SIGNAL(representationAdded(pqRepresentation*)), + this, SLOT(updateRepresentation())); + QObject::connect(newView, SIGNAL(representationRemoved(pqRepresentation*)), + this, SLOT(updateRepresentation())); + } + if (this->CachedView != newView) + { + this->CachedView = newView; + emit this->viewChanged(newView); + } +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::onServerChanged() +{ + pqServerManagerModel* smmodel = + pqApplicationCore::instance()->getServerManagerModel(); + pqServer* server = smmodel->getNumberOfItems<pqServer*>() == 1? + smmodel->getItemAtIndex<pqServer*>(0) : NULL; + if (this->CachedServer != server) + { + this->CachedServer = server; + emit this->serverChanged(server); + } +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::onSelectionChanged() +{ + pqServerManagerModelItem *item = 0; + pqServerManagerSelectionModel *selection = + pqApplicationCore::instance()->getSelectionModel(); + const pqServerManagerSelection *selected = selection->selectedItems(); + if(selected->size() == 1) + { + item = selected->first(); + } + else if(selected->size() > 1) + { + item = selection->currentItem(); + if(item && !selection->isSelected(item)) + { + item = 0; + } + } + pqOutputPort* opPort = qobject_cast<pqOutputPort*>(item); + pqPipelineSource *source = opPort? opPort->getSource() : + qobject_cast<pqPipelineSource*>(item); + if (source && !opPort && source->getNumberOfOutputPorts() > 0) + { + opPort = source->getOutputPort(0); + } + + bool port_changed = (this->CachedPort != opPort); + bool source_changed = (this->CachedSource != source); + this->CachedPort = opPort; + this->CachedSource = source; + + if (port_changed) + { + emit this->portChanged(opPort); + } + if (source_changed) + { + emit this->sourceChanged(source); + } +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::setActiveView(pqView* view) +{ + pqActiveView::instance().setCurrent(view); +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::setActiveSource(pqPipelineSource* source) +{ + pqApplicationCore::instance()->getSelectionModel()->setCurrentItem(source, + pqServerManagerSelectionModel::ClearAndSelect); +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::setActivePort(pqOutputPort* port) +{ + pqApplicationCore::instance()->getSelectionModel()->setCurrentItem(port, + pqServerManagerSelectionModel::ClearAndSelect); +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::updateRepresentation() +{ + pqDataRepresentation* repr = 0; + if (this->activePort()) + { + repr = this->activePort()->getRepresentation(this->activeView()); + } + if (this->CachedRepresentation != repr) + { + this->CachedRepresentation = repr; + emit this->representationChanged(repr); + emit this->representationChanged(static_cast<pqRepresentation*>(repr)); + } +} + +//----------------------------------------------------------------------------- +void pqActiveObjects::setActiveServer(pqServer*) +{ + qDebug() << "pqActiveObjects::setActiveServer is not supported yet since " + " ParaView only support 1 server connection at a time."; +} + diff --git a/Qt/Components/pqActiveObjects.h b/Qt/Components/pqActiveObjects.h new file mode 100644 index 0000000000..e13c800e62 --- /dev/null +++ b/Qt/Components/pqActiveObjects.h @@ -0,0 +1,115 @@ +/*========================================================================= + + Program: ParaView + Module: pqActiveObjects.h + + 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. + +========================================================================*/ +#ifndef __pqActiveObjects_h +#define __pqActiveObjects_h + +#include <QObject> +#include "pqComponentsExport.h" + +class pqView; +class pqPipelineSource; +class pqServer; +class pqOutputPort; +class pqDataRepresentation; +class pqRepresentation; + +/// pqActiveObjects is a singleton that keeps track of "active objects" +/// including active view, active source, active representation etc. +class PQCOMPONENTS_EXPORT pqActiveObjects : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + /// Provides access to the singleton. + static pqActiveObjects& instance(); + + /// Returns the active view. + pqView* activeView() + { return this->CachedView; } + + /// Returns the active source + pqPipelineSource* activeSource() + { return this->CachedSource; } + + /// Returns the active port. + pqOutputPort* activePort() + { return this->CachedPort; } + + /// Returns the active server. + pqServer* activeServer() + { return this->CachedServer; } + + /// Returns the active representation. + pqDataRepresentation* activeRepresentation() + { return this->CachedRepresentation; } + +public slots: + void setActiveView(pqView*); + void setActiveSource(pqPipelineSource*); + void setActivePort(pqOutputPort*); + void setActiveServer(pqServer*); + +signals: + /// fired when active view changes \c view is the new active view. + void viewChanged(pqView* view); + + void sourceChanged(pqPipelineSource*); + + void portChanged(pqOutputPort*); + + void serverChanged(pqServer*); + + void representationChanged(pqDataRepresentation*); + void representationChanged(pqRepresentation*); + +private slots: + void activeViewChanged(pqView*); + void onSelectionChanged(); + void onServerChanged(); + void updateRepresentation(); + +private: + pqActiveObjects(); + ~pqActiveObjects(); + pqActiveObjects(const pqActiveObjects&); // Not implemented. + void operator=(const pqActiveObjects&); // Not implemented. + + pqServer* CachedServer; + pqPipelineSource* CachedSource; + pqOutputPort* CachedPort; + pqView* CachedView; + pqDataRepresentation* CachedRepresentation; +}; + +#endif + + diff --git a/Qt/Components/pqActiveViewOptionsManager.cxx b/Qt/Components/pqActiveViewOptionsManager.cxx index 4e4425435d..5b865b1e24 100644 --- a/Qt/Components/pqActiveViewOptionsManager.cxx +++ b/Qt/Components/pqActiveViewOptionsManager.cxx @@ -36,6 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqActiveViewOptionsManager.h" #include "pqActiveViewOptions.h" +#include "pqCoreUtilities.h" #include "pqRenderView.h" #include "pqView.h" @@ -44,7 +45,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QtDebug> #include <QWidget> - +//----------------------------------------------------------------------------- class pqActiveViewOptionsManagerInternal { public: @@ -55,7 +56,6 @@ public: pqActiveViewOptions *RenderOptions; pqActiveViewOptions *Current; pqView *ActiveView; - QWidget *Parent; bool IgnoreClose; }; @@ -67,24 +67,24 @@ pqActiveViewOptionsManagerInternal::pqActiveViewOptionsManagerInternal() this->RenderOptions = 0; this->Current = 0; this->ActiveView = 0; - this->Parent = 0; this->IgnoreClose = false; } //---------------------------------------------------------------------------- -pqActiveViewOptionsManager::pqActiveViewOptionsManager(QWidget *parentObject) +pqActiveViewOptionsManager::pqActiveViewOptionsManager(QObject *parentObject) : QObject(parentObject) { this->Internal = new pqActiveViewOptionsManagerInternal(); - this->Internal->Parent = parentObject; } +//----------------------------------------------------------------------------- pqActiveViewOptionsManager::~pqActiveViewOptionsManager() { delete this->Internal; } +//----------------------------------------------------------------------------- void pqActiveViewOptionsManager::setRenderViewOptions( pqActiveViewOptions *renderOptions) { @@ -104,6 +104,7 @@ void pqActiveViewOptionsManager::setRenderViewOptions( } } +//----------------------------------------------------------------------------- bool pqActiveViewOptionsManager::registerOptions(const QString &viewType, pqActiveViewOptions *options) { @@ -130,6 +131,7 @@ bool pqActiveViewOptionsManager::registerOptions(const QString &viewType, return true; } +//----------------------------------------------------------------------------- void pqActiveViewOptionsManager::unregisterOptions( pqActiveViewOptions *options) { @@ -166,6 +168,7 @@ void pqActiveViewOptionsManager::unregisterOptions( } } +//----------------------------------------------------------------------------- bool pqActiveViewOptionsManager::isRegistered( pqActiveViewOptions *options) const { @@ -182,6 +185,7 @@ bool pqActiveViewOptionsManager::isRegistered( return false; } +//----------------------------------------------------------------------------- pqActiveViewOptions *pqActiveViewOptionsManager::getOptions( const QString &viewType) const { @@ -195,6 +199,7 @@ pqActiveViewOptions *pqActiveViewOptionsManager::getOptions( return 0; } +//----------------------------------------------------------------------------- void pqActiveViewOptionsManager::setActiveView(pqView *view) { this->Internal->ActiveView = view; @@ -218,17 +223,20 @@ void pqActiveViewOptionsManager::setActiveView(pqView *view) { // Open the options dialog for the new active view. this->Internal->Current->showOptions(this->Internal->ActiveView, - QString(), this->Internal->Parent); + QString(), + pqCoreUtilities::mainWidget()); } } } } +//----------------------------------------------------------------------------- void pqActiveViewOptionsManager::showOptions() { this->showOptions(QString()); } +//----------------------------------------------------------------------------- void pqActiveViewOptionsManager::showOptions(const QString &page) { if(this->Internal->Current || !this->Internal->ActiveView) @@ -240,7 +248,7 @@ void pqActiveViewOptionsManager::showOptions(const QString &page) if(this->Internal->Current) { this->Internal->Current->showOptions(this->Internal->ActiveView, page, - this->Internal->Parent); + pqCoreUtilities::mainWidget()); } else { @@ -248,6 +256,7 @@ void pqActiveViewOptionsManager::showOptions(const QString &page) } } +//----------------------------------------------------------------------------- void pqActiveViewOptionsManager::removeCurrent(pqActiveViewOptions *options) { if(!this->Internal->IgnoreClose && options == this->Internal->Current) @@ -256,6 +265,7 @@ void pqActiveViewOptionsManager::removeCurrent(pqActiveViewOptions *options) } } +//----------------------------------------------------------------------------- pqActiveViewOptions *pqActiveViewOptionsManager::getCurrent() const { pqActiveViewOptions *options = 0; @@ -285,6 +295,7 @@ pqActiveViewOptions *pqActiveViewOptionsManager::getCurrent() const return options; } +//----------------------------------------------------------------------------- bool pqActiveViewOptionsManager::canShowOptions(pqView* view) const { pqView* oldCur = this->Internal->ActiveView; diff --git a/Qt/Components/pqActiveViewOptionsManager.h b/Qt/Components/pqActiveViewOptionsManager.h index a86eac5ced..1055030d3f 100644 --- a/Qt/Components/pqActiveViewOptionsManager.h +++ b/Qt/Components/pqActiveViewOptionsManager.h @@ -58,8 +58,7 @@ class PQCOMPONENTS_EXPORT pqActiveViewOptionsManager : public QObject public: /// \brief /// Creates a view options manager. - /// \param parent The main window used when opening dialogs. - pqActiveViewOptionsManager(QWidget *parent=0); + pqActiveViewOptionsManager(QObject *parent=0); virtual ~pqActiveViewOptionsManager(); /// \brief diff --git a/Qt/Components/pqAnimationManager.cxx b/Qt/Components/pqAnimationManager.cxx index 46de9ef33e..16eaa3ae28 100644 --- a/Qt/Components/pqAnimationManager.cxx +++ b/Qt/Components/pqAnimationManager.cxx @@ -43,7 +43,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "vtkSMProxyManager.h" #include "vtkSMServerProxyManagerReviver.h" -#include <QApplication> #include <QFileInfo> #include <QMap> #include <QMessageBox> @@ -51,10 +50,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QSize> #include <QtDebug> + #include "pqAnimationCue.h" #include "pqAnimationScene.h" #include "pqAnimationSceneImageWriter.h" #include "pqApplicationCore.h" +#include "pqCoreUtilities.h" #include "pqEventDispatcher.h" #include "pqFileDialog.h" #include "pqObjectBuilder.h" @@ -76,7 +77,6 @@ class pqAnimationManager::pqInternals { public: QPointer<pqServer> ActiveServer; - QPointer<pqViewManager> ViewWidget; typedef QMap<pqServer*, QPointer<pqAnimationScene> > SceneMap; SceneMap Scenes; Ui::Dialog* AnimationSettingsDialog; @@ -112,12 +112,6 @@ pqAnimationManager::~pqAnimationManager() delete this->Internals; } -//----------------------------------------------------------------------------- -void pqAnimationManager::setViewWidget(pqViewManager* w) -{ - this->Internals->ViewWidget = w; -} - //----------------------------------------------------------------------------- void pqAnimationManager::updateViewModules() { @@ -331,8 +325,12 @@ bool pqAnimationManager::saveAnimation() dialogUI.checkBoxDisconnect->setEnabled( this->Internals->ActiveServer->isRemote()); + // Use viewManager is available. + pqViewManager* viewManager = qobject_cast<pqViewManager*>( + pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + // Set current size of the window. - QSize viewSize = this->Internals->ViewWidget->clientSize(); + QSize viewSize = viewManager? viewManager->clientSize() : QSize(800, 600); // to avoid some unpredicable padding issues, I am reducing the size by a few // pixels. QSize padding = PADDING_COMPENSATION; @@ -473,13 +471,7 @@ bool pqAnimationManager::saveAnimation() filters +="JPEG images (*.jpg);;TIFF images (*.tif);;PNG images (*.png);;"; filters +="All files(*)"; - QWidget* parent_window = qobject_cast<QWidget*>(this->parent()); - if (!parent_window) - { - // QApplication::activateWindow() is set up differntly on Macs resulting in - // ambiguities in test playback. Hence we use it as the last resort. - parent_window = QApplication::activeWindow(); - } + QWidget* parent_window = pqCoreUtilities::mainWidget(); // Create a server dialog is disconnect-and-save is true, else create a client // dialog. @@ -550,7 +542,7 @@ bool pqAnimationManager::saveAnimation() // Enforce any view size conditions (such a multiple of 4). ::enforceMultiple4(newSize); - int magnification = this->Internals->ViewWidget->prepareForCapture(newSize); + int magnification = viewManager? viewManager->prepareForCapture(newSize): 1; if (disconnect_and_save) { @@ -586,7 +578,10 @@ bool pqAnimationManager::saveAnimation() reviver->Delete(); emit this->endNonUndoableChanges(); pqApplicationCore::instance()->getObjectBuilder()->removeServer(server); - this->Internals->ViewWidget->finishedCapture(); + if (viewManager) + { + viewManager->finishedCapture(); + } emit this->disconnectServer(); return status; } @@ -637,7 +632,10 @@ bool pqAnimationManager::saveAnimation() break; } sceneProxy->UpdateVTKObjects(); - this->Internals->ViewWidget->finishedCapture(); + if (viewManager) + { + viewManager->finishedCapture(); + } if (stereo) { diff --git a/Qt/Components/pqAnimationManager.h b/Qt/Components/pqAnimationManager.h index 2b11702964..ddcdc38363 100644 --- a/Qt/Components/pqAnimationManager.h +++ b/Qt/Components/pqAnimationManager.h @@ -39,16 +39,15 @@ class QSize; class pqAnimationCue; class pqAnimationScene; -class pqViewManager; class pqProxy; class pqServer; class pqView; class vtkSMProxy; -// pqAnimationManager manages the Animation sub-system. -// It encapsulates the initialization of animation scene per server -// connection i.e. this class basically keeps track of the active -// animation scene. +//// pqAnimationManager manages the Animation sub-system. +//// It encapsulates the initialization of animation scene per server +//// connection i.e. this class basically keeps track of the active +//// animation scene. class PQCOMPONENTS_EXPORT pqAnimationManager : public QObject { Q_OBJECT @@ -56,34 +55,29 @@ public: pqAnimationManager(QObject* parent=0); virtual ~pqAnimationManager(); - // Returns the scene for the active server connection, if any. + /// Returns the scene for the active server connection, if any. pqAnimationScene* getActiveScene() const; - // Returns the scene on the server connection, if any. + /// Returns the scene on the server connection, if any. pqAnimationScene* getScene(pqServer* server) const; - // Creates a new scene for the active server connection, - // if possible, and returns it. + /// Creates a new scene for the active server connection, + /// if possible, and returns it. pqAnimationScene* createActiveScene(); - // In the given \c scene, returns the cue that animates the given - // \c index of the given \c property on the \c proxy. - // This method simply calls getCue() on the pqAnimationScene instance. + /// In the given \c scene, returns the cue that animates the given + /// \c index of the given \c property on the \c proxy. + /// This method simply calls getCue() on the pqAnimationScene instance. pqAnimationCue* getCue(pqAnimationScene* scene, vtkSMProxy* proxy, const char* propertyname, int index) const; - // Saves the animation from the active scene. The active scene - // is determined using the active server. - // Returns true if the save was successful. + /// Saves the animation from the active scene. The active scene + /// is determined using the active server. + /// Returns true if the save was successful. bool saveAnimation(); - // The the Widget that contains all the views. - // This is required since the manager may need to change the view size - // depending upon the users requested animation size. - void setViewWidget(pqViewManager*); - - // Saves the animation geometry from the active scene - // as visible in the given view. + /// Saves the animation geometry from the active scene + /// as visible in the given view. bool saveGeometry(const QString& filename, pqView* view); /// Save the settings of "save animation" with QSettings. @@ -125,7 +119,7 @@ protected slots: void updateGUI(); - // Update the ViewModules property in the active scene. + /// Update the ViewModules property in the active scene. void updateViewModules(); /// Called on every tick while saving animation. diff --git a/Qt/Components/pqAnimationViewWidget.h b/Qt/Components/pqAnimationViewWidget.h index d6bbae1757..cafc7107c9 100644 --- a/Qt/Components/pqAnimationViewWidget.h +++ b/Qt/Components/pqAnimationViewWidget.h @@ -42,7 +42,7 @@ class pqView; class pqServerManagerModelItem; class vtkSMProxy; -/// This is the Animation panel widget. It controls the behaviour +/// This is the Animation panel widget. It controls the behavior /// of the Animation panel which includes adding of key frames, /// changing of keyframes etc etc. class PQCOMPONENTS_EXPORT pqAnimationViewWidget : public QWidget @@ -50,7 +50,7 @@ class PQCOMPONENTS_EXPORT pqAnimationViewWidget : public QWidget Q_OBJECT typedef QWidget Superclass; public: - pqAnimationViewWidget(QWidget* parent); + pqAnimationViewWidget(QWidget* parent=0); virtual ~pqAnimationViewWidget(); public slots: diff --git a/Qt/Components/pqApplicationOptionsDialog.cxx b/Qt/Components/pqApplicationOptionsDialog.cxx index 3041b3e7c4..bf8de4b583 100644 --- a/Qt/Components/pqApplicationOptionsDialog.cxx +++ b/Qt/Components/pqApplicationOptionsDialog.cxx @@ -29,11 +29,15 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =========================================================================*/ - #include "pqApplicationOptionsDialog.h" + +#include "pqApplicationCore.h" #include "pqApplicationOptions.h" #include "pqGlobalRenderViewOptions.h" +#include "pqPluginManager.h" +#include "pqViewOptionsInterface.h" +//----------------------------------------------------------------------------- pqApplicationOptionsDialog::pqApplicationOptionsDialog(QWidget* p) : pqOptionsDialog(p) { @@ -50,10 +54,37 @@ pqApplicationOptionsDialog::pqApplicationOptionsDialog(QWidget* p) { this->setCurrentPage(pages[0]); } + + /// Add panes as plugins are loaded. + QObject::connect(pqApplicationCore::instance()->getPluginManager(), + SIGNAL(guiInterfaceLoaded(QObject*)), + this, SLOT(pluginLoaded(QObject*))); + + // Load panes from already loaded plugins. + foreach (QObject* plugin_interface, + pqApplicationCore::instance()->getPluginManager()->interfaces()) + { + this->pluginLoaded(plugin_interface); + } } -pqApplicationOptionsDialog::~pqApplicationOptionsDialog() +//----------------------------------------------------------------------------- +void pqApplicationOptionsDialog::pluginLoaded(QObject* iface) { + pqViewOptionsInterface* viewOptions = + qobject_cast<pqViewOptionsInterface*>(iface); + if (viewOptions) + { + foreach(QString viewtype, viewOptions->viewTypes()) + { + // Try to create global view options + pqOptionsContainer* globalOptions = + viewOptions->createGlobalViewOptions(viewtype, this); + if (globalOptions) + { + this->addOptions(globalOptions); + } + } + } } - diff --git a/Qt/Components/pqApplicationOptionsDialog.h b/Qt/Components/pqApplicationOptionsDialog.h index 3f818d534c..f13c254458 100644 --- a/Qt/Components/pqApplicationOptionsDialog.h +++ b/Qt/Components/pqApplicationOptionsDialog.h @@ -29,7 +29,6 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =========================================================================*/ - #ifndef _pqApplicationOptionsDialog_h #define _pqApplicationOptionsDialog_h @@ -37,16 +36,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqComponentsExport.h" #include "pqOptionsDialog.h" - -/// dialog class that allows editing of application wide settings +/// pqApplicationOptionsDialog dialog class that allows editing of application +/// wide settings. The constructor also iterates over all loaded plugins to +/// add panels from the plugins. It also listens to plugin loaded signals to +/// keep the dialog updated as new plugins are loaded. class PQCOMPONENTS_EXPORT pqApplicationOptionsDialog : public pqOptionsDialog { Q_OBJECT - public: pqApplicationOptionsDialog(QWidget *parent=0); - ~pqApplicationOptionsDialog(); +protected slots: + void pluginLoaded(QObject* plugin_interface); + +private: + Q_DISABLE_COPY(pqApplicationOptionsDialog) }; #endif diff --git a/Qt/Components/pqClientAboutDialog.cxx b/Qt/Components/pqClientAboutDialog.cxx index 4beae0c9dc..35a32d54f7 100644 --- a/Qt/Components/pqClientAboutDialog.cxx +++ b/Qt/Components/pqClientAboutDialog.cxx @@ -46,7 +46,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "vtkSMViewProxy.h" #include <QHeaderView> -#include "vtksys/ios/sstream" +#include <QApplication> +#include <QFile> + +#include <vtksys/ios/sstream> //----------------------------------------------------------------------------- pqClientAboutDialog::pqClientAboutDialog(QWidget* Parent) : @@ -56,6 +59,13 @@ pqClientAboutDialog::pqClientAboutDialog(QWidget* Parent) : this->Ui->setupUi(this); this->setObjectName("pqClientAboutDialog"); + QString spashImage = + QString(":/%1/SplashImage.img").arg(QApplication::applicationName()); + if (QFile::exists(spashImage)) + { + this->Ui->Image->setPixmap(QPixmap(spashImage)); + } + // get extra information and put it in vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); pqOptions* opts = pqOptions::SafeDownCast(pm->GetOptions()); diff --git a/Qt/Components/pqClientAboutDialog.h b/Qt/Components/pqClientAboutDialog.h index 13a3d6afd9..896b2155bc 100644 --- a/Qt/Components/pqClientAboutDialog.h +++ b/Qt/Components/pqClientAboutDialog.h @@ -51,9 +51,9 @@ class PQCOMPONENTS_EXPORT pqClientAboutDialog : public: pqClientAboutDialog(QWidget* Parent); + ~pqClientAboutDialog(); private: - ~pqClientAboutDialog(); pqClientAboutDialog(const pqClientAboutDialog&); pqClientAboutDialog& operator=(const pqClientAboutDialog&); diff --git a/Qt/Components/pqClientMainWindow.cxx b/Qt/Components/pqClientMainWindow.cxx deleted file mode 100644 index 6db03dff6a..0000000000 --- a/Qt/Components/pqClientMainWindow.cxx +++ /dev/null @@ -1,1236 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: $RCS $ - - Copyright (c) 2005-2008 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 "pqClientMainWindow.h" - -#include <vtkPQConfig.h> - -#include "pqClientAboutDialog.h" - -#include "ui_pqClientMainWindow.h" - -#include <pqActiveView.h> -#include <pqAnimationManager.h> -#include <pqAnimationViewWidget.h> -#include <pqApplicationCore.h> -#include <pqColorScaleToolbar.h> -#include <pqComparativeVisPanel.h> -//#include <pqLookmarkToolbar.h> -#include <pqMainWindowCore.h> -#include <pqObjectBuilder.h> -#include <pqObjectInspectorDriver.h> -#include <pqObjectInspectorWidget.h> -#include <pqObjectNaming.h> -#include <pqPipelineBrowserContextMenu.h> -#include <pqPipelineBrowser.h> -#include <pqPipelineMenu.h> -#include <pqProgressManager.h> -#include <pqProxyTabWidget.h> -#include <pqRecentFilesMenu.h> -#include <pqRenderView.h> -#include <pqRubberBandHelper.h> -#include <pqScalarBarVisibilityAdaptor.h> -#include <pqSetName.h> -#include <pqSettings.h> -#include <pqUndoStack.h> -#include <pqVCRController.h> -#include <pqViewManager.h> -#include <pqViewMenu.h> -#include <pqHelpWindow.h> -#include <pqCoreTestUtility.h> - - -// Include pqPythonManager when compiled with python support -#ifdef PARAVIEW_ENABLE_PYTHON -#include <pqPythonManager.h> -#endif - -#include <QDir> -#include <QFileInfo> -#include <QIcon> -#include <QLabel> -#include <QLayout> -#include <QLineEdit> -#include <QMessageBox> -#include <QPointer> -#include <QShortcut> -#include <QSpinBox> - -////////////////////////////////////////////////////////////////////////////// -// pqClientMainWindow::pqImplementation - -class pqClientMainWindow::pqImplementation -{ -public: - pqImplementation(QWidget* parent, pqMainWindowCore *core=NULL) : - HelpWindow(0), - RecentFilesMenu(0), - ViewMenu(0), - ToolbarsMenu(0) - { - if (core!=NULL) - { - core->setParent(parent); - this->Core = core; - } - else - { - this->Core = new pqMainWindowCore(parent); - } - } - - ~pqImplementation() - { - delete this->ViewMenu; - delete this->ToolbarsMenu; - delete this->HelpWindow; - delete this->Core; - } - - QPointer<pqHelpWindow> HelpWindow; - Ui::pqClientMainWindow UI; - pqMainWindowCore *Core; - pqRecentFilesMenu* RecentFilesMenu; - pqViewMenu* ViewMenu; - pqViewMenu* ToolbarsMenu; - QLineEdit* CurrentTimeWidget; - QSpinBox* CurrentTimeIndexWidget; - QPointer<pqServer> ActiveServer; - QString DocumentationDir; -}; - -////////////////////////////////////////////////////////////////////////////// -// pqClientMainWindow -#include <QTreeView> -#include "pqSILModel.h" -#include "vtkGraphReader.h" -#include "vtkExodusIIReaderParser.h" -#include "vtkMutableDirectedGraph.h" -pqClientMainWindow::pqClientMainWindow() -{ - this->Implementation = new pqImplementation(this); - this->constructorHelper(); -} - -pqClientMainWindow::pqClientMainWindow(pqMainWindowCore *core) -{ - this->Implementation = new pqImplementation(this, core); - this->constructorHelper(); -} - -void pqClientMainWindow::constructorHelper() -{ - 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->Implementation->Core->setDockWindowMenu(this->Implementation->ViewMenu); - this->Implementation->Core->setToolbarMenu(this->Implementation->ToolbarsMenu); - - QString suffix = ""; - if (PARAVIEW_VERSION_MINOR%2 != 0) - { - suffix = "(development)"; - } - - this->setWindowTitle( - QString("Kitware ParaView %1 %2").arg(PARAVIEW_VERSION_FULL).arg(suffix)); - - // Setup menus and toolbars ... - connect(this->Implementation->UI.actionFileOpen, - SIGNAL(triggered()), this->Implementation->Core, SLOT(onFileOpen())); - - 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.actionEditViewSettings, - SIGNAL(triggered()), this->Implementation->Core, SLOT(onEditViewSettings())); - - 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); - this->Implementation->Core->pipelineMenu().setMenuAction( - pqPipelineMenu::IgnoreTimeAction, this->Implementation->UI.actionIgnoreTime); - connect(this->Implementation->UI.actionDelete_All, SIGNAL(triggered()), - this, SLOT(onDeleteAll())); - - connect(this->Implementation->UI.actionIgnoreTime, SIGNAL(triggered(bool)), - this->Implementation->Core, - SLOT(ignoreTimesFromSelectedSources(bool))); - - 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))); - connect(this->Implementation->Core, SIGNAL(enableTooltips(bool)), - this->Implementation->UI.actionHelpEnableTooltips, - SLOT(setChecked(bool))); - - connect(this->Implementation->UI.actionVCRPlay, SIGNAL(triggered()), - &this->Implementation->Core->VCRController(), SLOT(onPlay())); - - 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))); - - pqProgressManager* progress_manager = - pqApplicationCore::instance()->getProgressManager(); - progress_manager->addNonBlockableObject( - this->Implementation->UI.VCRToolbar); - - QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, - &this->Implementation->Core->multiViewManager()); - QObject::connect(ctrlSpace, SIGNAL(activated()), - this, SLOT(onQuickLaunchShortcut())); - - QShortcut *altSpace = new QShortcut(Qt::ALT + Qt::Key_Space, - &this->Implementation->Core->multiViewManager()); - QObject::connect(altSpace, SIGNAL(activated()), - this, SLOT(onQuickLaunchShortcut())); - - 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())); - - connect( - this->Implementation->UI.actionFullScreen, SIGNAL(triggered()), - &this->Implementation->Core->multiViewManager(), - SLOT(toggleFullScreen())); - - - // 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); - modeGroup->addAction(this->Implementation->UI.actionSelectSurfacePoints); - // modeGroup->addAction(this->Implementation->UI.actionSelect_Thresholds); - modeGroup->addAction(this->Implementation->UI.actionSelect_Frustum); - modeGroup->addAction(this->Implementation->UI.actionSelectFrustumPoints); - modeGroup->addAction(this->Implementation->UI.actionSelect_Block); - - this->Implementation->Core->setupVariableToolbar( - this->Implementation->UI.variableToolbar); - foreach(QAction* a, this->Implementation->UI.variableToolbar->actions()) - { - if (a == this->Implementation->UI.actionScalarBarVisibility) - { - // actionScalarBarVisibility's enabled state is managed by - // pqScalarBarVisibilityAdaptor. - continue; - } - connect( - this->Implementation->Core, - SIGNAL(enableVariableToolbar(bool)), - a, SLOT(setEnabled(bool))); - } - - this->Implementation->Core->setupRepresentationToolbar( - this->Implementation->UI.representationToolbar); - foreach(QAction* a, this->Implementation->UI.representationToolbar->actions()) - { - connect( - this->Implementation->Core, - SIGNAL(enableVariableToolbar(bool)), - a, 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( - pqPipelineBrowserContextMenu::OPEN, - this->Implementation->UI.actionFileOpen); - //browserMenu->setMenuAction(this->Implementation->UI.actionAddSource); - //browserMenu->setMenuAction(this->Implementation->UI.actionAddFilter); - browserMenu->setMenuAction( - pqPipelineBrowserContextMenu::CHANGE_INPUT, - this->Implementation->UI.actionChangeInput); - browserMenu->setMenuAction( - pqPipelineBrowserContextMenu::DELETE, - this->Implementation->UI.actionDelete); - browserMenu->setMenuAction( - pqPipelineBrowserContextMenu::CREATE_CUSTOM_FILTER, - this->Implementation->UI.actionToolsCreateCustomFilter); - browserMenu->setMenuAction( - pqPipelineBrowserContextMenu::IGNORE_TIME, - this->Implementation->UI.actionIgnoreTime); - - pqProxyTabWidget* const proxyTab = - this->Implementation->Core->setupProxyTabWidget( - this->Implementation->UI.objectInspectorDock); - - QObject::connect( - proxyTab->getObjectInspector(), - SIGNAL(helpRequested(QString)), - this, - SLOT(showHelpForProxy(QString))); - - 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->setupSelectionInspector( - this->Implementation->UI.selectionInspectorDock); - - this->Implementation->Core->setupLookmarkBrowser( - this->Implementation->UI.lookmarkBrowserDock); - - this->Implementation->Core->setupLookmarkInspector( - this->Implementation->UI.lookmarkInspectorDock); - - QObject::connect( - this->Implementation->Core->getAnimationManager(), - SIGNAL(activeSceneChanged(pqAnimationScene*)), - this->Implementation->UI.currentTimeToolbar, - SLOT(setAnimationScene(pqAnimationScene*))); - - pqComparativeVisPanel* cv_panel = - new pqComparativeVisPanel( - this->Implementation->UI.comparativePanelDock); - this->Implementation->UI.comparativePanelDock->setWidget(cv_panel); - - this->Implementation->Core->setupAnimationView( - this->Implementation->UI.animationViewDock); - - // 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.axesToolbar, - this->Implementation->UI.axesToolbar->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()); - - // The macro toolbar defaults to hidden. - this->Implementation->UI.macroToolbar->setVisible(0); -#ifdef PARAVIEW_ENABLE_PYTHON - this->Implementation->ToolbarsMenu->addWidget( - this->Implementation->UI.macroToolbar, - this->Implementation->UI.macroToolbar->windowTitle()); -#endif // PARAVIEW_ENABLE_PYTHON - - 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.animationViewDock, - this->Implementation->UI.animationViewDock->windowTitle()); - - this->Implementation->ViewMenu->addWidget( - this->Implementation->UI.comparativePanelDock, - this->Implementation->UI.comparativePanelDock->windowTitle()); - - this->Implementation->ViewMenu->addWidget( - this->Implementation->UI.selectionInspectorDock, - this->Implementation->UI.selectionInspectorDock->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.lookmarkBrowserDock->hide(); - this->Implementation->UI.lookmarkInspectorDock->hide(); - this->Implementation->UI.statisticsViewDock->hide(); - this->Implementation->UI.comparativePanelDock->hide(); - this->Implementation->UI.animationViewDock->hide(); - this->Implementation->UI.selectionInspectorDock->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(representationChanged(pqDataRepresentation*, pqView*)), - sbva, SLOT(setActiveRepresentation(pqDataRepresentation*))); - - // Set up the color map tool buttons. - pqColorScaleToolbar *colorScale = - this->Implementation->Core->getColorScaleEditorManager(); - colorScale->setColorAction(this->Implementation->UI.actionEditColorMap); - colorScale->setRescaleAction(this->Implementation->UI.actionResetRange); - - // Set up Center Axes toolbar. - QObject::connect( - this->Implementation->UI.actionShowOrientationAxes, SIGNAL(toggled(bool)), - this->Implementation->Core, SLOT(setOrientationAxesVisibility(bool))); - QObject::connect( - this->Implementation->UI.actionShowCenterAxes, SIGNAL(toggled(bool)), - this->Implementation->Core, SLOT(setCenterAxesVisibility(bool))); - QObject::connect( - this->Implementation->UI.actionResetCenter, SIGNAL(triggered()), - this->Implementation->Core, - SLOT(resetCenterOfRotationToCenterOfCurrentData())); - QObject::connect( - this->Implementation->UI.actionPickCenter, SIGNAL(toggled(bool)), - this->Implementation->Core, - SLOT(pickCenterOfRotation(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))); - QObject::connect( - this->Implementation->Core, SIGNAL(enablePickCenter(bool)), - this->Implementation->UI.actionPickCenter, SLOT(setEnabled(bool))); - QObject::connect( - this->Implementation->Core, SIGNAL(pickingCenter(bool)), - this->Implementation->UI.actionPickCenter, SLOT(setChecked(bool))); - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(enableZoom(bool)), - this->Implementation->UI.actionZoomToBox, SLOT(setEnabled(bool))); - QObject::connect( - this->Implementation->UI.actionZoomToBox, SIGNAL(triggered()), - this->Implementation->Core->renderViewSelectionHelper(), SLOT(beginZoom())); - - connect(this->Implementation->UI.actionManage_Plugins, - SIGNAL(triggered()), this->Implementation->Core, SLOT(onManagePlugins())); - - - // Set up selection buttons. - QObject::connect( - this->Implementation->UI.actionMoveMode, SIGNAL(triggered()), - this->Implementation->Core->renderViewSelectionHelper(), SLOT(endSelection())); - - // 3d Selection Modes - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(enableSurfaceSelection(bool)), - this->Implementation->UI.actionSelectionMode, SLOT(setEnabled(bool))); - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(enableSurfacePointsSelection(bool)), - this->Implementation->UI.actionSelectSurfacePoints, SLOT(setEnabled(bool))); - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(enableFrustumSelection(bool)), - this->Implementation->UI.actionSelect_Frustum, SLOT(setEnabled(bool))); - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(enableFrustumPointSelection(bool)), - this->Implementation->UI.actionSelectFrustumPoints, SLOT(setEnabled(bool))); - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(enableBlockSelection(bool)), - this->Implementation->UI.actionSelect_Block, SLOT(setEnabled(bool))); - - - QObject::connect( - this->Implementation->UI.actionSelectionMode, SIGNAL(triggered()), - this->Implementation->Core->renderViewSelectionHelper(), SLOT(beginSurfaceSelection())); - QObject::connect( - this->Implementation->UI.actionSelectSurfacePoints, SIGNAL(triggered()), - this->Implementation->Core->renderViewSelectionHelper(), SLOT(beginSurfacePointsSelection())); - QObject::connect( - this->Implementation->UI.actionSelect_Frustum, SIGNAL(triggered()), - this->Implementation->Core->renderViewSelectionHelper(), SLOT(beginFrustumSelection())); - QObject::connect( - this->Implementation->UI.actionSelectFrustumPoints, SIGNAL(triggered()), - this->Implementation->Core->renderViewSelectionHelper(), SLOT(beginFrustumPointsSelection())); - QObject::connect( - this->Implementation->UI.actionSelect_Block, SIGNAL(triggered()), - this->Implementation->Core->renderViewSelectionHelper(), - SLOT(beginBlockSelection())); - - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(selectionModeChanged(int)), - this, SLOT(onSelectionModeChanged(int))); - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(interactionModeChanged(bool)), - this->Implementation->UI.actionMoveMode, SLOT(setChecked(bool))); - - // When a selection is marked, we revert to interaction mode. - QObject::connect( - this->Implementation->Core->renderViewSelectionHelper(), - SIGNAL(selectionFinished(int, int, int, int)), - this->Implementation->Core->renderViewSelectionHelper(), SLOT(endSelection())); - - QObject::connect( - this->Implementation->UI.actionExport, SIGNAL(triggered()), - this->Implementation->Core, SLOT(onFileExport())); - QObject::connect( - this->Implementation->Core, SIGNAL(enableExport(bool)), - this->Implementation->UI.actionExport, SLOT(setEnabled(bool))); - - // The Macros menu defaults to hidden - this->Implementation->UI.menuMacros->menuAction()->setVisible(false); - -#ifdef PARAVIEW_ENABLE_PYTHON - // Give the macro toolbar and macro menu to the pqPythonMacroSupervisor - pqPythonManager* manager = qobject_cast<pqPythonManager*>( - pqApplicationCore::instance()->manager("PYTHON_MANAGER")); - if (manager) - { - manager->addWidgetForMacros(this->Implementation->UI.menuMacros); - manager->addWidgetForMacros(this->Implementation->UI.macroToolbar); - } - - // Connect the onSettingsModified slot, then call it once to initialize - connect(pqApplicationCore::instance()->settings(), SIGNAL(modified()), - this, SLOT(onSettingsModified())); - this->onSettingsModified(); -#endif // PARAVIEW_ENABLE_PYTHON - - - // Restore the state of the window ... - pqApplicationCore::instance()->settings()->restoreState("pqClientMainWindow", *this); - - this->Implementation->UI.actionScalarBarVisibility->setEnabled(false); -} - -pqClientMainWindow::~pqClientMainWindow() -{ - this->Implementation->Core->removePluginToolBars(); - - // Save the state of the window ... - pqApplicationCore::instance()->settings()->saveState(*this, "pqClientMainWindow"); - - delete this->Implementation; -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onSettingsModified() -{ - // Hide or show the Macros menu - bool showMacroMenu = pqApplicationCore::instance()->settings()->value( - "PythonMacros/ShowMenu", false).toBool(); - this->Implementation->UI.menuMacros->menuAction()->setVisible(showMacroMenu); -} - -//----------------------------------------------------------------------------- -QString pqClientMainWindow::getTestDirectory() -{ - return pqCoreTestUtility::TestDirectory(); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onShowCenterAxisChanged(bool enabled) -{ - pqRenderView* renView = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - - this->Implementation->UI.actionShowOrientationAxes->setEnabled(enabled); - this->Implementation->UI.actionShowOrientationAxes->blockSignals(true); - this->Implementation->UI.actionShowOrientationAxes->setChecked( - renView? renView->getOrientationAxesVisibility() : false); - this->Implementation->UI.actionShowOrientationAxes->blockSignals(false); - - this->Implementation->UI.actionShowCenterAxes->setEnabled(enabled); - this->Implementation->UI.actionShowCenterAxes->blockSignals(true); - this->Implementation->UI.actionShowCenterAxes->setChecked( - renView ? renView->getCenterAxesVisibility() : false); - this->Implementation->UI.actionShowCenterAxes->blockSignals(false); -} - -//----------------------------------------------------------------------------- -bool pqClientMainWindow::compareView(const QString& ReferenceImage, - double Threshold, - ostream& Output, - const QString& TempDirectory) -{ - return this->Implementation->Core->compareView( - ReferenceImage, Threshold, Output, TempDirectory); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::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 pqClientMainWindow::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 pqClientMainWindow::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 pqClientMainWindow::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 pqClientMainWindow::setMessage(const QString& message) -{ - this->statusBar()->showMessage(message); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onPreAccept() -{ - this->statusBar()->showMessage(tr("Updating...")); - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onPostAccept() -{ - this->statusBar()->showMessage(tr("Ready"), 2000); - QTimer::singleShot(0, this, SLOT(endWaitCursor())); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::endWaitCursor() -{ - QApplication::restoreOverrideCursor(); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onHelpAbout() -{ - pqClientAboutDialog* const dialog = new pqClientAboutDialog(this); - dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->show(); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::makeAssistant() -{ - if (!this->Implementation->HelpWindow) - { - pqHelpWindow* helpWindow = new pqHelpWindow("ParaView Online Help", this); - QObject::connect(helpWindow, SIGNAL(helpWarnings(const QString&)), - this, SLOT(assistantError(const QString&))); - helpWindow->registerDocumentation(":/ParaViewResources/pqClient.qch"); - this->Implementation->HelpWindow = helpWindow; - this->Implementation->HelpWindow->showPage( - "qthelp://paraview.org/paraview/Documentation/index.html"); - } -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onHelpHelp() -{ - this->makeAssistant(); - - if(this->Implementation->HelpWindow) - { - this->Implementation->HelpWindow->show(); - this->Implementation->HelpWindow->raise(); - } -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::assistantError(const QString& error) -{ - qCritical(error.toAscii().data()); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onSelectionModeChanged(int mode) -{ - if(this->Implementation->UI.selectionToolbar->isEnabled()) - { - switch (mode) - { - case pqRubberBandHelper::SELECT://surface selection - this->Implementation->UI.actionSelectionMode->setChecked(true); - break; - - case pqRubberBandHelper::SELECT_POINTS: //surface selection - this->Implementation->UI.actionSelectSurfacePoints->setChecked(true); - break; - - case pqRubberBandHelper::FRUSTUM: - this->Implementation->UI.actionSelect_Frustum->setChecked(true); - break; - - case pqRubberBandHelper::FRUSTUM_POINTS: - this->Implementation->UI.actionSelectFrustumPoints->setChecked(true); - break; - - case pqRubberBandHelper::BLOCKS: - this->Implementation->UI.actionSelect_Block->setChecked(true); - break; - - case pqRubberBandHelper::INTERACT: - this->Implementation->UI.actionMoveMode->setChecked(true); - break; - - default: - break; - } - } - this->Implementation->UI.actionZoomToBox->setChecked(mode == - pqRubberBandHelper::ZOOM); -} - - -//----------------------------------------------------------------------------- -QVariant pqClientMainWindow::findToolBarActionsNotInMenus() -{ - QStringList missingInActions; - - // get all QActions on toolbars - QList<QToolBar*> toolBars = this->findChildren<QToolBar*>(); - QList<QAction*> toolBarActions; - foreach(QToolBar* tb, toolBars) - { - toolBarActions += tb->actions(); - } - - // get all QActions on menus (recursively) - QList<QAction*> 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<QAction*>::iterator iter = menuActions.begin(); - foreach(QAction* a, toolBarActions) - { - QList<QAction*>::iterator newiter; - newiter = qBinaryFind(iter, menuActions.end(), a); - if(newiter == menuActions.end()) - { - missingInActions.append(pqObjectNaming::GetName(*a)); - } - else - { - iter = newiter; - } - } - - return missingInActions.join(", "); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onPlaying(bool playing) -{ - if(playing) - { - disconnect(this->Implementation->UI.actionVCRPlay, SIGNAL(triggered()), - &this->Implementation->Core->VCRController(), SLOT(onPlay())); - connect(this->Implementation->UI.actionVCRPlay, SIGNAL(triggered()), - &this->Implementation->Core->VCRController(), SLOT(onPause())); - this->Implementation->UI.actionVCRPlay->setIcon( - QIcon(":/pqWidgets/Icons/pqVcrPause24.png")); - this->Implementation->UI.actionVCRPlay->setText("Pa&use"); - } - else - { - connect(this->Implementation->UI.actionVCRPlay, SIGNAL(triggered()), - &this->Implementation->Core->VCRController(), SLOT(onPlay())); - disconnect(this->Implementation->UI.actionVCRPlay, SIGNAL(triggered()), - &this->Implementation->Core->VCRController(), SLOT(onPause())); - this->Implementation->UI.actionVCRPlay->setIcon( - QIcon(":/pqWidgets/Icons/pqVcrPlay24.png")); - this->Implementation->UI.actionVCRPlay->setText("&Play"); - } - - this->Implementation->Core->setSelectiveEnabledState(!playing); - -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onAddCameraLink() -{ - pqView* vm = pqActiveView::instance().current(); - pqRenderView* rm = qobject_cast<pqRenderView*>(vm); - if(rm) - { - rm->linkToOtherView(); - } - else - { - QMessageBox::information(this, "Add Camera Link", - "No render module is active"); - } -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onDeleteAll() -{ - pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder(); - this->Implementation->Core->getApplicationUndoStack()-> - beginUndoSet("Delete All"); - builder->destroyPipelineProxies(); - this->Implementation->Core->getApplicationUndoStack()->endUndoSet(); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::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')); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::onQuickLaunchShortcut() -{ - this->Implementation->Core->quickLaunch(); -} - -//----------------------------------------------------------------------------- -void pqClientMainWindow::showHelpForProxy(const QString& proxy) -{ - // make sure assistant is ready - this->makeAssistant(); - - if (this->Implementation->HelpWindow) - { - QString page = QString( - "qthelp://paraview.org/paraview/Documentation/%1.html").arg(proxy); - this->Implementation->HelpWindow->showPage(page); - this->Implementation->HelpWindow->show(); - this->Implementation->HelpWindow->raise(); - } -} - -void pqClientMainWindow::disableSelections() -{ - this->Implementation->UI.actionSelectionMode->setDisabled(true); - this->Implementation->UI.actionSelectionMode->setVisible(false); - this->Implementation->UI.actionSelectSurfacePoints->setDisabled(true); - this->Implementation->UI.actionSelectSurfacePoints->setVisible(false); - this->Implementation->UI.actionSelect_Block->setDisabled(true); - this->Implementation->UI.actionSelect_Block->setVisible(false); - - this->Implementation->UI.actionSelect_Frustum->setDisabled(true); - this->Implementation->UI.actionSelect_Frustum->setVisible(false); - this->Implementation->UI.actionSelectFrustumPoints->setDisabled(true); - this->Implementation->UI.actionSelectFrustumPoints->setVisible(false); - - this->Implementation->UI.selectionToolbar->setVisible(false); -} diff --git a/Qt/Components/pqClientMainWindow.h b/Qt/Components/pqClientMainWindow.h deleted file mode 100644 index b490bcfe51..0000000000 --- a/Qt/Components/pqClientMainWindow.h +++ /dev/null @@ -1,119 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: $RCS $ - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqClientMainWindow.h -/// \date 7/15/2008 - -#ifndef _pqClientMainWindow_h -#define _pqClientMainWindow_h - -#include <QMainWindow> -#include <QVariant> -#include <vtkIOStream.h> -#include "pqComponentsExport.h" - -class pqGenericViewModule; -class pqPipelineSource; -class pqMainWindowCore; - -/// Provides the main window for the ParaView application -class PQCOMPONENTS_EXPORT pqClientMainWindow : - public QMainWindow -{ - Q_OBJECT - Q_PROPERTY(QString TestDirectory READ getTestDirectory); - -public: - pqClientMainWindow(); - ~pqClientMainWindow(); - - /// This constructor allows applications to use their own derived subclasses for pqMainWindowCore - pqClientMainWindow(pqMainWindowCore *core); - - bool compareView(const QString& ReferenceImage, double Threshold, ostream& Output, const QString& TempDirectory); - - /// Applications can use this to get rid of selection menu - void disableSelections(); - - /// Return the testing temporary directory, calls pqCoreTestUtility::TestDirectory(). - QString getTestDirectory(); - -public slots: - QVariant findToolBarActionsNotInMenus(); - - //show a customized message on the status bar - void setMessage(const QString&); - -private slots: - void onUndoLabel(const QString&); - void onRedoLabel(const QString&); - - void onCameraUndoLabel(const QString&); - void onCameraRedoLabel(const QString&); - - void onPreAccept(); - void onPostAccept(); - void endWaitCursor(); - - void onHelpAbout(); - void onHelpHelp(); - void showHelpForProxy(const QString& proxy); - void makeAssistant(); - - void onQuickLaunchShortcut(); - - void assistantError(const QString& err); - - void onShowCenterAxisChanged(bool); - - void setTimeRanges(double, double); - - void onPlaying(bool); - - void onAddCameraLink(); - - void onDeleteAll(); - - void onSelectionModeChanged(int mode); - - /// Connected to pqSettings::modified(). Implemented to show/hide the Macros menu. - void onSettingsModified(); - -private: - void constructorHelper(); - - class pqImplementation; - pqImplementation* Implementation; -}; - -#endif // !_pqClientMainWindow_h - diff --git a/Qt/Components/pqClientProcessModuleGUIHelper.cxx b/Qt/Components/pqClientProcessModuleGUIHelper.cxx deleted file mode 100644 index a1fb5978c1..0000000000 --- a/Qt/Components/pqClientProcessModuleGUIHelper.cxx +++ /dev/null @@ -1,98 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqClientProcessModuleGUIHelper.cxx - - Copyright (c) 2005-2008 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 "pqClientProcessModuleGUIHelper.h" - -#include <QTimer> -#include <QBitmap> -#include "pqClientMainWindow.h" - -#include <pqApplicationCore.h> -#include <vtkObjectFactory.h> - -#include "vtkPVConfig.h" - -vtkStandardNewMacro(pqClientProcessModuleGUIHelper); -vtkCxxRevisionMacro(pqClientProcessModuleGUIHelper, "1.2"); - -//----------------------------------------------------------------------------- -pqClientProcessModuleGUIHelper::pqClientProcessModuleGUIHelper() -{ - QPixmap pix(":/pqWidgets/Icons/PVSplashScreen.png"); - this->Splash = new QSplashScreen(pix, Qt::SplashScreen|Qt::WindowStaysOnTopHint); - this->Splash->setMask(pix.createMaskFromColor(QColor(Qt::transparent))); - this->Splash->setAttribute(Qt::WA_DeleteOnClose); - this->Splash->show(); -} - -//----------------------------------------------------------------------------- -pqClientProcessModuleGUIHelper::~pqClientProcessModuleGUIHelper() -{ -} - -//----------------------------------------------------------------------------- -QWidget* pqClientProcessModuleGUIHelper::CreateMainWindow() -{ - pqApplicationCore::instance()->setApplicationName("ParaView" PARAVIEW_VERSION); - pqApplicationCore::instance()->setOrganizationName("ParaView"); - QWidget* w = new pqClientMainWindow(); - QTimer::singleShot(10, this->Splash, SLOT(close())); - return w; -} - -//----------------------------------------------------------------------------- -void pqClientProcessModuleGUIHelper::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os, indent); -} - -//----------------------------------------------------------------------------- -bool pqClientProcessModuleGUIHelper::compareView(const QString& ReferenceImage, - double Threshold, ostream& Output, const QString& TempDirectory) -{ - if(pqClientMainWindow* const main_window = qobject_cast<pqClientMainWindow*>(this->GetMainWindow())) - { - return main_window->compareView(ReferenceImage, Threshold, Output, TempDirectory); - } - - return false; -} - - -//----------------------------------------------------------------------------- -int pqClientProcessModuleGUIHelper::RunGUIStart(int argc, char** argv, - int vtkNotUsed(numServerProcs), int vtkNotUsed(myId)) -{ - int not_used_numServerProcs = 0; - int not_used_myId = 0; - return pqProcessModuleGUIHelper::RunGUIStart(argc, argv, not_used_numServerProcs, not_used_myId); -} diff --git a/Qt/Components/pqClientProcessModuleGUIHelper.h b/Qt/Components/pqClientProcessModuleGUIHelper.h deleted file mode 100644 index 990c26e6ed..0000000000 --- a/Qt/Components/pqClientProcessModuleGUIHelper.h +++ /dev/null @@ -1,90 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqClientProcessModuleGUIHelper.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqClientMainWindow.h -/// \date 7/15/2008 - -#ifndef _pqClientProcessModudeGUIHelper_h -#define _pqClientProcessModudeGUIHelper_h - -#include "pqProcessModuleGUIHelper.h" -#include <QPointer> -#include <QSplashScreen> -#include "pqComponentsExport.h" - -/*! - * pqClientProcessModuleGUIHelper extends pqProcessModuleGUIHelper - * so that we can create the type of MainWindow needed for pqClient. - * - */ -class PQCOMPONENTS_EXPORT pqClientProcessModuleGUIHelper : public pqProcessModuleGUIHelper -{ -public: - static pqClientProcessModuleGUIHelper* New(); - vtkTypeRevisionMacro(pqClientProcessModuleGUIHelper, pqProcessModuleGUIHelper); - void PrintSelf(ostream& os, vtkIndent indent); - - /// Start the GUI event loop. - virtual int RunGUIStart(int argc, char** argv, int numServerProcs, int myId); - - /// Compares the contents of the window with the given reference image, returns true iff they "match" within some tolerance - virtual bool compareView(const QString& ReferenceImage, double Threshold, ostream& Output, const QString& TempDirectory); -protected: - pqClientProcessModuleGUIHelper(); - ~pqClientProcessModuleGUIHelper(); - - /// preAppExec does everything up to appExec() - /// call parent class in case derived class doesn't implement - virtual int preAppExec(int argc, char** argv, int numServerProcs, int myId) { return pqProcessModuleGUIHelper::preAppExec(argc, argv, numServerProcs, myId); } - - /// appExec executes the QApplication::exec - /// call parent class in case derived class doesn't implement - virtual int appExec() { return pqProcessModuleGUIHelper::appExec(); } - - /// postAppExec does everything after the appExec - /// call parent class in case derived class doesn't implement - virtual int postAppExec() { return pqProcessModuleGUIHelper::postAppExec(); } - - /// subclasses can override this method to create their own - /// subclass of pqMainWindow as the Main Window. - virtual QWidget* CreateMainWindow(); - - QPointer<QSplashScreen> Splash; - -private: - pqClientProcessModuleGUIHelper(const pqClientProcessModuleGUIHelper&); // Not implemented. - void operator=(const pqClientProcessModuleGUIHelper&); // Not implemented. -}; - -#endif // !_pqClientProcessModudeGUIHelper_h - - diff --git a/Qt/Components/pqColorScaleToolbar.cxx b/Qt/Components/pqColorScaleToolbar.cxx index e85fe87bb1..24ea376761 100644 --- a/Qt/Components/pqColorScaleToolbar.cxx +++ b/Qt/Components/pqColorScaleToolbar.cxx @@ -32,6 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqColorScaleToolbar.h" +#include "pqCoreUtilities.h" #include "pqColorScaleEditor.h" #include "pqDisplayColorWidget.h" #include "pqPipelineRepresentation.h" @@ -41,7 +42,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "vtkSMPVRepresentationProxy.h" #include <QAction> -#include <QApplication> #include <QColor> #include <QColorDialog> #include <QList> @@ -147,12 +147,7 @@ void pqColorScaleToolbar::editColorMap(pqDataRepresentation *display) // Create the color map editor if needed. if (this->Internal->ColorScaleEditor.isNull()) { - QWidget* parentWidget = qobject_cast<QWidget*>(this->parent()); - if (!parentWidget) - { - parentWidget = QApplication::activeWindow(); - } - + QWidget* parentWidget = pqCoreUtilities::mainWidget(); this->Internal->ColorScaleEditor = new pqColorScaleEditor(parentWidget); this->Internal->ColorScaleEditor->setAttribute(Qt::WA_DeleteOnClose); } @@ -216,7 +211,7 @@ void pqColorScaleToolbar::changeColor() } // Let the user pick a new color. - color = QColorDialog::getColor(color, QApplication::activeWindow()); + color = QColorDialog::getColor(color, pqCoreUtilities::mainWidget()); if(color.isValid()) { // Set the properties to the new color. diff --git a/Qt/Components/pqColorScaleToolbar.h b/Qt/Components/pqColorScaleToolbar.h index 6c693ac654..81fb75634c 100644 --- a/Qt/Components/pqColorScaleToolbar.h +++ b/Qt/Components/pqColorScaleToolbar.h @@ -41,7 +41,9 @@ class pqDataRepresentation; class pqDisplayColorWidget; class QAction; - +/// TO_DEPRECATE: Remove this class since it's not longer of any use. The +/// functionality has been split into reactions for handling the actions from the +/// color toolbar. class PQCOMPONENTS_EXPORT pqColorScaleToolbar : public QObject { Q_OBJECT diff --git a/Qt/Components/pqComponentsTestUtility.cxx b/Qt/Components/pqComponentsTestUtility.cxx new file mode 100644 index 0000000000..1c6e461e49 --- /dev/null +++ b/Qt/Components/pqComponentsTestUtility.cxx @@ -0,0 +1,87 @@ +/*========================================================================= + + Program: ParaView + Module: pqComponentsTestUtility.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 "pqComponentsTestUtility.h" + +#include "pqActiveObjects.h" +#include "pqView.h" +#include "vtkImageData.h" +#include "vtkSMViewProxy.h" + +#include <QWidget> +#include <QDebug> + +//----------------------------------------------------------------------------- +bool pqComponentsTestUtility::CompareView( + const QString& referenceImage, + double threshold, + const QString& tempDirectory) +{ + pqView* curView = pqActiveObjects::instance().activeView(); + if (!curView) + { + qCritical() << "ERROR: Could not locate the active view." ; + return false; + } + + // All tests need a 300x300 render window size. + QSize cur_size = curView->getWidget()->size(); + curView->getWidget()->resize(300,300); + vtkImageData* test_image = curView->captureImage(1); + if (!test_image) + { + qCritical() << "ERROR: Failed to capture snapshot."; + return false; + } + + // The returned image will have extents translated to match the view position, + // we shift them back. + int viewPos[2]; + curView->getViewProxy()->GetViewPosition(viewPos); + // Update image extents based on ViewPosition + int extents[6]; + test_image->GetExtent(extents); + for (int cc=0; cc < 4; cc++) + { + extents[cc] -= viewPos[cc/2]; + } + test_image->SetExtent(extents); + + bool ret = pqCoreTestUtility::CompareImage(test_image, referenceImage, + threshold, cout, tempDirectory); + test_image->Delete(); + curView->getWidget()->resize(cur_size); + curView->render(); + return ret; +} + + + diff --git a/Qt/Components/pqComponentsTestUtility.h b/Qt/Components/pqComponentsTestUtility.h new file mode 100644 index 0000000000..889af64b77 --- /dev/null +++ b/Qt/Components/pqComponentsTestUtility.h @@ -0,0 +1,58 @@ +/*========================================================================= + + Program: ParaView + Module: pqComponentsTestUtility.h + + 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. + +========================================================================*/ +#ifndef __pqComponentsTestUtility_h +#define __pqComponentsTestUtility_h + +#include "pqCoreTestUtility.h" +#include "pqComponentsExport.h" + +/// pqComponentsTestUtility simply adds a pqComponents specific testing +/// capabilities to pqCoreTestUtility. +class PQCOMPONENTS_EXPORT pqComponentsTestUtility : public pqCoreTestUtility +{ + Q_OBJECT + typedef pqCoreTestUtility Superclass; +public: + pqComponentsTestUtility(QObject* parentObj=0): Superclass(parentObj) {} + + /// Compares the baseline with active view for testing purposes. + /// (keeping naming-case similar to pqCoreTestUtility). + static bool CompareView( + const QString& referenceImage, double threshold, const QString& tempDirectory); + +private: + Q_DISABLE_COPY(pqComponentsTestUtility) +}; + +#endif + + diff --git a/Qt/Components/pqDataInformationModel.cxx b/Qt/Components/pqDataInformationModel.cxx index b4360c3f2c..2677b258e6 100644 --- a/Qt/Components/pqDataInformationModel.cxx +++ b/Qt/Components/pqDataInformationModel.cxx @@ -489,7 +489,7 @@ void pqDataInformationModel::dataUpdated(pqPipelineSource* changedSource) continue; } - vtkPVDataInformation* dataInfo = port->getDataInformation(false); + vtkPVDataInformation* dataInfo = port->getDataInformation(); if (!iter->DataInformationValid || dataInfo->GetMTime() > iter->MTime) { iter->MTime = dataInfo->GetMTime(); diff --git a/Qt/Components/pqDisplayColorWidget.cxx b/Qt/Components/pqDisplayColorWidget.cxx index 60264291c4..b29fbf7a62 100644 --- a/Qt/Components/pqDisplayColorWidget.cxx +++ b/Qt/Components/pqDisplayColorWidget.cxx @@ -85,15 +85,6 @@ pqDisplayColorWidget::pqDisplayColorWidget( QWidget *p ) : SLOT(onVariableChanged(pqVariableType, const QString&))); this->VTKConnect = vtkEventQtSlotConnect::New(); - - pqUndoStack* stack = pqApplicationCore::instance()->getUndoStack(); - if (stack) - { - QObject::connect(this, SIGNAL(begin(const QString&)), - stack, SLOT(beginUndoSet(const QString&))); - QObject::connect(this, SIGNAL(end()), - stack, SLOT(endUndoSet())); - } } //----------------------------------------------------------------------------- @@ -178,7 +169,7 @@ void pqDisplayColorWidget::onComponentActivated(int row) pqPipelineRepresentation* display = this->getRepresentation(); if(display) { - emit this->begin("Color Component Change"); + BEGIN_UNDO_SET("Color Component Change"); pqScalarsToColors* lut = display->getLookupTable(); if(row == 0) { @@ -190,7 +181,7 @@ void pqDisplayColorWidget::onComponentActivated(int row) } lut->updateScalarBarTitles(this->Components->itemText(row)); display->resetLookupTableScalarRange(); - emit this->end(); + END_UNDO_SET(); display->renderViewEventually(); } @@ -257,7 +248,7 @@ void pqDisplayColorWidget::onVariableChanged(pqVariableType type, pqPipelineRepresentation* display = this->getRepresentation(); if (display) { - emit this->begin("Color Change"); + BEGIN_UNDO_SET("Color Change"); switch(type) { case VARIABLE_TYPE_NONE: @@ -272,7 +263,7 @@ void pqDisplayColorWidget::onVariableChanged(pqVariableType type, vtkSMDataRepresentationProxy::CELL_DATA); break; } - emit this->end(); + END_UNDO_SET(); display->renderViewEventually(); } } diff --git a/Qt/Components/pqDisplayColorWidget.h b/Qt/Components/pqDisplayColorWidget.h index 7f23f187aa..1c2a1a00df 100644 --- a/Qt/Components/pqDisplayColorWidget.h +++ b/Qt/Components/pqDisplayColorWidget.h @@ -98,15 +98,6 @@ signals: /// changes. void modified(); - /// Fired just before the color is changed on the underlying proxy. - /// This must be hooked to an undo stack to record the - /// changes in a undo set. - void begin(const QString&); - - /// Fired just after the color is changed on the underlying proxy. - /// This must be hooked to an undo stack to record the - /// changes in a undo set. - void end(); private slots: /// Called to emit the variableChanged() signal in response to user input /// or the chooseVariable() method. diff --git a/Qt/Components/pqDisplayProxyEditor.cxx b/Qt/Components/pqDisplayProxyEditor.cxx index 5faba3389f..ab5427bcdb 100644 --- a/Qt/Components/pqDisplayProxyEditor.cxx +++ b/Qt/Components/pqDisplayProxyEditor.cxx @@ -66,7 +66,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ParaView client includes #include "pqApplicationCore.h" -#include "pqColorScaleToolbar.h" +#include "pqColorScaleEditor.h" +#include "pqCoreUtilities.h" #include "pqCubeAxesEditorDialog.h" #include "pqFileDialog.h" #include "pqOutputPort.h" @@ -810,13 +811,10 @@ void pqDisplayProxyEditor::updateEnableState() //----------------------------------------------------------------------------- void pqDisplayProxyEditor::openColorMapEditor() { - // Get the color scale editor from the application core's registry. - pqColorScaleToolbar *colorScale = qobject_cast<pqColorScaleToolbar *>( - pqApplicationCore::instance()->manager("COLOR_SCALE_EDITOR")); - if(colorScale) - { - colorScale->editColorMap(this->Internal->Representation); - } + pqColorScaleEditor editor(pqCoreUtilities::mainWidget()); + editor.setObjectName("pqColorScaleDialog"); + editor.setRepresentation(this->Internal->Representation); + editor.exec(); } //----------------------------------------------------------------------------- diff --git a/Qt/Components/pqDisplayProxyEditorWidget.h b/Qt/Components/pqDisplayProxyEditorWidget.h index 3902ab95fc..70cf12dfc0 100644 --- a/Qt/Components/pqDisplayProxyEditorWidget.h +++ b/Qt/Components/pqDisplayProxyEditorWidget.h @@ -58,15 +58,17 @@ public: void setView(pqView* view); void setOutputPort(pqOutputPort* port); - /// Set the representation to edit. If NULL, source and view must be set so - /// that the widget can show a default GUI which allows the user to - /// turn visibility on which entails creating a new representation. - void setRepresentation(pqRepresentation*); + pqRepresentation* getRepresentation() const; public slots: void reloadGUI(); + /// Set the representation to edit. If NULL, source and view must be set so + /// that the widget can show a default GUI which allows the user to + /// turn visibility on which entails creating a new representation. + void setRepresentation(pqRepresentation*); + signals: /// Fired when the browser begins performing an undoable change. void beginUndo(const QString& label); diff --git a/Qt/Components/pqDisplayRepresentationWidget.cxx b/Qt/Components/pqDisplayRepresentationWidget.cxx index 3001a440c6..274838d571 100644 --- a/Qt/Components/pqDisplayRepresentationWidget.cxx +++ b/Qt/Components/pqDisplayRepresentationWidget.cxx @@ -77,15 +77,6 @@ pqDisplayRepresentationWidget::pqDisplayRepresentationWidget( QObject::connect(&this->Internal->Links, SIGNAL(qtWidgetChanged()), this, SLOT(onQtWidgetChanged())); - - pqUndoStack* ustack = pqApplicationCore::instance()->getUndoStack(); - if (ustack) - { - QObject::connect(this, SIGNAL(beginUndo(const QString&)), - ustack, SLOT(beginUndoSet(const QString&))); - QObject::connect(this, SIGNAL(endUndo()), - ustack, SLOT(endUndoSet())); - } } //----------------------------------------------------------------------------- @@ -157,8 +148,7 @@ void pqDisplayRepresentationWidget::reloadGUI() //----------------------------------------------------------------------------- void pqDisplayRepresentationWidget::onQtWidgetChanged() { - emit this->beginUndo("Changed 'Representation'"); - + BEGIN_UNDO_SET("Changed 'Representation'"); QString text = this->Internal->Adaptor->currentText(); vtkSMProperty* repProperty = @@ -177,7 +167,7 @@ void pqDisplayRepresentationWidget::onQtWidgetChanged() //this->Internal->Links.accept(); this->Internal->Links.blockSignals(false); } - emit this->endUndo(); + END_UNDO_SET(); } //----------------------------------------------------------------------------- diff --git a/Qt/Components/pqDisplayRepresentationWidget.h b/Qt/Components/pqDisplayRepresentationWidget.h index ff513ca054..82e5693ce5 100644 --- a/Qt/Components/pqDisplayRepresentationWidget.h +++ b/Qt/Components/pqDisplayRepresentationWidget.h @@ -50,13 +50,6 @@ public: signals: void currentTextChanged(const QString&); - /// Fired when the widget begins an undo-able change. - void beginUndo(const QString&); - - /// Fired when the widget is finished with an - /// undo-able change. - void endUndo(); - public slots: void setRepresentation(pqDataRepresentation* display); diff --git a/Qt/Components/pqExtraResources.qrc.in b/Qt/Components/pqExtraResources.qrc.in deleted file mode 100644 index 8dd1e2e3d9..0000000000 --- a/Qt/Components/pqExtraResources.qrc.in +++ /dev/null @@ -1,5 +0,0 @@ -<RCC> -<qresource prefix="/ParaViewResources"> -@QT_COMPONENTS_GUI_RESOURCES_CONTENTS@ -</qresource> -</RCC> diff --git a/Qt/Components/pqFilterInputDialog.cxx b/Qt/Components/pqFilterInputDialog.cxx index 066c9cff93..f043324579 100644 --- a/Qt/Components/pqFilterInputDialog.cxx +++ b/Qt/Components/pqFilterInputDialog.cxx @@ -36,7 +36,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqFilterInputDialog.h" #include "pqFlatTreeView.h" -#include "pqPipelineBrowserStateManager.h" #include "pqPipelineFilter.h" #include "pqPipelineModel.h" #include "pqServer.h" @@ -208,7 +207,6 @@ pqFilterInputDialog::pqFilterInputDialog(QWidget *widgetParent) : QDialog(widgetParent) { this->Internal = new pqFilterInputDialogInternal(); - this->Manager = new pqPipelineBrowserStateManager(this); this->Filter = 0; this->Model = 0; this->Pipeline = 0; @@ -336,7 +334,6 @@ void pqFilterInputDialog::setModelAndFilter(pqPipelineModel *model, // Add the model to the tree view. this->Preview->setModel(this->Model); - this->Manager->setModelAndView(this->Model, this->Preview); if(this->Model) { // Hide all but the first column. diff --git a/Qt/Components/pqFilterInputDialog.h b/Qt/Components/pqFilterInputDialog.h index c50bdebdf4..04173ab794 100644 --- a/Qt/Components/pqFilterInputDialog.h +++ b/Qt/Components/pqFilterInputDialog.h @@ -44,7 +44,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. class pqFilterInputDialogInternal; class pqFlatTreeView; class pqOutputPort; -class pqPipelineBrowserStateManager; class pqPipelineFilter; class pqPipelineModel; class QButtonGroup; @@ -117,7 +116,6 @@ private slots: private: pqFilterInputDialogInternal *Internal; - pqPipelineBrowserStateManager *Manager; pqPipelineFilter *Filter; pqPipelineModel *Model; pqPipelineModel *Pipeline; diff --git a/Qt/Components/pqLookmarkBrowser.cxx b/Qt/Components/pqLookmarkBrowser.cxx deleted file mode 100644 index b5a3274096..0000000000 --- a/Qt/Components/pqLookmarkBrowser.cxx +++ /dev/null @@ -1,211 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkBrowser.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqLookmarkBrowser.cxx -/// \date 6/23/2006 - -#include "pqLookmarkBrowser.h" -#include "ui_pqLookmarkBrowser.h" - -#include "pqLookmarkBrowserModel.h" -#include "pqFileDialog.h" -#include "pqApplicationCore.h" - -#include <QItemSelection> -#include <QItemSelectionModel> -#include <QModelIndex> -#include <QStringList> - - -class pqLookmarkBrowserForm : public Ui::pqLookmarkBrowser {}; - - -pqLookmarkBrowser::pqLookmarkBrowser(pqLookmarkBrowserModel *model, - QWidget *widgetParent) - : QWidget(widgetParent) -{ - this->Model = model; - this->Form = new pqLookmarkBrowserForm(); - this->Form->setupUi(this); - - // Initialize the form. - this->Form->ImportButton->setEnabled(true); - this->Form->ExportButton->setEnabled(false); - this->Form->RemoveButton->setEnabled(false); - this->Form->LookmarkList->setModel(this->Model); - - // Listen for button clicks. - QObject::connect(this->Form->ImportButton, SIGNAL(clicked()), - this, SLOT(importFiles())); - QObject::connect(this->Form->ExportButton, SIGNAL(clicked()), - this, SLOT(exportSelected())); - QObject::connect(this->Form->RemoveButton, SIGNAL(clicked()), - this, SLOT(removeSelected())); - - // Listen for selection changes. - QObject::connect(this->Form->LookmarkList->selectionModel(), - SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), - this, - SLOT(onSelectionChanged())); - - // Listen for a lookmark to load. - QObject::connect(this->Form->LookmarkList, - SIGNAL(doubleClicked(const QModelIndex &)), - this, - SLOT(loadLookmark(const QModelIndex &))); - - // Listen for new lookmark additions. - QObject::connect(this->Model, SIGNAL(lookmarkAdded(const QString &)), - this, SLOT(selectLookmark(const QString &))); -} - -pqLookmarkBrowser::~pqLookmarkBrowser() -{ - delete this->Form; -} - -void pqLookmarkBrowser::selectLookmark(const QString &name) -{ - this->Form->LookmarkList->selectionModel()->clearSelection(); - - QModelIndex index = this->Model->getIndexFor(name); - if(index.isValid()) - { - this->Form->LookmarkList->selectionModel()->select(index, - QItemSelectionModel::Select); - } -} - - -void pqLookmarkBrowser::loadLookmark(const QModelIndex &index) -{ - if(!index.isValid()) - { - return; - } - emit this->loadLookmark(this->Model->getNameFor(index)); -} - -void pqLookmarkBrowser::importFiles() -{ - // Let the user select a file. - pqFileDialog* fileDialog = new pqFileDialog( - NULL, - this, - tr("Open Lookmark File"), - QString(), - "Lookmark Files (*.lmk *.xml);;All Files (*)"); - fileDialog->setAttribute(Qt::WA_DeleteOnClose); - fileDialog->setObjectName("FileOpenDialog"); - fileDialog->setFileMode(pqFileDialog::ExistingFiles); - - this->Form->LookmarkList->selectionModel()->clear(); - - // Listen for the user's selection. - this->connect(fileDialog, SIGNAL(filesSelected(const QStringList &)), - this->Model, SIGNAL(importLookmarks(const QStringList &))); - - fileDialog->show(); -} - -void pqLookmarkBrowser::exportSelected() -{ - // Let the user select a file to save. - pqFileDialog* fileDialog = new pqFileDialog( - NULL, - this, - tr("Save Lookmark File"), - QString(), - "Lookmark Files (*.lmk *.xml);;All Files (*)"); - fileDialog->setAttribute(Qt::WA_DeleteOnClose); - fileDialog->setObjectName("FileSaveDialog"); - fileDialog->setFileMode(pqFileDialog::AnyFile); - - // Listen for the user's selection. - this->connect(fileDialog, SIGNAL(filesSelected(const QStringList &)), - this, SLOT(exportSelected(const QStringList &))); - - fileDialog->show(); -} - - -void pqLookmarkBrowser::exportSelected(const QStringList &files) -{ - // Get the selected lookmarks from the list. - QModelIndexList selection = - this->Form->LookmarkList->selectionModel()->selection().indexes(); - if(selection.size() == 0 || files.size() == 0) - { - return; - } - - this->Model->exportLookmarks(selection, files); -} - -void pqLookmarkBrowser::removeSelected() -{ - // Get the selected lookmarks from the list. - QModelIndexList selection =this->Form->LookmarkList->selectionModel()->selectedIndexes(); - this->Model->removeLookmarks(selection); -} - - -void pqLookmarkBrowser::updateButtons() -{ - QItemSelectionModel *selection = this->Form->LookmarkList->selectionModel(); - bool hasSelected = selection->selection().size() > 0; - - // Enable or disable the buttons based on the selection. - this->Form->RemoveButton->setEnabled(hasSelected); - this->Form->ExportButton->setEnabled(hasSelected); - -} - -void pqLookmarkBrowser::onSelectionChanged() -{ - this->updateButtons(); - - QStringList names; - QModelIndexList indices = this->Form->LookmarkList->selectionModel()->selectedRows(); - for(int i=0;i<indices.size();i++) - { - names.push_back(this->Model->getNameFor(indices.at(i))); - } - emit this->selectedLookmarksChanged(names); -} - -QItemSelectionModel* pqLookmarkBrowser::getSelectionModel() -{ - return this->Form->LookmarkList->selectionModel(); -} - - diff --git a/Qt/Components/pqLookmarkBrowser.h b/Qt/Components/pqLookmarkBrowser.h deleted file mode 100644 index 68478b7b28..0000000000 --- a/Qt/Components/pqLookmarkBrowser.h +++ /dev/null @@ -1,126 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkBrowser.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -#ifndef _pqLookmarkBrowser_h -#define _pqLookmarkBrowser_h - - -#include "pqComponentsExport.h" -#include <QWidget> - -class pqLookmarkBrowserForm; -class pqLookmarkBrowserModel; -class QItemSelection; -class QStringList; -class QModelIndex; -class QItemSelectionModel; - -/// \class pqLookmarkBrowser -/// \brief -/// The pqLookmarkBrowser class displays the list of lookmarks (their names and icons) -/// -/// The lookmark browser uses a pqLookmarkBrowserModel to get the list of lookmarks. -/// -/// It provides an interface for loading, removing, importing, and exporting lookmarks. -/// -/// Still to do: -/// - convert to a tree view -/// - should we allow user to create a lookmark from the browser? - - -class PQCOMPONENTS_EXPORT pqLookmarkBrowser : public QWidget -{ - Q_OBJECT - -public: - /// \brief - /// Creates a lookmark Browser dialog. - /// \param model The list of registered lookmarks to display. - /// \param parent The parent widget for the dialog. - pqLookmarkBrowser(pqLookmarkBrowserModel *model, QWidget *parent=0); - virtual ~pqLookmarkBrowser(); - - QItemSelectionModel* getSelectionModel(); - -public slots: - /// \brief - /// Selects the given lookmark in the list. - /// \param name The lookmark name to select. - void selectLookmark(const QString &name); - - /// \brief - /// Load the given lookmark in the list. Handled by pqMainWindowCore. - /// \param index The index in the list of the lookmark to be loaded. - void loadLookmark(const QModelIndex &index); - - /// \brief - /// Saves the selected lookmark definitions to the given files. Handled by pqLookmarkManagerModel. - /// \param files The list of files to export to. - void exportSelected(const QStringList &files); - -private slots: - /// \brief - /// Opens the file dialog to select import files. - void importFiles(); - - /// \brief - /// Opens the file dialog to select export files. - /// \sa pqLookmarkBrowser::exportSelected(const QStringList &) - void exportSelected(); - - /// \brief - /// Delete the selected lookmarks from the display as well as the model. - /// \sa pqLookmarkBrowserModel::removeLookmark(const QModelIndex&) - void removeSelected(); - - /// \brief - /// Updates the dialog buttons based on the selection. - /// - /// If there is no selection, the export, create, and remove buttons are - /// disabled. - void updateButtons(); - - /// \brief - /// A house-keeping method to perform tasks that need to be done when the selection changes, like updating the button state. - void onSelectionChanged(); - -signals: - void loadLookmark(const QString &name); - void selectedLookmarksChanged(const QStringList &names); - -private: - pqLookmarkBrowserModel *Model; ///< Stores the lookmark list. - pqLookmarkBrowserForm *Form; ///< Defines the gui layout. - -}; - -#endif diff --git a/Qt/Components/pqLookmarkBrowserModel.cxx b/Qt/Components/pqLookmarkBrowserModel.cxx deleted file mode 100644 index 611ea88026..0000000000 --- a/Qt/Components/pqLookmarkBrowserModel.cxx +++ /dev/null @@ -1,271 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkBrowserModel.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqLookmarkBrowserModel.cxx -/// \date 6/23/2006 - -#include "pqLookmarkBrowserModel.h" - -#include <QList> -#include <QImage> -#include <QString> -#include <QtDebug> -#include <QPointer> - -#include "pqApplicationCore.h" -#include "pqLookmarkModel.h" -#include "pqLookmarkManagerModel.h" - -class pqLookmarkBrowserModelInternal : public QList<QPointer<pqLookmarkModel> >{}; - - -pqLookmarkBrowserModel::pqLookmarkBrowserModel(const pqLookmarkManagerModel *model, QObject *parentObject) - : QAbstractListModel(parentObject) -{ - this->Internal = new pqLookmarkBrowserModelInternal(); - - // populate our contents based on model - QList<pqLookmarkModel*> lookmarks = model->getAllLookmarks(); - QList<pqLookmarkModel*>::iterator iter; - for(iter=lookmarks.begin(); iter!=lookmarks.end(); iter++) - { - this->addLookmark(*iter); - } -} - - -pqLookmarkBrowserModel::~pqLookmarkBrowserModel() -{ - foreach (pqLookmarkModel* lookmark, *this->Internal) - { - if (lookmark) - { - delete lookmark; - } - } - delete this->Internal; -} - -int pqLookmarkBrowserModel::rowCount(const QModelIndex &parentIndex) const -{ - if(this->Internal && !parentIndex.isValid()) - { - return this->Internal->size(); - } - - return 0; -} - -QModelIndex pqLookmarkBrowserModel::index(int row, int column, - const QModelIndex &parentIndex) const -{ - if(this->Internal && !parentIndex.isValid() && column == 0 && row >= 0 && - row < this->Internal->size()) - { - return this->createIndex(row, column, 0); - } - - return QModelIndex(); -} - -QVariant pqLookmarkBrowserModel::data(const QModelIndex &idx, - int role) const -{ - if(this->Internal && idx.isValid() && idx.model() == this) - { - pqLookmarkModel *lmk = (*this->Internal)[idx.row()]; - switch(role) - { - case Qt::DisplayRole: - case Qt::EditRole: - { - return QVariant(lmk->getName()); - } - case Qt::DecorationRole: - { - return QVariant(lmk->getIcon().scaled(48,48)); - } - } - } - - return QVariant(); -} - -Qt::ItemFlags pqLookmarkBrowserModel::flags(const QModelIndex &) const -{ - return Qt::ItemIsSelectable | Qt::ItemIsEnabled; -} - -QString pqLookmarkBrowserModel::getNameFor( - const QModelIndex &idx) const -{ - if(idx.isValid()) - { - return (*this->Internal)[idx.row()]->getName(); - } - return QString(); -} - -QModelIndex pqLookmarkBrowserModel::getIndexFor( - const QString &lookmark) const -{ - if(this->Internal && !lookmark.isEmpty()) - { - int row = 0; - for( ; row < this->Internal->size(); row++) - { - QString compName = (*this->Internal)[row]->getName(); - if(QString::compare(lookmark, compName) == 0) - { - break; - } - } - if(row != this->Internal->size()) - { - return this->createIndex(row, 0, 0); - } - } - - return QModelIndex(); -} - - -pqLookmarkModel* pqLookmarkBrowserModel::getLookmarkAtIndex( - const QModelIndex &idx) -{ - if(this->Internal && idx.isValid() && idx.model() == this) - { - return (*this->Internal)[idx.row()]; - } - return 0; -} - -void pqLookmarkBrowserModel::addLookmark(pqLookmarkModel *lmk) -{ - if(!this->Internal || lmk->getName().isEmpty()) - { - return; - } - - int row = this->Internal->size(); - - this->beginInsertRows(QModelIndex(), row, row); - pqLookmarkModel *newLmk = new pqLookmarkModel(*lmk); - this->Internal->insert(row, newLmk); - this->endInsertRows(); - - emit this->lookmarkAdded(lmk->getName()); -} - -void pqLookmarkBrowserModel::removeLookmark(const QModelIndex &idx) -{ - if(!this->Internal) - { - return; - } - - QString lmkName; - // Notify the view that the index is going away. - this->beginRemoveRows(QModelIndex(), idx.row(), idx.row()); - pqLookmarkModel *lmk = (*this->Internal)[idx.row()]; - lmkName = lmk->getName(); - delete lmk; - this->Internal->removeAt(idx.row()); - this->endRemoveRows(); - - emit this->lookmarkRemoved(lmkName); -} - - -void pqLookmarkBrowserModel::removeLookmark(QString name) -{ - if(!this->Internal || name.isEmpty()) - { - return; - } - - // Find the row for the lookmark. - int row = 0; - for( ; row < this->Internal->size(); row++) - { - if(QString::compare(name, (*this->Internal)[row]->getName()) == 0) - { - break; - } - } - if(row==this->Internal->size()) - { - return; - } - - pqLookmarkModel *lmk = (*this->Internal)[row]; - this->beginRemoveRows(QModelIndex(), row, row); - delete lmk; - this->Internal->removeAt(row); - this->endRemoveRows(); - emit this->lookmarkRemoved(name); -} - -void pqLookmarkBrowserModel::removeLookmarks(QModelIndexList &selection) -{ - QList<QModelIndex>::iterator iter; - QList<QString> names; - for(iter=selection.begin(); iter!=selection.end(); iter++) - { - names.push_back((*this->Internal)[(*iter).row()]->getName()); - } - QList<QString>::iterator iter2; - for(iter2=names.begin(); iter2!=names.end(); iter2++) - { - this->removeLookmark(*iter2); - } -} - - -void pqLookmarkBrowserModel::exportLookmarks(const QModelIndexList &selection, const QStringList &files) -{ - QList<QModelIndex>::const_iterator iter; - QList<pqLookmarkModel*> lookmarks; - for(iter=selection.begin(); iter!=selection.end(); iter++) - { - lookmarks.push_back((*this->Internal)[(*iter).row()]); - } - emit this->exportLookmarks(lookmarks, files); -} - - -void pqLookmarkBrowserModel::onLookmarkModified(pqLookmarkModel *lmk) -{ - QModelIndex idx = this->getIndexFor(lmk->getName()); - emit this->dataChanged(idx,idx); -} - diff --git a/Qt/Components/pqLookmarkBrowserModel.h b/Qt/Components/pqLookmarkBrowserModel.h deleted file mode 100644 index 830df10a91..0000000000 --- a/Qt/Components/pqLookmarkBrowserModel.h +++ /dev/null @@ -1,179 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkBrowserModel.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - - -#ifndef _pqLookmarkBrowserModel_h -#define _pqLookmarkBrowserModel_h - - -#include "pqComponentsExport.h" -#include <QAbstractListModel> - -class pqLookmarkBrowserModelInternal; -class QString; -class QImage; -class pqLookmarkModel; -class pqLookmarkManagerModel; - -/// \class pqLookmarkBrowserModel -/// \brief -/// The pqLookmarkBrowserModel class stores the list of lookmark definitions. -/// -/// The list is modified using the \c addLookmark and -/// \c removeLookmark methods. When a new lookmark is added -/// to the model a signal is emitted. This signal can be used to -/// highlight the new lookmark. -/// -/// It listens to signals from pqLookmarkManagerModel to update its list of lookmarks since lookmarks can be added, removed, modified from other views in the application. -/// -/// A lookmark in the list can be "loaded" (i.e. have its stored server manager state loaded in vtkSMProxyManager). -/// -/// It is stored as a QString in the application's pqSetttings under the key "LookmarkBrowserState". -/// -/// Still to do: Convert to a hierarchical model - -class PQCOMPONENTS_EXPORT pqLookmarkBrowserModel : public QAbstractListModel -{ - Q_OBJECT - -public: - //pqLookmarkBrowserModel(QObject *parent=0); - - /// \brief - /// Creates a lookmark browser model from a lookmark manager model. - /// \param other Used to build a lookmark browser model. - /// \param parent The parent object. - pqLookmarkBrowserModel(const pqLookmarkManagerModel *other, QObject *parent=0); - - virtual ~pqLookmarkBrowserModel(); - - /// \name QAbstractItemModel Methods - //@{ - /// \brief - /// Gets the number of rows for a given index. - /// \param parent The parent index. - /// \return - /// The number of rows for the given index. - virtual int rowCount(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets a model index for a given location. - /// \param row The row number. - /// \param column The column number. - /// \param parent The parent index. - /// \return - /// A model index for the given location. - virtual QModelIndex index(int row, int column, - const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets the data for a given model index. - /// \param index The model index. - /// \param role The role to get data for. - /// \return - /// The data for the given model index. - virtual QVariant data(const QModelIndex &index, - int role=Qt::DisplayRole) const; - - /// \brief - /// Gets the flags for a given model index. - /// - /// The flags for an item indicate if it is enabled, editable, etc. - /// - /// \param index The model index. - /// \return - /// The flags for the given model index. - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - //@} - - /// \brief - /// Gets the model index for the given lookmark name. - /// \param filter The lookmark definition name to look up. - /// \return - /// The model index for the given name. - QModelIndex getIndexFor(const QString &name) const; - QString getNameFor(const QModelIndex &idx) const; - //@} - - pqLookmarkModel *getLookmarkAtIndex(const QModelIndex &idx); - -public slots: - /// \brief - /// Adds a new lookmark definition to the model. - /// \param name The name of the new lookmark definition. - /// \param image The icon of the new lookmark definition. - /// \param state The server manager state of the new lookmark definition. - void addLookmark(pqLookmarkModel *lmkModel); - - /// \brief - /// Removes a lookmark definition from the model. - /// \param name The name of the lookmark definition. - /// \param index The index at which the lookmark is stored. - /// \param lmk A pointer to the lookmark object to be removed. - /// \param selection The list of indices to remove from list. - void removeLookmark(QString name); - void removeLookmark(const QModelIndex &index); - //void removeLookmark(pqLookmarkModel *lmk); - void removeLookmarks(QModelIndexList &selection); - - /// \brief - /// This gets called when a lookmark has been modified somewhere else in the application and we need to update our data. - /// \param lmk The lookmark that's been modified. - void onLookmarkModified(pqLookmarkModel *lmk); - - /// \brief - /// Takes a QModelIndexList and converts it to a list of lookmarks, emitting a signal telling pqLookmarkManagerModel to do the exporting. - /// \param selection The indices of the lookmarks to export. - /// \param files The files to export to. - void exportLookmarks(const QModelIndexList &selection, const QStringList &files); - -signals: - /// \brief - /// Emitted when a new lookmark definition is added to the - /// model. - /// \param name The name of the new lookmark definition. - void lookmarkAdded(const QString &name); - - /// \brief - /// Emitted when a lookmark has been removed from the model. - /// \param name The name of the new lookmark model. - void lookmarkRemoved(const QString &name); - - void importLookmarks(const QStringList &files); - void exportLookmarks(const QList<pqLookmarkModel*> &list, const QStringList &files); - -private: - /// Stores the lookmark list. - pqLookmarkBrowserModelInternal *Internal; -}; - -#endif diff --git a/Qt/Components/pqLookmarkDefinitionWizard.cxx b/Qt/Components/pqLookmarkDefinitionWizard.cxx deleted file mode 100644 index 0c182e25b8..0000000000 --- a/Qt/Components/pqLookmarkDefinitionWizard.cxx +++ /dev/null @@ -1,425 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkDefinitionWizard.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqLookmarkDefinitionWizard.cxx -/// \date 6/19/2006 - -#include "pqLookmarkDefinitionWizard.h" -#include "ui_pqLookmarkDefinitionWizard.h" - -#include "pqApplicationCore.h" -#include "pqDataRepresentation.h" -#include "pqFlatTreeView.h" -#include "pqImageUtil.h" -#include "pqLookmarkManagerModel.h" -#include "pqLookmarkModel.h" -#include "pqPipelineBrowser.h" -#include "pqPipelineFilter.h" -#include "pqPipelineModel.h" -#include "pqPipelineSource.h" -#include "pqRepresentation.h" -#include "pqServer.h" -#include "pqServerManagerModel.h" -#include "pqServerManagerModelItem.h" -#include "pqView.h" - -#include <QMessageBox> -#include <QModelIndex> -#include <QStringList> -#include <QList> -#include <QLineEdit> -#include <QImage> -#include <QVBoxLayout> -#include <QHeaderView> -#include <QScrollBar> -#include <QtDebug> - -#include "vtkCollection.h" -#include "vtkCollectionIterator.h" -#include "vtkImageData.h" -#include "vtkPVDataInformation.h" -#include "vtkPVXMLElement.h" -#include "vtkRenderWindow.h" -#include "vtkSmartPointer.h" -#include "vtkSMPropertyIterator.h" -#include "vtkSMProxy.h" -#include "vtkSMProxyManager.h" -#include "vtkSMProxyProperty.h" -#include "vtkSMSourceProxy.h" -#include "vtkSMViewProxy.h" -#include "vtksys/ios/sstream" - -#include "assert.h" - -class pqLookmarkDefinitionWizardForm : public Ui::pqLookmarkDefinitionWizard{}; - - -pqLookmarkDefinitionWizard::pqLookmarkDefinitionWizard(pqLookmarkManagerModel *model, - pqView *viewModule, QWidget *widgetParent) - : QDialog(widgetParent) -{ - this->Model = model; - this->OverwriteOK = false; - this->ViewModule = viewModule; - this->PipelineHierarchy = vtkPVXMLElement::New(); - this->PipelineHierarchy->SetName("PipelineHierarchy"); - this->Form = new pqLookmarkDefinitionWizardForm(); - this->Form->setupUi(this); - - this->createPipelinePreview(); - - // Listen to the button click events. - QObject::connect(this->Form->CancelButton, SIGNAL(clicked()), - this, SLOT(reject())); - QObject::connect(this->Form->FinishButton, SIGNAL(clicked()), - this, SLOT(finishWizard())); - - // Listen for name changes. - QObject::connect(this->Form->LookmarkName, - SIGNAL(textEdited(const QString &)), - this, SLOT(clearNameOverwrite(const QString &))); - - this->Form->LookmarkName->setFocus(); -} - -pqLookmarkDefinitionWizard::~pqLookmarkDefinitionWizard() -{ - if(this->Form) - { - delete this->Form; - } - - if(this->PipelineHierarchy) - { - this->PipelineHierarchy->Delete(); - } - - if(this->PipelineModel) - { - delete this->PipelineModel; - } - -} - - -void pqLookmarkDefinitionWizard::createPipelinePreview() -{ - // Make a copy of the model for the user to select sources. - pqServerManagerModel *smModel = - pqApplicationCore::instance()->getServerManagerModel(); - this->PipelineModel = new pqPipelineModel(*smModel); - this->PipelineModel->setEditable(false); - - // Save visible displays and their sources, also any display/source pair upstream from a visible one in the pipeline: - QList<pqRepresentation*> displays = this->ViewModule->getRepresentations(); - QList<pqRepresentation *>::Iterator iter; - pqDataRepresentation *consDisp; - vtkCollection *proxies = vtkCollection::New(); - for(iter = displays.begin(); iter != displays.end(); ++iter) - { - // if a display is visible, add it, its pipeline source, and all its upstream inputs to the collection of proxies - if( (consDisp = dynamic_cast<pqDataRepresentation*>(*iter))) - { - if(consDisp->isVisible() ) - { - this->addToProxyCollection(consDisp->getInput(),proxies); - } - } - } - - QList<pqPipelineSource*> sources = smModel->findItems<pqPipelineSource*>(); - foreach (pqPipelineSource *src, sources) - { - if( src ) - { - if(!proxies->IsItemPresent(src->getProxy())) - { - this->PipelineModel->removeSource(src); - } - } - } - - // assume there's only one server for now - pqServer *server = smModel->getItemAtIndex<pqServer*>(0); - - // Populate the xml elements with the name and type of each pipeline item - this->addChildItems(this->PipelineModel->getIndexFor(server),this->PipelineHierarchy); - - proxies->Delete(); -} - - - -void pqLookmarkDefinitionWizard::addChildItems(const QModelIndex &index, vtkPVXMLElement *elem) -{ - // Get the number of children from the model. The model may - // delay loading information. Force the model to load the - // child information if the item can't be made expandable. - if(this->PipelineModel->canFetchMore(index)) - { - this->PipelineModel->fetchMore(index); - } - - int count = this->PipelineModel->rowCount(index); - - // Set up the parent and model index for each added child. - // The model's hierarchical data should be in column 0. - QModelIndex childIndex; - pqServerManagerModelItem *smItem; - for(int i = 0; i < count; i++) - { - childIndex = this->PipelineModel->index(i, 0, index); - if(childIndex.isValid()) - { - vtkPVXMLElement *childElem = vtkPVXMLElement::New(); - QString name = this->PipelineModel->data(childIndex,Qt::EditRole).toString(); - smItem = this->PipelineModel->getItemFor(childIndex); - if(dynamic_cast<pqServer*>(smItem)) - { - childElem->SetName("Server"); - } - else if(dynamic_cast<pqPipelineFilter*>(smItem)) - { - childElem->SetName("Filter"); - } - else - { - childElem->SetName("Source"); - } - childElem->SetAttribute("Name",name.toAscii().data()); - elem->AddNestedElement(childElem); - this->addChildItems(childIndex,childElem); - childElem->Delete(); - } - } -} - -void pqLookmarkDefinitionWizard::createLookmark() -{ - if(this->Form->LookmarkName->text().isEmpty()) - { - return; - } - - if(!this->ViewModule->supportsLookmarks()) - { - qCritical() << "This view does not support lookmarks."; - return; - } - - vtkSMProxy* viewProxy = this->ViewModule->getViewProxy(); - vtkSMProxyManager *proxyManager = vtkSMProxyManager::GetProxyManager(); - - QImage image; - if (this->Form->SaveImage->checkState() == Qt::Checked) - { - // Save a screenshot of the view to store with the lookmark - QWidget* w = this->ViewModule->getWidget(); - QSize old = w->size(); - w->resize(150,150); - vtkImageData* imageData = this->ViewModule->captureImage(1); - if(imageData) - { - w->resize(old); - pqImageUtil::fromImageData(imageData, image); - imageData->Delete(); - } - } - else - { - image = QImage(":pqWidgets/Icons/pqLookmarkThumbnail.png"); - } - - vtkCollection *proxies = vtkCollection::New(); - // Save visible displays and their sources, also any display/source pair - // upstream from a visible one in the pipeline: - QList<pqRepresentation*> displays = this->ViewModule->getRepresentations(); - QList<pqRepresentation *>::Iterator iter; - pqDataRepresentation *consDisp; - for(iter = displays.begin(); iter != displays.end(); ++iter) - { - // if a display is visible, add it, its pipeline source, and all its - // upstream inputs to the collection of proxies - if( (consDisp = dynamic_cast<pqDataRepresentation*>(*iter))) - { - if(consDisp->isVisible() ) - { - this->addToProxyCollection(consDisp->getInput(),proxies); - } - } - } - - // Get the XML representation of the contents of "proxies", as well as - // their referred proxies - vtkPVXMLElement *stateElement = proxyManager->SaveState(proxies, true); - - // Collect all referred (proxy property) proxies of the view EXCEPT - // its "Displays" These have been handled separately. - proxies->RemoveAllItems(); - vtkSmartPointer<vtkSMPropertyIterator> pIter; - pIter.TakeReference(viewProxy->NewPropertyIterator()); - for (pIter->Begin(); !pIter->IsAtEnd(); pIter->Next()) - { - vtkSMProxyProperty* pp = vtkSMProxyProperty::SafeDownCast( - pIter->GetProperty()); - - for (unsigned int cc=0; pp && (pp->GetNumberOfProxies() > cc); cc++) - { - vtkSMProxy* referredProxy = pp->GetProxy(cc); - if (referredProxy && QString::compare(referredProxy->GetXMLGroup(),"representations")!=0) - { - proxies->AddItem(referredProxy); - } - } - } - - // Save all referred proxies of the view's non-display referred proxies - vtkPVXMLElement* childElement = proxyManager->SaveState(proxies, true); - unsigned int cc; - for (cc=0; cc < childElement->GetNumberOfNestedElements(); cc++) - { - stateElement->AddNestedElement(childElement->GetNestedElement(cc)); - } - childElement->Delete(); - - // Now add the view, but don't save its referred proxies, because - // we've dealt with them separately - proxies->RemoveAllItems(); - proxies->AddItem(viewProxy); - childElement = proxyManager->SaveState(proxies, false); - for (cc=0; cc < childElement->GetNumberOfNestedElements(); cc++) - { - stateElement->AddNestedElement(childElement->GetNestedElement(cc)); - } - childElement->Delete(); - - vtksys_ios::ostringstream stateString; - stateElement->PrintXML(stateString,vtkIndent(1)); - stateString << ends; - - QString lmkState = stateString.str().c_str(); - - // Create a lookmark with the given name, image, and state - pqLookmarkModel *lmkModel = new pqLookmarkModel(this->Form->LookmarkName->text(), lmkState); - lmkModel->setDescription(this->Form->LookmarkComments->toPlainText()); - lmkModel->setIcon(image); - //lmkModel->setPipelinePreview(pipeline); - lmkModel->setPipelineHierarchy(this->PipelineHierarchy); - - //this->Lookmarks->addLookmark(lmkModel); - this->Model->addLookmark(lmkModel); - //pqApplicationCore::instance()->getLookmarkManagerModel()->addLookmark(lmkModel); - - proxies->Delete(); - stateElement->Delete(); -} - - - -void pqLookmarkDefinitionWizard::addToProxyCollection(pqPipelineSource *src, vtkCollection *proxies) -{ - // Add this display/source's proxy to the list if it has not already been added - if(!proxies->IsItemPresent(src->getProxy())) - { - // The source may or may not have a display in the view - QList<pqDataRepresentation*> reprs = src->getRepresentations(this->ViewModule); - foreach (pqDataRepresentation* repr, reprs) - { - proxies->AddItem(repr->getProxy()); - } - - proxies->AddItem(src->getProxy()); - } - - // If this is a filter, recurse on its inputs - pqPipelineFilter *filter; - if( (filter = dynamic_cast<pqPipelineFilter*>(src)) ) - { - for(int i=0; i<filter->getInputCount(); i++) - { - pqPipelineSource *input = filter->getInput(i); - this->addToProxyCollection(input,proxies); - } - } -} - -//----------------------------------------------------------------------------- -bool pqLookmarkDefinitionWizard::validateLookmarkName() -{ - // Make sure the user has entered a name for the lookmark. - QString lookmarkName = this->Form->LookmarkName->text(); - if(lookmarkName.isEmpty()) - { - QMessageBox::warning(this, "No Name", - "The lookmark name field is empty.\n" - "Please enter a unique name for the lookmark.", - QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton); - this->Form->LookmarkName->setFocus(); - return false; - } - - // Make sure the name is unique. - if(!this->OverwriteOK) - { - if(this->Model->getLookmark(lookmarkName)) - { - int button = QMessageBox::warning(this, "Duplicate Name", - "The lookmark name already exists.\n" - "Do you want to overwrite the lookmark?", - QMessageBox::Yes | QMessageBox::Default, QMessageBox::No); - if(button != QMessageBox::Yes) - { - return false; - } - - this->Model->removeLookmark(lookmarkName); - this->OverwriteOK = true; - } - } - - return true; -} - -void pqLookmarkDefinitionWizard::finishWizard() -{ - // Make sure the name has been entered and is unique. - if(this->validateLookmarkName()) - { - this->accept(); - } -} - -void pqLookmarkDefinitionWizard::clearNameOverwrite(const QString &) -{ - this->OverwriteOK = false; -} - diff --git a/Qt/Components/pqLookmarkDefinitionWizard.h b/Qt/Components/pqLookmarkDefinitionWizard.h deleted file mode 100644 index 1eb4413e7d..0000000000 --- a/Qt/Components/pqLookmarkDefinitionWizard.h +++ /dev/null @@ -1,135 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkDefinitionWizard.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -#ifndef _pqLookmarkDefinitionWizard_h -#define _pqLookmarkDefinitionWizard_h - - -#include "pqComponentsExport.h" -#include <QDialog> - -class pqLookmarkDefinitionWizardForm; -class QModelIndex; -class pqView; -class vtkCollection; -class pqFlatTreeView; -class pqPipelineModel; -class vtkPVXMLElement; -class pqLookmarkManagerModel; -class pqPipelineSource; - -/*! \class pqLookmarkDefinitionWizard - * \brief - * The pqLookmarkDefinitionWizard class is used to create a lookmark model. - * - * Currently you cannot create a lookmark of multiple views. - * - * A lookmark needs three things to be created: a unique name, an icon (of the current view), and an XML representation of a subset of the server manager state. - * The user may also add a description of the lookmark. - * - * A subset of the server manager state is saved on creation: - * - all pqDataRepresentations that are visible in the given pqRenderViewModule - * - all pqDataRepresentations that are invisible in the given pqRenderViewModule but "upstream" from a visible one in the pipeline - * - all pqPipelineSources associated with the displays being saved - * - all referred proxies of all saved display and source proxies. A referred proxy is one that is part of a proxy property of a saved proxy. - * - the vtkSMViewProxy state (but not its referred proxies) - * - */ -class PQCOMPONENTS_EXPORT pqLookmarkDefinitionWizard : public QDialog -{ - Q_OBJECT - -public: - /// \brief - /// Creates a lookmark definition wizard. - /// \param model The view module to create a lookmark from (currently only supports render views) - /// \param parent The parent widget for the wizard. - pqLookmarkDefinitionWizard(pqLookmarkManagerModel *model, pqView *view, QWidget *parent=0); - virtual ~pqLookmarkDefinitionWizard(); - -public slots: - /// \brief - /// Creates a lookmark definition. - /// - /// A lookmark is created with the name provided by the user, an icon image of the current view, - /// and the state of the displays and sources that make up the render module. - void createLookmark(); - -private: - - /// \brief - /// Validates the lookmark name field. - /// - /// This method will pop up message boxes for the user if there is - /// something wrong with the name entered. - /// - /// \return - /// True if the lookmark name is valid. - bool validateLookmarkName(); - - /// \brief - /// Generates a "trimmed" view of the current pipeline that reflects the pipeline that will be restored when this lookmark is invoked. - /// \return - /// The view of the pipeline. - void createPipelinePreview(); - - /// \brief - /// A recursive helper function for adding to the proxy collection the given display, its input source, - /// and all displays and sources "upstream" in the pipeline from it. - /// - /// The collection of proxies is given to the server manager and their XML representation is generated - void addToProxyCollection(pqPipelineSource *src, vtkCollection *proxies); - -private slots: - - /// Called when the user clicks the finish button. - void finishWizard(); - - /// \brief - /// Clears the lookmark overwite flag. - /// \param text The changed name text. - void clearNameOverwrite(const QString &text); - //@} - - void addChildItems(const QModelIndex &index, vtkPVXMLElement *elem); - -private: - bool OverwriteOK; ///< Used with name validation. - pqView *ViewModule; - pqLookmarkDefinitionWizardForm *Form; - pqFlatTreeView *PipelineView; - pqPipelineModel *PipelineModel; - vtkPVXMLElement *PipelineHierarchy; - pqLookmarkManagerModel *Model; -}; - -#endif diff --git a/Qt/Components/pqLookmarkInspector.cxx b/Qt/Components/pqLookmarkInspector.cxx deleted file mode 100644 index 418f35d878..0000000000 --- a/Qt/Components/pqLookmarkInspector.cxx +++ /dev/null @@ -1,295 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkInspector.cxx - - Copyright (c) 2005-2008 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 "pqLookmarkInspector.h" -#include "ui_pqLookmarkInspector.h" - -// Qt includes -#include <QVBoxLayout> -#include <QScrollArea> -#include <QPushButton> -#include <QTabWidget> -#include <QApplication> -#include <QStyle> -#include <QStyleOption> -#include <QMessageBox> -#include <QStandardItem> -#include <QStandardItemModel> -#include <QHeaderView> -#include <QIcon> - -// ParaView includes -#include "pqApplicationCore.h" -#include <QItemSelectionModel> -#include "pqLookmarkManagerModel.h" -#include "pqLookmarkModel.h" -#include "vtkPVXMLElement.h" - -class pqLookmarkInspectorForm : public Ui::pqLookmarkInspector {}; - - -//----------------------------------------------------------------------------- -pqLookmarkInspector::pqLookmarkInspector(pqLookmarkManagerModel *model, QWidget *p) - : QWidget(p) -{ - this->Model = model; - this->Form = new pqLookmarkInspectorForm(); - this->Form->setupUi(this); - this->Form->PropertiesFrame->hide(); - this->Form->ControlsFrame->hide(); - this->CurrentLookmark = NULL; - this->PipelineModel = new QStandardItemModel(); - this->Form->PipelineView->getHeader()->hide(); - this->Form->PipelineView->setSelectionMode(pqFlatTreeView::NoSelection); - this->Form->PipelineView->setModel(this->PipelineModel); - - this->connect(this->Form->SaveButton, SIGNAL(clicked()), SLOT(save())); - this->connect(this->Form->LoadButton, SIGNAL(clicked()), SLOT(load())); - this->connect(this->Form->DeleteButton, SIGNAL(clicked()), SLOT(remove())); - - this->Form->SaveButton->setEnabled(false); - this->Form->LoadButton->setEnabled(false); - this->Form->DeleteButton->setEnabled(false); - - // Disable the restore data button until a fix can be made for the crash - // that's ocurring as ParaView closes when a lookmark that has this option - // turned off has been loaded. - - //this->connect(this->Form->RestoreData, - // SIGNAL(stateChanged(int)), - // SIGNAL(modified())); - - this->connect(this->Form->RestoreCamera, - SIGNAL(stateChanged(int)), - SIGNAL(modified())); - - this->connect(this->Form->RestoreTime, - SIGNAL(stateChanged(int)), - SIGNAL(modified())); - - this->connect(this->Form->LookmarkName, - SIGNAL(textChanged(const QString &)), - SIGNAL(modified())); - - this->connect(this->Form->LookmarkComments, - SIGNAL(textChanged()), - SIGNAL(modified())); - - this->connect(this, - SIGNAL(modified()), - SLOT(onModified())); - -} - -//----------------------------------------------------------------------------- -pqLookmarkInspector::~pqLookmarkInspector() -{ - delete this->PipelineModel; - delete this->Form; -} - - -void pqLookmarkInspector::load() -{ - if(this->SelectedLookmarks.count()==1) - { - emit this->loadLookmark(this->SelectedLookmarks.at(0)); - } -} - -//----------------------------------------------------------------------------- -void pqLookmarkInspector::remove() -{ - // this should change the selection in the browser model - // which will call this->onLookmarkSelectionChanged() - if(this->SelectedLookmarks.count()==1) - { - emit this->removeLookmark(this->SelectedLookmarks.at(0)); - } -} - - -void pqLookmarkInspector::save() -{ - if(this->SelectedLookmarks.count()==0) - { - return; - } - - if(this->SelectedLookmarks.count()==1) - { - pqLookmarkModel *lookmark = this->Model->getLookmark(this->SelectedLookmarks.at(0)); - if(!lookmark) - { - return; - } - // make sure the new name is not already taken - bool nameTaken = false; - for(int i=0; i<this->Model->getNumberOfLookmarks(); i++) - { - pqLookmarkModel *lmk = this->Model->getLookmark(i); - if(lmk!=lookmark && QString::compare(lmk->getName(),this->Form->LookmarkName->text())==0) - { - nameTaken = true; - break; - } - } - if(nameTaken) - { - QMessageBox::warning(this, "Duplicate Name", - "The lookmark name already exists.\n" - "Please choose a different one."); - - return; - } - - lookmark->setName(this->Form->LookmarkName->text()); - lookmark->setDescription(this->Form->LookmarkComments->toPlainText()); - } - - if(this->SelectedLookmarks.count()>=1) - { - for(int i=0; i<this->SelectedLookmarks.count(); i++) - { - pqLookmarkModel *lookmark = this->Model->getLookmark(this->SelectedLookmarks.at(i)); - //this->CurrentLookmark->setRestoreDataFlag(this->Form->RestoreData->isChecked()); - lookmark->setRestoreCameraFlag(this->Form->RestoreCamera->isChecked()); - lookmark->setRestoreTimeFlag(this->Form->RestoreTime->isChecked()); - } - } - - this->Form->SaveButton->setEnabled(false); -} - -//----------------------------------------------------------------------------- -void pqLookmarkInspector::onModified() -{ - this->Form->SaveButton->setEnabled(true); -} - -//----------------------------------------------------------------------------- -void pqLookmarkInspector::onLookmarkSelectionChanged(const QStringList &selected) -{ - this->SelectedLookmarks = selected; - - if(selected.isEmpty()) - { - this->CurrentLookmark = 0; - // don't display anything if nothing is selected - this->Form->PropertiesFrame->hide(); - this->Form->ControlsFrame->hide(); - this->Form->LoadButton->setEnabled(false); - this->Form->SaveButton->setEnabled(false); - this->Form->DeleteButton->setEnabled(false); - } - else if(selected.count()>1) - { - // only display the lookmark settings that are applicable to multiple lookmarks - this->Form->PropertiesFrame->hide(); - this->Form->ControlsFrame->show(); - this->Form->LoadButton->setEnabled(false); - this->Form->SaveButton->setEnabled(true); - this->Form->DeleteButton->setEnabled(false); - } - else if(selected.count()==1) - { - this->CurrentLookmark = this->Model->getLookmark(selected.at(0)); - - this->Form->LookmarkName->setText(this->CurrentLookmark->getName()); - this->Form->LookmarkComments->setText(this->CurrentLookmark->getDescription()); - QImage img; - img = this->CurrentLookmark->getIcon(); - if(!img.isNull()) - { - this->Form->LookmarkIcon->setPixmap(QPixmap::fromImage(img)); - } - - this->generatePipelineView(); - - //this->Form->RestoreData->setChecked(this->CurrentLookmark->getRestoreDataFlag()); - this->Form->RestoreCamera->setChecked(this->CurrentLookmark->getRestoreCameraFlag()); - this->Form->RestoreTime->setChecked(this->CurrentLookmark->getRestoreTimeFlag()); - - this->Form->PropertiesFrame->show(); - this->Form->ControlsFrame->show(); - this->Form->LoadButton->setEnabled(true); - this->Form->SaveButton->setEnabled(false); - this->Form->DeleteButton->setEnabled(true); - } -} - - -void pqLookmarkInspector::generatePipelineView() -{ - if(!this->CurrentLookmark || !this->CurrentLookmark->getPipelineHierarchy()) - { - this->Form->PipelineView->hide(); - return; - } - - this->PipelineModel->clear(); - this->addChildItems(this->CurrentLookmark->getPipelineHierarchy(), - this->PipelineModel->invisibleRootItem()); - this->Form->PipelineView->reset(); - this->Form->PipelineView->expandAll(); - this->Form->PipelineView->show(); -} - - -void pqLookmarkInspector::addChildItems(vtkPVXMLElement *elem, QStandardItem *item) -{ - for(unsigned int i=0; i<elem->GetNumberOfNestedElements(); i++) - { - vtkPVXMLElement *childElem = elem->GetNestedElement(i); - QStandardItem *childItem = - new QStandardItem(QIcon(":/pqWidgets/Icons/pqBundle32.png"), - QString(childElem->GetAttribute("Name"))); - item->setChild(i,0,childItem); - this->addChildItems(childElem,childItem); - } -} - - -QSize pqLookmarkInspector::sizeHint() const -{ - // return a size hint that would reasonably fit several properties - ensurePolished(); - QFontMetrics fm(font()); - int h = 20 * (qMax(fm.lineSpacing(), 14)); - int w = fm.width('x') * 25; - QStyleOptionFrame opt; - opt.rect = rect(); - opt.palette = palette(); - opt.state = QStyle::State_None; - return (style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(w, h). - expandedTo(QApplication::globalStrut()), this)); -} diff --git a/Qt/Components/pqLookmarkInspector.h b/Qt/Components/pqLookmarkInspector.h deleted file mode 100644 index b123fe6ade..0000000000 --- a/Qt/Components/pqLookmarkInspector.h +++ /dev/null @@ -1,105 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkInspector.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqLookmarkInspector.h -/// \brief -/// The pqLookmarkInspector class is used to display the properties -/// of lookmarks in an editable form. -/// -/// \date 11/25/2005 - -#ifndef _pqLookmarkInspector_h -#define _pqLookmarkInspector_h - -#include "pqComponentsExport.h" -#include <QWidget> - -class QModelIndex; -class QItemSelection; -class pqLookmarkInspectorForm; -class pqLookmarkModel; -class vtkPVXMLElement; -class QStandardItem; -class QStandardItemModel; -class pqLookmarkManagerModel; - -/// \class pqLookmarkInspector -/// \brief -/// The pqLookmarkInspector class is used to display the properties -/// of lookmarks in an editable form. -class PQCOMPONENTS_EXPORT pqLookmarkInspector : public QWidget -{ - Q_OBJECT -public: - pqLookmarkInspector(pqLookmarkManagerModel *model, QWidget *parent=0); - virtual ~pqLookmarkInspector(); - - /// hint for sizing this widget - virtual QSize sizeHint() const; - -public slots: - - // Called when the selection has changed in the lookmark browser - // Which widgets are displayed is based on whether there are 0, 1, or more lookmarks currently selected - // selected: names of selected lookmarks - void onLookmarkSelectionChanged(const QStringList &selected); - - // This modifies/deletes the the data at the selected indices of the pqLookmarkBrowserModel - void save(); - void remove(); - - // Invoke the lookmark in the current view - void load(); - - void onModified(); - -signals: - void saved(pqLookmarkModel*); - void modified(); - void loadLookmark(const QString &name); - void removeLookmark(const QString &name); - -protected: - void generatePipelineView(); - void addChildItems(vtkPVXMLElement *elem, QStandardItem *item); - -private: - - // The current selection in the lookmark browser - QList<QString> SelectedLookmarks; - pqLookmarkModel *CurrentLookmark; - pqLookmarkManagerModel *Model; - QStandardItemModel *PipelineModel; - pqLookmarkInspectorForm *Form; ///< Defines the gui layout. -}; - -#endif diff --git a/Qt/Components/pqLookmarkManagerModel.cxx b/Qt/Components/pqLookmarkManagerModel.cxx deleted file mode 100644 index 410f8dad5c..0000000000 --- a/Qt/Components/pqLookmarkManagerModel.cxx +++ /dev/null @@ -1,390 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkManagerModel.cxx - - Copyright (c) 2005-2008 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 "pqLookmarkManagerModel.h" - -// Qt includes. -#include <QList> -#include <QPointer> -#include <QtDebug> -#include <QStringList> - -// ParaView includes. -#include "pqApplicationCore.h" -#include "pqServer.h" -#include "pqSettings.h" -#include "vtkPVXMLElement.h" -#include "vtkPVXMLParser.h" -#include "vtksys/ios/sstream" -#include "pqLookmarkModel.h" - -//----------------------------------------------------------------------------- -class pqLookmarkManagerModelInternal -{ -public: - - typedef QList<QPointer<pqLookmarkModel> > ListOfLookmarks; - ListOfLookmarks Lookmarks; - pqSettings *Settings; -}; - - -//----------------------------------------------------------------------------- -pqLookmarkManagerModel::pqLookmarkManagerModel(QObject* _parent /*=NULL*/): - QObject(_parent) -{ - this->Internal = new pqLookmarkManagerModelInternal(); - - // Restore the contents of the lookmark model from a previous ParaView session, if any. - this->importLookmarksFromSettings(); -} - -//----------------------------------------------------------------------------- -pqLookmarkManagerModel::~pqLookmarkManagerModel() -{ - this->exportAllLookmarksToSettings(); - foreach (pqLookmarkModel* lookmark, this->Internal->Lookmarks) - { - if (lookmark) - { - delete lookmark; - } - } - delete this->Internal; -} - -//----------------------------------------------------------------------------- -QString pqLookmarkManagerModel::getAllLookmarksSerialized() const -{ - QList<pqLookmarkModel*> list; - foreach (pqLookmarkModel* lookmark, this->Internal->Lookmarks) - { - if (lookmark) - { - list.push_back(lookmark); - } - } - return this->getLookmarksSerialized(list); -} - -QString pqLookmarkManagerModel::getLookmarksSerialized(const QList<pqLookmarkModel*> &lookmarks) const -{ - vtkPVXMLElement *root = vtkPVXMLElement::New(); - root->SetName("LookmarkDefinitionFile"); - - //QList<pqLookmarkModel*>::const_iterator iter = lookmarks.begin(); - - foreach (pqLookmarkModel* lookmark, lookmarks) - { - vtkPVXMLElement *lmkElem = vtkPVXMLElement::New(); - lmkElem->SetName("LookmarkDefinition"); - lookmark->saveState(lmkElem); - root->AddNestedElement(lmkElem); - lmkElem->Delete(); - } - - vtksys_ios::ostringstream os; - root->PrintXML(os,vtkIndent(0)); - QString modelState = os.str().c_str(); - root->Delete(); - - return modelState; -} - - -//----------------------------------------------------------------------------- -QList<pqLookmarkModel*> pqLookmarkManagerModel::getAllLookmarks() const -{ - QList<pqLookmarkModel*> list; - foreach (pqLookmarkModel* lookmark, this->Internal->Lookmarks) - { - if (lookmark) - { - list.push_back(lookmark); - } - } - return list; -} - -//----------------------------------------------------------------------------- -pqLookmarkModel* pqLookmarkManagerModel::getLookmark(int index) const -{ - if(index<0 || index>=this->Internal->Lookmarks.size()) - { - return 0; - } - - return this->Internal->Lookmarks[index]; -} - -//----------------------------------------------------------------------------- -pqLookmarkModel* pqLookmarkManagerModel::getLookmark(const QString &name) const -{ - foreach (pqLookmarkModel* lookmark, this->Internal->Lookmarks) - { - if (lookmark && lookmark->getName()==name) - { - return lookmark; - } - } - return 0; -} - -//----------------------------------------------------------------------------- -int pqLookmarkManagerModel::getNumberOfLookmarks() -{ - return this->Internal->Lookmarks.size(); -} - -void pqLookmarkManagerModel::importLookmarksFromSettings() -{ - this->Internal->Settings = pqApplicationCore::instance()->settings(); - QString key = "Lookmarks"; - if(!this->Internal->Settings->contains(key)) - { - return; - } - - QString state = this->Internal->Settings->value(key).toString(); - - if(state.isNull()) - { - return; - } - - vtkPVXMLParser *parser = vtkPVXMLParser::New(); - parser->Parse(state.toAscii().data()); - vtkPVXMLElement *root = parser->GetRootElement(); - if(root) - { - int i = 0; - vtkPVXMLElement *lookmark; - while( (lookmark = root->GetNestedElement(i++)) ) - { - pqLookmarkModel *lmkModel = new pqLookmarkModel(lookmark); - this->addLookmark(lmkModel); - //delete lmkModel; - } - } - - parser->Delete(); -} - -//----------------------------------------------------------------------------- -void pqLookmarkManagerModel::addLookmark(pqLookmarkModel *lookmark) -{ - if(lookmark->getName().isEmpty() || lookmark->getName().isNull()) - { - qDebug() << "Lookmark requires a name."; - return; - } - if(lookmark->getState().isNull() || lookmark->getState().isEmpty()) - { - qDebug() << "Lookmark requires server manager state."; - return; - } - - this->Internal->Lookmarks.push_back(lookmark); - - // listen for modified events - QObject::connect(lookmark,SIGNAL(modified(pqLookmarkModel*)),this,SIGNAL(lookmarkModified(pqLookmarkModel*))); - QObject::connect(lookmark,SIGNAL(nameChanged(const QString&,const QString&)),this,SIGNAL(lookmarkNameChanged(const QString&,const QString&))); - - QString name = lookmark->getName(); - QImage icon = lookmark->getIcon(); - emit this->lookmarkAdded(name,icon); - emit this->lookmarkAdded(lookmark); -} - - -//----------------------------------------------------------------------------- -void pqLookmarkManagerModel::removeLookmark(pqLookmarkModel *lookmark) -{ - QString lmkName = lookmark->getName(); - this->Internal->Lookmarks.removeAll(lookmark); - delete lookmark; - - emit this->lookmarkRemoved(lmkName); -} - - -//----------------------------------------------------------------------------- -void pqLookmarkManagerModel::removeLookmark(const QString &name) -{ - for(int i=0;i<this->Internal->Lookmarks.size();i++) - { - pqLookmarkModel *lookmark = this->Internal->Lookmarks[i]; - if (lookmark->getName()==name) - { - this->removeLookmark(lookmark); - break; - } - } -} - -//----------------------------------------------------------------------------- -void pqLookmarkManagerModel::removeLookmarks(const QList<pqLookmarkModel*> &lookmarks) -{ - QList<pqLookmarkModel*>::const_iterator iter; - QList<QString> names; - for(iter=lookmarks.begin(); iter!=lookmarks.end(); iter++) - { - names.push_back((*iter)->getName()); - } - QList<QString>::iterator iter2; - for(iter2=names.begin(); iter2!=names.end(); iter2++) - { - this->removeLookmark(*iter2); - } -} - -//----------------------------------------------------------------------------- -void pqLookmarkManagerModel::removeAllLookmarks() -{ - // I do this so a signal will be emitted for each removed lookmark - this->removeLookmarks(this->getAllLookmarks()); -} - - - -//----------------------------------------------------------------------------- -void pqLookmarkManagerModel::importLookmarksFromFiles(const QStringList &files) -{ - // Clear the current selection. The new lookmark definitions - // will be selected as they're added. - vtkPVXMLParser* parser = vtkPVXMLParser::New(); - vtkPVXMLElement *lookmark; - vtkPVXMLElement *root; - - QStringList::ConstIterator iter = files.begin(); - for( ; iter != files.end(); ++iter) - { - // Make sure name is unique among lookmarks - parser->SetFileName((*iter).toAscii().data()); - parser->Parse(); - root = parser->GetRootElement(); - if (!root) - { - continue; - } - unsigned int numElems = root->GetNumberOfNestedElements(); - for (unsigned int i=0; i<numElems; i++) - { - vtkPVXMLElement* currentElement = root->GetNestedElement(i); - if (currentElement->GetName() && - strcmp(currentElement->GetName(), "LookmarkDefinition") == 0) - { - const char* name = currentElement->GetAttribute("Name"); - if (name) - { - QString newname = this->getUnusedLookmarkName(QString(name)); - currentElement->SetAttribute("Name",newname.toAscii().data()); - } - } - } - - int j = 0; - while( (lookmark = root->GetNestedElement(j++)) ) - { - this->addLookmark(new pqLookmarkModel(lookmark)); - } - } - parser->Delete(); -} - - - -//---------------------------------------------------------------------------- -QString pqLookmarkManagerModel::getUnusedLookmarkName(const QString &name) -{ - QString tempName = name; - int counter = 1; - while(this->getLookmark(tempName)) - { - tempName = QString(name + " (" + QString::number(counter) + ")"); - counter++; - } - - return tempName; -} - - -void pqLookmarkManagerModel::exportAllLookmarksToSettings() -{ - // Store the contents of the lookmarks browser for a subsequent ParaView session - //pqSettings* settings = pqApplicationCore::instance()->settings(); - this->Internal->Settings->setValue("Lookmarks", this->getAllLookmarksSerialized()); -} - - -void pqLookmarkManagerModel::exportAllLookmarksToFiles(const QStringList &files) -{ - QStringList::ConstIterator jter = files.begin(); - for( ; jter != files.end(); ++jter) - { - ofstream os((*jter).toAscii().data(), ios::out); - os << this->getAllLookmarksSerialized().toAscii().data(); - } -} - -void pqLookmarkManagerModel::exportLookmarksToFiles(const QList<pqLookmarkModel*> &lookmarks, const QStringList &files) -{ - QStringList::ConstIterator jter = files.begin(); - for( ; jter != files.end(); ++jter) - { - ofstream os((*jter).toAscii().data(), ios::out); - os << this->getLookmarksSerialized(lookmarks).toAscii().data(); - } -} - -void pqLookmarkManagerModel::loadLookmark(pqServer *server, pqView *view, - QList<pqPipelineSource*> *sources, pqLookmarkModel *lookmark) -{ - if(!server || !lookmark) - { - return; - } - - this->loadLookmark(server, view, sources, lookmark->getName()); -} - -void pqLookmarkManagerModel::loadLookmark(pqServer *server, pqView *view, - QList<pqPipelineSource*> *sources, const QString &name) -{ - foreach (pqLookmarkModel* tempLmk, this->Internal->Lookmarks) - { - if (tempLmk->getName()==name) - { - tempLmk->load(server,sources,view); - emit this->lookmarkLoaded(tempLmk); - } - } -} diff --git a/Qt/Components/pqLookmarkManagerModel.h b/Qt/Components/pqLookmarkManagerModel.h deleted file mode 100644 index 11d292fa65..0000000000 --- a/Qt/Components/pqLookmarkManagerModel.h +++ /dev/null @@ -1,144 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkManagerModel.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ -#ifndef __pqLookmarkManagerModel_h -#define __pqLookmarkManagerModel_h - -#include "pqComponentsExport.h" -#include <QObject> - -class pqView; -class pqServer; -class pqLookmarkManagerModelInternal; -class pqLookmarkManagerModelItem; -class pqLookmarkModel; -class QImage; -class pqPipelineSource; - -/// \class pqLookmarkManagerModel -/// \brief -/// The pqLookmarkManagerModel class performs the book-keeping and storage of lookmarks. Any model of lookmarks should be built on top of this representation. -/// -/// Lookmarks can be imported or exported in Lookmark Definition Files. This is an XML representation of the set of lookmark(s). Here is the format: -/// <LookmarkDefinitionFile> -/// <LookmarkDefinition name="My Lookmark" Comments="Here are a few thoughts..." RestoreData="1" RestoreCamera="1"> -/// <Icon value="KDJFLSKDJFLJDLSKFJLDSKJFLSDJFLSDKJFLKDSJFLSDKFLSL.../> -/// <Pipeline value="KDJFLSKDJFLJDLSKFJLDSKJFLSDJFLSDKJFLKDSJFLSDKFLSL.../> -/// <ServerManagerState> -/// .... -/// </ServerManagerState> -/// </LookmarkDefinition> -/// .... -/// </LookmarkDefinitionFile> -/// -/// This same format is used to store lookmarks between sessions of ParaView in the application settings. -/// -/// TO DO: Add support for hierarchicaly storage of lookmarks. - -class PQCOMPONENTS_EXPORT pqLookmarkManagerModel : public QObject -{ - Q_OBJECT -public: - pqLookmarkManagerModel(QObject* parent=NULL); - virtual ~pqLookmarkManagerModel(); - - // Return the number of lookmarks in the list - int getNumberOfLookmarks(); - - // Get the lookmark at the given index in the list - pqLookmarkModel* getLookmark(int index) const; - // Get the lookmark with the given name (all lookmarks have unique names) - pqLookmarkModel* getLookmark(const QString &name) const; - // Get a list of all lookmarks - QList<pqLookmarkModel*> getAllLookmarks() const; - // Get an XML representation of the collection of lookmarks - QString getAllLookmarksSerialized() const; - // Get an XML representation of the given set of lookmarks - QString getLookmarksSerialized(const QList<pqLookmarkModel*> &lookmarks) const; - -public slots: - - // Add the given lookmark to collection - void addLookmark(pqLookmarkModel *lookmark); - - // Remove the lookmark with the given name (all lookmarks have unique names) - void removeLookmark(const QString &name); - // Remove the lookmark from the collection - void removeLookmark(pqLookmarkModel *lookmark); - // Remove the lookmarks in the given list from the collection - void removeLookmarks(const QList<pqLookmarkModel*> &lookmarks); - // Remove all stored lookmarks - void removeAllLookmarks(); - - // Parse the given XML-formatted files into lookmark objects and add them to the collection - void importLookmarksFromFiles(const QStringList &files); - // Parse the XML-formatted string in pqSettings into lookmark objects and add them to the collection. - // This is done on startup to populate the collection from the lookmarks in the last session. - void importLookmarksFromSettings(); - - // Save the entire collection to the given files as XML - void exportAllLookmarksToFiles(const QStringList &files); - // Save the lookmarks in the given list to the given files as XML - void exportLookmarksToFiles(const QList<pqLookmarkModel*> &lookmarks, - const QStringList &files); - // Save the entire collection of lookmarks to pqSettings. This is done - // automatically when the application closes - void exportAllLookmarksToSettings(); - - // Load the state of the lookmark with the given name, on the given server, - // in the given view - void loadLookmark(pqServer *server, pqView* dest, - QList<pqPipelineSource*> *sources, const QString &name); - - // Load the state of the given lookmark, on the given server, - // in the given view - void loadLookmark(pqServer *server, pqView* dest, - QList<pqPipelineSource*> *sources, pqLookmarkModel *lmk); - -signals: - - void lookmarkLoaded(pqLookmarkModel*); - // Some views (the toolbar) only need the name and icon of the lookmark rather than the lookmark object itself - void lookmarkAdded(const QString &name, const QImage &icon); - void lookmarkAdded(pqLookmarkModel*); - void lookmarkRemoved(const QString &name); - void lookmarkModified(pqLookmarkModel*); - void lookmarkNameChanged(const QString &oldName,const QString &newName); - -protected: - QString getUnusedLookmarkName(const QString &name); - -private: - pqLookmarkManagerModelInternal* Internal; -}; - -#endif - diff --git a/Qt/Components/pqLookmarkModel.cxx b/Qt/Components/pqLookmarkModel.cxx deleted file mode 100644 index fdb6b7768f..0000000000 --- a/Qt/Components/pqLookmarkModel.cxx +++ /dev/null @@ -1,350 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkModel.cxx - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqLookmarkModel.cxx -/// \date 4/14/2006 - -#include "pqLookmarkModel.h" - -// ParaView includes. -#include "vtkPVXMLElement.h" -#include "vtkPVXMLParser.h" -#include "vtkSmartPointer.h" -#include "vtkSMPQStateLoader.h" -#include "vtkSMProxyLocator.h" -#include "vtkSMStateLoader.h" -#include "vtksys/ios/sstream" - -#include "pqApplicationCore.h" -#include "pqRepresentation.h" -#include "pqLookmarkStateLoader.h" -#include "pqObjectBuilder.h" -#include "pqPipelineFilter.h" -#include "pqRenderView.h" -#include "pqServer.h" - -#include <QBuffer> -#include <QByteArray> -#include <QImage> -#include <QPixmap> -#include <QtDebug> - -//----------------------------------------------------------------------------- -pqLookmarkModel::pqLookmarkModel(QString name, const QString &state, QObject* _parent /*=null*/) - : QObject(_parent) -{ - this->Name = name; - this->RestoreTime = false; - this->RestoreCamera = false; - this->RestoreData = false; - this->State = state; - this->PipelineHierarchy = 0; -} - -pqLookmarkModel::pqLookmarkModel(const pqLookmarkModel &other, - QObject *parentObject) - : QObject(parentObject) -{ - vtkPVXMLElement *root = vtkPVXMLElement::New(); - other.saveState(root); - this->initializeState(root); - root->Delete(); -} - -pqLookmarkModel::pqLookmarkModel(vtkPVXMLElement *lookmark, - QObject *parentObject) - : QObject(parentObject) -{ - this->initializeState(lookmark); -} - -void pqLookmarkModel::initializeState(vtkPVXMLElement *lookmark) -{ - // REQUIRED PROPERTIES: name and state - - const char *tempName = lookmark->GetAttribute("Name"); - this->Name = tempName; - - vtkPVXMLElement *stateRoot = lookmark->FindNestedElementByName("ServerManagerState"); - if(!stateRoot) - { - return; - } - // convert state xml to a qstring - vtksys_ios::ostringstream stateStream; - stateRoot->PrintXML(stateStream, vtkIndent(0)); - stateStream << ends; - this->State = stateStream.str().c_str(); - - // OPTIONAL PROPERTIES: - - this->PipelineHierarchy = lookmark->FindNestedElementByName("PipelineHierarchy"); - - int val; - if(lookmark->GetScalarAttribute("RestoreData",&val)) - this->RestoreData = val; - if(lookmark->GetScalarAttribute("RestoreCamera",&val)) - this->RestoreCamera = val; - if(lookmark->GetScalarAttribute("RestoreTime",&val)) - this->RestoreTime = val; - - const char *tempDesc = lookmark->GetAttribute("Comments"); - this->Description = tempDesc; - - vtkPVXMLElement *iconElement = lookmark->FindNestedElementByName("Icon"); - if(iconElement) - { - QByteArray array(iconElement->GetAttribute("Value")); - this->Icon.loadFromData(QByteArray::fromBase64(array),"PNG"); - } - - emit this->modified(this); -} - - -QString pqLookmarkModel::getState() const -{ - return this->State; -} - -vtkPVXMLElement* pqLookmarkModel::getPipelineHierarchy() const -{ - if(this->PipelineHierarchy) - { - return this->PipelineHierarchy; - } - return 0; -} - - -void pqLookmarkModel::setName(QString newName) -{ - QString oldName = this->Name; - - this->Name = newName; - - if(QString::compare(oldName,newName) != 0) - { - emit this->nameChanged(oldName,newName); - emit this->modified(this); - } -} - -void pqLookmarkModel::setState(QString state) -{ - this->State = state; - emit this->modified(this); -} - -void pqLookmarkModel::setRestoreTimeFlag(bool state) -{ - this->RestoreTime = state; - emit this->modified(this); -} - - -void pqLookmarkModel::setRestoreDataFlag(bool state) -{ - this->RestoreData = state; - emit this->modified(this); -} - -void pqLookmarkModel::setRestoreCameraFlag(bool state) -{ - this->RestoreCamera = state; - emit this->modified(this); -} - - -void pqLookmarkModel::setDescription(QString text) -{ - this->Description = text; - emit this->modified(this); -} - - -void pqLookmarkModel::setIcon(QImage icon) -{ - this->Icon = icon; - emit this->modified(this); -} - -void pqLookmarkModel::setPipelineHierarchy(vtkPVXMLElement *pipeline) -{ - this->PipelineHierarchy = pipeline; - emit this->modified(this); -} - - -void pqLookmarkModel::load( - pqServer *server, - QList<pqPipelineSource*> *sources, - pqView *view, - vtkSMStateLoader *arg_loader) -{ - if(!server) - { - qDebug() << "Cannot load lookmark without an active server"; - return; - } - - if(!view) - { - qDebug() << "Cannot load lookmark without a valid view"; - return; - } - - // Now deal with the different types of possible state loaders: - vtkSmartPointer<vtkSMStateLoader> loader = arg_loader; - if (!loader) - { - loader.TakeReference(pqLookmarkStateLoader::New()); - } - - bool resetCamera = false; - // remember to reset the camera later if the view has no displays visible - if(view->getNumberOfVisibleRepresentations()==0 && !this->RestoreCamera) - { - resetCamera = true; - } - - - // Now turn off visibility of all displays currently added to view. - // We do this before the lookmark is loaded so that other sources - // do not obstruct the view of the lookmark sources. - QList<pqRepresentation*> displays = view->getRepresentations(); - for(int i=0; i<displays.count(); i++) - { - pqRepresentation *disp = displays[i]; - disp->setVisible(0); - } - - // If this is a lookmark of a single view, the active view needs to be - // added to the beginning of the loader's preferred view list to ensure - // it is used before any others - vtkSMPQStateLoader* smpqLoader = vtkSMPQStateLoader::SafeDownCast(loader); - if (smpqLoader) - { - smpqLoader->AddPreferredView(view->getViewProxy()); - } - - // set some parameters specific to the lookmark state loader - pqLookmarkStateLoader *pqLoader = pqLookmarkStateLoader::SafeDownCast(loader); - if(pqLoader) - { - pqLoader->SetPreferredSources(sources); - pqLoader->SetRestoreCameraFlag(this->RestoreCamera); - pqLoader->SetRestoreTimeFlag(this->RestoreTime); - pqLoader->SetPipelineHierarchy(this->PipelineHierarchy); - pqLoader->SetTimeKeeper(server->getTimeKeeper()); - pqLoader->SetView(view); - } - - // convert the stored state from a qstring to a vtkPVXMLElement - vtkPVXMLParser *parser = vtkPVXMLParser::New(); - parser->Parse(this->State.toAscii().data()); - vtkPVXMLElement *stateElement = parser->GetRootElement(); - if(!stateElement) - { - qDebug() << "Could not parse lookmark's state."; - parser->Delete(); - return; - } - - pqLoader->GetProxyLocator()->SetConnectionID(server->GetConnectionID()); - pqLoader->LoadState(stateElement); - - // If this is a render module with no previous visible representations - // and RestoreCamera is turned off, reset the camera. - pqRenderView* renModule = qobject_cast<pqRenderView*>(view); - if(resetCamera && renModule) - { - renModule->resetCamera(); - renModule->render(); - } - - parser->Delete(); - emit this->loaded(this); -} - - - -void pqLookmarkModel::saveState(vtkPVXMLElement *lookmark) const -{ - lookmark->AddAttribute("Name", this->getName().toAscii().constData()); - lookmark->AddAttribute("RestoreData", this->getRestoreDataFlag()); - lookmark->AddAttribute("RestoreCamera", this->getRestoreCameraFlag()); - lookmark->AddAttribute("RestoreTime", this->getRestoreTimeFlag()); - - // convert the stored state from a qstring to a vtkPVXMLElement - vtkPVXMLParser *parser = vtkPVXMLParser::New(); - parser->Parse(this->State.toAscii().data()); - vtkPVXMLElement *stateElement = parser->GetRootElement(); - if(!stateElement) - { - qDebug() << "Could not parse lookmark's state."; - parser->Delete(); - return; - } - - lookmark->AddNestedElement(stateElement); - - if(this->PipelineHierarchy) - { - lookmark->AddNestedElement(this->PipelineHierarchy); - } - - if(!this->Description.isEmpty() && !this->Description.isNull()) - { - lookmark->AddAttribute("Comments", this->getDescription().toAscii().constData()); - } - - // Icon - if(!this->Icon.isNull()) - { - QByteArray ba; - QBuffer buffer(&ba); - buffer.open(QIODevice::WriteOnly); - QImage image = this->getIcon(); - image.save(&buffer, "PNG"); // writes image into ba in PNG format - ba = ba.toBase64(); - vtkPVXMLElement *iconElement = vtkPVXMLElement::New(); - iconElement->SetName("Icon"); - iconElement->AddAttribute("Value",ba.constData()); - lookmark->AddNestedElement(iconElement); - iconElement->Delete(); - } - - parser->Delete(); -} - - diff --git a/Qt/Components/pqLookmarkModel.h b/Qt/Components/pqLookmarkModel.h deleted file mode 100644 index b559fc5b6f..0000000000 --- a/Qt/Components/pqLookmarkModel.h +++ /dev/null @@ -1,169 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkModel.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqLookmarkModel.h - -#ifndef _pqLookmarkModel_h -#define _pqLookmarkModel_h - -#include "pqComponentsExport.h" -#include <QObject> -#include <QImage> -#include "vtkSmartPointer.h" - -class vtkSMStateLoader; -class pqServer; -class pqView; -class vtkPVXMLElement; -class pqPipelineSource; - -/// \class pqLookmarkModel -/// \brief -/// The pqLookmarkModel class stores the metadata of a lookmark including: name, -/// server manager state, description, an icon, a preview of the pipeline, and flags that control how it is loaded. -/// -/// Lookmarks can be saved to and initialized from XML. The XML representation of a lookmark is as follows: -/// -/// <LookmarkDefinition name="My Lookmark" Comments="Here are a few thoughts..." RestoreData="1" RestoreCamera="1"> -/// <Icon value="KDJFLSKDJFLJDLSKFJLDSKJFLSDJFLSDKJFLKDSJFLSDKFLSL.../> -/// <Pipeline value="KDJFLSKDJFLJDLSKFJLDSKJFLSDJFLSDKJFLKDSJFLSDKFLSL.../> -/// <ServerManagerState> -/// .... -/// </ServerManagerState> -/// </LookmarkDefinition> - -class PQCOMPONENTS_EXPORT pqLookmarkModel : public QObject -{ - Q_OBJECT - -public: - - // Only a name and server manager state are required to create a lookmark - //pqLookmarkModel(QString name, QString state, QObject* parent=NULL); - pqLookmarkModel(QString name, const QString &state, QObject* parent=NULL); - pqLookmarkModel(const pqLookmarkModel &other, QObject* parent=NULL); - // Alternatively, a lookmark can be initialized from a <LookmarkDefinition> XML element - pqLookmarkModel(vtkPVXMLElement *lmkState, QObject* parent=NULL); - virtual ~pqLookmarkModel(){}; - - // Access Methods: - - // The name of a lookmark is unique among all lookmarks in the application - QString getName()const {return this->Name;}; - - // Get the server manager state stored as a qstring - QString getState() const; - - // When this flag is set, the state of any readers and root sources of the pipeline will be loaded, - // otherwise the state loader will try to use existing ones - bool getRestoreDataFlag()const {return this->RestoreData;}; - - // When this flag is set, the camera state in this lookmark's server manager state will override paraview's current camera, - // Otherwise the current camera properties will remain unchanged when this lookmark is loaded. - bool getRestoreCameraFlag()const {return this->RestoreCamera;}; - - bool getRestoreTimeFlag()const {return this->RestoreTime;}; - - // User-defined text can be stored along with the lookmark - QString getDescription()const {return this->Description;}; - - // (Optional) screenshot of the view(s) when the lookmark was created - const QImage& getIcon()const {return this->Icon;}; - - // (Optional) snapshot of the pipeline at the time the lookmark was created - //const QImage& getPipelinePreview(){return this->Pipeline;}; - //QString getPipelineHierarchy(){return this->Pipeline;}; - vtkPVXMLElement* getPipelineHierarchy() const; - - // Save the lookmark's data to the given lookmark element - void saveState(vtkPVXMLElement *lookmarkElement) const; - - // allow lookmarks of lookmarks? if this lookmark is a multi-view, return lookmarks for individual views? - // QList<pqLookmarkModel *> getLookmarkItems(); - -public slots: - - // For multi-view, do we remove current pqGenericViewModules before loading? - // Is there a case where the user would just want to load the lookmark state without specifying a view to display it in? - - // Display this lookmark in the given view, on the given server, using the given state loader - // Setting the default view only makes sense if this lookmark is made up of a single view because - // otherwise existing views will not be reused - virtual void load(pqServer *server,QList<pqPipelineSource*> *sources, - pqView *view=NULL, vtkSMStateLoader *loader=NULL); - - // The name of a lookmark is unique among all lookmarks in the application - void setName(QString name); - - // Set the server manager state stored as an xml tree - void setState(QString state); - - // When this flag is set, the state of any readers and root sources of the pipeline will be loaded, - // otherwise the state loader will try to use existing ones - void setRestoreDataFlag(bool state); - - // When this flag is set, the camera state in this lookmark's server manager state will override paraview's current camera, - // Otherwise the current camera properties will remain unchanged when this lookmark is loaded. - void setRestoreCameraFlag(bool state); - - // When this is set, the time value of the view stored in - // the lookmark overrides the current one when loaded - void setRestoreTimeFlag(bool state); - - // User-defined text can be stored along with the lookmark - void setDescription(QString text); - - // (Optional) screenshot of the view(s) when the lookmark was created - void setIcon(const QImage icon); - - // (Optional) snapshot of the pipeline at the time the lookmark was created - void setPipelineHierarchy(vtkPVXMLElement *pipeline); - -signals: - void modified(pqLookmarkModel*); - void nameChanged(const QString &oldName, const QString &newName); - void loaded(pqLookmarkModel*); - -private: - void initializeState(vtkPVXMLElement *state); - - QString Name; - QString State; - bool RestoreData; - bool RestoreCamera; - bool RestoreTime; - QString Description; - QImage Icon; - vtkSmartPointer<vtkPVXMLElement> PipelineHierarchy; -}; - -#endif diff --git a/Qt/Components/pqLookmarkSourceDialog.cxx b/Qt/Components/pqLookmarkSourceDialog.cxx deleted file mode 100644 index d85a2b82d4..0000000000 --- a/Qt/Components/pqLookmarkSourceDialog.cxx +++ /dev/null @@ -1,255 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkSourceDialog.cxx - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqLookmarkSourceDialog.cxx -/// \date 12/5/2006 - -#include "pqLookmarkSourceDialog.h" - -#include "pqFlatTreeView.h" -#include "pqPipelineFilter.h" -#include "pqPipelineModel.h" -#include "pqServer.h" -#include "pqServerManagerModel.h" -#include "pqApplicationCore.h" - -#include <QFrame> -#include <QGridLayout> -#include <QHeaderView> -#include <QHBoxLayout> -#include <QPushButton> -#include <QLabel> -#include <QList> -#include <QScrollArea> -#include <QSpacerItem> -#include <QString> -#include <QStandardItem> -#include <QStandardItemModel> -#include <QFont> - - -//---------------------------------------------------------------------------- -pqLookmarkSourceDialog::pqLookmarkSourceDialog(QStandardItemModel *lookmarkModel, pqPipelineModel *pipelineModel, QWidget *widgetParent) - : QDialog(widgetParent) -{ - this->LookmarkPipelineModel = 0; - this->CurrentPipelineModel = 0; - this->CurrentPipelineView = 0; - this->CurrentLookmarkItem = 0; - this->LookmarkPipelineView = 0; - this->SelectedSource = 0; - this->CurrentPipelineViewLabel = 0; - this->OkButton = 0; - - // Set up the base gui elements. - QGridLayout *baseLayout = new QGridLayout(this); - - // Add labels for the dialog areas. - this->CurrentPipelineViewLabel = new QLabel("Lookmark Pipeline Preview:", this); - baseLayout->addWidget(this->CurrentPipelineViewLabel, 0, 0); - QFrame *divider = new QFrame(this); - divider->setFrameShadow(QFrame::Sunken); - divider->setFrameShape(QFrame::VLine); - baseLayout->addWidget(divider, 0, 1, 3, 1); - baseLayout->addWidget(new QLabel("Select Source: ", this), 0, 2); - - // Create the preview pane and add it to the right. - this->LookmarkPipelineView = new pqFlatTreeView(this); - this->LookmarkPipelineView->setObjectName("Lookmark Pipeline"); - this->LookmarkPipelineView->getHeader()->hide(); - this->LookmarkPipelineView->setMaximumWidth(170); - this->LookmarkPipelineView->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); - this->LookmarkPipelineView->setSelectionMode(pqFlatTreeView::NoSelection); - baseLayout->addWidget(this->LookmarkPipelineView, 1, 0, 2, 1); - - // Create a flat tree view and put it in the middle. - this->CurrentPipelineView = new pqFlatTreeView(this); - this->CurrentPipelineView->setObjectName("Current Pipeline"); - this->CurrentPipelineView->getHeader()->hide(); - this->CurrentPipelineView->setMaximumWidth(170); - this->CurrentPipelineView->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); - this->CurrentPipelineView->setSelectionMode(pqFlatTreeView::SingleSelection); - baseLayout->addWidget(this->CurrentPipelineView, 1, 2, 2, 1); - - // Add the separator and the dialog buttons. - divider = new QFrame(this); - divider->setFrameShadow(QFrame::Sunken); - divider->setFrameShape(QFrame::HLine); - baseLayout->addWidget(divider, 3, 0, 1, 4); - - this->OkButton = new QPushButton("&OK", this); - this->OkButton->setObjectName("OkButton"); - this->OkButton->setDefault(true); - QHBoxLayout *buttonLayout = new QHBoxLayout(); - baseLayout->addLayout(buttonLayout, 4, 0, 1, 4); - buttonLayout->addStretch(); - buttonLayout->addWidget(this->OkButton); - - // Connect the dialog buttons to the appropriate action. - this->connect(this->OkButton, SIGNAL(clicked()), this, SLOT(accept())); - - this->setWindowTitle("Lookmark Source Chooser"); - - // Set up the views using the given models - this->setModels(lookmarkModel,pipelineModel); -} - -void pqLookmarkSourceDialog::setLookmarkSource(QStandardItem *item) -{ - this->CurrentLookmarkItem = item; - - // set the given item's text to bold and the rest to normal - for(int i=0; i<this->LookmarkPipelineModel->rowCount();i++) - { - QFont srcFont = this->LookmarkPipelineModel->item(i)->font(); - QString srcText = this->LookmarkPipelineModel->item(i)->text(); - if(item == this->LookmarkPipelineModel->item(i)) - { - srcFont.setBold(true); - } - else - { - srcFont.setBold(false); - } - this->LookmarkPipelineModel->item(i)->setFont(srcFont); - } -} - - -void pqLookmarkSourceDialog::setModels(QStandardItemModel *lmkModel, pqPipelineModel *currentModel) -{ - if(this->LookmarkPipelineModel == lmkModel && this->CurrentPipelineModel == currentModel) - { - return; - } - - // Clean up the selection pipeline. - if(this->CurrentPipelineModel) - { - this->CurrentPipelineView->setModel(0); - delete this->CurrentPipelineModel; - this->CurrentPipelineModel = 0; - } - - if(this->LookmarkPipelineModel) - { - this->LookmarkPipelineView->setModel(0); - delete this->LookmarkPipelineModel; - this->LookmarkPipelineModel = 0; - } - - // Save the pipeline model pointer. If the model is null, don't save - // the filter. - this->LookmarkPipelineModel = lmkModel; - - // Add the model to the tree view. - this->LookmarkPipelineView->setModel(this->LookmarkPipelineModel); - if(this->LookmarkPipelineModel) - { - // Hide all but the first column. - int columns = this->LookmarkPipelineModel->columnCount(); - for(int i = 1; i < columns; ++i) - { - this->LookmarkPipelineView->getHeader()->hideSection(i); - } - } - this->LookmarkPipelineView->expandAll(); - - this->CurrentPipelineModel = currentModel; - - // Add the model to the tree view. - this->CurrentPipelineView->setModel(this->CurrentPipelineModel); - if(this->CurrentPipelineModel) - { - // Hide all but the first column. - int columns = this->CurrentPipelineModel->columnCount(); - for(int i = 1; i < columns; ++i) - { - this->CurrentPipelineView->getHeader()->hideSection(i); - } - - this->CurrentPipelineModel->setEditable(false); - this->connect(this->CurrentPipelineModel, SIGNAL(firstChildAdded(const QModelIndex &)), - this->CurrentPipelineView, SLOT(expand(const QModelIndex &))); - } - this->CurrentPipelineView->expandAll(); - - // Find and select an initial source (so something is selected) - pqServerManagerModel *model = pqApplicationCore::instance()->getServerManagerModel(); - QList<pqPipelineSource*> sources = model->findItems<pqPipelineSource*>(); - foreach (pqPipelineSource* src, sources) - { - if(!qobject_cast<pqPipelineFilter*>(src)) - { - this->CurrentPipelineView->setCurrentIndex(this->CurrentPipelineModel->getIndexFor(src)); - this->SelectedSource = src; - break; - } - } - - // Listen to the new selection model. - this->connect(this->CurrentPipelineView->getSelectionModel(), - SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), - this, SLOT(selectSource())); - - this->setWindowTitle("Lookmark Source Chooser"); -} - -void pqLookmarkSourceDialog::selectSource() -{ - // If the selected item is a server, do not set to current: - QModelIndexList indices = - this->CurrentPipelineView->getSelectionModel()->selectedIndexes(); - if(indices.size()==0) - { - return; - } - - pqServer *server = dynamic_cast<pqServer*>( - this->CurrentPipelineModel->getItemFor(indices.at(0))); - - //pqPipelineFilter *filter = dynamic_cast<pqPipelineFilter*>(this->CurrentPipelineModel->getItemFor(selected.indexes().at(0))); - pqPipelineSource *src = dynamic_cast<pqPipelineSource*>( - this->CurrentPipelineModel->getItemFor(indices.at(0))); - if(server) // || filter) - { - if(this->SelectedSource) - { - this->CurrentPipelineView->setCurrentIndex(this->CurrentPipelineModel->getIndexFor(this->SelectedSource)); - } - } - else if(src) - { - this->SelectedSource = src; - } -} - diff --git a/Qt/Components/pqLookmarkSourceDialog.h b/Qt/Components/pqLookmarkSourceDialog.h deleted file mode 100644 index 11ff0018a8..0000000000 --- a/Qt/Components/pqLookmarkSourceDialog.h +++ /dev/null @@ -1,93 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkSourceDialog.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqLookmarkSourceDialog.h -/// \date 12/5/2006 - -#ifndef _pqLookmarkSourceDialog_h -#define _pqLookmarkSourceDialog_h - - -#include "pqComponentsExport.h" -#include <QDialog> - -class pqFlatTreeView; -class pqPipelineBrowserStateManager; -class pqPipelineSource; -class pqPipelineModel; -class QGroupBox; -class QItemSelection; -class QLabel; -class QPushButton; -class QString; -class QStringList; -class QStandardItemModel; -class QStandardItem; - -/// \class pqLookmarkSourceDialog -/// \brief -/// Select which non-filter, non-server, pipeline source to apply a lookmark to. -/// - -class PQCOMPONENTS_EXPORT pqLookmarkSourceDialog : public QDialog -{ - Q_OBJECT - -public: - pqLookmarkSourceDialog(QStandardItemModel *lookmarkModel, pqPipelineModel *pipelineModel, QWidget *parent=0); - - // Tell it which source in the lookmark pipeline model is being replaced. item's text gets set to bold to distinguish it from the rest. - // Should be called before exec(). - void setLookmarkSource(QStandardItem *item); - - // Called after the dialog is accepted to get the source the user selected - pqPipelineSource* getSelectedSource(){return this->SelectedSource;}; - -private slots: - void selectSource(); - -protected: - void setModels(QStandardItemModel *lookmarkModel, pqPipelineModel *pipelineModel); - -private: - QStandardItemModel *LookmarkPipelineModel; - pqPipelineModel *CurrentPipelineModel; - pqFlatTreeView *CurrentPipelineView; - pqFlatTreeView *LookmarkPipelineView; - QStandardItem *CurrentLookmarkItem; - pqPipelineSource *SelectedSource; - QLabel *CurrentPipelineViewLabel; - QPushButton *OkButton; - -}; - -#endif diff --git a/Qt/Components/pqLookmarkStateLoader.cxx b/Qt/Components/pqLookmarkStateLoader.cxx deleted file mode 100644 index 2c46c8f755..0000000000 --- a/Qt/Components/pqLookmarkStateLoader.cxx +++ /dev/null @@ -1,628 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkStateLoader.cxx - - Copyright (c) 2005-2008 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 "pqLookmarkStateLoader.h" - -#include "vtkObjectFactory.h" -#include "vtkPVXMLElement.h" -#include "vtkSMProxy.h" -#include "vtkSMProxyManager.h" -#include "vtkSmartPointer.h" - -#include <QPointer> -#include <QList> -#include <QMap> -#include <QString> -#include <QMessageBox> -#include <QStandardItemModel> -#include <QStandardItem> - -#include "pqPipelineSource.h" -#include "pqPipelineFilter.h" -#include "pqApplicationCore.h" -#include "pqServerManagerSelectionModel.h" -#include "pqServerManagerModel.h" -#include "pqLookmarkSourceDialog.h" -#include "pqPipelineModel.h" -#include "pqTimeKeeper.h" -#include "pqView.h" -#include "pqDataRepresentation.h" - -//----------------------------------------------------------------------------- -class pqLookmarkStateLoaderInternal -{ -public: - - pqLookmarkStateLoaderInternal() - { - this->NumberOfLookmarkSources = 0; - this->PreferredSources = 0; - this->PipelineModel = 0; - this->RestoreCamera = false; - this->RestoreTime = false; - this->TimeKeeper = 0; - this->SourceProxyCollectionLoaded = false; - this->View = NULL; - - pqServerManagerModel *model = - pqApplicationCore::instance()->getServerManagerModel(); - this->PipelineModel = new pqPipelineModel(*model); - } - - ~pqLookmarkStateLoaderInternal() - { - delete this->PipelineModel; - } - - int CurrentSourceID; - int CurrentDisplayID; - QMap<int, pqPipelineSource*> LookmarkSourceIdToExistingSourceMap; - QMap<int, int> DisplayIdToSourceIdMap; - QList<pqPipelineSource*> *PreferredSources; - QList<QStandardItem*> LookmarkSources; - int NumberOfLookmarkSources; - QStandardItemModel LookmarkPipelineModel; - pqPipelineModel *PipelineModel; - bool RestoreCamera; - bool RestoreTime; - pqTimeKeeper *TimeKeeper; - vtkPVXMLElement *RootElement; - QStringList IdsOfProxyElementsToIgnore; - bool SourceProxyCollectionLoaded; - pqView *View; -}; - -//----------------------------------------------------------------------------- - -vtkStandardNewMacro(pqLookmarkStateLoader); -vtkCxxRevisionMacro(pqLookmarkStateLoader, "1.25"); -//----------------------------------------------------------------------------- -pqLookmarkStateLoader::pqLookmarkStateLoader() -{ - this->Internal = new pqLookmarkStateLoaderInternal; -} - -//----------------------------------------------------------------------------- -pqLookmarkStateLoader::~pqLookmarkStateLoader() -{ - delete this->Internal; -} - -//----------------------------------------------------------------------------- -void pqLookmarkStateLoader::SetView(pqView *lmkView) -{ - this->Internal->View = lmkView; -} - -//----------------------------------------------------------------------------- -void pqLookmarkStateLoader::SetRestoreCameraFlag(bool state) -{ - this->Internal->RestoreCamera = state; -} - -//----------------------------------------------------------------------------- -void pqLookmarkStateLoader::SetRestoreTimeFlag(bool state) -{ - this->Internal->RestoreTime = state; -} - -//----------------------------------------------------------------------------- -void pqLookmarkStateLoader::SetTimeKeeper(pqTimeKeeper *timekeeper) -{ - this->Internal->TimeKeeper = timekeeper; -} - -//----------------------------------------------------------------------------- -void pqLookmarkStateLoader::SetPreferredSources(QList<pqPipelineSource*> *sources) -{ - if(this->Internal->PreferredSources) - { - this->Internal->PreferredSources->clear(); - } - - this->Internal->PreferredSources = sources; -} - - -//----------------------------------------------------------------------------- -void pqLookmarkStateLoader::SetPipelineHierarchy(vtkPVXMLElement *lookmarkPipeline) -{ - // Determine the number of sources in the lookmmark's state from the pipeline hierarchy - int numSources = 0; - for(unsigned int i=0; i<lookmarkPipeline->GetNumberOfNestedElements(); i++) - { - vtkPVXMLElement *childElem = lookmarkPipeline->GetNestedElement(i); - if(strcmp(childElem->GetName(),"Source")==0) - { - numSources++; - } - } - - this->Internal->NumberOfLookmarkSources = numSources; - - // Set up the pipeline model for this lookmak's state - this->Internal->LookmarkSources.clear(); - this->AddChildItems(lookmarkPipeline,this->Internal->LookmarkPipelineModel.invisibleRootItem()); -} - -void pqLookmarkStateLoader::AddChildItems(vtkPVXMLElement *elem, QStandardItem *item) -{ - for(unsigned int i=0; i<elem->GetNumberOfNestedElements(); i++) - { - vtkPVXMLElement *childElem = elem->GetNestedElement(i); - QStandardItem *childItem = new QStandardItem( - QIcon(":/pqWidgets/Icons/pqBundle32.png"), - QString(childElem->GetAttribute("Name"))); - item->setChild(i,0,childItem); - // Store the model items of sources for later - if(strcmp(childElem->GetName(),"Source")==0) - { - this->Internal->LookmarkSources.push_back(childItem); - } - // recurse... - this->AddChildItems(childElem,childItem); - } -} - - -//--------------------------------------------------------------------------- -int pqLookmarkStateLoader::LoadStateInternal(vtkPVXMLElement* rootElement) -{ - pqServerManagerModel *model = pqApplicationCore::instance()->getServerManagerModel(); - - if (!rootElement) - { - vtkErrorMacro("Cannot load state from (null) root element."); - return 0; - } - - this->Internal->RootElement = rootElement; - - // Do we have enough open sources to accomodate this lookmark's state? - int numSources = model->getNumberOfItems<pqPipelineSource*>(); - if(numSources<this->Internal->NumberOfLookmarkSources) - { - QMessageBox::warning(NULL, "Error Loading Lookmark", - "There are not enough existing sources or filters in the pipeline to " - "accomodate this lookmark."); - return 0; - } - - return this->Superclass::LoadStateInternal(rootElement); -} - -//--------------------------------------------------------------------------- -int pqLookmarkStateLoader::HandleProxyCollection(vtkPVXMLElement* collectionElement) -{ - const char* groupName = collectionElement->GetAttribute("name"); - if (strcmp(groupName,"sources")!=0 && !this->Internal->SourceProxyCollectionLoaded) - { - unsigned int numElems = this->Internal->RootElement->GetNumberOfNestedElements(); - unsigned int i; - for (i=0; i<numElems; i++) - { - vtkPVXMLElement* currentElement = this->Internal->RootElement->GetNestedElement(i); - const char* name = currentElement->GetName(); - const char* type = currentElement->GetAttribute("name"); - if (name && type) - { - if (strcmp(name, "ProxyCollection") == 0 && strcmp(type, "sources") == 0) - { - this->HandleProxyCollection(currentElement); - break; - } - } - } - } - else if (strcmp(groupName,"sources")==0) - { - QString srcName; - vtkPVXMLElement *newCollectionElement = vtkPVXMLElement::New(); - newCollectionElement->SetAttribute("name",groupName); - for(int j=0; j<this->Internal->LookmarkSources.count(); j++) - { - srcName = this->Internal->LookmarkSources[j]->text(); - unsigned int numElems = collectionElement->GetNumberOfNestedElements(); - for (unsigned int i=0; i<numElems; i++) - { - vtkPVXMLElement* currentElement = collectionElement->GetNestedElement(i); - if (currentElement->GetName() && - strcmp(currentElement->GetName(), "Item") == 0 && - srcName == QString(currentElement->GetAttribute("name"))) - { - newCollectionElement->AddNestedElement(currentElement); - } - } - } - int ret = this->Superclass::HandleProxyCollection(newCollectionElement); - newCollectionElement->Delete(); - this->Internal->SourceProxyCollectionLoaded = true; - return ret; - } - - return this->Superclass::HandleProxyCollection(collectionElement); -} - - -//--------------------------------------------------------------------------- -vtkSMProxy* pqLookmarkStateLoader::NewProxy(int id, vtkSMProxyLocator* locator) -{ - vtkPVXMLElement* proxyElement = this->LocateProxyElement(id); - if (!proxyElement) - { - return 0; - } - - const char* group = proxyElement->GetAttribute("group"); - const char* type = proxyElement->GetAttribute("type"); - if (!type || !group) - { - vtkErrorMacro("Could not create proxy from element, missing 'type'."); - return 0; - } - - if (strcmp(proxyElement->GetName(), "Proxy") == 0) - { - if(strcmp(group,"sources")==0) - { - this->Internal->CurrentSourceID = id; - this->Internal->IdsOfProxyElementsToIgnore.push_back( - QString(proxyElement->GetAttribute("id"))); - - // Find the display in the state that has this source as an input and store for later - // so we can ignore it when its state is being loaded - for (unsigned int i=0; i<this->Internal->RootElement->GetNumberOfNestedElements(); i++) - { - vtkPVXMLElement* currentElement = - this->Internal->RootElement->GetNestedElement(i); - const char* name = currentElement->GetName(); - const char* groupName = currentElement->GetAttribute("group"); - if (name && groupName) - { - if (strcmp(name, "Proxy") == 0 && strcmp(groupName, "representations") == 0) - { - for (unsigned int j=0; j<currentElement->GetNumberOfNestedElements(); j++) - { - vtkPVXMLElement* inputElement = currentElement->GetNestedElement(j); - const char* inputTag = inputElement->GetName(); - const char* inputName = inputElement->GetAttribute("name"); - if (inputTag && inputName) - { - if (strcmp(inputTag, "Property") == 0 && strcmp(inputName, "Input") == 0) - { - vtkPVXMLElement *srcElem = inputElement->FindNestedElementByName("Proxy"); - if(QString::number(id) == QString(srcElem->GetAttribute("value"))) - { - this->Internal->IdsOfProxyElementsToIgnore.push_back( - QString(currentElement->GetAttribute("id"))); - - this->Internal->DisplayIdToSourceIdMap[ - QString(currentElement->GetAttribute("id")).toInt()] = id; - } - } - } - } - } - } - } - } - else if(strcmp(group,"representations")==0) - { - this->Internal->CurrentDisplayID = id; - } - } - - return this->Superclass::NewProxy(id, locator); -} - -//----------------------------------------------------------------------------- -vtkSMProxy* pqLookmarkStateLoader::CreateProxy( - const char* xml_group, const char* xml_name, vtkIdType cid) -{ - if(xml_group && xml_name && (strcmp(xml_group, "sources")==0) ) - { - // If this lookmark has one source and our collection of - // selected sources has only one, use it - if(this->Internal->NumberOfLookmarkSources==1 && - this->Internal->PreferredSources->size()==1) - { - pqPipelineSource *src = this->Internal->PreferredSources->at(0); - this->Internal->LookmarkSourceIdToExistingSourceMap[this->Internal->CurrentSourceID] = src; - vtkSMProxy *proxy = src->getProxy(); - proxy->Register(this); - return proxy; - } - - // If the lookmark has multiple sources - // OR there are more selections than lookmark inputs - // OR there are no selections - // prompt the user. - pqLookmarkSourceDialog *srcDialog = new pqLookmarkSourceDialog( - &this->Internal->LookmarkPipelineModel,this->Internal->PipelineModel); - srcDialog->setLookmarkSource(this->Internal->LookmarkSources.takeFirst()); - if(srcDialog->exec() == QDialog::Accepted) - { - // return the source the user selected to use for this proxy - pqPipelineSource *src = srcDialog->getSelectedSource(); - if(src) - { - this->Internal->LookmarkSourceIdToExistingSourceMap[this->Internal->CurrentSourceID] = src; - vtkSMProxy *proxy = src->getProxy(); - proxy->Register(this); - return proxy; - } - } - } - else if(xml_group && xml_name && (strcmp(xml_group, "representations")==0) ) - { - if(this->Internal->DisplayIdToSourceIdMap.keys().contains( - this->Internal->CurrentDisplayID)) - { - pqPipelineSource *src = this->Internal->LookmarkSourceIdToExistingSourceMap[ - this->Internal->DisplayIdToSourceIdMap[ - this->Internal->CurrentDisplayID]]; - - QList<pqRepresentation*> displays = this->Internal->View->getRepresentations(); - vtkSMProxy *proxy = NULL; - for(int i=0; i<displays.count(); i++) - { - pqDataRepresentation *rep = dynamic_cast<pqDataRepresentation*>(displays[i]); - if(rep && rep->getInput() == src) - { - proxy = rep->getProxy(); - break; - } - } - if(proxy) - { - proxy->Register(this); - return proxy; - } - - // If we get here that means the source has no - // representation in the given view - this->Internal->IdsOfProxyElementsToIgnore.removeAll( - QString::number(this->Internal->CurrentDisplayID)); - } - } - - return this->Superclass::CreateProxy(xml_group, xml_name, cid); -} - - -//--------------------------------------------------------------------------- -void pqLookmarkStateLoader::RegisterProxy(int id, vtkSMProxy* proxy) -{ - // Don't register a proxy that we are going to ignore later - if(this->Internal->IdsOfProxyElementsToIgnore.contains(QString::number(id))) - { - return; - } - - this->Superclass::RegisterProxy(id, proxy); -} - - -//--------------------------------------------------------------------------- -void pqLookmarkStateLoader::HandleCompoundProxyDefinitions( - vtkPVXMLElement* vtkNotUsed(element)) -{ - // Compound proxy states are not loaded by a lookmark - return; -} - -//----------------------------------------------------------------------------- -int pqLookmarkStateLoader::LoadProxyState(vtkPVXMLElement* proxyElement, - vtkSMProxy* proxy, vtkSMProxyLocator* locator) -{ - // Remove all elements of a source/reader's XML unless its a - // PointArrayStatus or CellArrayStatus property. But these - // should only be turned on, not off (so as not to affect other - // views this source is displayed in). - if (strcmp(proxyElement->GetName(), "Proxy")==0 && - strcmp(proxyElement->GetAttribute("group"), "sources")==0 ) - { - QList<vtkPVXMLElement*> elementsToRemove; - QList<vtkPVXMLElement*> arrayElementsToRemove; - QList<vtkPVXMLElement*>::iterator iter; - unsigned int max = proxyElement->GetNumberOfNestedElements(); - QString name; - for (unsigned int cc=0; cc < max; ++cc) - { - vtkPVXMLElement* element = proxyElement->GetNestedElement(cc); - name = element->GetAttribute("name"); - if (element->GetName() == QString("Property") && - ( name.contains("PointArrayStatus") || - name.contains("CellArrayStatus") || - name.contains("ResultArrayStatus") )) - { - arrayElementsToRemove.clear(); - for(unsigned int cc1=0; cc1<element->GetNumberOfNestedElements(); cc1++) - { - vtkPVXMLElement *valueElement = element->GetNestedElement(cc1); - if(valueElement->GetName() == QString("Element") && - strcmp(valueElement->GetAttribute("value"),"0")==0 ) - { - arrayElementsToRemove.push_back(valueElement); - } - } - for(iter=arrayElementsToRemove.begin(); iter!=arrayElementsToRemove.end(); iter++) - { - element->RemoveNestedElement(*iter); - } - } - else - { - elementsToRemove.push_back(element); - } - } - - for(iter=elementsToRemove.begin(); iter!=elementsToRemove.end(); iter++) - { - proxyElement->RemoveNestedElement(*iter); - } - - // if a filter is being used in place of a source, find the filter's reader - // and use its proxy instead - if(strcmp(proxy->GetXMLGroup(), "filters")==0) - { - pqServerManagerModel *model = pqApplicationCore::instance()->getServerManagerModel(); - pqPipelineFilter *filter = model->findItem<pqPipelineFilter*>(proxy); - if(filter) - { - // move up the pipeline until we find a non-filter source - pqPipelineSource *src; - while(filter) - { - src = filter->getInput(0); - filter = dynamic_cast<pqPipelineFilter*>(src); - } - proxy = src->getProxy(); - } - } - } - else if (strcmp(proxyElement->GetName(), "Proxy")==0 && - (proxy->IsA("vtkSMRenderViewProxy") || - strcmp(proxyElement->GetAttribute("type"), "ClientGraphView")==0 ) ) - { - unsigned int max = proxyElement->GetNumberOfNestedElements(); - QString name; - QString value; - QList<vtkPVXMLElement*> toRemove; - QList<vtkPVXMLElement*> displaysToRemove; - for (unsigned int cc=0; cc < max; ++cc) - { - vtkPVXMLElement* element = proxyElement->GetNestedElement(cc); - name = element->GetAttribute("name"); - if (element->GetName() == QString("Property") && - name.contains("Camera") && !this->Internal->RestoreCamera) - { - toRemove.push_back(element); - } - else if (strcmp(element->GetName(), "Property") == 0 && - (name == "GUISize" || name == "ViewPosition" || name == "ViewSize")) - { - toRemove.push_back(element); - } - else if (element->GetName() == QString("Property") && - element->GetAttribute("name") == QString("Representations")) - { - // remove unused displays from the view's displays proxyproperty - QStringList ids = this->Internal->IdsOfProxyElementsToIgnore; - displaysToRemove.clear(); - for(int k=0;k<ids.size();k++) - { - for (unsigned int cc2=0; cc2 < element->GetNumberOfNestedElements(); ++cc2) - { - vtkPVXMLElement* childElem = element->GetNestedElement(cc2); - value = childElem->GetAttribute("value"); - if (value==ids[k]) - { - displaysToRemove.push_back(childElem); - } - } - } - int num = QString(element->GetAttribute("number_of_elements")).toInt(); - num -= displaysToRemove.count(); - element->SetAttribute("number_of_elements",QString::number(num).toAscii().data()); - - QList<vtkPVXMLElement*>::iterator iter; - for(iter=displaysToRemove.begin(); iter!=displaysToRemove.end(); iter++) - { - element->RemoveNestedElement(*iter); - } - } - else if (element->GetName() == QString("Property") && - element->GetAttribute("name") == QString("ViewTime")) - { - if(this->Internal->RestoreTime) - { - vtkPVXMLElement *valElem = element->FindNestedElementByName("Element"); - if(valElem && this->Internal->TimeKeeper) - { - double viewTime; - valElem->GetScalarAttribute("value",&viewTime); - this->Internal->TimeKeeper->setTime(viewTime); - } - } - toRemove.push_back(element); - } - } - - // Finally, remove those xml elements we flagged - QList<vtkPVXMLElement*>::iterator iter; - for(iter=toRemove.begin(); iter!=toRemove.end(); iter++) - { - proxyElement->RemoveNestedElement(*iter); - } - } - else if (strcmp(proxyElement->GetName(), "Proxy")==0 && - strcmp(proxyElement->GetAttribute("group"), "representations")==0 ) - { - // If a display has been flagged, then it has a non-filter input. - // In this case, we are using the XML state to set up its existing - // representation proxy for this view. Therefore we do not need - // to set the display's input and can remove the input property. - // Also, we remove any sub-proxies from the XML. - - QString id(proxyElement->GetAttribute("id")); - QList<vtkPVXMLElement*> toRemove; - QString name; - if(this->Internal->IdsOfProxyElementsToIgnore.contains(id)) - { - int count = proxyElement->GetNumberOfNestedElements(); - for(int i=0; i<count; i++) - { - vtkPVXMLElement* element = proxyElement->GetNestedElement(i); - name = element->GetAttribute("name"); - if (element->GetName() == QString("SubProxy") || - (element->GetName() == QString("Property") && name == "Input") ) - { - toRemove.push_back(element); - } - } - // Finally, remove those xml elements we flagged - QList<vtkPVXMLElement*>::iterator iter; - for(iter=toRemove.begin(); iter!=toRemove.end(); iter++) - { - proxyElement->RemoveNestedElement(*iter); - } - } - } - - return this->Superclass::LoadProxyState(proxyElement, proxy, locator); -} - -//----------------------------------------------------------------------------- -void pqLookmarkStateLoader::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os, indent); -} diff --git a/Qt/Components/pqLookmarkStateLoader.h b/Qt/Components/pqLookmarkStateLoader.h deleted file mode 100644 index 6ef8802b8e..0000000000 --- a/Qt/Components/pqLookmarkStateLoader.h +++ /dev/null @@ -1,132 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkStateLoader.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -#ifndef __pqLookmarkStateLoader_h -#define __pqLookmarkStateLoader_h - - -#include "pqComponentsExport.h" -//#include "vtkSMPQStateLoader.h" -#include "vtkSMPQStateLoader.h" -#include <QList> - -class pqLookmarkStateLoaderInternal; -class pqPipelineSource; -class pqTimeKeeper; -class QStandardItem; -class pqGenericViewModule; -class pqView; - -// -// State loader for the lookmark state. -// - -class PQCOMPONENTS_EXPORT pqLookmarkStateLoader : public vtkSMPQStateLoader -{ -public: - static pqLookmarkStateLoader* New(); - vtkTypeRevisionMacro(pqLookmarkStateLoader, vtkSMPQStateLoader); - void PrintSelf(ostream& os, vtkIndent indent); - - // Can be given a list of sources to use before any others. - // Right now these are the sources that are selected in the pipeline browser. - void SetPreferredSources(QList<pqPipelineSource*> *sources); - - // The XML representation of the lookmark's pipeline hierarchy. - // This is used to generate a pipeline mode of the lookmark state which is - // used by the pqLookmarkSourceDialog - void SetPipelineHierarchy(vtkPVXMLElement*); - - // Provide access to the timekeeper in case this lookmark restores time - void SetTimeKeeper(pqTimeKeeper *timekeeper); - - // Set whether or not the lookmark's time/camera should be restored - void SetRestoreCameraFlag(bool state); - void SetRestoreTimeFlag(bool state); - - // The view that this lookmark is being displayed in - void SetView(pqView*); - -protected: - pqLookmarkStateLoader(); - ~pqLookmarkStateLoader(); - - /// Load the state. - virtual int LoadStateInternal(vtkPVXMLElement* rootElement); - - // Description: - // Overloaded to check whether the proxyElement is a source and if so, - // look for a display proxy element in the state that has it for an input. - // Store the id of this display for later so that we know not to load its state. - virtual vtkSMProxy* NewProxy(int id, vtkSMProxyLocator*); - - // Description: - // Make sure the "sources" proxy collection gets loaded before any other. - // When the source collection element does get passed, reorder child elements - // so that sources get loaded in the same order as their entries in the lookmark - // pipeline. This is required for the pqLookmarkSourceDialog to work correctly - virtual int HandleProxyCollection(vtkPVXMLElement* collectionElement); - - // Description: - // Create a new proxy of the given group and name. Default implementation - // simply asks the proxy manager to create a new proxy of the requested type. - // When a source proxy is about to be created, provide it with an existing one instead. - virtual vtkSMProxy* CreateProxy( - const char* xmlgroup, const char* xmlname, vtkIdType connectionId); - - // Make sure we do not re-register proxies that are being reused or ignored - virtual void RegisterProxy(int id, vtkSMProxy* proxy); - - // Right now compound proxy definitions get saved with a lookmark when - // it's created so we do this so loading the lookmark won't load these proxies - virtual void HandleCompoundProxyDefinitions(vtkPVXMLElement* element); - - // Description: - // This method is called to load a proxy state. - // It handles different proxy types different ways. - virtual int LoadProxyState(vtkPVXMLElement* proxyElement, vtkSMProxy* proxy, - vtkSMProxyLocator*); - - // Helper function for constructing a QAbstractItemModel from the lookmark's - // pipeline hierarchy - void AddChildItems(vtkPVXMLElement *elem, QStandardItem *item); - -private: - pqLookmarkStateLoader(const pqLookmarkStateLoader&); // Not implemented. - void operator=(const pqLookmarkStateLoader&); // Not implemented. - - pqLookmarkStateLoaderInternal* Internal; -}; - - -#endif - diff --git a/Qt/Components/pqMainWindowCore.cxx b/Qt/Components/pqMainWindowCore.cxx deleted file mode 100644 index 0343fe5189..0000000000 --- a/Qt/Components/pqMainWindowCore.cxx +++ /dev/null @@ -1,3987 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqMainWindowCore.cxx - - Copyright (c) 2005-2008 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 "pqMainWindowCore.h" -#include <vtkPQConfig.h> - -#include <QAction> -#include <QApplication> -#include <QDockWidget> -#include <QFile> -#include <QMenu> -#include <QMessageBox> -#include <QProgressBar> -#include <QStatusBar> -#include <QToolBar> -#include <QtDebug> -#include <QList> -#include <QDir> -#include <QMainWindow> -#include <QDoubleSpinBox> -#include <QMenuBar> - -#include "pqActionGroupInterface.h" -#include "pqActiveChartOptions.h" -#include "pqActiveRenderViewOptions.h" -#include "pqActiveServer.h" -#include "pqActiveTwoDRenderViewOptions.h" -#include "pqActiveView.h" -#include "pqActiveViewOptionsManager.h" -#include "pqAnimationManager.h" -#include "pqAnimationViewWidget.h" -#include "pqApplicationCore.h" -#include "pqApplicationOptionsDialog.h" -#include "pqBarChartView.h" -#include "pqBarChartViewContextMenuHandler.h" -#include "pqBoxChartViewContextMenuHandler.h" -#include "pqCameraDialog.h" -#include "pqColorScaleToolbar.h" -#include "pqCloseViewUndoElement.h" -#include "pqCustomFilterDefinitionModel.h" -#include "pqCustomFilterDefinitionWizard.h" -#include "pqCustomFilterManager.h" -#include "pqCustomFilterManagerModel.h" -#include "pqDataInformationWidget.h" -#include "pqDisplayColorWidget.h" -#include "pqDisplayRepresentationWidget.h" -#include "pqDockWindowInterface.h" -#include "pqFilterInputDialog.h" -#include "pqFiltersMenuManager.h" -#include "pqSourcesMenuManager.h" -#include "pqHelperProxyRegisterUndoElement.h" -#include "pqLineChartView.h" -#include "pqLineChartViewContextMenuHandler.h" -#include "pqLinksManager.h" -#include "pqLookmarkBrowser.h" -#include "pqLookmarkBrowserModel.h" -#include "pqLookmarkDefinitionWizard.h" -#include "pqLookmarkInspector.h" -#include "pqLookmarkManagerModel.h" -#include "pqLookmarkModel.h" -#include "pqLookmarkToolbar.h" -#include "pqMainWindowCore.h" -#include "pqMultiViewFrame.h" -#include "pqMultiView.h" -#include "pqObjectBuilder.h" -#include "pqObjectInspectorDriver.h" -#include "pqObjectInspectorWidget.h" -#include "pqOptions.h" -#include "pqOutputPort.h" -#include "pqPendingDisplayManager.h" -#include "pqPickHelper.h" -#include "pqPipelineBrowser.h" -#include "pqPipelineFilter.h" -#include "pqPipelineMenu.h" -#include "pqPipelineModel.h" -#include "pqPipelineRepresentation.h" -#include "pqPluginDialog.h" -#include "pqPluginManager.h" -#include "pqPQLookupTableManager.h" -#include "pqProcessModuleGUIHelper.h" -#include "pqProgressManager.h" -#include "pqProxyTabWidget.h" - -#ifdef PARAVIEW_ENABLE_PYTHON -#include "pqPythonManager.h" -#include "pqPythonDialog.h" -#endif // PARAVIEW_ENABLE_PYTHON - -#include "pqReaderFactory.h" -#include "pqRenderView.h" -#include "pqRubberBandHelper.h" -#include "pqSelectionInspectorPanel.h" -#include "pqSelectionManager.h" -#include "pqSelectReaderDialog.h" -#include "pqServer.h" -#include "pqServerManagerModel.h" -#include "pqServerManagerObserver.h" -#include "pqServerManagerSelectionModel.h" -#include "pqServerStartupBrowser.h" -#include "pqServerStartup.h" -#include "pqServerStartups.h" -#include "pqSettings.h" -#include "pqSimpleServerStartup.h" -#include "pqSMAdaptor.h" -#include "pqSplitViewUndoElement.h" -#include "pqSpreadSheetView.h" -#include "pqSpreadSheetViewDecorator.h" -#include "pqStackedChartViewContextMenuHandler.h" -#include "pqStateLoader.h" -#include "pqTimeKeeper.h" -#include "pqTimerLogDisplay.h" -#include "pqToolTipTrapper.h" -#include "pqTwoDRenderView.h" -#include "pqUndoStackBuilder.h" -#include "pqVCRController.h" -#include "pqViewContextMenuManager.h" -#include "pqView.h" -#include "pqViewManager.h" -#include "pqViewMenu.h" -#include "pqWriterFactory.h" -#include "pqSaveSnapshotDialog.h" -#include "pqQuickLaunchDialog.h" -#include "pqViewOptionsInterface.h" -#include "pqViewExporterManager.h" -#include "pqImageUtil.h" - -#include <pqFileDialog.h> -#include <pqObjectNaming.h> -#include <pqProgressWidget.h> -#include <pqServerResources.h> -#include <pqSetData.h> -#include <pqSetName.h> -#include <pqCoreTestUtility.h> -#include <pqUndoStack.h> -#include <pqWriterDialog.h> -#include "QtTestingConfigure.h" - -#include <QVTKWidget.h> - -#include <vtkDataObject.h> -#include <vtkImageData.h> -#include <vtkProcessModule.h> -#include <vtkPVDisplayInformation.h> -#include <vtkPVOptions.h> -#include <vtkPVXMLElement.h> -#include <vtkPVXMLParser.h> -#include <vtkSmartPointer.h> -#include <vtkSMDoubleRangeDomain.h> -#include <vtkSMDoubleVectorProperty.h> -#include <vtkSMInputProperty.h> -#include <vtkSMIntVectorProperty.h> -#include <vtkSMProxyIterator.h> -#include <vtkSMProxyManager.h> -#include <vtkSMProxyProperty.h> -#include <vtkSMRenderViewProxy.h> -#include <vtkSMSourceProxy.h> -#include <vtkSMStringVectorProperty.h> - -#include <vtkToolkits.h> - -#include <vtkstd/algorithm> -#include <vtkstd/map> -#include <vtkstd/set> -#include <vtkstd/string> -#include <vtkstd/vector> - -#include <cassert> -#include <ctime> - -// If CrashRecovery is set under Edit->Settings, then before each -// "Apply" a state file is saved to this file. -const char CrashRecoveryStateFile[]=".PV3CrashRecoveryState.pvsm"; - -/////////////////////////////////////////////////////////////////////////// -// pqMainWindowCore::pqImplementation - -/// Private implementation details for pqMainWindowCore -class pqMainWindowCore::pqImplementation -{ -public: - pqImplementation(QWidget* parent) : - Parent(parent), - MultiViewManager(parent), - Lookmarks(0), - CustomFilters(new pqCustomFilterManagerModel(parent)), - CustomFilterManager(0), - LookupTableManager(new pqPQLookupTableManager(parent)), - ObjectInspectorDriver(0), - ActiveViewOptions(0), - ViewContextMenu(0), - PipelineMenu(0), - PipelineBrowser(0), - VariableToolbar(0), - LookmarkToolbar(0), - ToolTipTrapper(0), - InCreateSource(false), - ColorScale(0), - LinksManager(0), - TimerLog(0), - QuickLaunchDialog(parent) - { - this->MultiViewManager.setObjectName("MultiViewManager"); - this->CameraDialog = 0; - } - - ~pqImplementation() - { - delete this->ToolTipTrapper; - delete this->PipelineMenu; - delete this->CustomFilterManager; - delete this->CustomFilters; - delete this->Lookmarks; - delete this->LookupTableManager; - } - - void mySetParent(QWidget *parent) - { - this->Parent = parent; - this->MultiViewManager.setParent(parent); - this->CustomFilters->setParent(parent); - this->LookupTableManager->setParent(parent); - } - - QWidget* Parent; - pqViewManager MultiViewManager; - pqVCRController VCRController; - pqSelectionManager SelectionManager; -#ifdef PARAVIEW_ENABLE_PYTHON - pqPythonManager PythonManager; -#endif // PARAVIEW_ENABLE_PYTHON - pqLookmarkManagerModel* LookmarkManagerModel; - pqLookmarkBrowser* LookmarkBrowser; - pqLookmarkInspector* LookmarkInspector; - QString CurrentToolbarLookmark; - pqLookmarkBrowserModel* Lookmarks; - pqCustomFilterManagerModel* const CustomFilters; - pqCustomFilterManager* CustomFilterManager; - pqPQLookupTableManager* LookupTableManager; - pqObjectInspectorDriver* ObjectInspectorDriver; - pqActiveViewOptionsManager *ActiveViewOptions; - pqViewContextMenuManager *ViewContextMenu; - pqReaderFactory ReaderFactory; - pqWriterFactory WriterFactory; - pqPendingDisplayManager PendingDisplayManager; - pqRubberBandHelper RenderViewSelectionHelper; - pqPickHelper RenderViewPickHelper; - pqViewExporterManager ViewExporterManager; - QPointer<pqUndoStack> UndoStack; - - QPointer<pqFiltersMenuManager> FiltersMenuManager; - QPointer<pqSourcesMenuManager> SourcesMenuManager; - QPointer<pqViewMenu> ToolbarMenu; - QPointer<pqViewMenu> DockWindowMenu; - - pqPipelineMenu* PipelineMenu; - pqPipelineBrowser *PipelineBrowser; - QToolBar* VariableToolbar; - QToolBar* LookmarkToolbar; - QList<QObject*> PluginToolBars; - - pqToolTipTrapper* ToolTipTrapper; - - QPointer<pqCameraDialog> CameraDialog; - - bool InCreateSource; - - QPointer<pqColorScaleToolbar> ColorScale; - - QPointer<pqProxyTabWidget> ProxyPanel; - QPointer<pqAnimationManager> AnimationManager; - QPointer<pqLinksManager> LinksManager; - QPointer<pqTimerLogDisplay> TimerLog; - QPointer<pqApplicationOptionsDialog> ApplicationSettings; - - pqCoreTestUtility TestUtility; - pqActiveServer ActiveServer; - pqQuickLaunchDialog QuickLaunchDialog; - - QPointer<pqPipelineSource> PreviouslySelectedSource; -}; - -/////////////////////////////////////////////////////////////////////////// -// pqMainWindowCore - -pqMainWindowCore::pqMainWindowCore(QWidget* parent_widget) -{ - this->Implementation = new pqImplementation(parent_widget); - this->constructorHelper(parent_widget); -} - -pqMainWindowCore::pqMainWindowCore() -{ - this->Implementation = new pqImplementation(NULL); - this->constructorHelper(NULL); -} - -void pqMainWindowCore::setParent(QWidget* newParent) -{ - this->Implementation->mySetParent(newParent); -} - -void pqMainWindowCore::constructorHelper(QWidget *parent_widget) -{ - this->setObjectName("MainWindowCore"); - - pqApplicationCore* const core = pqApplicationCore::instance(); - pqObjectBuilder* const builder = core->getObjectBuilder(); - - core->setLookupTableManager(this->Implementation->LookupTableManager); - - // Register some universally accessible managers. - core->registerManager("PENDING_DISPLAY_MANAGER", - &this->Implementation->PendingDisplayManager); - core->registerManager("MULTIVIEW_MANAGER", - &this->Implementation->MultiViewManager); - core->registerManager("SELECTION_MANAGER", - &this->Implementation->SelectionManager); - -#ifdef PARAVIEW_ENABLE_PYTHON - this->Implementation->PythonManager.setParentForPythonDialog(parent_widget); -#endif // PARAVIEW_ENABLE_PYTHON - - // Set up the context menu manager. - this->getViewContextMenuManager(); - - // Connect the view manager to the pqActiveView. - QObject::connect(&this->Implementation->MultiViewManager, - SIGNAL(activeViewChanged(pqView*)), - &pqActiveView::instance(), SLOT(setCurrent(pqView*))); - QObject::connect( - &pqActiveView::instance(), SIGNAL(changed(pqView*)), - &this->Implementation->MultiViewManager, SLOT(setActiveView(pqView*))); - - // Connect the view manager's camera button. - QObject::connect(&this->Implementation->MultiViewManager, - SIGNAL(triggerCameraAdjustment(pqView*)), - this, SLOT(showCameraDialog(pqView*))); - - this->Implementation->MultiViewManager.setViewOptionsManager( - this->getActiveViewOptionsManager()); - - // Listen to the active render module changed signals. - QObject::connect( - &pqActiveView::instance(), SIGNAL(changed(pqView*)), - this, SLOT(onActiveViewChanged(pqView*))); - - QObject::connect( - &pqActiveView::instance(), SIGNAL(changed(pqView*)), - &this->selectionManager(), SLOT(setActiveView(pqView*))); - - // Listen for compound proxy register events. - pqServerManagerObserver *observer = - pqApplicationCore::instance()->getServerManagerObserver(); - this->connect(observer, SIGNAL(compoundProxyDefinitionRegistered(QString)), - this->Implementation->CustomFilters, SLOT(addCustomFilter(QString))); - this->connect(observer, SIGNAL(compoundProxyDefinitionUnRegistered(QString)), - this->Implementation->CustomFilters, SLOT(removeCustomFilter(QString))); - this->connect(observer, SIGNAL(compoundProxyDefinitionRegistered(QString)), - this, SIGNAL(refreshFiltersMenu())); - this->connect(observer, SIGNAL(compoundProxyDefinitionUnRegistered(QString)), - this, SIGNAL(refreshFiltersMenu())); - this->connect(observer, SIGNAL(compoundProxyDefinitionRegistered(QString)), - this, SIGNAL(refreshSourcesMenu())); - this->connect(observer, SIGNAL(compoundProxyDefinitionUnRegistered(QString)), - this, SIGNAL(refreshSourcesMenu())); - // Now that the connections are set up, import custom filters from settings - this->Implementation->CustomFilters->importCustomFiltersFromSettings(); - - // Set up connection with selection helpers for all views. - QObject::connect( - &pqActiveView::instance(), SIGNAL(changed(pqView*)), - &this->Implementation->RenderViewSelectionHelper, SLOT(setView(pqView*))); - - // BUG #5924. Disable selection with picking the center of rotation. - QObject::connect( - &this->Implementation->RenderViewPickHelper, SIGNAL(startPicking()), - &this->Implementation->RenderViewSelectionHelper, SLOT(DisabledPush())); - QObject::connect( - &this->Implementation->RenderViewPickHelper, SIGNAL(stopPicking()), - &this->Implementation->RenderViewSelectionHelper, SLOT(DisabledPop())); - - // Connect up the pqLookmarkManagerModel and pqLookmarkBrowserModel - this->Implementation->LookmarkManagerModel = new pqLookmarkManagerModel(this); - - this->Implementation->Lookmarks = new pqLookmarkBrowserModel( - this->Implementation->LookmarkManagerModel,parent_widget); - QObject::connect(this->Implementation->LookmarkManagerModel, - SIGNAL(lookmarkAdded(pqLookmarkModel*)), - this->Implementation->Lookmarks, - SLOT(addLookmark(pqLookmarkModel*))); - QObject::connect(this->Implementation->LookmarkManagerModel, - SIGNAL(lookmarkRemoved(const QString&)), - this->Implementation->Lookmarks, - SLOT(removeLookmark(const QString&))); - QObject::connect(this->Implementation->LookmarkManagerModel, - SIGNAL(lookmarkModified(pqLookmarkModel*)), - this->Implementation->Lookmarks, - SLOT(onLookmarkModified(pqLookmarkModel*))); - QObject::connect(this->Implementation->Lookmarks, - SIGNAL(lookmarkRemoved(const QString&)), - this->Implementation->LookmarkManagerModel, - SLOT(removeLookmark(const QString&))); - QObject::connect(this->Implementation->Lookmarks, - SIGNAL(importLookmarks(const QStringList&)), - this->Implementation->LookmarkManagerModel, - SLOT(importLookmarksFromFiles(const QStringList&))); - QObject::connect(this->Implementation->Lookmarks, - SIGNAL(exportLookmarks(const QList<pqLookmarkModel*>&,const QStringList&)), - this->Implementation->LookmarkManagerModel, - SLOT(exportLookmarksToFiles(const QList<pqLookmarkModel*>&,const QStringList&))); - - // Listen to selection changed events. - // These are queued connections, since while changes are happening the SM - // may not be in a good state to check which filters should be enabled - // etc etc. - // As a general policy, GUI updates must be QueuedConnection. This policy - // does not apply to core layer i.e. creation of pqProxies etc. - pqServerManagerSelectionModel *selection = - pqApplicationCore::instance()->getSelectionModel(); - this->connect(selection, SIGNAL(currentChanged(pqServerManagerModelItem*)), - this, SLOT(onSelectionChanged()), Qt::QueuedConnection); - this->connect(selection, - SIGNAL(selectionChanged( - const pqServerManagerSelection&, const pqServerManagerSelection&)), - this, SLOT(onSelectionChanged()), Qt::QueuedConnection); - - // Update enable state when pending displays state changes. - this->connect( - &this->Implementation->PendingDisplayManager, SIGNAL(pendingDisplays(bool)), - this, SLOT(onPendingDisplayChanged(bool))); - - this->connect(core->getServerManagerModel(), - SIGNAL(serverAdded(pqServer*)), - this, SLOT(onServerCreation(pqServer*))); - - this->connect(core->getObjectBuilder(), - SIGNAL(finishedAddingServer(pqServer*)), - this, SLOT(onServerCreationFinished(pqServer*))); - - this->connect(core->getServerManagerModel(), - SIGNAL(aboutToRemoveServer(pqServer*)), - this, SLOT(onRemovingServer(pqServer*))); - this->connect(core->getServerManagerModel(), - SIGNAL(finishedRemovingServer()), - this, SLOT(onSelectionChanged())); - - this->connect(builder, SIGNAL(sourceCreated(pqPipelineSource*)), - this, SLOT(onSourceCreationFinished(pqPipelineSource*)), - Qt::QueuedConnection); - - this->connect(builder, SIGNAL(filterCreated(pqPipelineSource*)), - this, SLOT(onSourceCreationFinished(pqPipelineSource*)), - Qt::QueuedConnection); - - this->connect(builder, - SIGNAL(readerCreated(pqPipelineSource*, const QString&)), - this, SLOT(onSourceCreationFinished(pqPipelineSource*)), - Qt::QueuedConnection); - - this->connect(builder, - SIGNAL(readerCreated(pqPipelineSource*, const QStringList&)), - this, SLOT(onReaderCreated(pqPipelineSource*, const QStringList&))); - - this->connect(builder, SIGNAL(sourceCreated(pqPipelineSource*)), - this, SLOT(onSourceCreation(pqPipelineSource*))); - - this->connect(builder, SIGNAL(filterCreated(pqPipelineSource*)), - this, SLOT(onSourceCreation(pqPipelineSource*))); - - this->connect(builder, - SIGNAL(readerCreated(pqPipelineSource*, const QString&)), - this, SLOT(onSourceCreation(pqPipelineSource*))); - - this->connect(builder, SIGNAL(destroying(pqPipelineSource*)), - this, SLOT(onRemovingSource(pqPipelineSource*))); - - this->connect(builder, SIGNAL(proxyCreated(pqProxy*)), - this, SLOT(onProxyCreation(pqProxy*))); - - this->connect(builder, SIGNAL(viewCreated(pqView*)), - this, SLOT(onViewCreated(pqView*))); - - // Listen for the signal that the lookmark button for a given view was pressed - this->connect(&this->Implementation->MultiViewManager, - SIGNAL(createLookmark(QWidget*)), //pqGenericViewModule*)), - this, - SLOT(onToolsCreateLookmark(QWidget*))); //pqGenericViewModule*))); - - this->connect(pqApplicationCore::instance()->getPluginManager(), - SIGNAL(serverManagerExtensionLoaded()), - this, - SIGNAL(refreshFiltersMenu())); - this->connect(pqApplicationCore::instance()->getPluginManager(), - SIGNAL(serverManagerExtensionLoaded()), - this, - SIGNAL(refreshSourcesMenu())); - - this->connect(pqApplicationCore::instance()->getPluginManager(), - SIGNAL(guiInterfaceLoaded(QObject*)), - this, SLOT(addPluginInterface(QObject*))); - this->connect(pqApplicationCore::instance()->getPluginManager(), - SIGNAL(guiExtensionLoaded()), - this, SLOT(extensionLoaded())); - -/* - this->installEventFilter(this); -*/ - QObject::connect( - &this->Implementation->ActiveServer, SIGNAL(changed(pqServer*)), - &this->Implementation->MultiViewManager, SLOT(setActiveServer(pqServer*))); - - // setup Undo Stack. - pqUndoStackBuilder* usBuilder = pqUndoStackBuilder::New(); - this->Implementation->UndoStack = new pqUndoStack(false, usBuilder, this); - usBuilder->Delete(); - - pqSplitViewUndoElement* svu_elem = pqSplitViewUndoElement::New(); - this->Implementation->UndoStack->registerElementForLoader(svu_elem); - svu_elem->Delete(); - - pqCloseViewUndoElement* cvu_elem = pqCloseViewUndoElement::New(); - this->Implementation->UndoStack->registerElementForLoader(cvu_elem); - cvu_elem->Delete(); - - this->Implementation->PendingDisplayManager.setUndoStack( - this->Implementation->UndoStack); - this->Implementation->MultiViewManager.setUndoStack( - this->Implementation->UndoStack); - - QObject::connect( - &this->Implementation->ActiveServer, SIGNAL(changed(pqServer*)), - this->Implementation->UndoStack, SLOT(setActiveServer(pqServer*))); - - // clear undo stack when state is loaded. - QObject::connect(core, SIGNAL(stateLoaded()), - this->Implementation->UndoStack, SLOT(clear())); - - QObject::connect( - &this->Implementation->VCRController, SIGNAL(beginNonUndoableChanges()), - this->Implementation->UndoStack, SLOT(beginNonUndoableChanges())); - QObject::connect( - &this->Implementation->VCRController, SIGNAL(endNonUndoableChanges()), - this->Implementation->UndoStack, SLOT(endNonUndoableChanges())); - - core->setUndoStack(this->Implementation->UndoStack); - - // set up state loader. - pqStateLoader* loader = pqStateLoader::New(); - loader->SetMainWindowCore(this); - core->setStateLoader(loader); - loader->Delete(); - - // Set up a callback to before further intialization once the application - // event loop starts. - QTimer::singleShot(100, this, SLOT(applicationInitialize())); - - // Instantiate prototypes for sources and filters. These are used - // in populating sources and filters menus. - vtkSMProxyManager* pxm = vtkSMObject::GetProxyManager(); - pxm->InstantiateGroupPrototypes("sources"); - pxm->InstantiateGroupPrototypes("filters"); - - - QObject::connect( - &pqActiveView::instance(), SIGNAL(changed(pqView*)), - &this->Implementation->RenderViewPickHelper, SLOT(setView(pqView*))); - - // BUG #5924. Don't want to let picking be enabled when selecting. - QObject::connect( - &this->Implementation->RenderViewSelectionHelper, SIGNAL(startSelection()), - &this->Implementation->RenderViewPickHelper, SLOT(DisabledPush())); - QObject::connect( - &this->Implementation->RenderViewSelectionHelper, SIGNAL(stopSelection()), - &this->Implementation->RenderViewPickHelper, SLOT(DisabledPop())); - - QObject::connect(&this->Implementation->RenderViewPickHelper, - SIGNAL(pickFinished(double, double, double)), - this, - SLOT(pickCenterOfRotationFinished(double, double, double))); - - QObject::connect(&this->Implementation->RenderViewPickHelper, - SIGNAL(enabled(bool)), - this, SIGNAL(enablePickCenter(bool))); - QObject::connect(&this->Implementation->RenderViewPickHelper, - SIGNAL(picking(bool)), - this, SIGNAL(pickingCenter(bool))); - - // Make the view manager non-blockable so that none of the views are disabled. - pqProgressManager* progress_manager = - pqApplicationCore::instance()->getProgressManager(); - progress_manager->addNonBlockableObject( - &this->Implementation->MultiViewManager); - - /// Set up the view exporter. - QObject::connect(&this->Implementation->ViewExporterManager, - SIGNAL(exportable(bool)), - this, SIGNAL(enableExport(bool))); - - QObject::connect(&pqActiveView::instance(), SIGNAL(changed(pqView*)), - &this->Implementation->ViewExporterManager, - SLOT(setView(pqView*))); - - QObject::connect(pqApplicationCore::instance()->getPluginManager(), - SIGNAL(serverManagerExtensionLoaded()), - &this->Implementation->ViewExporterManager, - SLOT(refresh())); - - QObject::connect(&pqActiveView::instance(), SIGNAL(changed(pqView*)), - &this->Implementation->PendingDisplayManager, - SLOT(setActiveView(pqView*))); - - // Register the color scale editor manager with the application so it - // can be used by the display panels. - core->registerManager("COLOR_SCALE_EDITOR", - this->getColorScaleEditorManager()); - - // the most recently used file extensions - this->restoreSettings(); -} - -//----------------------------------------------------------------------------- -pqMainWindowCore::~pqMainWindowCore() -{ - // Paraview is closing all is well, remove the crash - // recovery file. - if (QFile::exists(CrashRecoveryStateFile)) - { - QFile::remove(CrashRecoveryStateFile); - } - - this->saveSettings(); - delete Implementation; -} - -//----------------------------------------------------------------------------- -pqViewManager& pqMainWindowCore::multiViewManager() -{ - return this->Implementation->MultiViewManager; -} - -//----------------------------------------------------------------------------- -pqSelectionManager& pqMainWindowCore::selectionManager() -{ - return this->Implementation->SelectionManager; -} - -//----------------------------------------------------------------------------- -pqVCRController& pqMainWindowCore::VCRController() -{ - return this->Implementation->VCRController; -} - -//----------------------------------------------------------------------------- -pqRubberBandHelper* pqMainWindowCore::renderViewSelectionHelper() const -{ - return &this->Implementation->RenderViewSelectionHelper; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setSourceMenu(QMenu* menu) -{ - delete this->Implementation->SourcesMenuManager; - this->Implementation->SourcesMenuManager = 0; - if (menu) - { - pqSourcesMenuManager*fmm = new pqSourcesMenuManager(menu); - fmm->setXMLGroup("sources"); - QDir custom(":/CustomResources"); - if (custom.exists("CustomSources.xml")) - { - fmm->setFilteringXMLDir(":/CustomResources"); - } - else - { - fmm->setFilteringXMLDir(":/ParaViewResources"); - } - fmm->setElementTagName("Source"); - fmm->setRecentlyUsedMenuSize(0); - QObject::connect(fmm, SIGNAL(selected(const QString&)), - this, SLOT(onCreateSource(const QString&))); - QObject::connect(this, SIGNAL(refreshSourcesMenu()), - fmm, SLOT(update())); - QObject::connect(this, SIGNAL(enableSourceCreate(bool)), - fmm, SLOT(setEnabled(bool))); - this->Implementation->SourcesMenuManager= fmm; - fmm->initialize(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setFilterMenu(QMenu* menu) -{ - delete this->Implementation->FiltersMenuManager; - this->Implementation->FiltersMenuManager = 0; - if (menu) - { - pqFiltersMenuManager *fmm = new pqFiltersMenuManager(menu); - fmm->setXMLGroup("filters"); - QDir custom(":/CustomResources"); - if (custom.exists("CustomFilters.xml")) - { - fmm->setFilteringXMLDir(":/CustomResources"); - } - else - { - fmm->setFilteringXMLDir(":/ParaViewResources"); - } - fmm->setElementTagName("Filter"); - fmm->setRecentlyUsedMenuSize(10); - QObject::connect(fmm, SIGNAL(selected(const QString&)), - this, SLOT(onCreateFilter(const QString&)), - Qt::QueuedConnection); - QObject::connect(this, SIGNAL(refreshFiltersMenu()), - fmm, SLOT(update())); - QObject::connect(this, SIGNAL(enableFilterCreate(bool)), - fmm, SLOT(setEnabled(bool))); - this->Implementation->FiltersMenuManager = fmm; - fmm->initialize(); - - } -} - -//----------------------------------------------------------------------------- -/// Provides access to the menu manager used for the filters menu. -pqProxyMenuManager* pqMainWindowCore::filtersMenuManager() const -{ - return this->Implementation->FiltersMenuManager; -} - -//----------------------------------------------------------------------------- -/// Provides access to the menu manager used for the sources menu. -pqProxyMenuManager* pqMainWindowCore::sourcesMenuManager() const -{ - return this->Implementation->SourcesMenuManager; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setToolbarMenu(pqViewMenu *menu) -{ - this->Implementation->ToolbarMenu = menu; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setDockWindowMenu(pqViewMenu *menu) -{ - this->Implementation->DockWindowMenu = menu; -} - -//----------------------------------------------------------------------------- -pqPipelineMenu& pqMainWindowCore::pipelineMenu() -{ - if(!this->Implementation->PipelineMenu) - { - this->Implementation->PipelineMenu = new pqPipelineMenu(this); - this->Implementation->PipelineMenu->setObjectName("PipelineMenu"); - } - - return *this->Implementation->PipelineMenu; -} - -//----------------------------------------------------------------------------- -pqPipelineBrowser* pqMainWindowCore::pipelineBrowser() -{ - return this->Implementation->PipelineBrowser; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupPipelineBrowser(QDockWidget* dock_widget) -{ - this->Implementation->PipelineBrowser = new pqPipelineBrowser(dock_widget); - this->Implementation->PipelineBrowser->setObjectName("pipelineBrowser"); - - dock_widget->setWidget(this->Implementation->PipelineBrowser); - - QObject::connect( - &pqActiveView::instance(), SIGNAL(changed(pqView*)), - this->Implementation->PipelineBrowser, SLOT(setView(pqView*))); - - // Connect undo/redo. - QObject::connect( - this->Implementation->PipelineBrowser, SIGNAL(beginUndo(const QString&)), - this->Implementation->UndoStack, SLOT(beginUndoSet(const QString&))); - QObject::connect( - this->Implementation->PipelineBrowser, SIGNAL(endUndo()), - this->Implementation->UndoStack, SLOT(endUndoSet())); -} - -//----------------------------------------------------------------------------- -pqProxyTabWidget* pqMainWindowCore::setupProxyTabWidget(QDockWidget* dock_widget) -{ - pqProxyTabWidget* const proxyPanel = - new pqProxyTabWidget(dock_widget); - this->Implementation->ProxyPanel = proxyPanel; - - pqObjectInspectorWidget* object_inspector = proxyPanel->getObjectInspector(); - - dock_widget->setWidget(proxyPanel); - - //QObject::connect(object_inspector, - // SIGNAL(preaccept()), - // &this->Implementation->SelectionManager, - // SLOT(clearSelection())); - QObject::connect(object_inspector, - SIGNAL(accepted()), - this->Implementation->LookupTableManager, - SLOT(updateLookupTableScalarRanges())); - QObject::connect(object_inspector, SIGNAL(postaccept()), - this, SLOT(onPostAccept())); - QObject::connect(object_inspector, SIGNAL(accepted()), - &this->Implementation->PendingDisplayManager, - SLOT(createPendingDisplays())); - - // Save crash recovery state on "Apply" before changes - // are made, this grabs the last known good state. - pqSettings* settings = pqApplicationCore::instance()->settings(); - bool useCrashRecovery=settings->value("crashRecovery",false).toBool(); - if (useCrashRecovery) - { - QObject::connect(object_inspector, SIGNAL(preaccept()), - this, SLOT(onFileSaveRecoveryState())); - } - - // Use the server manager selection model to determine which page - // should be shown. - pqObjectInspectorDriver *driver = this->getObjectInspectorDriver(); - QObject::connect(driver, SIGNAL(outputPortChanged(pqOutputPort*)), - proxyPanel, SLOT(setOutputPort(pqOutputPort*))); - QObject::connect(driver, SIGNAL(representationChanged(pqDataRepresentation*, pqView*)), - proxyPanel, SLOT(setRepresentation(pqDataRepresentation*))); - QObject::connect(&pqActiveView::instance(), SIGNAL(changed(pqView*)), - proxyPanel, SLOT(setView(pqView*))); - - return proxyPanel; -} - -pqObjectInspectorWidget* pqMainWindowCore::setupObjectInspector(QDockWidget* dock_widget) -{ - pqObjectInspectorWidget* const object_inspector = - new pqObjectInspectorWidget(dock_widget); - - dock_widget->setWidget(object_inspector); - - //QObject::connect(object_inspector, - // SIGNAL(preaccept()), - // &this->Implementation->SelectionManager, - // SLOT(clearSelection())); - QObject::connect(object_inspector, SIGNAL(postaccept()), - this, SLOT(onPostAccept())); - QObject::connect(object_inspector, SIGNAL(accepted()), - this, SLOT(createPendingDisplays())); - - // Use the server manager selection model to determine which page - // should be shown. - pqObjectInspectorDriver *driver = this->getObjectInspectorDriver(); - QObject::connect(driver, SIGNAL(sourceChanged(pqProxy *)), - object_inspector, SLOT(setProxy(pqProxy *))); - QObject::connect(&pqActiveView::instance(), SIGNAL(changed(pqView*)), - object_inspector, SLOT(setView(pqView*))); - - return object_inspector; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupStatisticsView(QDockWidget* dock_widget) -{ - pqDataInformationWidget* const statistics_view = - new pqDataInformationWidget(dock_widget) - << pqSetName("statisticsView"); - - dock_widget->setWidget(statistics_view); -} - -//----------------------------------------------------------------------------- -pqAnimationViewWidget* pqMainWindowCore::setupAnimationView(QDockWidget* dock_widget) -{ - pqAnimationViewWidget* const animation_view = - new pqAnimationViewWidget(dock_widget) - << pqSetName("animationView"); - - pqAnimationManager* mgr = this->getAnimationManager(); - QObject::connect(mgr, SIGNAL(activeSceneChanged(pqAnimationScene*)), - animation_view, SLOT(setScene(pqAnimationScene*))); - dock_widget->setWidget(animation_view); - return animation_view; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupSelectionInspector(QDockWidget* dock_widget) -{ - pqSelectionInspectorPanel* const selection_inspector = - new pqSelectionInspectorPanel(dock_widget) - << pqSetName("selectionInspectorPanel"); - - QObject::connect( - &this->Implementation->ActiveServer, SIGNAL(changed(pqServer*)), - selection_inspector, SLOT(setServer(pqServer*))); - - selection_inspector->setSelectionManager(&this->Implementation->SelectionManager); - - //QObject::connect(this, SIGNAL(postAccept()), - // selection_inspector, SLOT(refresh())); - - //QObject::connect(core, SIGNAL(finishedAddingServer(pqServer*)), - // selection_inspector, SLOT(setServer(pqServer*))); - - dock_widget->setWidget(selection_inspector); -} - -//----------------------------------------------------------------------------- -pqLookmarkManagerModel* pqMainWindowCore::getLookmarkManagerModel() -{ - return this->Implementation->LookmarkManagerModel; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupLookmarkBrowser(QDockWidget* dock_widget) -{ - this->Implementation->LookmarkBrowser = - new pqLookmarkBrowser(this->Implementation->Lookmarks, dock_widget); - - QObject::connect(this->Implementation->LookmarkBrowser, - SIGNAL(loadLookmark(const QString&)), - this, - SLOT(onLoadLookmark(const QString&))); - - dock_widget->setWidget(this->Implementation->LookmarkBrowser); -} - - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupLookmarkInspector(QDockWidget* dock_widget) -{ - this->Implementation->LookmarkInspector = - new pqLookmarkInspector(this->Implementation->LookmarkManagerModel, - dock_widget); - this->Implementation->LookmarkInspector->setObjectName("lookmarkInspector"); - - QObject::connect(this->Implementation->LookmarkInspector, - SIGNAL(removeLookmark(const QString&)), - this->Implementation->LookmarkManagerModel, - SLOT(removeLookmark(const QString&))); - QObject::connect(this->Implementation->LookmarkInspector, - SIGNAL(loadLookmark(const QString&)), - this,SLOT(onLoadLookmark(const QString&))); - QObject::connect(this->Implementation->LookmarkBrowser, - SIGNAL(selectedLookmarksChanged(const QStringList &)), - this->Implementation->LookmarkInspector, - SLOT(onLookmarkSelectionChanged(const QStringList &))); - - dock_widget->setWidget(this->Implementation->LookmarkInspector); -} - -//----------------------------------------------------------------------------- -pqAnimationManager* pqMainWindowCore::getAnimationManager() -{ - if (!this->Implementation->AnimationManager) - { - this->Implementation->AnimationManager = new pqAnimationManager( - this->Implementation->Parent); - QObject::connect( - &this->Implementation->ActiveServer, SIGNAL(changed(pqServer*)), - this->Implementation->AnimationManager, - SLOT(onActiveServerChanged(pqServer*))); - - QObject::connect(this, SIGNAL(applicationSettingsChanged()), - this->Implementation->AnimationManager, - SLOT(updateApplicationSettings())); - - QObject::connect(this->Implementation->AnimationManager, - SIGNAL(activeSceneChanged(pqAnimationScene*)), - this, - SLOT(onActiveSceneChanged(pqAnimationScene*))); - QObject::connect(this->Implementation->AnimationManager, - SIGNAL(activeSceneChanged(pqAnimationScene*)), - &this->VCRController(), - SLOT(setAnimationScene(pqAnimationScene*))); - - this->Implementation->AnimationManager->setViewWidget( - &this->multiViewManager()); - - QObject::connect(this->Implementation->AnimationManager, - SIGNAL(beginNonUndoableChanges()), - this->Implementation->UndoStack, - SLOT(beginNonUndoableChanges())); - QObject::connect(this->Implementation->AnimationManager, - SIGNAL(endNonUndoableChanges()), - this->Implementation->UndoStack, - SLOT(endNonUndoableChanges())); - - QObject::connect(this->Implementation->AnimationManager, - SIGNAL(disconnectServer()), - this, - SLOT(onServerDisconnect()), - Qt::QueuedConnection); - } - return this->Implementation->AnimationManager; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupVariableToolbar(QToolBar* toolbar) -{ - this->Implementation->VariableToolbar = toolbar; - - pqDisplayColorWidget* display_color = new pqDisplayColorWidget(toolbar) - << pqSetName("displayColor"); - - toolbar->addWidget(display_color); - - QObject::connect(this->getObjectInspectorDriver(), - SIGNAL(representationChanged(pqDataRepresentation*, pqView*)), - display_color, - SLOT(setRepresentation(pqDataRepresentation*))); - - this->getColorScaleEditorManager()->setColorWidget(display_color); -} - -pqColorScaleToolbar* pqMainWindowCore::getColorScaleEditorManager() -{ - if(!this->Implementation->ColorScale) - { - this->Implementation->ColorScale = - new pqColorScaleToolbar(this->Implementation->Parent); - this->connect(this->getObjectInspectorDriver(), - SIGNAL(representationChanged(pqDataRepresentation*, pqView*)), - this->Implementation->ColorScale, - SLOT(setActiveRepresentation(pqDataRepresentation*))); - } - - return this->Implementation->ColorScale; -} - -//----------------------------------------------------------------------------- -pqObjectInspectorDriver* pqMainWindowCore::getObjectInspectorDriver() -{ - if(!this->Implementation->ObjectInspectorDriver) - { - this->Implementation->ObjectInspectorDriver = - new pqObjectInspectorDriver(this); - this->Implementation->ObjectInspectorDriver->setSelectionModel( - pqApplicationCore::instance()->getSelectionModel()); - this->connect(&pqActiveView::instance(), - SIGNAL(changed(pqView*)), - this->Implementation->ObjectInspectorDriver, - SLOT(setActiveView(pqView*))); - } - - return this->Implementation->ObjectInspectorDriver; -} - -//----------------------------------------------------------------------------- -pqActiveViewOptionsManager* pqMainWindowCore::getActiveViewOptionsManager() -{ - if(!this->Implementation->ActiveViewOptions) - { - this->Implementation->ActiveViewOptions = - new pqActiveViewOptionsManager(this->Implementation->Parent); - this->Implementation->ActiveViewOptions->setActiveView( - pqActiveView::instance().current()); - this->connect(&pqActiveView::instance(), SIGNAL(changed(pqView *)), - this->Implementation->ActiveViewOptions, SLOT(setActiveView(pqView *))); - - this->Implementation->ActiveViewOptions->setRenderViewOptions( - new pqActiveRenderViewOptions(this->Implementation->ActiveViewOptions)); - - pqActiveChartOptions *chartOptions = new pqActiveChartOptions( - this->Implementation->ActiveViewOptions); - this->Implementation->ActiveViewOptions->registerOptions( - pqBarChartView::barChartViewType(), chartOptions); - this->Implementation->ActiveViewOptions->registerOptions( - pqLineChartView::lineChartViewType(), chartOptions); - - pqActiveTwoDRenderViewOptions* twoDOptions = new pqActiveTwoDRenderViewOptions( - this->Implementation->ActiveViewOptions); - this->Implementation->ActiveViewOptions->registerOptions( - pqTwoDRenderView::twoDRenderViewType(), twoDOptions); - } - - return this->Implementation->ActiveViewOptions; -} - -//----------------------------------------------------------------------------- -pqViewContextMenuManager* pqMainWindowCore::getViewContextMenuManager() -{ - if(!this->Implementation->ViewContextMenu) - { - this->Implementation->ViewContextMenu = new pqViewContextMenuManager(this); - pqServerManagerModel* smModel = - pqApplicationCore::instance()->getServerManagerModel(); - QObject::connect(smModel, SIGNAL(viewAdded(pqView*)), - this->Implementation->ViewContextMenu, SLOT(setupContextMenu(pqView*))); - QObject::connect(smModel, SIGNAL(viewRemoved(pqView*)), - this->Implementation->ViewContextMenu, SLOT(cleanupContextMenu(pqView*))); - - // Bar chart - pqBarChartViewContextMenuHandler *barChart = - new pqBarChartViewContextMenuHandler( - this->Implementation->ViewContextMenu); - barChart->setOptionsManager(this->getActiveViewOptionsManager()); - this->connect(barChart, SIGNAL(screenshotRequested()), - this, SLOT(onFileSaveScreenshot())); - this->Implementation->ViewContextMenu->registerHandler( - pqBarChartView::barChartViewType(), barChart); - - // Line chart - pqLineChartViewContextMenuHandler *lineChart = - new pqLineChartViewContextMenuHandler( - this->Implementation->ViewContextMenu); - lineChart->setOptionsManager(this->getActiveViewOptionsManager()); - this->connect(lineChart, SIGNAL(screenshotRequested()), - this, SLOT(onFileSaveScreenshot())); - this->Implementation->ViewContextMenu->registerHandler( - pqLineChartView::lineChartViewType(), lineChart); - - // TODO: Stacked chart - pqStackedChartViewContextMenuHandler *stackedChart = - new pqStackedChartViewContextMenuHandler( - this->Implementation->ViewContextMenu); - stackedChart->setOptionsManager(this->getActiveViewOptionsManager()); - this->connect(stackedChart, SIGNAL(screenshotRequested()), - this, SLOT(onFileSaveScreenshot())); - //this->Implementation->ViewContextMenu->registerHandler( - // pqStackedChartView::stackedChartViewType(), stackedChart); - - // TODO: Statistical box chart - pqBoxChartViewContextMenuHandler *boxChart = - new pqBoxChartViewContextMenuHandler( - this->Implementation->ViewContextMenu); - boxChart->setOptionsManager(this->getActiveViewOptionsManager()); - this->connect(boxChart, SIGNAL(screenshotRequested()), - this, SLOT(onFileSaveScreenshot())); - //this->Implementation->ViewContextMenu->registerHandler( - // pqBoxChartView::boxChartViewType(), boxChart); - } - - return this->Implementation->ViewContextMenu; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupRepresentationToolbar(QToolBar* toolbar) -{ - pqDisplayRepresentationWidget* display_representation = new pqDisplayRepresentationWidget( - toolbar) - << pqSetName("displayRepresentation"); - - toolbar->addWidget(display_representation); - - QObject::connect(this->getObjectInspectorDriver(), - SIGNAL(representationChanged(pqDataRepresentation*, pqView*)), - display_representation, - SLOT(setRepresentation(pqDataRepresentation*))); - - QObject::connect(this, SIGNAL(postAccept()), - display_representation, SLOT(reloadGUI())); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupCommonFiltersToolbar(QToolBar* toolbar) -{ - // use QActions from Filters -> Common - if (this->Implementation->FiltersMenuManager) - { - QList<QAction*> actions = - this->Implementation->FiltersMenuManager->menu()->actions(); - foreach(QAction* action, actions) - { - QMenu* menu = action->menu(); - if(menu && action->text().remove('&') == "Common") - { - toolbar->addActions(menu->actions()); - break; - } - } - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupLookmarkToolbar(QToolBar* toolbar) -{ - this->Implementation->LookmarkToolbar = toolbar; - - // add in existing lookmarks first - for(int i=0; - i<this->Implementation->LookmarkManagerModel->getNumberOfLookmarks(); - i++) - { - pqLookmarkModel *lmk = - this->Implementation->LookmarkManagerModel->getLookmark(i); - this->Implementation->LookmarkToolbar->addAction( - QIcon(QPixmap::fromImage(lmk->getIcon())), lmk->getName()) - << pqSetName(lmk->getName()) << pqSetData(lmk->getName()); - } - - // connect up toolbar with lookmark manager events - QObject::connect(toolbar, SIGNAL(actionTriggered(QAction*)), - this, SLOT(onLoadToolbarLookmark(QAction*))); - QObject::connect(toolbar, - SIGNAL(customContextMenuRequested(const QPoint &)), - this, - SLOT(showLookmarkToolbarContextMenu(const QPoint &))); - QObject::connect(this->Implementation->LookmarkManagerModel, - SIGNAL(lookmarkAdded(const QString&, const QImage&)), - this, - SLOT(onLookmarkAdded(const QString&, const QImage&))); - QObject::connect(this->Implementation->LookmarkManagerModel, - SIGNAL(lookmarkRemoved(const QString&)), - this, - SLOT(onLookmarkRemoved(const QString&))); - QObject::connect(this->Implementation->LookmarkManagerModel, - SIGNAL(lookmarkNameChanged(const QString&, const QString&)), - this, - SLOT(onLookmarkNameChanged(const QString&, const QString&))); -} - - -//----------------------------------------------------------------------------- -void pqMainWindowCore::showLookmarkToolbarContextMenu(const QPoint &menuPos) -{ - QMenu menu; - menu.setObjectName("ToolbarLookmarkMenu"); - - // Create the actions that are not lookmark-specific - QAction *actionDisplayBrowser = new QAction("Lookmark Browser", - this->Implementation->LookmarkToolbar); - QObject::connect(actionDisplayBrowser, - SIGNAL(triggered()), - this->Implementation->LookmarkBrowser->parentWidget(), - SLOT(show())); - menu.addAction(actionDisplayBrowser); - QAction *actionNew = new QAction("New", - this->Implementation->LookmarkToolbar); - QObject::connect(actionNew, SIGNAL(triggered()), - this, SLOT(onToolsCreateLookmark())); - menu.addAction(actionNew); - - // Create the lookmark-specific toolbar context menu actions if the mouse - // event was over a lookmark - QAction *lmkAction = - this->Implementation->LookmarkToolbar->actionAt(menuPos); - if(lmkAction) - { - this->Implementation->CurrentToolbarLookmark = lmkAction->data().toString(); - if(this->Implementation->CurrentToolbarLookmark.isNull() || - this->Implementation->CurrentToolbarLookmark.isEmpty()) - { - return; - } - - QAction *actionEdit = new QAction("Edit", - this->Implementation->LookmarkToolbar); - QObject::connect(actionEdit, SIGNAL(triggered()), - this, SLOT(onEditToolbarLookmark())); - menu.addAction(actionEdit); - - //this->Implementation->LookmarkToolbarContextMenuActions.push_back( - //actionEdit); - QAction *actionRemove = new QAction("Delete", - this->Implementation->LookmarkToolbar); - //this->Implementation->LookmarkToolbarContextMenuActions.push_back( - //actionRemove); - QObject::connect(actionRemove, SIGNAL(triggered()), - this, SLOT(onRemoveToolbarLookmark())); - menu.addAction(actionRemove); - } - - menu.exec(this->Implementation->LookmarkToolbar->mapToGlobal(menuPos)); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onLookmarkAdded(const QString &name, const QImage &icon) -{ - this->Implementation->LookmarkToolbar->addAction( - QIcon(QPixmap::fromImage(icon)), name) - << pqSetName(name) << pqSetData(name); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onRemoveToolbarLookmark() -{ - if(this->Implementation->CurrentToolbarLookmark.isNull() || - this->Implementation->CurrentToolbarLookmark.isEmpty()) - { - return; - } - - this->Implementation->LookmarkManagerModel->removeLookmark( - this->Implementation->CurrentToolbarLookmark); -} - - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onLookmarkRemoved(const QString &name) -{ - // Remove the action associated with the lookmark. - QAction *action = - this->Implementation->LookmarkToolbar->findChild<QAction *>(name); - if(action) - { - this->Implementation->LookmarkToolbar->removeAction(action); - delete action; - } -} - -void pqMainWindowCore::onLookmarkNameChanged(const QString &oldName, - const QString &newName) -{ - QAction *action = - this->Implementation->LookmarkToolbar->findChild<QAction *>(oldName); - if(action) - { - action << pqSetName(newName); - action << pqSetData(newName); - action->setText(newName); - action->setIconText(newName); - action->setToolTip(newName); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onEditToolbarLookmark() -{ - if(this->Implementation->CurrentToolbarLookmark.isNull() || - this->Implementation->CurrentToolbarLookmark.isEmpty()) - { - return; - } - - this->Implementation->LookmarkBrowser->getSelectionModel()->clear(); - this->Implementation->LookmarkBrowser->getSelectionModel()->setCurrentIndex( - this->Implementation->Lookmarks->getIndexFor( - this->Implementation->CurrentToolbarLookmark),QItemSelectionModel::SelectCurrent); - this->Implementation->LookmarkInspector->parentWidget()->show(); -} - - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onLoadToolbarLookmark(QAction *action) -{ - if(!action) - { - return; - } - - this->onLoadLookmark(action->data().toString()); -} - - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onLoadLookmark(const QString &name) -{ - // If no sources are selected, the lookmark has multiple inputs, - // or there are more selected sources than the lookmark has inputs, - // prompt the user to specify which source(s) to use. - // Otherwise apply the lookmark to the selected source(s) - - pqApplicationCore* core = pqApplicationCore::instance(); - const pqServerManagerSelection *selections = - core->getSelectionModel()->selectedItems(); - - // Construct a list of the sources - - QList<pqPipelineSource*> sources; - pqPipelineSource *src; - for (int i=0; i<selections->size(); i++) - { - pqServerManagerModelItem *item = selections->at(i); - if( (src = dynamic_cast<pqPipelineSource*>(item)) ) - { - sources.push_back(src); - } - } - - this->Implementation->UndoStack->beginUndoSet( - QString("Load Lookmark %1").arg(this->Implementation->CurrentToolbarLookmark)); - - pqObjectBuilder* builder = core->getObjectBuilder(); - pqView *view = pqActiveView::instance().current(); - if (!view) - { - view = builder->createView(pqRenderView::renderViewType(), this->getActiveServer()); - } - - this->Implementation->LookmarkManagerModel->loadLookmark(this->getActiveServer(), - view, &sources, name); - - this->Implementation->UndoStack->endUndoSet(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupProgressBar(QStatusBar* toolbar) -{ - pqProgressWidget* const progress_bar = new pqProgressWidget(toolbar); - toolbar->addPermanentWidget(progress_bar); - - pqProgressManager* progress_manager = - pqApplicationCore::instance()->getProgressManager(); - - QObject::connect(progress_manager, SIGNAL(enableProgress(bool)), - progress_bar, SLOT(enableProgress(bool))); - - QObject::connect(progress_manager, SIGNAL(progress(const QString&, int)), - progress_bar, SLOT(setProgress(const QString&, int))); - - QObject::connect(progress_manager, SIGNAL(enableAbort(bool)), - progress_bar, SLOT(enableAbort(bool))); - - QObject::connect(progress_bar, SIGNAL(abortPressed()), - progress_manager, SLOT(triggerAbort())); - - progress_manager->addNonBlockableObject(progress_bar); - progress_manager->addNonBlockableObject(progress_bar->getAbortButton()); -} - -//----------------------------------------------------------------------------- -bool pqMainWindowCore::compareView( - const QString& referenceImage, - double threshold, - ostream& output, - const QString& tempDirectory) -{ - pqView* curView = pqActiveView::instance().current(); - - if (!curView) - { - output << "ERROR: Could not locate the active view." << endl; - return false; - } - - // All tests need a 300x300 render window size. - QSize cur_size = curView->getWidget()->size(); - curView->getWidget()->resize(300,300); - vtkImageData* test_image = curView->captureImage(1); - - if (!test_image) - { - output << "ERROR: Failed to capture snapshot." << endl; - return false; - } - - // The returned image will have extents translated to match the view position, - // we shift them back. - int viewPos[2]; - curView->getViewProxy()->GetViewPosition(viewPos); - // Update image extents based on ViewPosition - int extents[6]; - test_image->GetExtent(extents); - for (int cc=0; cc < 4; cc++) - { - extents[cc] -= viewPos[cc/2]; - } - test_image->SetExtent(extents); - - bool ret = pqCoreTestUtility::CompareImage(test_image, referenceImage, - threshold, output, tempDirectory); - test_image->Delete(); - curView->getWidget()->resize(cur_size); - curView->render(); - return ret; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::initializeStates() -{ - emit this->enableFileLoadServerState(true); - - emit this->enableFileSaveServerState(false); - emit this->enableFileSaveData(false); - emit this->enableFileSaveScreenshot(false); - - emit this->enableFileSaveAnimation(false); - emit this->enableFileSaveGeometry(false); - - emit this->enableServerConnect(true); - emit this->enableServerDisconnect(false); - - emit this->enableSourceCreate(true); - emit this->enableFilterCreate(false); - - emit this->enableVariableToolbar(false); - - emit this->enableCameraUndo(false); - emit this->enableCameraRedo(false); - emit this->cameraUndoLabel(""); - emit this->cameraRedoLabel(""); -} - -//----------------------------------------------------------------------------- -bool pqMainWindowCore::makeServerConnectionIfNoneExists() -{ - if (this->getActiveServer()) - { - return true; - } - - pqApplicationCore* core = pqApplicationCore::instance(); - if (core->getServerManagerModel()->getNumberOfItems<pqServer*>() != 0) - { - // cannot really happen, however, if no active server, yet - // server connection exists, we don't try to make a new server connection. - return false; - } - - // It is possible that we are waiting for a reverse connection to connect - // (this happends when playing back tests esp.). So wait until that reverse - // connection stuff is done with - vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); - while (pm->IsAcceptingConnections()) - { - pqEventDispatcher::processEventsAndWait(10); - } - - if (core->getServerManagerModel()->getNumberOfItems<pqServer*>() != 0) - { - // the waiting resulted in a successful connection, return true. - return true; - } - - return this->makeServerConnection(); -} - -//----------------------------------------------------------------------------- -bool pqMainWindowCore::makeServerConnection() -{ - pqApplicationCore* core = pqApplicationCore::instance(); - pqServerStartupBrowser server_browser (core->serverStartups(), - this->Implementation->Parent); - QStringList ignoreList; - ignoreList << "builtin"; - server_browser.setIgnoreList(ignoreList); - server_browser.exec(); - return (this->getActiveServer() != NULL); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::restoreSettings() -{ - // Load the most recently used file extensions from QSettings, if available. - pqSettings* settings = pqApplicationCore::instance()->settings(); - - if ( settings->contains("extensions/ScreenshotExtension") ) - { - this->ScreenshotExtension = - settings->value("extensions/ScreenshotExtension").toString(); - } - else - { - this->ScreenshotExtension = QString(); - } - - if ( settings->contains("extensions/DataExtension") ) - { - this->DataExtension = settings->value("extensions/DataExtension").toString(); - } - else - { - this->DataExtension = QString(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::saveSettings() -{ - // Save the most recently used file extensions to QSettings. - pqSettings* settings = pqApplicationCore::instance()->settings(); - settings->setValue("extensions/ScreenshotExtension", this->ScreenshotExtension); - settings->setValue("extensions/DataExtension", this->DataExtension); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::makeDefaultConnectionIfNoneExists() -{ - if (this->getActiveServer()) - { - return ; - } - - pqApplicationCore* core = pqApplicationCore::instance(); - if (core->getServerManagerModel()->getNumberOfItems<pqServer*>() != 0) - { - // cannot really happen, however, if no active server, yet - // server connection exists, we don't try to make a new server connection. - return ; - } - - pqServerResource resource = pqServerResource("builtin:"); - core->getObjectBuilder()->createServer(resource); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileOpen() -{ - this->makeServerConnectionIfNoneExists(); - pqServer *server = this->getActiveServer(); - if(server) - { - this->onFileOpen(server); - } - else - { - qDebug() << "No active server selected."; - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileOpen(pqServer* server) -{ - QString filters = this->Implementation->ReaderFactory.getSupportedFileTypes(server); - if (filters != "") - { - filters += ";;"; - } - filters += "All files (*)"; - pqFileDialog* const file_dialog = new pqFileDialog(server, - this->Implementation->Parent, tr("Open File:"), QString(), filters); - - file_dialog->setAttribute(Qt::WA_DeleteOnClose); - file_dialog->setObjectName("FileOpenDialog"); - file_dialog->setFileMode(pqFileDialog::ExistingFiles); - QObject::connect(file_dialog, SIGNAL(filesSelected(const QStringList&)), - this, SLOT(onFileOpen(const QStringList&))); - file_dialog->setModal(true); - file_dialog->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileOpen(const QStringList& files) -{ - this->createReaderOnActiveServer(files); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileLoadServerState() -{ - this->makeServerConnectionIfNoneExists(); - pqApplicationCore* core = pqApplicationCore::instance(); - int num_servers = core->getServerManagerModel()->getNumberOfItems<pqServer*>(); - if (num_servers > 0) - { - pqServer* server = this->getActiveServer(); - if (!server) - { - qDebug() << "No active server. Cannot load state."; - return; - } - - this->onFileLoadServerState(server); - } - else - { - qDebug() << "No server connection present."; - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileLoadServerState(pqServer*) -{ - QString filters; - filters += "ParaView state file (*.pvsm)"; - filters += ";;All files (*)"; - - pqFileDialog *fileDialog = new pqFileDialog(NULL, - this->Implementation->Parent, tr("Open Server State File:"), QString(), filters); - fileDialog->setAttribute(Qt::WA_DeleteOnClose); - fileDialog->setObjectName("FileLoadServerStateDialog"); - fileDialog->setFileMode(pqFileDialog::ExistingFile); - QObject::connect(fileDialog, SIGNAL(filesSelected(const QStringList&)), - this, SLOT(onFileLoadServerState(const QStringList&))); - fileDialog->setModal(true); - fileDialog->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileLoadServerState(const QStringList& files) -{ - pqServer *server = this->getActiveServer(); - for(int i = 0; i != files.size(); ++i) - { - // Read in the xml file to restore. - vtkPVXMLParser *xmlParser = vtkPVXMLParser::New(); - xmlParser->SetFileName(files[i].toAscii().data()); - xmlParser->Parse(); - - // Get the root element from the parser. - vtkPVXMLElement *root = xmlParser->GetRootElement(); - if (root) - { - pqApplicationCore::instance()->loadState(root, server); - - // Add this to the list of recent server resources ... - pqServerResource resource; - resource.setScheme("session"); - resource.setPath(files[i]); - resource.setSessionServer(server->getResource()); - pqApplicationCore::instance()->serverResources().add(resource); - pqApplicationCore::instance()->serverResources().save(*pqApplicationCore::instance()->settings()); - } - else - { - qCritical("Root does not exist. Either state file could not be opened " - "or it does not contain valid xml"); - } - - xmlParser->Delete(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileSaveServerState() -{ - QString filters; - filters += "ParaView state file (*.pvsm)"; - filters += ";;All files (*)"; - - pqFileDialog* const file_dialog = new pqFileDialog(NULL, - this->Implementation->Parent, tr("Save Server State:"), QString(), filters); - file_dialog->setAttribute(Qt::WA_DeleteOnClose); - file_dialog->setObjectName("FileSaveServerStateDialog"); - file_dialog->setFileMode(pqFileDialog::AnyFile); - QObject::connect(file_dialog, SIGNAL(filesSelected(const QStringList&)), - this, SLOT(onFileSaveServerState(const QStringList&))); - file_dialog->setModal(true); - file_dialog->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileSaveServerState(const QStringList& files) -{ - // NOTE: Of the two operations , building the XML tree - // and writing it to disk, building is the more expensive. - vtkPVXMLElement *root = vtkPVXMLElement::New(); - root->SetName("ParaView"); - pqApplicationCore::instance()->saveState(root); - //this->Implementation->MultiViewManager.saveState(root); - this->multiViewManager().saveState(root); - - // Print the xml to the requested file(s). - pqServer *server = this->getActiveServer(); - for(int i = 0; i != files.size(); ++i) - { - ofstream os(files[i].toAscii().data(), ios::out); - root->PrintXML(os, vtkIndent()); - - // Add this to the list of recent server resources ... - pqServerResource resource; - resource.setScheme("session"); - resource.setPath(files[i]); - resource.setSessionServer(server->getResource()); - pqApplicationCore::instance()->serverResources().add(resource); - pqApplicationCore::instance()->serverResources().save( - *pqApplicationCore::instance()->settings()); - } - - root->Delete(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileSaveRecoveryState() -{ - QStringList stateFileName; - stateFileName << CrashRecoveryStateFile; - this->onFileSaveServerState(stateFileName); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileSaveData() -{ - pqOutputPort* port = qobject_cast<pqOutputPort*>(this->getActiveObject()); - if (!port) - { - pqPipelineSource* source = this->getActiveSource(); - if (source) - { - port = source->getOutputPort(0); - } - } - - if (!port) - { - qDebug() << "No active source, cannot save data."; - return; - } - - // Get the list of writers that can write the output from the given source. - QString filters = - this->Implementation->WriterFactory.getSupportedFileTypes(port); - - pqFileDialog file_dialog(port->getServer(), - this->Implementation->Parent, tr("Save File:"), QString(), filters); - file_dialog.setRecentlyUsedExtension(this->DataExtension); - file_dialog.setObjectName("FileSaveDialog"); - file_dialog.setFileMode(pqFileDialog::AnyFile); - QObject::connect(&file_dialog, SIGNAL(filesSelected(const QStringList&)), - this, SLOT(onFileSaveData(const QStringList&))); - - if ( file_dialog.exec() == QDialog::Accepted ) - { - QString selectedFile = file_dialog.getSelectedFiles()[0]; - QFileInfo fileInfo = QFileInfo( selectedFile ); - this->DataExtension = QString("*.") + fileInfo.suffix(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileSaveData(const QStringList& files) -{ - pqOutputPort* port = qobject_cast<pqOutputPort*>(this->getActiveObject()); - if (!port) - { - pqPipelineSource* source = this->getActiveSource(); - if (source) - { - port = source->getOutputPort(0); - } - } - - if (!port) - { - qDebug() << "No active source, cannot save data."; - return; - } - - if (files.size() == 0) - { - qDebug() << "No file choose to save."; - return; - } - - vtkSmartPointer<vtkSMProxy> proxy; - proxy.TakeReference( - this->Implementation->WriterFactory.newWriter(files[0], port)); - - vtkSMSourceProxy* writer = vtkSMSourceProxy::SafeDownCast(proxy); - if (!writer) - { - qDebug() << "Failed to create writer for: " << files[0]; - return; - } - - if (writer->IsA("vtkSMPSWriterProxy") && port->getServer()->getNumberOfPartitions() > 1) - { - pqOptions* options = pqOptions::SafeDownCast( - vtkProcessModule::GetProcessModule()->GetOptions()); - // HACK: To avoid showing the dialog when running tests. We need a better - // way to deciding that a test is running. - if (options->GetTestFiles().size() == 0) - { - QMessageBox::StandardButton result = - QMessageBox::question( - this->Implementation->Parent, - "Serial Writer Warning", - "This writer will collect all of the data to the first node before " - "writing because it does not support parallel IO. This may cause the " - "first node to run out of memory if the data is large. " - "Are you sure you want to continue?", - QMessageBox::Ok | QMessageBox::Cancel, - QMessageBox::Cancel); - if (result == QMessageBox::Cancel) - { - return; - } - } - } - - // The "FileName" and "Input" properties of the writer are set here. - // All others will be editable from the properties dialog. - - vtkSMStringVectorProperty *filenameProperty = - vtkSMStringVectorProperty::SafeDownCast(writer->GetProperty("FileName")); - filenameProperty->SetElement(0, files[0].toAscii().data()); - - pqSMAdaptor::setInputProperty(writer->GetProperty("Input"), - port->getSource()->getProxy(), - port->getPortNumber()); - - pqWriterDialog dialog(writer); - - // Check to see if this writer has any properties that can be configured by - // the user. If it does, display the dialog. - if(dialog.hasConfigurableProperties()) - { - dialog.exec(); - if(dialog.result() == QDialog::Rejected) - { - // The user pressed Cancel so don't write - return; - } - } - - writer->UpdateVTKObjects(); - - writer->UpdatePipeline(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileSaveScreenshot() -{ - pqView* view = pqActiveView::instance().current(); - if(!view) - { - qDebug() << "Cannnot save image. No active view."; - return; - } - - pqSaveSnapshotDialog ssDialog(this->Implementation->Parent); - ssDialog.setViewSize(view->getSize()); - ssDialog.setAllViewsSize(this->multiViewManager().clientSize()); - - if (ssDialog.exec() != QDialog::Accepted) - { - return; - } - - QString filters; - filters += "PNG image (*.png)"; - filters += ";;BMP image (*.bmp)"; - filters += ";;TIFF image (*.tif)"; - filters += ";;PPM image (*.ppm)"; - filters += ";;JPG image (*.jpg)"; - filters += ";;PDF file (*.pdf)"; - pqFileDialog file_dialog(NULL, - this->Implementation->Parent, tr("Save Screenshot:"), QString(), filters); - file_dialog.setRecentlyUsedExtension(this->ScreenshotExtension); - file_dialog.setObjectName("FileSaveScreenshotDialog"); - file_dialog.setFileMode(pqFileDialog::AnyFile); - if (file_dialog.exec() != QDialog::Accepted) - { - return; - } - - QSize chosenSize = ssDialog.viewSize(); - QString palette = ssDialog.palette(); - - // temporarily load the color palette chosen by the user. - vtkSmartPointer<vtkPVXMLElement> currentPalette; - pqApplicationCore* core = pqApplicationCore::instance(); - if (!palette.isEmpty()) - { - currentPalette.TakeReference(core->getCurrrentPalette()); - core->loadPalette(palette); - } - vtkSmartPointer<vtkImageData> img; - QString file = file_dialog.getSelectedFiles()[0]; - QFileInfo fileInfo = QFileInfo( file ); - this->ScreenshotExtension = QString("*.") + fileInfo.suffix(); - - int stereo = ssDialog.getStereoMode(); - QList<pqView*> views; - if (stereo) - { - pqRenderViewBase::setStereo(stereo); - } - - if (ssDialog.saveAllViews()) - { - img.TakeReference(this->multiViewManager().captureImage( - chosenSize.width(), chosenSize.height())); - } - else - { - img.TakeReference(view->captureImage(chosenSize)); - } - - if (img.GetPointer() == NULL) - { - qCritical() << "Save Image failed."; - } - else - { - pqImageUtil::saveImage(img, file, ssDialog.quality()); - } - - if (stereo) - { - pqRenderViewBase::setStereo(0); - core->render(); - } - - // restore palette. - if (!palette.isEmpty()) - { - core->loadPalette(currentPalette); - } - -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileExport() -{ - QString filters = - this->Implementation->ViewExporterManager.getSupportedFileTypes(); - if (filters.isEmpty()) - { - qDebug() << "Cannot export current view."; - return; - } - - pqFileDialog file_dialog(NULL, - this->Implementation->Parent, tr("Save File:"), QString(), filters); - file_dialog.setObjectName("FileExportDialog"); - file_dialog.setFileMode(pqFileDialog::AnyFile); - if (file_dialog.exec() == QDialog::Accepted && - file_dialog.getSelectedFiles().size() > 0) - { - if (!this->Implementation->ViewExporterManager.write( - file_dialog.getSelectedFiles()[0])) - { - qCritical() << "Failed to export correctly."; - } - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onFileSaveAnimation() -{ - pqAnimationManager* mgr = this->getAnimationManager(); - if (!mgr || !mgr->getActiveScene()) - { - qDebug() << "Cannot save animation since no active scene is present."; - return; - } - mgr->saveAnimation(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onSaveGeometry() -{ - pqAnimationManager* mgr = this->getAnimationManager(); - if (!mgr || !mgr->getActiveScene()) - { - qDebug() << "Cannot save animation geometry since no active scene is present."; - return; - } - pqView* view = pqActiveView::instance().current(); - if (!view) - { - qDebug() << "Cannot save animation geometry since no active view."; - return; - } - - QString filters = "ParaView Data files (*.pvd);;All files (*)"; - pqFileDialog* const file_dialog = new pqFileDialog( - this->getActiveServer(), - this->Implementation->Parent, - tr("Save Animation Geometry"), - QString(), - filters); - file_dialog->setAttribute(Qt::WA_DeleteOnClose); - file_dialog->setObjectName("FileSaveAnimationDialog"); - file_dialog->setFileMode(pqFileDialog::AnyFile); - QObject::connect(file_dialog, SIGNAL(filesSelected(const QStringList&)), - this, SLOT(onSaveGeometry(const QStringList&))); - file_dialog->setModal(true); - file_dialog->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onSaveGeometry(const QStringList& files) -{ - pqAnimationManager* mgr = this->getAnimationManager(); - if (!mgr || !mgr->getActiveScene()) - { - qDebug() << "Cannot save animation since no active scene is present."; - return; - } - pqView* view = pqActiveView::instance().current(); - if (!view) - { - qDebug() << "Cannot save animation geometry since no active view."; - return; - } - - if (!mgr->saveGeometry(files[0], view)) - { - qDebug() << "Animation save geometry failed!"; - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onEditCameraUndo() -{ - pqRenderView* view = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if (!view) - { - qDebug() << "No active render module, cannot undo camera."; - return; - } - view->undo(); - view->render(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onEditCameraRedo() -{ - pqRenderView* view = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if (!view) - { - qDebug() << "No active render module, cannot redo camera."; - return; - } - view->redo(); - view->render(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onServerConnect() -{ - pqServer* server = this->getActiveServer(); - - pqApplicationCore* core = pqApplicationCore::instance(); - pqServerManagerModel* smmodel = core->getServerManagerModel(); - - if (server && smmodel->findItems<pqPipelineSource*>(server).size() > 0) - { - int ret = QMessageBox::warning(this->Implementation->Parent, - tr("Disconnect from current server?"), - tr("Before connecting to a new server, \n" - "the current connection will be closed and \n" - "the state will be discarded.\n\n" - "Are you sure you want to continue?"), - QMessageBox::Yes | QMessageBox::No); - if (ret == QMessageBox::No) - { - return; - } - } - - this->makeServerConnection(); - - // If for some reason, the connect failed, - // we create a default builtin connection. - this->makeDefaultConnectionIfNoneExists(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onServerDisconnect() -{ - pqApplicationCore* core = pqApplicationCore::instance(); - pqServerManagerModel* smmodel = core->getServerManagerModel(); - pqServer* server = this->getActiveServer(); - - if (server && smmodel->findItems<pqPipelineSource*>(server).size() > 0) - { - int ret = QMessageBox::warning(this->Implementation->Parent, - tr("Disconnect from current server?"), - tr("The current connection will be closed and \n" - "the state will be discarded.\n\n" - "Are you sure you want to continue?"), - QMessageBox::Yes | QMessageBox::No); - if (ret == QMessageBox::No) - { - return; - } - } - - if (server) - { - core->getObjectBuilder()->removeServer(server); - } - QList<QWidget*> removed; - this->Implementation->MultiViewManager.reset(removed); - foreach (QWidget* widget, removed) - { - delete widget; - } - - pqEventDispatcher::processEventsAndWait(1); - - // Always have a builtin connection connected. - this->makeDefaultConnectionIfNoneExists(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::ignoreTimesFromSelectedSources(bool ignore) -{ - this->Implementation->UndoStack->beginUndoSet( - QString("Toggle Ignore Time")); - const pqServerManagerSelection *selections = - pqApplicationCore::instance()->getSelectionModel()->selectedItems(); - foreach (pqServerManagerModelItem* item, (*selections)) - { - pqOutputPort* port = qobject_cast<pqOutputPort*>(item); - pqPipelineSource* source = port? port->getSource(): - qobject_cast<pqPipelineSource*>(item); - if (source) - { - if (ignore) - { - source->getServer()->getTimeKeeper()->removeSource(source); - } - else - { - source->getServer()->getTimeKeeper()->addSource(source); - } - } - } - this->Implementation->UndoStack->endUndoSet(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsCreateCustomFilter() -{ - // Get the selected sources from the application core. Notify the user - // if the selection is empty. - QWidget *mainWin = this->Implementation->Parent; - const pqServerManagerSelection *selections = - pqApplicationCore::instance()->getSelectionModel()->selectedItems(); - if(selections->size() == 0) - { - QMessageBox::warning(mainWin, "Create Custom Filter Error", - "No pipeline objects are selected.\n" - "To create a new custom filter, select the sources and " - "filters you want.\nThen, launch the creation wizard.", - QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton); - return; - } - - // Create a custom filter definition model with the pipeline - // selection. The model only accepts pipeline sources. Notify the - // user if the model is empty. - pqCustomFilterDefinitionModel custom(this); - custom.setContents(selections); - if(!custom.hasChildren(QModelIndex())) - { - QMessageBox::warning(mainWin, "Create Custom Filter Error", - "The selected objects cannot be used to make a custom filter.\n" - "To create a new custom filter, select the sources and " - "filters you want.\nThen, launch the creation wizard.", - QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton); - return; - } - - pqCustomFilterDefinitionWizard wizard(&custom, mainWin); - if(wizard.exec() == QDialog::Accepted) - { - // Create a new compound proxy from the custom filter definition. - wizard.createCustomFilter(); - QString customName = wizard.getCustomFilterName(); - - // Launch the custom filter manager in case the user wants to save - // the compound proxy definition. Select the new custom filter for - // the user. - this->onToolsManageCustomFilters(); - this->Implementation->CustomFilterManager->selectCustomFilter(customName); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsManageCustomFilters() -{ - if(!this->Implementation->CustomFilterManager) - { - this->Implementation->CustomFilterManager = - new pqCustomFilterManager(this->Implementation->CustomFilters, - this->Implementation->Parent); - } - - this->Implementation->CustomFilterManager->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsCreateLookmark() -{ - // Create a lookmark of the currently active view - this->onToolsCreateLookmark(pqActiveView::instance().current()); -} -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsCreateLookmark(QWidget* widget) -{ - pqMultiViewFrame* frame= qobject_cast<pqMultiViewFrame*>(widget); - if(frame) - { - // Create a lookmark of the currently active view - this->onToolsCreateLookmark( - this->Implementation->MultiViewManager.getView(frame)); - } - -} -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsCreateLookmark(pqView *view) -{ - // right now we only support Lookmarks of render modules - if(!view->supportsLookmarks()) - { - qCritical() << "This view type does not support lookmarks."; - return; - } - - pqLookmarkDefinitionWizard wizard(this->Implementation->LookmarkManagerModel, - view, - this->Implementation->Parent); - if(wizard.exec() == QDialog::Accepted) - { - wizard.createLookmark(); - } -} - - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsDumpWidgetNames() -{ - QStringList names; - pqObjectNaming::DumpHierarchy(names); - names.sort(); - - for(int i = 0; i != names.size(); ++i) - { - qDebug() << names[i]; - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsRecordTest() -{ - QString filters; - filters += "XML Files (*.xml);;"; -#ifdef QT_TESTING_WITH_PYTHON - filters += "Python Files (*.py);;"; -#endif - filters += "All Files (*)"; - pqFileDialog *fileDialog = new pqFileDialog(NULL, - this->Implementation->Parent, tr("Record Test"), QString(), filters); - fileDialog->setAttribute(Qt::WA_DeleteOnClose); - fileDialog->setObjectName("ToolsRecordTestDialog"); - fileDialog->setFileMode(pqFileDialog::AnyFile); - QObject::connect(fileDialog, SIGNAL(filesSelected(const QStringList &)), - this, SLOT(onToolsRecordTest(const QStringList &))); - fileDialog->setModal(true); - fileDialog->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsRecordTest(const QStringList &fileNames) -{ - if(fileNames.empty()) - { - return; - } - - this->Implementation->TestUtility.recordTests(fileNames[0]); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsRecordTestScreenshot() -{ - if(!qobject_cast<pqRenderView*>(pqActiveView::instance().current())) - { - qDebug() << "Cannnot save image. No active render module."; - return; - } - - QString filters; - filters += "PNG Image (*.png)"; - filters += ";;BMP Image (*.bmp)"; - filters += ";;TIFF Image (*.tif)"; - filters += ";;PPM Image (*.ppm)"; - filters += ";;JPG Image (*.jpg)"; - filters += ";;All Files (*)"; - pqFileDialog *fileDialog = new pqFileDialog(NULL, - this->Implementation->Parent, tr("Save Test Screenshot"), QString(), - filters); - fileDialog->setAttribute(Qt::WA_DeleteOnClose); - fileDialog->setObjectName("RecordTestScreenshotDialog"); - fileDialog->setFileMode(pqFileDialog::AnyFile); - QObject::connect(fileDialog, SIGNAL(filesSelected(const QStringList &)), - this, SLOT(onToolsRecordTestScreenshot(const QStringList &))); - fileDialog->setModal(true); - fileDialog->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsRecordTestScreenshot(const QStringList &fileNames) -{ - pqRenderView* const render_module = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if(!render_module) - { - qCritical() << "Cannnot save image. No active render module."; - return; - } - - QVTKWidget* const widget = - qobject_cast<QVTKWidget*>(render_module->getWidget()); - assert(widget); - - QSize old_size = widget->size(); - widget->resize(300,300); - - QStringList::ConstIterator iter = fileNames.begin(); - for( ; iter != fileNames.end(); ++iter) - { - if(!pqCoreTestUtility::SaveScreenshot( - widget->GetRenderWindow(), *iter)) - { - qCritical() << "Save Image failed."; - } - } - - widget->resize(old_size); - render_module->render(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsPlayTest() -{ - QString filters; - filters += "XML Files (*.xml);;"; -#ifdef QT_TESTING_WITH_PYTHON - filters += "Python Files (*.py);;"; -#endif - filters += "All Files (*)"; - pqFileDialog *fileDialog = new pqFileDialog(NULL, - this->Implementation->Parent, tr("Play Test"), QString(), filters); - fileDialog->setAttribute(Qt::WA_DeleteOnClose); - fileDialog->setObjectName("ToolsPlayTestDialog"); - fileDialog->setFileMode(pqFileDialog::ExistingFile); - QObject::connect(fileDialog, SIGNAL(filesSelected(const QStringList&)), - this, SLOT(onToolsPlayTest(const QStringList&))); - fileDialog->setModal(true); - fileDialog->show(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsPlayTest(const QStringList &fileNames) -{ - if(1 == fileNames.size()) - { - this->Implementation->TestUtility.playTests(fileNames[0]); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsTimerLog() -{ - if(!this->Implementation->TimerLog) - { - this->Implementation->TimerLog - = new pqTimerLogDisplay(this->Implementation->Parent); - this->Implementation->TimerLog->setAttribute(Qt::WA_QuitOnClose, false); - } - this->Implementation->TimerLog->show(); - this->Implementation->TimerLog->raise(); - this->Implementation->TimerLog->activateWindow(); - this->Implementation->TimerLog->refresh(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsOutputWindow() -{ - vtkProcessModuleGUIHelper *helper - = vtkProcessModule::GetProcessModule()->GetGUIHelper(); - pqProcessModuleGUIHelper *pqHelper - = pqProcessModuleGUIHelper::SafeDownCast(helper); - if (!pqHelper) - { - qWarning("Could not get the pqProcessModuleGUIHelper"); - } - else - { - pqHelper->showOutputWindow(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsPythonShell() -{ -#ifdef PARAVIEW_ENABLE_PYTHON - pqPythonDialog* dialog = this->Implementation->PythonManager.pythonShellDialog(); - dialog->show(); - dialog->raise(); - dialog->activateWindow(); -#else // PARAVIEW_ENABLE_PYTHON - QMessageBox::information(NULL, "ParaView", "Python Shell not available"); -#endif // PARAVIEW_ENABLE_PYTHON -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onHelpEnableTooltips(bool enabled) -{ - if (enabled) - { - delete this->Implementation->ToolTipTrapper; - this->Implementation->ToolTipTrapper = 0; - } - else - { - this->Implementation->ToolTipTrapper = new pqToolTipTrapper(); - } - - // Save in settings. - pqSettings* settings = pqApplicationCore::instance()->settings(); - settings->setValue("/EnableTooltips", enabled); - emit this->enableTooltips(enabled); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onEditViewSettings() -{ - pqActiveViewOptionsManager *manager = this->getActiveViewOptionsManager(); - manager->showOptions(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onEditSettings() -{ - // Setup the applications dialog (if it hasn't been built already) - this->setupApplicationSettingsDialog(); - - // Show the dialog - this->Implementation->ApplicationSettings->show(); - this->Implementation->ApplicationSettings->raise(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::addApplicationSettings(pqOptionsContainer *options) -{ - // Setup the applications dialog (if it hasn't been built already) - this->setupApplicationSettingsDialog(); - - // Add the options - this->Implementation->ApplicationSettings->addOptions(options); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setupApplicationSettingsDialog() -{ - // Create the application settings dialog if it does not exist. - if(!this->Implementation->ApplicationSettings) - { - this->Implementation->ApplicationSettings = - new pqApplicationOptionsDialog(this->Implementation->Parent); - this->Implementation->ApplicationSettings->setObjectName("ApplicationSettings"); - this->Implementation->ApplicationSettings->setAttribute(Qt::WA_QuitOnClose, false); - QObject::connect(this->Implementation->ApplicationSettings, - SIGNAL(appliedChanges()), - this, SIGNAL(applicationSettingsChanged())); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onCreateSource(const QString& name) -{ - this->makeServerConnectionIfNoneExists(); - - if (this->getActiveServer()) - { - if (!this->createSourceOnActiveServer(name)) - { - qCritical() << "Source could not be created."; - } - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onCreateFilter(const QString& filterName) -{ - if (!this->createFilterForActiveSource(filterName)) - { - qCritical() << "Filter could not be created."; - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onSelectionChanged() -{ - pqServerManagerModelItem *item = this->getActiveObject(); - pqOutputPort* opPort = qobject_cast<pqOutputPort*>(item); - pqPipelineSource *source = opPort? opPort->getSource() : - qobject_cast<pqPipelineSource*>(item); - pqServer *server = this->getActiveServer(); - - pqApplicationCore *core = pqApplicationCore::instance(); - int numServers = core->getServerManagerModel()->getNumberOfItems<pqServer*>(); - pqView* view = pqActiveView::instance().current(); - pqRenderView* renderView = qobject_cast<pqRenderView*>(view); - bool pendingDisplays = - this->Implementation->PendingDisplayManager.getNumberOfPendingDisplays() > 0; - - if (this->Implementation->PreviouslySelectedSource) - { - QObject::disconnect(this->Implementation->PreviouslySelectedSource, - SIGNAL(dataUpdated(pqPipelineSource*)), - this->Implementation->FiltersMenuManager, - SLOT(updateEnableState())); - } - this->Implementation->PreviouslySelectedSource = source; - - if (source) - { - QObject::connect(source, SIGNAL(dataUpdated(pqPipelineSource*)), - this->Implementation->FiltersMenuManager, SLOT(updateEnableState())); - } - - // Update the server connect/disconnect actions. - // emit this->enableServerConnect(numServers == 0); -- it's always possible to - // create a new connection, it just implies that we'll disconnect before - // connecting to the new one. - emit this->enableServerDisconnect(server != 0); - - // Update various actions that depend on pending displays. - this->updatePendingActions(server, source, numServers, pendingDisplays); - - // Update the reset center action. - emit this->enableResetCenter(source != 0 && renderView != 0); - - // Update the save screenshot action. - emit this->enableFileSaveScreenshot(server != 0 && view != 0); - - // Update the animation manager if it exists. - if(this->Implementation->AnimationManager) - { - // Update the animation manager. Setting the active server will - // change the active scene. - this->Implementation->AnimationManager->onActiveServerChanged(server); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onPendingDisplayChanged(bool pendingDisplays) -{ - pqServerManagerModelItem *item = this->getActiveObject(); - pqPipelineSource *source = dynamic_cast<pqPipelineSource *>(item); - pqServer *server = this->getActiveServer(); - - pqApplicationCore *core = pqApplicationCore::instance(); - int numServers = core->getServerManagerModel()->getNumberOfItems<pqServer*>(); - this->updatePendingActions(server, source, numServers, pendingDisplays); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onActiveViewChanged(pqView* view) -{ - pqRenderView* renderView = qobject_cast<pqRenderView*>(view); - - // Get the active source and server. - pqServerManagerModelItem *item = this->getActiveObject(); - pqPipelineSource *source = dynamic_cast<pqPipelineSource *>(item); - pqServer *server = this->getActiveServer(); - - // Update the reset center action. - emit this->enableResetCenter(source != 0 && renderView != 0); - - // Update the show center axis action. - emit this->enableShowCenterAxis(renderView != 0); - - // Update the save screenshot action. - emit this->enableFileSaveScreenshot(server != 0 && view != 0); - - // Update the animation manager if it exists. - if(this->Implementation->AnimationManager) - { - pqAnimationScene *scene = - this->Implementation->AnimationManager->getActiveScene(); - emit this->enableFileSaveGeometry(scene != 0 && renderView != 0); - } - - // Update the view undo/redo state. - this->updateViewUndoRedo(renderView); - if(renderView) - { - // Make sure the render module undo stack is connected. - this->connect(renderView, SIGNAL(canUndoChanged(bool)), - this, SLOT(onActiveViewUndoChanged())); - } - - if(this->Implementation->CameraDialog) - { - this->showCameraDialog(view); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onActiveViewUndoChanged() -{ - pqRenderView* renderView = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if(renderView && renderView == this->sender()) - { - this->updateViewUndoRedo(renderView); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onActiveSceneChanged(pqAnimationScene *scene) -{ - pqRenderView* renderView = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - emit this->enableFileSaveAnimation(scene != 0); - emit this->enableFileSaveGeometry(scene != 0 && renderView != 0); -} - -//----------------------------------------------------------------------------- -pqServerManagerModelItem *pqMainWindowCore::getActiveObject() const -{ - pqServerManagerModelItem *item = 0; - pqServerManagerSelectionModel *selection = - pqApplicationCore::instance()->getSelectionModel(); - const pqServerManagerSelection *selected = selection->selectedItems(); - if(selected->size() == 1) - { - item = selected->first(); - } - else if(selected->size() > 1) - { - item = selection->currentItem(); - if(item && !selection->isSelected(item)) - { - item = 0; - } - } - - return item; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::updatePendingActions(pqServer *server, - pqPipelineSource *source, int numServers, bool pendingDisplays) -{ - // Update the file menu actions. - emit this->enableFileLoadServerState(!pendingDisplays && - (!numServers || server != 0)); - emit this->enableFileSaveServerState(!pendingDisplays && server !=0); - emit this->enableFileSaveData(!pendingDisplays && source); - - // Update the source and filter menus. - emit this->enableSourceCreate(!pendingDisplays && - (numServers == 0 || server != 0)); - emit this->enableFilterCreate(!pendingDisplays && - source != 0 && server != 0); - - // Update the variable toolbar. - emit this->enableVariableToolbar(source != 0 && !pendingDisplays); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::updateViewUndoRedo(pqRenderView* renderView) -{ - bool can_undo_camera = false; - bool can_redo_camera = false; - QString undo_camera_label; - QString redo_camera_label; - - if(renderView) - { - if (renderView->canUndo()) - { - can_undo_camera = true; - undo_camera_label = "Interaction"; - } - if (renderView->canRedo()) - { - can_redo_camera = true; - redo_camera_label = "Interaction"; - } - } - - emit this->enableCameraUndo(can_undo_camera); - emit this->enableCameraRedo(can_redo_camera); - emit this->cameraUndoLabel(undo_camera_label); - emit this->cameraRedoLabel(redo_camera_label); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onServerCreation(pqServer* server) -{ - pqApplicationCore* core = pqApplicationCore::instance(); - this->Implementation->ActiveServer.setCurrent(server); - - // Check if it is possible to access display on the server. If not, we show a - // message. - vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); - vtkPVDisplayInformation* di = vtkPVDisplayInformation::New(); - pm->GatherInformation(server->GetConnectionID(), - vtkProcessModule::RENDER_SERVER, di, pm->GetProcessModuleID()); - if (!di->GetCanOpenDisplay()) - { - QMessageBox::warning(this->Implementation->Parent, - tr("Server DISPLAY not accessible"), - tr("Display is not accessible on the server side.\n" - "Remote rendering will be disabled."), - QMessageBox::Ok); - } - di->Delete(); - pqSettings* settings = core->settings(); - QString curView = settings->value("/defaultViewType", - pqRenderView::renderViewType()).toString(); - - if (curView != "None" && !curView.isEmpty()) - { - // When a server is created, we create a new render view for it. - if(pqView* view = core->getObjectBuilder()->createView(curView, server)) - { - view->render(); - } - } - - // Show warning dialogs before server times out. - QObject::connect(server, SIGNAL(fiveMinuteTimeoutWarning()), - this, SLOT(fiveMinuteTimeoutWarning())); - QObject::connect(server, SIGNAL(finalTimeoutWarning()), - this, SLOT(finalTimeoutWarning())); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onServerCreationFinished(pqServer *server) -{ - pqApplicationCore *core = pqApplicationCore::instance(); - core->getSelectionModel()->setCurrentItem(server, - pqServerManagerSelectionModel::ClearAndSelect); - - this->Implementation->UndoStack->clear(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onRemovingServer(pqServer *server) -{ - - // Make sure the server and its sources are not selected. - pqServerManagerSelection toDeselect; - pqApplicationCore *core = pqApplicationCore::instance(); - pqServerManagerSelectionModel *selection = core->getSelectionModel(); - toDeselect.append(server); - QList<pqPipelineSource*> sources = - core->getServerManagerModel()->findItems<pqPipelineSource*>(server); - QList<pqPipelineSource*>::Iterator iter = sources.begin(); - for( ; iter != sources.end(); ++iter) - { - toDeselect.append(*iter); - } - - selection->select(toDeselect, pqServerManagerSelectionModel::Deselect); - if(selection->currentItem() == server) - { - if(selection->selectedItems()->size() > 0) - { - selection->setCurrentItem(selection->selectedItems()->last(), - pqServerManagerSelectionModel::NoUpdate); - } - else - { - selection->setCurrentItem(0, pqServerManagerSelectionModel::NoUpdate); - } - } - - this->Implementation->ActiveServer.setCurrent(0); -} - -//----------------------------------------------------------------------------- -/// Called when a new reader is created by the GUI. -void pqMainWindowCore::onReaderCreated(pqPipelineSource* reader, - const QStringList& files) -{ - if (!reader || files.size() == 0) - { - return; - } - - pqApplicationCore* core = pqApplicationCore::instance(); - pqServer* server = reader->getServer(); - - // Add this to the list of recent server resources ... - pqServerResource resource = server->getResource(); - resource.setPath(files[0]); - resource.addData("readergroup", reader->getProxy()->GetXMLGroup()); - resource.addData("reader", reader->getProxy()->GetXMLName()); - resource.addData("extrafilesCount", QString("%1").arg(files.size()-1)); - for (int cc=1; cc < files.size(); cc++) - { - resource.addData(QString("file.%1").arg(cc-1), files[cc]); - } - core->serverResources().add(resource); - core->serverResources().save(*core->settings()); -} - -//----------------------------------------------------------------------------- -// Called when any pqProxy or subclass is created, -// We update the undo stack to include an element -// which will manage the helper proxies correctly. -void pqMainWindowCore::onProxyCreation(pqProxy* proxy) -{ - if (proxy->getHelperProxies().size() > 0) - { - pqHelperProxyRegisterUndoElement* elem = - pqHelperProxyRegisterUndoElement::New(); - elem->RegisterHelperProxies(proxy); - this->Implementation->UndoStack->addToActiveUndoSet(elem); - elem->Delete(); - } -} - - -// Go upstream till we find an input that has timesteps and hide its time. -static void pqMainWindowCoreHideInputTimes(pqPipelineFilter* filter, - bool hide) -{ - if (!filter) - { - return; - } - QList<pqOutputPort*> inputs = filter->getAllInputs(); - foreach (pqOutputPort* input, inputs) - { - pqPipelineSource* source = input->getSource(); - if ( source->getProxy()->GetProperty("TimestepValues") - || source->getProxy()->GetProperty("TimeRange") ) - { - if (hide) - { - source->getServer()->getTimeKeeper()->removeSource(source); - } - else - { - source->getServer()->getTimeKeeper()->addSource(source); - } - } - else - { - pqMainWindowCoreHideInputTimes( - qobject_cast<pqPipelineFilter*>(source), hide); - } - } -} - -//----------------------------------------------------------------------------- -/// Called when a new source/filter/reader is created -/// by the GUI. Unlike onSourceCreationFinished -/// this is not connected with Qt::QueuedConnection -/// hence is called immediately when a source is -/// created. -void pqMainWindowCore::onSourceCreation(pqPipelineSource *source) -{ - this->Implementation->PendingDisplayManager.addPendingDisplayForSource( - source); - - // If the newly created source is a filter has TimestepValues or TimeRange - // then we assume that this is a "temporal" filter which may distort the - // time. So we hide the timesteps from all the inputs. - pqPipelineFilter* filter = qobject_cast<pqPipelineFilter*>(source); - if (filter && ( filter->getProxy()->GetProperty("TimestepValues") - || filter->getProxy()->GetProperty("TimeRange") )) - { - pqMainWindowCoreHideInputTimes(filter, true); - } -} - -//----------------------------------------------------------------------------- -/// Called when a new source/filter/reader is created -/// by the GUI. This slot is connected with -/// Qt::QueuedConnection. -void pqMainWindowCore::onSourceCreationFinished(pqPipelineSource *source) -{ - if(this->Implementation->ProxyPanel) - { - // Make sure the property tab is showing since the accept/reset - // buttons are on that panel. - this->Implementation->ProxyPanel->setCurrentIndex( - pqProxyTabWidget::PROPERTIES); - } - - // Set the new source as the current selection. - pqApplicationCore *core = pqApplicationCore::instance(); - core->getSelectionModel()->setCurrentItem(source, - pqServerManagerSelectionModel::ClearAndSelect); -} - -//----------------------------------------------------------------------------- -// This method is called only when the gui intiates the removal of the source. -void pqMainWindowCore::onRemovingSource(pqPipelineSource *source) -{ - // FIXME: updating of selection must happen even is the source is removed - // from python script or undo redo. - // If the source is selected, remove it from the selection. - pqApplicationCore *core = pqApplicationCore::instance(); - pqServerManagerSelectionModel *selection = core->getSelectionModel(); - if(selection->isSelected(source)) - { - if(selection->selectedItems()->size() > 1) - { - // Deselect the source. - selection->select(source, pqServerManagerSelectionModel::Deselect); - - // If the source is the current item, change the current item. - if(selection->currentItem() == source) - { - selection->setCurrentItem(selection->selectedItems()->last(), - pqServerManagerSelectionModel::NoUpdate); - } - } - else - { - // If the item is a filter and has only one input, set the - // input as the current item. Otherwise, select the server. - pqPipelineFilter *filter = dynamic_cast<pqPipelineFilter *>(source); - if(filter && filter->getInputCount() == 1) - { - selection->setCurrentItem(filter->getInput(0), - pqServerManagerSelectionModel::ClearAndSelect); - } - else - { - selection->setCurrentItem(source->getServer(), - pqServerManagerSelectionModel::ClearAndSelect); - } - } - } - - QList<pqView*> views = source->getViews(); - - pqPipelineFilter* filter = qobject_cast<pqPipelineFilter*>(source); - if (filter) - { - // Make all inputs visible in views that the removed source - // is currently visible in. - QList<pqOutputPort*> inputs = filter->getInputs(); - foreach(pqView* view, views) - { - pqDataRepresentation* src_disp = source->getRepresentation(view); - if (!src_disp || !src_disp->isVisible()) - { - continue; - } - // For each input, if it is not visible in any of the views - // that the delete filter is visible, we make the input visible. - for(int cc=0; cc < inputs.size(); ++cc) - { - pqPipelineSource* input = inputs[cc]->getSource(); - pqDataRepresentation* input_disp = input->getRepresentation(view); - if (input_disp && !input_disp->isVisible()) - { - input_disp->setVisible(true); - } - } - } - - if ( filter->getProxy()->GetProperty("TimestepValues") - || filter->getProxy()->GetProperty("TimeRange") ) - { - pqMainWindowCoreHideInputTimes(filter, false); - } - } - - foreach (pqView* view, views) - { - // this triggers an eventually render call. - view->render(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onViewCreated(pqView* view) -{ - pqPipelineSource* source = 0; - pqSpreadSheetView* spreadSheet = qobject_cast<pqSpreadSheetView*>(view); - if (spreadSheet) - { - new pqSpreadSheetViewDecorator(spreadSheet); - - if ((source = this->getActiveSource()) != 0 && - !this->Implementation->PendingDisplayManager.isPendingDisplay(source)) - { - // If a new spreadsheet view is created, we show the active source in it by - // default. - pqApplicationCore::instance()->getObjectBuilder()->createDataRepresentation( - source->getOutputPort(0), view); - // trigger an eventual-render. - view->render(); - } - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onPostAccept() -{ - emit this->postAccept(); -} - -//----------------------------------------------------------------------------- -pqPipelineSource* pqMainWindowCore::getActiveSource() -{ - pqServerManagerModelItem* item = this->getActiveObject(); - if (item && qobject_cast<pqPipelineSource*>(item)) - { - return static_cast<pqPipelineSource*>(item); - } - else if (item && qobject_cast<pqOutputPort*>(item)) - { - pqOutputPort* port = static_cast<pqOutputPort*>(item); - return port->getSource(); - } - return 0; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::getRootSources(QList<pqPipelineSource*> *sources, - pqPipelineSource *src) -{ - pqPipelineFilter *filter = qobject_cast<pqPipelineFilter*>(src); - if(!filter || filter->getInputCount()==0) - { - sources->push_back(src); - return; - } - for(int i=0; i<filter->getInputCount(); i++) - { - this->getRootSources(sources, filter->getInput(i)); - } -} - -//----------------------------------------------------------------------------- -pqServer* pqMainWindowCore::getActiveServer() const -{ - return this->Implementation->ActiveServer.current(); -} - -//----------------------------------------------------------------------------- -pqActiveServer* pqMainWindowCore::getActiveServerTracker() const -{ - return &this->Implementation->ActiveServer; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::removeActiveSource() -{ - pqPipelineSource* source = this->getActiveSource(); - if (!source) - { - qDebug() << "No active source to remove."; - return; - } - pqApplicationCore::instance()->getObjectBuilder()->destroy(source); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::removeActiveServer() -{ - pqServer* server = this->getActiveServer(); - if (!server) - { - qDebug() << "No active server to remove."; - return; - } - pqApplicationCore::instance()->getObjectBuilder()->removeServer(server); -} - -//----------------------------------------------------------------------------- -pqPipelineSource* pqMainWindowCore::createSourceOnActiveServer( - const QString& xmlname) -{ - pqApplicationCore* core = pqApplicationCore::instance(); - pqObjectBuilder* builder = core->getObjectBuilder(); - - this->Implementation->UndoStack->beginUndoSet( - QString("Create '%1'").arg(xmlname)); - pqPipelineSource* source = - builder->createSource("sources", xmlname, this->getActiveServer()); - this->Implementation->UndoStack->endUndoSet(); - - return source; -} - - -//----------------------------------------------------------------------------- -pqPipelineSource* pqMainWindowCore::createFilterForActiveSource( - const QString& xmlname) -{ - pqApplicationCore* core = pqApplicationCore::instance(); - pqObjectBuilder* builder = core->getObjectBuilder(); - - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - vtkSMProxy* prototype = - pxm->GetPrototypeProxy("filters", xmlname.toAscii().data()); - if (!prototype) - { - qCritical() << "Unknown proxy type: " << xmlname; - return 0; - } - - // Get the list of selected sources. - pqServerManagerSelection selected = - *core->getSelectionModel()->selectedItems(); - - - QMap<QString, QList<pqOutputPort*> > namedInputs; - QList<pqOutputPort*> selectedOutputPorts; - - // Determine the list of selected output ports. - foreach (pqServerManagerModelItem* item, selected) - { - pqOutputPort* opPort = qobject_cast<pqOutputPort*>(item); - pqPipelineSource* source = qobject_cast<pqPipelineSource*>(item); - if (opPort) - { - selectedOutputPorts.push_back(opPort); - } - else if (source) - { - selectedOutputPorts.push_back(source->getOutputPort(0)); - } - } - - QList<const char*> inputPortNames = pqPipelineFilter::getInputPorts(prototype); - namedInputs[inputPortNames[0]] = selectedOutputPorts; - - // If the filter has more than 1 input ports, we are simply going to ask the - // user to make selection for the inputs for each port. We may change that in - // future to be smarter. - int numInputPorts = inputPortNames.size(); - if (pqPipelineFilter::getRequiredInputPorts(prototype).size() > 1) - { - vtkSmartPointer<vtkSMProxy> filterProxy; - filterProxy.TakeReference(pxm->NewProxy("filters", xmlname.toAscii().data())); - filterProxy->SetConnectionID(this->getActiveServer()->GetConnectionID()); - - // Create a dummy pqPipelineFilter which we can use to - // pass on to the pqFilterInputDialog. - pqPipelineFilter* filter = new pqPipelineFilter(xmlname, - filterProxy, this->getActiveServer(), this); - - pqFilterInputDialog dialog(this->Implementation->Parent); - dialog.setObjectName("SelectInputDialog"); - - pqServerManagerModel *smModel = - pqApplicationCore::instance()->getServerManagerModel(); - pqPipelineModel *model = new pqPipelineModel(*smModel); - model->addSource(filter); - foreach (pqOutputPort *outputPort, selectedOutputPorts) - { - model->addConnection(outputPort->getSource(), filter, - outputPort->getPortNumber()); - } - - dialog.setModelAndFilter(model, filter, namedInputs); - if (QDialog::Accepted != dialog.exec()) - { - // User aborted creation. - delete model; - delete filter; - return 0; - } - - for (int cc=0; cc < numInputPorts; cc++) - { - QString portName = filter->getInputPortName(cc); - namedInputs[portName] = dialog.getFilterInputs(portName); - } - - delete model; - delete filter; - } - - this->Implementation->UndoStack->beginUndoSet( - QString("Create '%1'").arg(xmlname)); - pqPipelineSource* filter = builder->createFilter("filters", xmlname, - namedInputs, this->getActiveServer()); - this->Implementation->UndoStack->endUndoSet(); - - return filter; -} - -//----------------------------------------------------------------------------- -pqPipelineSource* pqMainWindowCore::createReaderOnActiveServer( - const QStringList& files) -{ - if (files.empty()) - { - return 0; - } - - pqServer* server = this->getActiveServer(); - if (!server) - { - qCritical() << "Cannot create reader without an active server."; - return 0; - } - - pqReaderFactory *readerFactory = &this->Implementation->ReaderFactory; - // For performance, only check if the first file is readable. - for (int i=0; i < 1 /*files.size()*/; i++) - { - if (!readerFactory->checkIfFileIsReadable(files[i], server)) - { - qWarning() << "File '" << files[i] << "' cannot be read."; - return 0; - } - } - - // Determine reader type based on first file. For now, we are relying - // on the user to avoid mixing file types. - QString filename = files[0]; - QString readerType = readerFactory->getReaderType(filename, server); - if (readerType.isEmpty()) - { - // The reader factory could not determine the type of reader to create for the - // file. Ask the user. - pqSelectReaderDialog prompt(filename, server, - readerFactory, this->Implementation->Parent); - if(prompt.exec() == QDialog::Accepted) - { - readerType = prompt.getReader(); - } - else - { - // User didn't choose any reader. - return NULL; - } - } - - this->Implementation->UndoStack->beginUndoSet( - QString("Create 'Reader'")); /// FIXME - pqPipelineSource* reader = readerFactory->createReader( - files, readerType, server); - this->Implementation->UndoStack->endUndoSet(); - - return reader; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::disableAutomaticDisplays() -{ - QObject::disconnect(pqApplicationCore::instance(), - SIGNAL(finishSourceCreation(pqPipelineSource*)), - this, SLOT(onSourceCreation(pqPipelineSource*))); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetCamera() -{ - pqView* view = pqActiveView::instance().current(); - if (view) - { - view->resetDisplay(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetViewDirection( - double look_x, double look_y, double look_z, - double up_x, double up_y, double up_z) -{ - pqRenderView* ren = qobject_cast<pqRenderView*>(pqActiveView::instance().current()); - if (ren) - { - ren->resetViewDirection(look_x, look_y, look_z, - up_x, up_y, up_z); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetViewDirectionPosX() -{ - this->resetViewDirection(1, 0, 0, 0, 0, 1); -} -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetViewDirectionNegX() -{ - this->resetViewDirection(-1, 0, 0, 0, 0, 1); - -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetViewDirectionPosY() -{ - this->resetViewDirection(0, 1, 0, 0, 0, 1); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetViewDirectionNegY() -{ - this->resetViewDirection(0, -1, 0, 0, 0, 1); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetViewDirectionPosZ() -{ - this->resetViewDirection(0, 0, 1, 0, 1, 0); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetViewDirectionNegZ() -{ - this->resetViewDirection(0, 0, -1, 0, 1, 0); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::enableTestingRenderWindowSize(bool enable) -{ - this->setMaxRenderWindowSize( - enable? QSize(300, 300) : QSize(-1, -1)); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setMaxRenderWindowSize(const QSize& size) -{ - this->Implementation->MultiViewManager.setMaxViewWindowSize(size); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::pickCenterOfRotation(bool begin) -{ - if (!qobject_cast<pqRenderView*>(pqActiveView::instance().current())) - { - return; - } - - if (begin) - { - this->Implementation->RenderViewPickHelper.beginPick(); - } - else - { - this->Implementation->RenderViewPickHelper.endPick(); - } -} - - -//----------------------------------------------------------------------------- -void pqMainWindowCore::pickCenterOfRotationFinished(double x, double y, double z) -{ - this->Implementation->RenderViewPickHelper.endPick(); - - pqRenderView* rm = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if (!rm) - { - qDebug() << "No active render module. Cannot reset center of rotation."; - return; - } - - double center[3]; - center[0] = x; - center[1] = y; - center[2] = z; - - rm->setCenterOfRotation(center); - rm->render(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::resetCenterOfRotationToCenterOfCurrentData() -{ - pqRenderView* rm = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if (!rm) - { - qDebug() << "No active render module. Cannot reset center of rotation."; - return; - } - pqPipelineSource* source = this->getActiveSource(); - if (!source) - { - qDebug() << "No active source. Cannot reset center of rotation."; - return; - } - - pqPipelineRepresentation* repr = qobject_cast<pqPipelineRepresentation*>( - source->getRepresentation(rm)); - if (!repr) - { - //qDebug() << "Active source not shown in active view. Cannot set center."; - return; - } - - double bounds[6]; - if (repr->getDataBounds(bounds)) - { - double center[3]; - center[0] = (bounds[1]+bounds[0])/2.0; - center[1] = (bounds[3]+bounds[2])/2.0; - center[2] = (bounds[5]+bounds[4])/2.0; - rm->setCenterOfRotation(center); - rm->render(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setOrientationAxesVisibility(bool visible) -{ - pqRenderView* rm = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if (!rm) - { - qDebug() << "No active render module. setOrientationAxesVisibility failed."; - return; - } - rm->setOrientationAxesVisibility(visible); - rm->render(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::setCenterAxesVisibility(bool visible) -{ - pqRenderView* rm = qobject_cast<pqRenderView*>( - pqActiveView::instance().current()); - if (!rm) - { - qDebug() << "No active render module. setCenterAxesVisibility failed."; - return; - } - rm->setCenterAxesVisibility(visible); - rm->render(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onToolsManageLinks() -{ - if(this->Implementation->LinksManager) - { - this->Implementation->LinksManager->raise(); - this->Implementation->LinksManager->activateWindow(); - } - else - { - this->Implementation->LinksManager = new - pqLinksManager(this->Implementation->Parent); - this->Implementation->LinksManager->setWindowTitle("Link Manager"); - this->Implementation->LinksManager->setAttribute(Qt::WA_DeleteOnClose); - this->Implementation->LinksManager->show(); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::onManagePlugins() -{ - pqPluginDialog diag(this->getActiveServer(), this->Implementation->Parent); - diag.exec(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::extensionLoaded() -{ - // plugins may contain new entries for menus - if(this->Implementation->FiltersMenuManager) - this->Implementation->FiltersMenuManager->update(); - - if(this->Implementation->SourcesMenuManager) - this->Implementation->SourcesMenuManager->update(); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::addPluginInterface(QObject* iface) -{ - pqActionGroupInterface* actionGroup = - qobject_cast<pqActionGroupInterface*>(iface); - pqDockWindowInterface* dockWindow = - qobject_cast<pqDockWindowInterface*>(iface); - - if(actionGroup) - { - this->addPluginActions(actionGroup); - } - else if(dockWindow) - { - this->addPluginDockWindow(dockWindow); - } - - pqViewOptionsInterface* viewOptions = - qobject_cast<pqViewOptionsInterface*>(iface); - if(viewOptions) - { - foreach(QString viewtype, viewOptions->viewTypes()) - { - - // Try to create active view options - pqActiveViewOptions* o = - viewOptions->createActiveViewOptions(viewtype, - this->Implementation->ActiveViewOptions); - if(o) - { - this->Implementation->ActiveViewOptions->registerOptions( - viewtype, o); - } - - // Try to create global view options - pqOptionsContainer* globalOptions = - viewOptions->createGlobalViewOptions(viewtype, - this->Implementation->ApplicationSettings); - if(globalOptions) - { - this->addApplicationSettings(globalOptions); - } - - } - } -} - -//----------------------------------------------------------------------------- -QMainWindow* pqMainWindowCore::findMainWindow() -{ - QMainWindow* mw = qobject_cast<QMainWindow*>(this->Implementation->Parent); - if(!mw) - { - QWidgetList allWidgets = QApplication::topLevelWidgets(); - QWidgetList::iterator iter; - for(iter = allWidgets.begin(); !mw && iter != allWidgets.end(); ++iter) - { - mw = qobject_cast<QMainWindow*>(*iter); - } - } - return mw; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::addPluginActions(pqActionGroupInterface* iface) -{ - QString name = iface->groupName(); - QStringList splitName = name.split('/', QString::SkipEmptyParts); - - QMainWindow* mw = this->findMainWindow(); - if(!mw) - { - qWarning("Could not find MainWindow for actions group"); - return; - } - - if(splitName.size() == 2 && splitName[0] == "ToolBar") - { - QToolBar* tb = new QToolBar(splitName[1], mw); - tb->setObjectName(splitName[1]); - tb->addActions(iface->actionGroup()->actions()); - mw->addToolBar(tb); - this->Implementation->PluginToolBars.append(tb); - - // Add the toolbar to the view menu. - if(this->Implementation->ToolbarMenu) - { - this->Implementation->ToolbarMenu->addWidget(tb, splitName[1]); - } - } - else if(splitName.size() == 2 && splitName[0] == "MenuBar") - { - QMenu *menu = NULL; - QList<QAction *> menuBarActions = mw->menuBar()->actions(); - foreach(QAction *existingMenuAction, menuBarActions) - { - QString menuName = existingMenuAction->text(); - menuName.remove('&'); - if (menuName == splitName[1]) - { - menu = existingMenuAction->menu(); - break; - } - } - if (menu) - { - // Add to existing menu. - QAction *a; - a = menu->addSeparator(); - this->Implementation->PluginToolBars.append(a); - foreach(a, iface->actionGroup()->actions()) - { - menu->addAction(a); - this->Implementation->PluginToolBars.append(a); - } - } - else - { - // Create new menu. - menu = new QMenu(splitName[1], mw); - menu->setObjectName(splitName[1]); - menu->addActions(iface->actionGroup()->actions()); - mw->menuBar()->addMenu(menu); - this->Implementation->PluginToolBars.append(menu); - } - } - else if (splitName.size()) - { - QString msg = - QString("Do not know what action group \"%1\" is").arg(splitName[0]); - qWarning(msg.toAscii().data()); - } - else - { - qWarning("Action group doesn't have an identifier."); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::addPluginDockWindow(pqDockWindowInterface* iface) -{ - QMainWindow* mw = this->findMainWindow(); - if(!mw) - { - qWarning("Could not find MainWindow for dock window"); - return; - } - - // Get the dock area. - QString area = iface->dockArea(); - Qt::DockWidgetArea dArea = Qt::LeftDockWidgetArea; - if(area.compare("Right", Qt::CaseInsensitive) == 0) - { - dArea = Qt::RightDockWidgetArea; - } - else if(area.compare("Top", Qt::CaseInsensitive) == 0) - { - dArea = Qt::TopDockWidgetArea; - } - else if(area.compare("Bottom", Qt::CaseInsensitive) == 0) - { - dArea = Qt::BottomDockWidgetArea; - } - - // Create the dock window. - QDockWidget *dock = iface->dockWindow(mw); - mw->addDockWidget(dArea, dock); - - // Add the dock window to the view menu. - if(this->Implementation->DockWindowMenu) - { - this->Implementation->DockWindowMenu->addWidget(dock, dock->windowTitle()); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::removePluginToolBars() -{ - qDeleteAll(this->Implementation->PluginToolBars); - this->Implementation->PluginToolBars.clear(); -} - -//----------------------------------------------------------------------------- -pqUndoStack* pqMainWindowCore::getApplicationUndoStack() const -{ - return this->Implementation->UndoStack; -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::applicationInitialize() -{ - pqApplicationCore* core = pqApplicationCore::instance(); - pqOptions* options = pqOptions::SafeDownCast( - vtkProcessModule::GetProcessModule()->GetOptions()); - - // check for --server. - const char* serverresource_name = options->GetServerResourceName(); - if (serverresource_name) - { - pqServerStartup* startUp = - core->serverStartups().getStartup(serverresource_name); - if (startUp) - { - pqSimpleServerStartup starter; - starter.startServerBlocking(*startUp); - } - } - - if (!this->getActiveServer()) - { - if (serverresource_name) - { - qCritical() << "Could not connect to requested server \"" - << serverresource_name - << "\". Creating default builtin connection."; - } - this->makeDefaultConnectionIfNoneExists(); - } - // Now we are assured that some default server connection has been made - // (either the one requested by the user on the command line or simply the - // default one). - - // check for --data option. - if (options->GetParaViewDataName()) - { - // We don't directly set the data file name instead use the dialog. This - // makes it possible to select a file group. - pqFileDialog* dialog = new pqFileDialog( - this->getActiveServer(), - this->Implementation->Parent, - tr("Internal Open File"), QString(), - QString()); - dialog->setFileMode(pqFileDialog::ExistingFiles); - dialog->selectFile(options->GetParaViewDataName()); - QStringList selectedFiles = dialog->getSelectedFiles(); - delete dialog; - - //QStringList files; - //files.push_back(options->GetParaViewDataName()); - this->createReaderOnActiveServer(selectedFiles); - } - else if (options->GetStateFileName()) - { - // check for --state option. (Bug #5711) - // NOTE: --data and --state cannnot be specifed at the same time. - QStringList files; - files.push_back(options->GetStateFileName()); - this->onFileLoadServerState(files); - } - - pqSettings* settings = pqApplicationCore::instance()->settings(); - if (settings->contains("/EnableTooltips")) - { - this->onHelpEnableTooltips(settings->value("/EnableTooltips").toBool()); - } - else - { - this->onHelpEnableTooltips(true); - } - - // Look for a crash recovery state file, nag user and - // load if desired. - bool recoveryEnabled=settings->value("crashRecovery",false).toBool(); - if (recoveryEnabled - && QFile::exists(CrashRecoveryStateFile)) - { - int recover - = QMessageBox::question( - 0, - "ParaView3", - "A crash recovery state file has been found.\n" - "Would you like to restore ParaView to its pre-crash state?", - QMessageBox::Yes | QMessageBox::No, - QMessageBox::No); - if (recover==QMessageBox::Yes) - { - QStringList fileName; - fileName << CrashRecoveryStateFile; - this->onFileLoadServerState(fileName); - } - QFile::remove(CrashRecoveryStateFile); - } -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::showCameraDialog(pqView* view) -{ - if(!view) - { - if(this->Implementation->CameraDialog) - { - this->Implementation->CameraDialog->SetCameraGroupsEnabled(false); - } - return; - } - pqRenderView* renModule = qobject_cast<pqRenderView*>(view); - - if (!renModule) - { - if(this->Implementation->CameraDialog) - { - this->Implementation->CameraDialog->SetCameraGroupsEnabled(false); - } - return; - } - - if(!this->Implementation->CameraDialog) - { - this->Implementation->CameraDialog = new pqCameraDialog( - this->Implementation->Parent); - this->Implementation->CameraDialog->setWindowTitle("Adjust Camera"); - this->Implementation->CameraDialog->setAttribute(Qt::WA_DeleteOnClose); - this->Implementation->CameraDialog->setRenderModule(renModule); - this->Implementation->CameraDialog->show(); - } - else - { - this->Implementation->CameraDialog->SetCameraGroupsEnabled(true); - this->Implementation->CameraDialog->setRenderModule(renModule); - this->Implementation->CameraDialog->raise(); - this->Implementation->CameraDialog->activateWindow(); - } - -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::fiveMinuteTimeoutWarning() -{ - QMessageBox::warning(this->Implementation->Parent, - tr("Server Timeout Warning"), - tr("The server connection will timeout under 5 minutes.\n" - "Please save your work."), - QMessageBox::Ok); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::finalTimeoutWarning() -{ - QMessageBox::critical(this->Implementation->Parent, - tr("Server Timeout Warning"), - tr("The server connection will timeout shortly.\n" - "Please save your work."), - QMessageBox::Ok); -} - -//----------------------------------------------------------------------------- -// update the state of the \c node if node is not an ancestor of any of the -// non-blockable widgets. If so, then it recurses over all its children. -static void selectiveEnabledInternal(QWidget* node, - QList<QPointer<QObject> >& nonblockable, bool enable) -{ - if (!node) - { - return; - } - if (nonblockable.size() == 0) - { - node->setEnabled(enable); - return; - } - - foreach (QObject* objElem, nonblockable) - { - QWidget* elem = qobject_cast<QWidget*>(objElem); - if (elem) - { - if (node == elem) - { - // this is a non-blockable wiget. Don't change it's enable state. - nonblockable.removeAll(elem); - return; - } - - if (node->isAncestorOf(elem)) - { - // iterate over all children and selectively disable each. - QList<QObject*> children = node->children(); - for (int cc=0; cc < children.size(); cc++) - { - QWidget* child = qobject_cast<QWidget*>(children[cc]); - if (child) - { - ::selectiveEnabledInternal(child, nonblockable, enable); - } - } - return; - } - } - } - - // implies node is not an ancestor of any of the nonblockable widgets, - // we can simply update its enable state. - node->setEnabled(enable); -} -//----------------------------------------------------------------------------- -void pqMainWindowCore::setSelectiveEnabledState(bool enable) -{ - pqProgressManager* progress_manager = - pqApplicationCore::instance()->getProgressManager(); - QList<QPointer<QObject> > nonblockable = progress_manager->nonBlockableObjects(); - - if (nonblockable.size() == 0) - { - this->Implementation->Parent->setEnabled(enable); - return; - } - - // Do selective disbling. - selectiveEnabledInternal(this->Implementation->Parent, nonblockable, enable); -} - -//----------------------------------------------------------------------------- -void pqMainWindowCore::quickLaunch() -{ - this->Implementation->QuickLaunchDialog.setActions( - this->Implementation->FiltersMenuManager->findChildren<QAction*>()); - this->Implementation->QuickLaunchDialog.addActions( - this->Implementation->SourcesMenuManager->findChildren<QAction*>()); - this->Implementation->QuickLaunchDialog.exec(); -} diff --git a/Qt/Components/pqMainWindowCore.h b/Qt/Components/pqMainWindowCore.h deleted file mode 100644 index 47cd65e14d..0000000000 --- a/Qt/Components/pqMainWindowCore.h +++ /dev/null @@ -1,513 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqMainWindowCore.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -#ifndef _pqMainWindowCore_h -#define _pqMainWindowCore_h - -#include "pqComponentsExport.h" -#include "pqVariableType.h" - -#include <vtkIOStream.h> - -#include <QObject> -#include <QWidget> - -class pqActionGroupInterface; -class pqActiveServer; -class pqActiveViewOptionsManager; -class pqAnimationManager; -class pqAnimationScene; -class pqAnimationViewWidget; -class pqColorScaleToolbar; -class pqDockWindowInterface; -class pqGenericViewModule; -class pqLookmarkManagerModel; -class pqMultiView; -class pqObjectInspectorDriver; -class pqObjectInspectorWidget; -class pqOptionsContainer; -class pqPipelineBrowser; -class pqPipelineMenu; -class pqPipelineSource; -class pqProxy; -class pqProxyMenuManager; -class pqProxyTabWidget; -class pqRenderView; -class pqRubberBandHelper; -class pqSelectionManager; -class pqServer; -class pqServerManagerModelItem; -class pqToolsMenu; -class pqUndoStack; -class pqVCRController; -class pqView; -class pqViewContextMenuManager; -class pqViewManager; -class pqViewMenu; -class vtkUnstructuredGrid; - -class QAction; -class QDockWidget; -class QIcon; -class QImage; -class QMainWindow; -class QMenu; -class QPoint; -class QSize; -class QStatusBar; -class QToolBar; -class QWidget; - -/** \brief Provides a standardized main window for ParaView applications - -application authors can derive from pqMainWindowCore and call its member functions -to use as-much or as-little of the standardized functionality as desired */ - -class PQCOMPONENTS_EXPORT pqMainWindowCore : - public QObject -{ - Q_OBJECT - -public: - pqMainWindowCore(QWidget* parent); - ~pqMainWindowCore(); - - //This constructor is meant to be paired with the setParent method - //as an alternate to the original constructor. The purpose is to - //let applications use pqClientMainWindow, yet still subclass to - //augment pqMainWindowCore - pqMainWindowCore(); - void setParent(QWidget* parent); - - - /// Returns a multi-view widget which can be embedded in the UI - pqViewManager& multiViewManager(); - /// Returns the selection manager, which handles interactive selection - pqSelectionManager& selectionManager(); - /// Returns the VCR controller, which can control animation playback - pqVCRController& VCRController(); - - /// Returns the selection helper used for 3D views. - pqRubberBandHelper* renderViewSelectionHelper() const; - - /// Assigns a menu to be populated with sources - void setSourceMenu(QMenu* menu); - /// Assigns a menu to be populated with filters - void setFilterMenu(QMenu* menu); - - /// Assigns a menu to be populated with plugin dock windows - void setToolbarMenu(pqViewMenu *menu); - /// Assigns a menu to be populated with plugin toolbars - void setDockWindowMenu(pqViewMenu *menu); - - pqPipelineMenu& pipelineMenu(); - pqPipelineBrowser* pipelineBrowser(); - - /// Setup a pipeline browser, attaching it to the given dock - void setupPipelineBrowser(QDockWidget* parent); - /// Setup a proxy tab widget, attaching it to the given dock - virtual pqProxyTabWidget* setupProxyTabWidget(QDockWidget* parent); - /// Setup an object inspector, attaching it to the given dock - pqObjectInspectorWidget* setupObjectInspector(QDockWidget* parent); - /// Setup a statistics view, attaching it to the given dock - void setupStatisticsView(QDockWidget* parent); - /// Setup a selection inspector, attaching it to the given dock - void setupSelectionInspector(QDockWidget* parent); - /// Setup lookmark browser, attaching it to the given dock - void setupLookmarkBrowser(QDockWidget* parent); - /// Setup lookmark inspector, attaching it to the given dock - void setupLookmarkInspector(QDockWidget* parent); - - /// Setup the animation view, attaching it to the given dock. - pqAnimationViewWidget* setupAnimationView(QDockWidget* parent); - - /// Setup a variable-selection toolbar - void setupVariableToolbar(QToolBar* parent); - /// Setup a lookmark toolbar - void setupLookmarkToolbar(QToolBar* parent); - /// Setup a representation-selection toolbar - void setupRepresentationToolbar(QToolBar* parent); - /// Setup a common filters toolbar - void setupCommonFiltersToolbar(QToolBar* parent); - - /// Setup a progress bar, attaching it to the given status bar - void setupProgressBar(QStatusBar* parent); - - /// Setup the application settings dialog - void setupApplicationSettingsDialog(); - - /// Add options to the application settings dialog - void addApplicationSettings(pqOptionsContainer *); - - /** Compares the contents of the window with the given reference image, - returns true iff they "match" within some tolerance */ - bool compareView( - const QString& ReferenceImage, - double Threshold, - ostream& Output, - const QString& TempDirectory); - - /// Call this once all of your slots/signals are connected, to - /// set the initial state of GUI components - void initializeStates(); - - /// returns the active source. - pqPipelineSource* getActiveSource(); - - // creates a list of the sources at the head of the pipeline of the given source "src" - void getRootSources(QList<pqPipelineSource*> *sources, pqPipelineSource *src); - - /// returns the active server. - pqServer* getActiveServer() const; - - /// Returns the pqActiveServer instace that keeps track of the active server. - pqActiveServer* getActiveServerTracker() const; - - void removeActiveSource(); - void removeActiveServer(); - - // This will create a source with the given xmlname on the active server. - // On success returns - // pqPipelineSource for the source proxy. The actual creation is delegated - // to pqObjectBuilder instance. Using this method will optionally, - // create a display for the source in the active render window (if both - // the active window is indeed on the active server. The created source - // becomes the active source. - pqPipelineSource* createSourceOnActiveServer(const QString& xmlname); - - // This will create a filter and connect it to the active source. - // The actual creation is delegated - // to pqObjectBuilder instance. Using this method will optionally, - // create a display for the source in the active render window (if both - // the active window is indeed on the active server. The created source - // becomes the active source. - pqPipelineSource* createFilterForActiveSource( const QString& xmlname); - - // Utility function to create a reader that reads the file(s) on the - // active server. - pqPipelineSource* createReaderOnActiveServer(const QStringList& filename); - - /** By default, whenever a new source/filter is added to the pipeline, - pqMainWindowCore will attach a display. Clients that wish to manage - their own pipeline / displays should call this method once at startup. */ - void disableAutomaticDisplays(); - - // Returns the animation manager. If none is already created, - // this call will create a new manager. - pqAnimationManager* getAnimationManager(); - - // Returns the object inspector driver. If the driver is not - // created, a new one will be created and returned. - pqObjectInspectorDriver* getObjectInspectorDriver(); - - // Returns the active view options manager. If the manager is not - // created, a new one will be created and returned. - pqActiveViewOptionsManager* getActiveViewOptionsManager(); - - // Returns the view context menu manager. If the manager is not - // created, a new one will be created and returned. - pqViewContextMenuManager* getViewContextMenuManager(); - - void removePluginToolBars(); - - /// Returns the undo stack used for the application. - pqUndoStack* getApplicationUndoStack() const; - - /// Returns the lookmark model. - pqLookmarkManagerModel* getLookmarkManagerModel(); - - /// Gets the color scale editor manager. - pqColorScaleToolbar* getColorScaleEditorManager(); - - /// Lookup the parent mainwindow if one exists. Return null if not found. - QMainWindow* findMainWindow(); - - /// Asks the user to make a new server connection, if none exists. - bool makeServerConnectionIfNoneExists(); - - /// Asks the user for a new connection (even if a server connection - /// already exists. - bool makeServerConnection(); - - /// Provides access to the menu manager used for the filters menu. - pqProxyMenuManager* filtersMenuManager() const; - - /// Provides access to the menu manager used for the sources menu. - pqProxyMenuManager* sourcesMenuManager() const; - - /// Save the settings of "save data" and "save screenshot" with QSettings. - void saveSettings(); - - /// Apply the settings from QSettings to "save data" and "save screenshot". - void restoreSettings(); - -signals: - void enableFileLoadServerState(bool); - void enableFileSaveServerState(bool); - void enableFileSaveData(bool); - void enableFileSaveScreenshot(bool); - void enableFileSaveAnimation(bool); - void enableFileSaveGeometry(bool); - void enableCameraUndo(bool); - void enableCameraRedo(bool); - void cameraUndoLabel(const QString&); - void cameraRedoLabel(const QString&); - void enableServerConnect(bool); - void enableServerDisconnect(bool); - void enableSourceCreate(bool); - void enableFilterCreate(bool); - void enableVariableToolbar(bool); - void enableResetCenter(bool); - void enablePickCenter(bool); - void enableShowCenterAxis(bool); - void pickingCenter(bool); - void refreshFiltersMenu(); - void refreshSourcesMenu(); - void enableExport(bool); - void enableTooltips(bool); - void applicationSettingsChanged(); - - /** \todo Hide these private implementation details */ - void postAccept(); - -public slots: - /// Creates a builtin connection, if no connection - /// currently exists. - void makeDefaultConnectionIfNoneExists(); - - virtual void onFileOpen(); - virtual void onFileOpen(pqServer* Server); - virtual void onFileOpen(const QStringList& Files); - - void onFileLoadServerState(); - void onFileLoadServerState(pqServer* Server); - void onFileLoadServerState(const QStringList& Files); - - void onFileSaveServerState(); - void onFileSaveServerState(const QStringList& Files); - void onFileSaveRecoveryState(); - - void onFileSaveData(); - void onFileSaveData(const QStringList& files); - - /// Called to export the current view. - void onFileExport(); - - void onFileSaveScreenshot(); - - void onFileSaveAnimation(); - - void onSaveGeometry(); - void onSaveGeometry(const QStringList& files); - - void onEditCameraUndo(); - void onEditCameraRedo(); - - void onServerConnect(); - void onServerDisconnect(); - - /// Ignore timesteps provided by selected sources. - void ignoreTimesFromSelectedSources(bool ignore); - void onToolsCreateCustomFilter(); - void onToolsManageCustomFilters(); - - // TO DO: Support lookmark of multiple views and different view types (plots, etc). - // Right now this creates one for a single render view only. - void onToolsCreateLookmark(); - void onToolsCreateLookmark(QWidget* widget); - void onToolsCreateLookmark(pqView*); - - // Have the main window handle all lookmark load signals (from the toolbar, inspector, browser) - // Load a lookmark with the given name on the active server. - void onLoadLookmark(const QString &name); - - // Lookmark toolbar slots: - - // Add an action with the given name and icon to the lookmark toolbar - void onLookmarkAdded(const QString &name, const QImage &image); - // Remove the action with the given name from the lookmark toolbar - void onLookmarkRemoved(const QString &name); - // Change the action's text from oldname to newname - void onLookmarkNameChanged(const QString &oldname, const QString &newname); - // TO DO: have a separate pqLookmarkToolbarContextMenu class handle the toolbar's context menu event - void showLookmarkToolbarContextMenu(const QPoint &pos); - void onRemoveToolbarLookmark(); - void onEditToolbarLookmark(); - void onLoadToolbarLookmark(QAction *action); - - void onToolsManageLinks(); - - void onToolsDumpWidgetNames(); - - void onToolsRecordTest(); - void onToolsRecordTest(const QStringList &fileNames); - - void onToolsRecordTestScreenshot(); - void onToolsRecordTestScreenshot(const QStringList &fileNames); - - void onToolsPlayTest(); - void onToolsPlayTest(const QStringList &fileNames); - - void onToolsTimerLog(); - void onToolsOutputWindow(); - - void onToolsPythonShell(); - - void onHelpEnableTooltips(bool enabled = true); - - // Called to show the settings dialog. - void onEditSettings(); - void onEditViewSettings(); - - // invoke the dialog to manage plugins - void onManagePlugins(); - - // Camera slots. - void resetCamera(); - void resetViewDirectionPosX(); - void resetViewDirectionNegX(); - void resetViewDirectionPosY(); - void resetViewDirectionNegY(); - void resetViewDirectionPosZ(); - void resetViewDirectionNegZ(); - - void resetViewDirection( - double look_x, double look_y, double look_z, - double up_x, double up_y, double up_z); - - // This option is used for testing. Sets the maximum size for - // all render windows. When size.isEmpty() is true, - // it resets the maximum bounds on the render windows. - void setMaxRenderWindowSize(const QSize& size); - void enableTestingRenderWindowSize(bool enable); - - // Resets the center of rotation to the center of the active - // source in the active view. - void resetCenterOfRotationToCenterOfCurrentData(); - - // Next mouse press in 3D window sets the center of rotation to - // the corresponding world coordinates. - void pickCenterOfRotation(bool begin); - void pickCenterOfRotationFinished(double x, double y, double z); - - // Set center axes visibility on active render view. - void setCenterAxesVisibility(bool visible); - - // Set orientation axes visibility on active render view. - void setOrientationAxesVisibility(bool visible); - - // Set the enable state for main window excepting some widgets marked as - // non-blockable. Non-blockable widgets are registered with the - // pqProgressManager. - void setSelectiveEnabledState(bool); - - void quickLaunch(); -protected slots: - void onCreateSource(const QString& sourceName); - void onCreateFilter(const QString& filtername); - - void onSelectionChanged(); - void onPendingDisplayChanged(bool pendingDisplays); - - /// Called when the active view in the pqActiveView singleton changes. - virtual void onActiveViewChanged(pqView* view); - - void onActiveViewUndoChanged(); - - /// Called when the active animation scene changes. We update the menu state - /// for items such as "Save Animation"/"Save Geometry". - void onActiveSceneChanged(pqAnimationScene *scene); - - /// Called when a new source/filter/reader is created - /// by the GUI. This slot is connected with - /// Qt::QueuedConnection. - void onSourceCreationFinished(pqPipelineSource *source); - - /// Called when a new source/filter/reader is created - /// by the GUI. Unlike onSourceCreationFinished - /// this is not connected with Qt::QueuedConnection - /// hence is called immediately when a source is - /// created. - void onSourceCreation(pqPipelineSource* source); - - /// Called when a new reader is created by the GUI. - /// We add the reader to the recent files menu. - void onReaderCreated(pqPipelineSource* reader, const QStringList& filenames); - - /// Called when any pqProxy or subclass is created, - /// We update the undo stack to include an element - /// which will manage the helper proxies correctly. - void onProxyCreation(pqProxy*); - - void onServerCreationFinished(pqServer *server); - void onRemovingServer(pqServer *server); - virtual void onRemovingSource(pqPipelineSource *source); - - void onServerCreation(pqServer*); - - virtual void onPostAccept(); - - void addPluginInterface(QObject* iface); - void extensionLoaded(); - void addPluginActions(pqActionGroupInterface* iface); - void addPluginDockWindow(pqDockWindowInterface* iface); - - /// This method is called once after the application event loop - /// begins. This is where we process certain command line options - /// such as --data, --server etc. - virtual void applicationInitialize(); - - /// Show the camera dialog for the active view module - void showCameraDialog(pqView*); - - /// Shows message boxes for server timeout warnings. - void fiveMinuteTimeoutWarning(); - void finalTimeoutWarning(); - - /// Called when a new view is created by the GUI (not undo/redo or python). - /// If a spreadsheet view has been created, we show the current source in it - /// by default. - void onViewCreated(pqView*); - -private: - pqServerManagerModelItem *getActiveObject() const; - void updatePendingActions(pqServer *server, pqPipelineSource *source, - int numServers, bool pendingDisplays); - void updateViewUndoRedo(pqRenderView* renderView); - class pqImplementation; - pqImplementation* Implementation; - void constructorHelper(QWidget *parent); - - QString ScreenshotExtension; - QString DataExtension; -}; - -#endif // !_pqMainWindowCore_h diff --git a/Qt/Components/pqMultiView.cxx b/Qt/Components/pqMultiView.cxx index f136ddf6b0..12bb0273c8 100644 --- a/Qt/Components/pqMultiView.cxx +++ b/Qt/Components/pqMultiView.cxx @@ -60,7 +60,7 @@ public: { } - // overrides default behaviour when this->HideDecorations is true. + // overrides default behavior when this->HideDecorations is true. virtual QSize sizeHint () const { return this->HideDecorations? QSize(): QSplitterHandle::sizeHint(); diff --git a/Qt/Components/pqObjectInspectorDriver.cxx b/Qt/Components/pqObjectInspectorDriver.cxx deleted file mode 100644 index ac9bf13f56..0000000000 --- a/Qt/Components/pqObjectInspectorDriver.cxx +++ /dev/null @@ -1,187 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqObjectInspectorDriver.cxx - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqObjectInspectorDriver.cxx -/// \date 1/12/2007 - -#include "pqObjectInspectorDriver.h" - -#include "pqDataRepresentation.h" -#include "pqOutputPort.h" -#include "pqPipelineSource.h" -#include "pqProxy.h" -#include "pqServerManagerModel.h" -#include "pqServerManagerModelItem.h" -#include "pqServerManagerSelectionModel.h" -#include "pqView.h" - -//----------------------------------------------------------------------------- -pqObjectInspectorDriver::pqObjectInspectorDriver(QObject *parentObject) - : QObject(parentObject) -{ - this->Selection = 0; - this->Display = 0; - this->View = 0; - this->ShowCurrent = true; - - this->OutputPort = 0; -} - -//----------------------------------------------------------------------------- -void pqObjectInspectorDriver::setSelectionModel( - pqServerManagerSelectionModel *model) -{ - if(this->Selection == model) - { - return; - } - - if(this->Selection) - { - this->disconnect(this->Selection, 0, this, 0); - this->disconnect(this->Selection->model(), 0, this, 0); - } - - this->Selection = model; - if(this->Selection) - { - this->connect(this->Selection, - SIGNAL(currentChanged(pqServerManagerModelItem *)), - this, SLOT(updateSource())); - this->connect(this->Selection, - SIGNAL(selectionChanged(const pqServerManagerSelection &, const pqServerManagerSelection &)), - this, SLOT(updateSource())); - } -} - -//----------------------------------------------------------------------------- -void pqObjectInspectorDriver::setActiveView(pqView *view) -{ - if(view != this->View) - { - this->View = view; - this->checkForDisplay(); - } -} - -//----------------------------------------------------------------------------- -void pqObjectInspectorDriver::updateSource() -{ - this->setActiveSource(this->findSource()); -} - -//----------------------------------------------------------------------------- -void pqObjectInspectorDriver::checkForDisplay() -{ - pqDataRepresentation *display = this->findDisplay(); - if(display != this->Display) - { - this->Display = display; - emit this->representationChanged(this->Display, this->View); - } -} - -//----------------------------------------------------------------------------- -void pqObjectInspectorDriver::setActiveSource(pqOutputPort* opPort) -{ - if(opPort == this->OutputPort) - { - return; - } - - if(this->OutputPort) - { - this->disconnect(this->OutputPort, 0, this, 0); - } - - this->OutputPort = opPort; - if(this->OutputPort) - { - this->connect(this->OutputPort, - SIGNAL(representationAdded(pqOutputPort*, pqDataRepresentation *)), - this, SLOT(checkForDisplay()), Qt::QueuedConnection); - this->connect(this->OutputPort, - SIGNAL(representationRemoved(pqOutputPort*, pqDataRepresentation *)), - this, SLOT(checkForDisplay())); - } - - emit this->outputPortChanged(opPort); - emit this->sourceChanged(opPort? opPort->getSource() : 0); - - // Update the active display. - this->checkForDisplay(); -} - -//----------------------------------------------------------------------------- -pqOutputPort* pqObjectInspectorDriver::findSource() -{ - pqServerManagerModelItem *item = 0; - const pqServerManagerSelection *selected = this->Selection->selectedItems(); - if(selected->size() == 1) - { - item = selected->first(); - } - else if(selected->size() > 1 && this->ShowCurrent) - { - item = this->Selection->currentItem(); - if(item && !this->Selection->isSelected(item)) - { - item = 0; - } - } - - pqOutputPort* opPort = qobject_cast<pqOutputPort*>(item); - if (opPort) - { - return opPort; - } - - pqPipelineSource* source = qobject_cast<pqPipelineSource *>(item); - if (source && source->getNumberOfOutputPorts()>0) - { - return source->getOutputPort(0); - } - return 0; -} - -//----------------------------------------------------------------------------- -pqDataRepresentation *pqObjectInspectorDriver::findDisplay() const -{ - if (this->OutputPort && this->View) - { - return this->OutputPort->getRepresentation(this->View); - } - - return 0; -} - - diff --git a/Qt/Components/pqObjectInspectorDriver.h b/Qt/Components/pqObjectInspectorDriver.h deleted file mode 100644 index eaf2080006..0000000000 --- a/Qt/Components/pqObjectInspectorDriver.h +++ /dev/null @@ -1,156 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqObjectInspectorDriver.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqObjectInspectorDriver.h -/// \date 1/12/2007 - -#ifndef _pqObjectInspectorDriver_h -#define _pqObjectInspectorDriver_h - - -#include "pqComponentsExport.h" -#include <QObject> - -class pqDataRepresentation; -class pqOutputPort; -class pqPipelineSource; -class pqProxy; -class pqServerManagerSelectionModel; -class pqView; - - -/// \class pqObjectInspectorDriver -/// \brief -/// The pqObjectInspectorDriver class uses the server manager -/// selection to signal which object panel to display. -class PQCOMPONENTS_EXPORT pqObjectInspectorDriver : public QObject -{ - Q_OBJECT - -public: - /// \brief - /// Creates an object inspector driver instance. - /// \param parent The parent object. - pqObjectInspectorDriver(QObject *parent=0); - virtual ~pqObjectInspectorDriver() {} - - /// \brief - /// Gets whether or not the current is shown for multiple selections. - /// \return - /// True if the current is shown for multiple selections. - bool isCurrentShownForMultiple() const {return this->ShowCurrent;} - - /// \brief - /// Sets whether or not the current is shown for multiple selections. - /// \param shown True if the current should be shown for multiple - /// selections. - void setCurrentShownForMultiple(bool shown) {this->ShowCurrent = shown;} - - /// \brief - /// Sets the server manager selection model to use. - /// \param model The selection model. - void setSelectionModel(pqServerManagerSelectionModel *model); - - /// \brief - /// Returns the currently selected output port. - pqOutputPort* getOutputPort() - { - return this->OutputPort; - } - -public slots: - /// \brief - /// Sets the active view. - /// - /// The active view and the active source are used to determine the - /// active display. - /// - /// \param view The new active view. - void setActiveView(pqView *view); - -signals: - /// \brief - /// Emitted when the object panel to be shown changes. - /// \param proxy The source to show in the object inspector. - void sourceChanged(pqProxy *proxy); - - /// \brief - /// Emitted when the display to be shown changes. - /// \param display The display to show. - /// \param view The view the display is in. - void representationChanged(pqDataRepresentation *display, pqView *view); - - /// \brief - /// Emitted when the object/display panel to be shown changes. - /// \param port The output port that is currently selected. - void outputPortChanged(pqOutputPort* port); - -private slots: - /// Determines the source to show and emits the signal. - void updateSource(); - - /// Checks for a new display on the current source. - void checkForDisplay(); - -private: - /// \brief - /// Sets the current source. - /// - /// The current source is used to determine the active display. The - /// source needs to be monitored for display changes. - /// - /// \param source The new active source's active output port. - void setActiveSource(pqOutputPort* sourcePort); - - /// \brief - /// Gets the source that should be shown in the object inspector. - /// \return - /// A pointer to the active source's active output port. - pqOutputPort* findSource(); - - /// \brief - /// Gets the display that should be shown in the display panel. - /// \return - /// A pointer to the active display. - pqDataRepresentation *findDisplay() const; - -private: - /// Used to find the selected item(s). - pqServerManagerSelectionModel *Selection; - pqDataRepresentation *Display; ///< Stores the active display. - pqView *View; ///< Stores the active view. - bool ShowCurrent; ///< True if the current is shown for multiple. - - pqOutputPort* OutputPort; -}; - -#endif diff --git a/Qt/Components/pqObjectInspectorWidget.cxx b/Qt/Components/pqObjectInspectorWidget.cxx index 7bbc16adaf..26f01c71ec 100644 --- a/Qt/Components/pqObjectInspectorWidget.cxx +++ b/Qt/Components/pqObjectInspectorWidget.cxx @@ -33,27 +33,29 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqObjectInspectorWidget.h" // Qt includes -#include <QVBoxLayout> -#include <QScrollArea> -#include <QPushButton> -#include <QTabWidget> #include <QApplication> +#include <QDebug> +#include <QPushButton> +#include <QScrollArea> +#include <QSet> #include <QStyle> #include <QStyleFactory> #include <QStyleOption> +#include <QTabWidget> +#include <QVBoxLayout> // ParaView Server Manager includes #include <vtkSMProxy.h> // ParaView includes -#include "vtkPVConfig.h" // To get PARAVIEW_USE_* #include "pqApplicationCore.h" -#include "pqSettings.h" #include "pqAutoGeneratedObjectPanel.h" #include "pqCalculatorPanel.h" #include "pqClipPanel.h" #include "pqContourPanel.h" #include "pqCutPanel.h" +#include "pqDataRepresentation.h" +#include "pqDisplayPolicy.h" #include "pqExodusIIPanel.h" #include "pqExtractCTHPartsPanel.h" #include "pqGlyphPanel.h" @@ -61,21 +63,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqObjectBuilder.h" #include "pqObjectPanelInterface.h" #include "pqParticleTracerPanel.h" +#include "pqPipelineFilter.h" #include "pqPipelineSource.h" #include "pqPluginManager.h" #include "pqPropertyManager.h" +#include "pqProxyModifiedStateUndoElement.h" #include "pqSelectThroughPanel.h" #include "pqServerManagerModel.h" #include "pqServerManagerObserver.h" +#include "pqSettings.h" #include "pqStreamTracerPanel.h" #include "pqThresholdPanel.h" #include "pqUndoStack.h" #include "pqView.h" #include "pqXDMFPanel.h" +#include "vtkPVConfig.h" // To get PARAVIEW_USE_* #ifdef PARAVIEW_USE_SILO #include "pqSiloPanel.h" #endif + bool pqObjectInspectorWidget::AutoAccept = false; class pqStandardCustomPanels : public QObject, public pqObjectPanelInterface @@ -197,6 +204,7 @@ pqObjectInspectorWidget::pqObjectInspectorWidget(QWidget *p) this->setObjectName("objectInspector"); this->CurrentPanel = 0; + this->ShowOnAccept = false; // get custom panels this->StandardCustomPanels = new pqStandardCustomPanels(this); @@ -476,36 +484,63 @@ void pqObjectInspectorWidget::setProxy(pqProxy *proxy) //----------------------------------------------------------------------------- void pqObjectInspectorWidget::accept() { - pqUndoStack* us = pqApplicationCore::instance()->getUndoStack(); - if(us) - { - us->beginUndoSet("Apply"); - } - + BEGIN_UNDO_SET("Apply"); emit this->preaccept(); + QSet<pqProxy*> proxies_to_show; + // accept all panels that are dirty. - foreach(pqObjectPanel* p, this->PanelStore) + foreach(pqObjectPanel* panel, this->PanelStore) { - if (p->referenceProxy()->modifiedState() != pqProxy::UNMODIFIED) + pqProxy* refProxy = panel->referenceProxy(); + int modified_state = refProxy->modifiedState(); + if (this->ShowOnAccept && modified_state == pqProxy::UNINITIALIZED) + { + proxies_to_show.insert(refProxy); + } + if (modified_state != pqProxy::UNMODIFIED) { - p->accept(); + panel->accept(); } } if (this->CurrentPanel) { + pqProxy* refProxy = this->CurrentPanel->referenceProxy(); + int modified_state = refProxy->modifiedState(); + if (this->ShowOnAccept && modified_state == pqProxy::UNINITIALIZED) + { + proxies_to_show.insert(refProxy); + } this->CurrentPanel->accept(); } + + pqView* activeView = this->view(); + foreach (pqProxy* proxy_to_show, proxies_to_show) + { + if (!activeView) + { + // if the current frame is empty, try to use the most recently created + // frame when accepting multiple sources at the same time. + activeView = this->view(); + } + pqPipelineSource* source = qobject_cast<pqPipelineSource*>(proxy_to_show); + if (source) + { + this->show(source, activeView); + pqProxyModifiedStateUndoElement* elem = + pqProxyModifiedStateUndoElement::New(); + elem->MadeUnmodified(source); + ADD_UNDO_ELEM(elem); + elem->Delete(); + } + } emit this->accepted(); emit this->postaccept(); - - if(us) - { - us->endUndoSet(); - } - + + END_UNDO_SET(); + // Essential to render all views. pqApplicationCore::instance()->render(); } @@ -583,18 +618,10 @@ void pqObjectInspectorWidget::deleteProxy() qobject_cast<pqPipelineSource*>(this->CurrentPanel->referenceProxy()); pqApplicationCore* core = pqApplicationCore::instance(); - pqUndoStack* us = core->getUndoStack(); - - if (us) - { - us->beginUndoSet( - QString("Delete %1").arg(source->getSMName())); - } + BEGIN_UNDO_SET( + QString("Delete %1").arg(source->getSMName())); core->getObjectBuilder()->destroy(source); - if (us) - { - us->endUndoSet(); - } + END_UNDO_SET(); } } @@ -667,3 +694,33 @@ void pqObjectInspectorWidget::showHelp() } } +//----------------------------------------------------------------------------- +void pqObjectInspectorWidget::show(pqPipelineSource* source, pqView* activeview) +{ + pqDisplayPolicy* displayPolicy = + pqApplicationCore::instance()->getDisplayPolicy(); + if (!displayPolicy) + { + qCritical() << "No display policy defined. Cannot create pending displays."; + return; + } + + // Create representations for all output ports. + for (int cc=0; cc < source->getNumberOfOutputPorts(); cc++) + { + pqDataRepresentation* repr = displayPolicy->createPreferredRepresentation( + source->getOutputPort(cc), activeview, false); + if (!repr || !repr->getView()) + { + continue; + } + + pqView* view = repr->getView(); + pqPipelineFilter* filter = qobject_cast<pqPipelineFilter*>(source); + if (filter) + { + filter->hideInputIfRequired(view); + } + view->render(); // these renders are collapsed. + } +} diff --git a/Qt/Components/pqObjectInspectorWidget.h b/Qt/Components/pqObjectInspectorWidget.h index a46fe9ba8c..9893090174 100644 --- a/Qt/Components/pqObjectInspectorWidget.h +++ b/Qt/Components/pqObjectInspectorWidget.h @@ -78,6 +78,13 @@ public: /// sets whether auto accept is on/off static void setAutoAccept(bool); + /// When set to true, on accept(), newly created sources will be shown. + /// Default is false. + void setShowOnAccept(bool val) + { this->ShowOnAccept = val; } + bool showOnAccept() const + { return this->ShowOnAccept; } + public slots: void setProxy(pqProxy *proxy); @@ -132,6 +139,10 @@ protected slots: void handleConnectionChanged(pqPipelineSource* in, pqPipelineSource* out); void updateAcceptState(); + +protected: + /// shows the source. + void show(pqPipelineSource*, pqView*); private: @@ -145,6 +156,7 @@ private: QPointer<pqView> View; QTimer AutoAcceptTimer; static bool AutoAccept; + bool ShowOnAccept; pqObjectPanel* CurrentPanel; diff --git a/Qt/Components/pqObjectPanel.cxx b/Qt/Components/pqObjectPanel.cxx index 3d7e116d8c..7fb13ea1c5 100644 --- a/Qt/Components/pqObjectPanel.cxx +++ b/Qt/Components/pqObjectPanel.cxx @@ -53,16 +53,21 @@ pqProxy* pqObjectPanel::referenceProxy() const return this->ReferenceProxy; } +//----------------------------------------------------------------------------- void pqObjectPanel::accept() { pqProxyPanel::accept(); this->ReferenceProxy->setModifiedState(pqProxy::UNMODIFIED); } +//----------------------------------------------------------------------------- void pqObjectPanel::reset() { pqProxyPanel::reset(); - this->ReferenceProxy->setModifiedState(pqProxy::UNMODIFIED); + if (this->ReferenceProxy->modifiedState() != pqProxy::UNINITIALIZED) + { + this->ReferenceProxy->setModifiedState(pqProxy::UNMODIFIED); + } } //----------------------------------------------------------------------------- diff --git a/Qt/Components/pqOptionsDialog.cxx b/Qt/Components/pqOptionsDialog.cxx index f38424dbe4..dfcc252c01 100644 --- a/Qt/Components/pqOptionsDialog.cxx +++ b/Qt/Components/pqOptionsDialog.cxx @@ -38,6 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqOptionsContainer.h" #include "pqOptionsPage.h" +#include "pqUndoStack.h" #include <QAbstractItemModel> #include <QHeaderView> @@ -531,6 +532,7 @@ void pqOptionsDialog::applyChanges() { if(this->Form->ApplyNeeded) { + BEGIN_UNDO_SET("Changed View Settings"); emit this->aboutToApplyChanges(); QMap<QString, pqOptionsPage *>::Iterator iter = this->Form->Pages.begin(); for( ; iter != this->Form->Pages.end(); ++iter) @@ -540,6 +542,7 @@ void pqOptionsDialog::applyChanges() this->setApplyNeeded(false); emit this->appliedChanges(); + END_UNDO_SET(); } } diff --git a/Qt/Components/pqPipelineBrowser.cxx b/Qt/Components/pqPipelineBrowser.cxx index 219b375db5..d0e9f12cba 100644 --- a/Qt/Components/pqPipelineBrowser.cxx +++ b/Qt/Components/pqPipelineBrowser.cxx @@ -35,6 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqPipelineBrowser.h" +#include "pqActiveObjects.h" #include "pqApplicationCore.h" #include "pqDataRepresentation.h" #include "pqDisplayPolicy.h" @@ -42,14 +43,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqFlatTreeView.h" #include "pqObjectBuilder.h" #include "pqOutputPort.h" -#include "pqPipelineBrowserStateManager.h" #include "pqPipelineFilter.h" #include "pqPipelineModel.h" #include "pqPipelineModelSelectionAdaptor.h" #include "pqPipelineSource.h" #include "pqServer.h" #include "pqServerManagerModel.h" +#include "pqUndoStack.h" #include "pqView.h" + //#include "pqSourceInfoIcons.h" //#include "pqSourceHistoryModel.h" //#include "pqSourceInfoFilterModel.h" @@ -105,7 +107,6 @@ pqPipelineBrowser::pqPipelineBrowser(QWidget *widgetParent) //this->Icons = new pqSourceInfoIcons(this); //this->FilterGroups = new pqSourceInfoGroupMap(this); //this->FilterHistory = new pqSourceHistoryModel(this); - this->Manager = new pqPipelineBrowserStateManager(this); // Set the icons for the history models. //this->FilterHistory->setIcons(this->Icons, pqSourceInfoIcons::Filter); @@ -167,10 +168,6 @@ pqPipelineBrowser::pqPipelineBrowser(QWidget *widgetParent) this->connect(this->Model, SIGNAL(firstChildAdded(const QModelIndex &)), this->TreeView, SLOT(expand(const QModelIndex &))); - // Use the model's move and restore signals to keep track of - // selected and expanded indexes. - this->Manager->setModelAndView(this->Model, this->TreeView); - // The tree view should have a context menu based on the selected // items. The context menu policy should be set to custom for this // behavior. @@ -184,6 +181,22 @@ pqPipelineBrowser::pqPipelineBrowser(QWidget *widgetParent) // Create the selection adaptor. new pqPipelineModelSelectionAdaptor(this->TreeView->getSelectionModel(), pqApplicationCore::instance()->getSelectionModel(), this); + + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(setView(pqView*))); + + pqUndoStack* usStack = pqApplicationCore::instance()->getUndoStack(); + if (usStack) + { + // Connect undo/redo. + QObject::connect( + this, SIGNAL(beginUndo(const QString&)), + usStack, SLOT(beginUndoSet(const QString&))); + QObject::connect( + this, SIGNAL(endUndo()), + usStack, SLOT(endUndoSet())); + } } //---------------------------------------------------------------------------- @@ -222,18 +235,6 @@ void pqPipelineBrowser::loadFilterInfo(vtkPVXMLElement *root) } #endif -//---------------------------------------------------------------------------- -void pqPipelineBrowser::saveState(vtkPVXMLElement *root) const -{ - this->Manager->saveState(root); -} - -//---------------------------------------------------------------------------- -void pqPipelineBrowser::restoreState(vtkPVXMLElement *root) -{ - this->Manager->restoreState(root); -} - //---------------------------------------------------------------------------- QItemSelectionModel *pqPipelineBrowser::getSelectionModel() const { diff --git a/Qt/Components/pqPipelineBrowser.h b/Qt/Components/pqPipelineBrowser.h index 5313d9fff0..e283dcd744 100644 --- a/Qt/Components/pqPipelineBrowser.h +++ b/Qt/Components/pqPipelineBrowser.h @@ -38,12 +38,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqComponentsExport.h" +#include "vtkSetGet.h" #include <QWidget> #include <QModelIndex> // Needed for typedef class pqFlatTreeView; class pqPipelineBrowserInternal; -class pqPipelineBrowserStateManager; class pqPipelineModel; class pqPipelineSource; class pqServer; @@ -63,6 +63,7 @@ class vtkPVXMLElement; // the server manager. It provides slot (select()) to change the currently // selected item, it also fires a signal selectionChanged() when the selection // changes. +// @deprecated Replaced by pqPipelineBrowserWidget class PQCOMPONENTS_EXPORT pqPipelineBrowser : public QWidget { Q_OBJECT @@ -71,7 +72,7 @@ public: /// \brief /// Creates a pipeline browser instance. /// \param parent The parent widget. - pqPipelineBrowser(QWidget *parent=0); + VTK_LEGACY(pqPipelineBrowser(QWidget *parent=0)); virtual ~pqPipelineBrowser(); /// \brief @@ -95,11 +96,6 @@ public: void loadFilterInfo(vtkPVXMLElement *root); #endif - void saveState(vtkPVXMLElement *root) const; - - void restoreState(vtkPVXMLElement *root); - //@} - /// \name Selection Helper Methods //@{ /// \brief @@ -157,9 +153,6 @@ private: //pqSourceInfoIcons *Icons; ///< Stores the icons. //pqSourceInfoGroupMap *FilterGroups; ///< Stores the filter grouping. //pqSourceHistoryModel *FilterHistory; ///< Stores the recent filters. - - /// Keeps track of tree state for moving indexes. - pqPipelineBrowserStateManager *Manager; }; #endif diff --git a/Qt/Components/pqPipelineBrowserStateManager.cxx b/Qt/Components/pqPipelineBrowserStateManager.cxx deleted file mode 100644 index 34f3a74b59..0000000000 --- a/Qt/Components/pqPipelineBrowserStateManager.cxx +++ /dev/null @@ -1,267 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqPipelineBrowserStateManager.cxx - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqPipelineBrowserStateManager.cxx -/// \date 1/10/2007 - -#include "pqPipelineBrowserStateManager.h" - -#include "pqFlatTreeView.h" -#include "pqPipelineModel.h" - -#include <QItemSelectionModel> -#include <QMap> -#include <QModelIndex> -#include <QString> - -#include "vtkPVXMLElement.h" -#include "vtkPVXMLParser.h" -#include <vtksys/ios/sstream> - - -class pqPipelineBrowserStateManagerInternal : public QMap<QString, QString> {}; - - -pqPipelineBrowserStateManager::pqPipelineBrowserStateManager( - QObject *parentObject) - : QObject(parentObject) -{ - this->Internal = new pqPipelineBrowserStateManagerInternal(); - this->Model = 0; - this->View = 0; -} - -pqPipelineBrowserStateManager::~pqPipelineBrowserStateManager() -{ - delete this->Internal; -} - -void pqPipelineBrowserStateManager::setModelAndView(pqPipelineModel *model, - pqFlatTreeView *view) -{ - if(this->Model == model && this->View == view) - { - return; - } - - // Clean up any remaining state. - this->Internal->clear(); - if(this->Model) - { - this->disconnect(this->Model, 0, this, 0); - } - - this->Model = model && view ? model : 0; - this->View = this->Model ? view : 0; - if(this->Model) - { - this->connect(this->Model, SIGNAL(movingIndex(const QModelIndex &)), - this, SLOT(saveState(const QModelIndex &))); - this->connect(this->Model, SIGNAL(indexRestored(const QModelIndex &)), - this, SLOT(restoreState(const QModelIndex &))); - } -} - -void pqPipelineBrowserStateManager::saveState(vtkPVXMLElement *root) const -{ - if(this->View && root) - { - this->saveState(this->View->getRootIndex(), root); - } -} - -void pqPipelineBrowserStateManager::restoreState(vtkPVXMLElement *root) -{ - if(this->View && root) - { - this->restoreState(this->View->getRootIndex(), root); - } -} - -void pqPipelineBrowserStateManager::saveState(const QModelIndex &index) -{ - if(this->Model && index.isValid() && index.model() == this->Model) - { - // Get the name for the index, which will be used to look up the - // state. - QString name = this->Model->data(index).toString(); - if(!name.isEmpty()) - { - // Get the state for the index. - vtkPVXMLElement *root = vtkPVXMLElement::New(); - root->SetName("MoveState"); - this->saveState(index, root); - - // Save the state in the map. - vtksys_ios::ostringstream xml_stream; - root->PrintXML(xml_stream, vtkIndent()); - root->Delete(); - QString state = xml_stream.str().c_str(); - this->Internal->insert(name, state); - } - } -} - -void pqPipelineBrowserStateManager::restoreState(const QModelIndex &index) -{ - if(this->Model && index.isValid() && index.model() == this->Model) - { - QString name = this->Model->data(index).toString(); - QMap<QString, QString>::Iterator iter = this->Internal->find(name); - if(iter != this->Internal->end()) - { - // Use the map entry to restore the state. - vtkPVXMLParser *xmlParser = vtkPVXMLParser::New(); - xmlParser->InitializeParser(); - xmlParser->ParseChunk(iter->toAscii().data(), static_cast<unsigned int>( - iter->size())); - xmlParser->CleanupParser(); - - this->restoreState(index, xmlParser->GetRootElement()); - - // Remove the entry from the map. - xmlParser->Delete(); - this->Internal->erase(iter); - } - } -} - -void pqPipelineBrowserStateManager::saveState(const QModelIndex &index, - vtkPVXMLElement *root) const -{ - // First, save the root index name and attributes. - QItemSelectionModel *selection = this->View->getSelectionModel(); - QModelIndex current = selection->currentIndex(); - if(index.isValid()) - { - if(this->View->isIndexExpanded(index)) - { - root->SetAttribute("expanded", "true"); - } - - if(selection->isSelected(index)) - { - root->SetAttribute("selected", "true"); - } - - if(index == current) - { - root->SetAttribute("current", "true"); - } - } - - // Next, step through the indexes to save the expanded/selected - // state. - QModelIndex next = this->View->getNextVisibleIndex(index, index); - while(next.isValid()) - { - QString id; - vtkPVXMLElement *element = vtkPVXMLElement::New(); - element->SetName("Index"); - this->View->getRelativeIndexId(next, id, index); - element->SetAttribute("id", id.toAscii().data()); - if(this->View->isIndexExpanded(next)) - { - root->SetAttribute("expanded", "true"); - } - - if(selection->isSelected(next)) - { - root->SetAttribute("selected", "true"); - } - - if(next == current) - { - root->SetAttribute("current", "true"); - } - - root->AddNestedElement(element); - element->Delete(); - next = this->View->getNextVisibleIndex(next, index); - } -} - -void pqPipelineBrowserStateManager::restoreState(const QModelIndex &index, - vtkPVXMLElement *root) -{ - // First, restore the root index if it's valid. - QItemSelectionModel *selection = this->View->getSelectionModel(); - if(index.isValid()) - { - if(root->GetAttribute("expanded") != 0) - { - this->View->expand(index); - } - - if(root->GetAttribute("selected") != 0) - { - selection->select(index, QItemSelectionModel::Select); - } - - if(root->GetAttribute("current") != 0) - { - selection->setCurrentIndex(index, QItemSelectionModel::NoUpdate); - } - } - - // Next, loop through the child elements. - QModelIndex next; - QString elemName = "Index"; - for(unsigned int i = 0; i < root->GetNumberOfNestedElements(); i++) - { - vtkPVXMLElement *element = root->GetNestedElement(i); - if(elemName == element->GetName()) - { - QString id = element->GetAttribute("id"); - next = this->View->getRelativeIndex(id, index); - if(next.isValid()) - { - if(element->GetAttribute("expanded") != 0) - { - this->View->expand(next); - } - - if(element->GetAttribute("selected") != 0) - { - selection->select(next, QItemSelectionModel::Select); - } - - if(element->GetAttribute("current") != 0) - { - selection->setCurrentIndex(next, QItemSelectionModel::NoUpdate); - } - } - } - } -} - - diff --git a/Qt/Components/pqPipelineBrowserWidget.cxx b/Qt/Components/pqPipelineBrowserWidget.cxx new file mode 100644 index 0000000000..1ab635b2d4 --- /dev/null +++ b/Qt/Components/pqPipelineBrowserWidget.cxx @@ -0,0 +1,246 @@ +/*========================================================================= + + Program: ParaView + Module: pqPipelineBrowserWidget.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 "pqPipelineBrowserWidget.h" + +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" +#include "pqDisplayPolicy.h" +#include "pqOutputPort.h" +#include "pqPipelineModel.h" +#include "pqPipelineModelSelectionAdaptor.h" +#include "pqPipelineSource.h" +#include "pqServerManagerModel.h" +#include "pqUndoStack.h" +#include "pqView.h" + +#include <QHeaderView> +#include <QKeyEvent> + +//----------------------------------------------------------------------------- +pqPipelineBrowserWidget::pqPipelineBrowserWidget(QWidget* parentObject) + : Superclass(parentObject) +{ + this->PipelineModel = new pqPipelineModel(this); + + // Initialize pqFlatTreeView. + this->setModel(this->PipelineModel); + this->getHeader()->hide(); + this->getHeader()->moveSection(1, 0); + this->installEventFilter(this); + this->setSelectionMode(pqFlatTreeView::ExtendedSelection); + + // Connect the model to the ServerManager model. + pqServerManagerModel *smModel = + pqApplicationCore::instance()->getServerManagerModel(); + QObject::connect(smModel, SIGNAL(serverAdded(pqServer*)), + this->PipelineModel, SLOT(addServer(pqServer*))); + QObject::connect(smModel, SIGNAL(aboutToRemoveServer(pqServer *)), + this->PipelineModel, SLOT(startRemovingServer(pqServer *))); + QObject::connect(smModel, SIGNAL(serverRemoved(pqServer*)), + this->PipelineModel, SLOT(removeServer(pqServer*))); + QObject::connect(smModel, SIGNAL(sourceAdded(pqPipelineSource*)), + this->PipelineModel, SLOT(addSource(pqPipelineSource*))); + QObject::connect(smModel, SIGNAL(sourceRemoved(pqPipelineSource*)), + this->PipelineModel, SLOT(removeSource(pqPipelineSource*))); + QObject::connect(smModel, + SIGNAL(connectionAdded(pqPipelineSource*, pqPipelineSource*, int)), + this->PipelineModel, + SLOT(addConnection(pqPipelineSource*, pqPipelineSource*, int))); + QObject::connect(smModel, + SIGNAL(connectionRemoved(pqPipelineSource*, pqPipelineSource*, int)), + this->PipelineModel, + SLOT(removeConnection(pqPipelineSource*, pqPipelineSource*, int))); + QObject::connect(smModel, SIGNAL(nameChanged(pqServerManagerModelItem *)), + this->PipelineModel, SLOT(updateItemName(pqServerManagerModelItem *))); + + QObject::connect(this, SIGNAL(clicked(const QModelIndex &)), + this, SLOT(handleIndexClicked(const QModelIndex &))); + + QObject::connect( + this->PipelineModel, SIGNAL(rename(const QModelIndex&, const QString&)), + this, SLOT(renameRequest(const QModelIndex&, const QString&))); + + // Use the tree view's font as the base for the model's modified + // font. + QFont modifiedFont = this->font(); + modifiedFont.setBold(true); + this->PipelineModel->setModifiedFont(modifiedFont); + + // Create the selection adaptor. + new pqPipelineModelSelectionAdaptor(this->getSelectionModel(), + pqApplicationCore::instance()->getSelectionModel(), this); + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(setActiveView(pqView*))); + + // Make sure the tree items get expanded when new descendents + // are added. + QObject::connect(this->PipelineModel, SIGNAL(firstChildAdded(const QModelIndex &)), + this, SLOT(expand(const QModelIndex &))); +} + +//----------------------------------------------------------------------------- +pqPipelineBrowserWidget::~pqPipelineBrowserWidget() +{ +} + +//----------------------------------------------------------------------------- +void pqPipelineBrowserWidget::setActiveView(pqView* view) +{ + this->PipelineModel->setView(view); +} + +//----------------------------------------------------------------------------- +bool pqPipelineBrowserWidget::eventFilter(QObject *object, QEvent *eventArg) +{ + if (object == this && eventArg->type() == QEvent::KeyPress) + { + QKeyEvent *keyEvent = static_cast<QKeyEvent *>(eventArg); + if (keyEvent->key() == Qt::Key_Delete || + keyEvent->key() == Qt::Key_Backspace) + { + emit this->deleteKey(); + } + } + + return this->Superclass::eventFilter(object, eventArg); +} + +//---------------------------------------------------------------------------- +void pqPipelineBrowserWidget::handleIndexClicked(const QModelIndex &index) +{ + // we make sure we are only clicking on an eye + if (index.column() == 1) + { + pqDisplayPolicy* display_policy = pqApplicationCore::instance()->getDisplayPolicy(); + + // We need to obtain the source to give the undo element some sensible name. + pqServerManagerModelItem* smModelItem = this->PipelineModel->getItemFor(index); + pqPipelineSource *source = qobject_cast<pqPipelineSource*>(smModelItem); + pqOutputPort* port = source? source->getOutputPort(0) : + qobject_cast<pqOutputPort*>(smModelItem); + if (port) + { + bool new_visibility_state = ! (display_policy->getVisibility( + pqActiveObjects::instance().activeView(), port) == pqDisplayPolicy::Visible); + + bool is_selected = false; + QModelIndexList indexes = this->getSelectionModel()->selectedIndexes(); + foreach (QModelIndex selIndex, indexes) + { + if (selIndex.row() == index.row() && selIndex.parent() == index.parent()) + { + is_selected = true; + break; + } + } + if (is_selected) + { + this->setVisibility(new_visibility_state, indexes); + } + else + { + // although there's a selected group of objects, the user clicked on the + // eye for some other item. In that case, we only affect the clicked + // item. + QModelIndexList indexes2; + indexes2 << index; + this->setVisibility(new_visibility_state, indexes2); + } + } + } +} + +//---------------------------------------------------------------------------- +void pqPipelineBrowserWidget::setSelectionVisibility(bool visible) +{ + QModelIndexList indexes = this->getSelectionModel()->selectedIndexes(); + this->setVisibility(visible, indexes); +} + +//---------------------------------------------------------------------------- +void pqPipelineBrowserWidget::setVisibility(bool visible, + const QModelIndexList& indexes) +{ + pqDisplayPolicy* display_policy = pqApplicationCore::instance()->getDisplayPolicy(); + + bool begun_undo_set = false; + foreach (QModelIndex index, indexes) + { + pqServerManagerModelItem* smModelItem = this->PipelineModel->getItemFor(index); + pqPipelineSource *source = qobject_cast<pqPipelineSource*>(smModelItem); + pqOutputPort* port = source? source->getOutputPort(0) : + qobject_cast<pqOutputPort*>(smModelItem); + + if (port) + { + if (!begun_undo_set) + { + begun_undo_set = true; + if (indexes.size() == 1) + { + source = port->getSource(); + BEGIN_UNDO_SET(QString("%1 %2").arg(visible? "Show" : "Hide"). + arg(source->getSMName())); + } + else + { + BEGIN_UNDO_SET(QString("%1 Selected").arg(visible? "Show" : "Hide")); + } + } + display_policy->setRepresentationVisibility( + port, pqActiveObjects::instance().activeView(), visible); + } + } + if (begun_undo_set) + { + END_UNDO_SET(); + } + if (pqActiveObjects::instance().activeView()) + { + pqActiveObjects::instance().activeView()->render(); + } +} + +//---------------------------------------------------------------------------- +void pqPipelineBrowserWidget::renameRequest(const QModelIndex& index, const QString& name) +{ + pqPipelineSource* source = qobject_cast<pqPipelineSource*>( + this->PipelineModel->getItemFor(index)); + if (source && source->getSMName() != name) + { + BEGIN_UNDO_SET( + QString("Rename %1 to %2").arg(source->getSMName()).arg(name)); + source->rename(name); + END_UNDO_SET(); + } +} diff --git a/Qt/Components/pqPipelineBrowserWidget.h b/Qt/Components/pqPipelineBrowserWidget.h new file mode 100644 index 0000000000..0779a342a0 --- /dev/null +++ b/Qt/Components/pqPipelineBrowserWidget.h @@ -0,0 +1,84 @@ +/*========================================================================= + + Program: ParaView + Module: pqPipelineBrowserWidget.h + + 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. + +========================================================================*/ +#ifndef __pqPipelineBrowserWidget_h +#define __pqPipelineBrowserWidget_h + +#include "pqFlatTreeView.h" +#include "pqComponentsExport.h" + +class pqView; +class pqPipelineModel; +class pqPipelineSource; + +/// pqPipelineBrowserWidget is the widget for the pipeline browser. This is a +/// replacement for pqPipelineBrowser. +class PQCOMPONENTS_EXPORT pqPipelineBrowserWidget : public pqFlatTreeView +{ + Q_OBJECT + typedef pqFlatTreeView Superclass; +public: + pqPipelineBrowserWidget(QWidget* parent=0); + virtual ~pqPipelineBrowserWidget(); + + /// Used to monitor the key press events in the tree view. + /// Returns True if the event should not be sent to the object. + virtual bool eventFilter(QObject *object, QEvent *e); + + /// Set the visibility of selected items. + void setSelectionVisibility(bool visible); + +signals: + /// Fired when the delete key is pressed. + /// Typically implies that the selected items need to be deleted. + void deleteKey(); + +public slots: + /// Set the active view. By default connected to + /// pqActiveObjects::viewChanged() so it keeps track of the active view. + void setActiveView(pqView*); + +protected slots: + void renameRequest(const QModelIndex& index, const QString& new_name); + void handleIndexClicked(const QModelIndex& index); + +protected: + /// sets the visibility for items in the indices list. + void setVisibility(bool visible, const QModelIndexList& indices); + pqPipelineModel* PipelineModel; + +private: + Q_DISABLE_COPY(pqPipelineBrowserWidget) +}; + +#endif + + diff --git a/Qt/Components/pqProxyInformationWidget.cxx b/Qt/Components/pqProxyInformationWidget.cxx index dfdac8d214..b99ec7e754 100644 --- a/Qt/Components/pqProxyInformationWidget.cxx +++ b/Qt/Components/pqProxyInformationWidget.cxx @@ -147,7 +147,7 @@ void pqProxyInformationWidget::updateInformation() source = this->OutputPort->getSource(); if (this->OutputPort->getOutputPortProxy()) { - dataInformation = this->OutputPort->getDataInformation(/*update=*/false); + dataInformation = this->OutputPort->getDataInformation(); } } diff --git a/Qt/Components/pqProxyMenuManager.h b/Qt/Components/pqProxyMenuManager.h index e7ebe43bfd..fd5f347b69 100644 --- a/Qt/Components/pqProxyMenuManager.h +++ b/Qt/Components/pqProxyMenuManager.h @@ -40,6 +40,7 @@ class QAction; // Keeps a menu updated using the proxy definitions under a particular group. // Useful for sources/filters menus. +// OBSOLETE - TO DEPRECATE (this and subclasses). class PQCOMPONENTS_EXPORT pqProxyMenuManager : public QObject { Q_OBJECT diff --git a/Qt/Components/pqProxyTabWidget.cxx b/Qt/Components/pqProxyTabWidget.cxx index bfbfada601..5eb8b37dcd 100644 --- a/Qt/Components/pqProxyTabWidget.cxx +++ b/Qt/Components/pqProxyTabWidget.cxx @@ -36,23 +36,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Qt includes #include <QScrollArea> -// VTK includes -// ParaView Server Manager includes - -// ParaView widget includes - -// ParaView core includes +#include "pqActiveObjects.h" +#include "pqApplicationCore.h" #include "pqDataRepresentation.h" +#include "pqDisplayProxyEditorWidget.h" +#include "pqObjectBuilder.h" +#include "pqObjectInspectorWidget.h" #include "pqOutputPort.h" #include "pqPipelineSource.h" -#include "pqView.h" - -// ParaView components includes -#include "pqObjectInspectorWidget.h" #include "pqProxyInformationWidget.h" -#include "pqDisplayProxyEditorWidget.h" - +#include "pqView.h" //----------------------------------------------------------------------------- pqProxyTabWidget::pqProxyTabWidget(QWidget* p) @@ -83,6 +77,8 @@ pqProxyTabWidget::pqProxyTabWidget(QWidget* p) this->DelayedSetViewTimer.setInterval(1); QObject::connect(&this->DelayedSetViewTimer, SIGNAL(timeout()), this, SLOT(setViewInternal())); + + this->setupDefaultConnections(); } //----------------------------------------------------------------------------- @@ -90,6 +86,37 @@ pqProxyTabWidget::~pqProxyTabWidget() { } +//----------------------------------------------------------------------------- +void pqProxyTabWidget::setupDefaultConnections() +{ + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(setView(pqView*))); + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(portChanged(pqOutputPort*)), + this, SLOT(setOutputPort(pqOutputPort*))); + QObject::connect( + &pqActiveObjects::instance(), + SIGNAL(representationChanged(pqRepresentation*)), + this->Display, + SLOT(setRepresentation(pqRepresentation*))); + + // Make sure the property tab is showing since the accept/reset + // buttons are on that panel. + QObject::connect( + pqApplicationCore::instance()->getObjectBuilder(), + SIGNAL(sourceCreated(pqPipelineSource*)), + this, SLOT(showPropertiesTab())); +} + +//----------------------------------------------------------------------------- +void pqProxyTabWidget::removeDefaultConnections() +{ + QObject::disconnect(&pqActiveObjects::instance(), 0, this, 0); + QObject::connect( + &pqActiveObjects::instance(), 0, this->Display, 0); +} + //----------------------------------------------------------------------------- void pqProxyTabWidget::setProxy(pqPipelineSource* proxy) { @@ -111,12 +138,6 @@ void pqProxyTabWidget::setViewInternal() this->Display->setView(this->View); } -//----------------------------------------------------------------------------- -void pqProxyTabWidget::setRepresentation(pqDataRepresentation* repr) -{ - this->Display->setRepresentation(repr); -} - //----------------------------------------------------------------------------- void pqProxyTabWidget::setOutputPort(pqOutputPort* port) { @@ -124,22 +145,30 @@ void pqProxyTabWidget::setOutputPort(pqOutputPort* port) { return; } + if (this->OutputPort) + { + QObject::disconnect(this->OutputPort, 0, this, 0); + } this->OutputPort = port; this->Information->setOutputPort(port); this->Display->setOutputPort(port); if (!port) { - this->setRepresentation(0); this->setProxy(0); } else { this->setProxy(port->getSource()); - this->setRepresentation(port->getRepresentation(this->View)); } } +//----------------------------------------------------------------------------- +void pqProxyTabWidget::setRepresentation(pqDataRepresentation* repr) +{ + this->Display->setRepresentation(repr); +} + //----------------------------------------------------------------------------- /// get the proxy for which properties are displayed pqPipelineSource* pqProxyTabWidget::getProxy() @@ -153,4 +182,16 @@ pqObjectInspectorWidget* pqProxyTabWidget::getObjectInspector() return this->Inspector; } +//----------------------------------------------------------------------------- +void pqProxyTabWidget::setShowOnAccept(bool val) +{ + this->Inspector->setShowOnAccept(val); +} + +//----------------------------------------------------------------------------- +bool pqProxyTabWidget::showOnAccept() const +{ + return this->Inspector->showOnAccept(); +} + diff --git a/Qt/Components/pqProxyTabWidget.h b/Qt/Components/pqProxyTabWidget.h index 437da1a75c..0d31917e69 100644 --- a/Qt/Components/pqProxyTabWidget.h +++ b/Qt/Components/pqProxyTabWidget.h @@ -51,7 +51,7 @@ class PQCOMPONENTS_EXPORT pqProxyTabWidget : public QTabWidget Q_OBJECT public: /// constructor - pqProxyTabWidget(QWidget* p); + pqProxyTabWidget(QWidget* p=0); /// destructor ~pqProxyTabWidget(); @@ -67,18 +67,44 @@ public: INFORMATION=2 }; + /// By default pqProxyTabWidget connects to pqActiveObjects to know when the + /// active port/view change. If your application does not what this behavior + /// then in that case you should call removeDefaultConnections() and set up + /// your connections to the public slots. If default behavior is acceptable, + /// then no need to call setupDefaultConnections() since that's done in the + /// constructor itself. + void setupDefaultConnections(); + void removeDefaultConnections(); + + /// When set to true, on accept(), newly created sources will be shown. + /// Default is false. + void setShowOnAccept(bool val); + bool showOnAccept() const; + public slots: - /// set the current render module that these panels work on + /// set the current render module that these panels work on. + /// By default these slots are connected to corresponding signals on + /// pqActiveObjects. So unless your application does not what that behavior, + /// there's no need to connect to these slots. void setView(pqView* rm); /// Set the output port whose information is to be shown in the /// information tab. + /// set the current render module that these panels work on. + /// By default these slots are connected to corresponding signals on + /// pqActiveObjects. So unless your application does not what that behavior, + /// there's no need to connect to these slots. void setOutputPort(pqOutputPort* port); - /// Set the representation whose properties are to be shown in the - /// display tab. + /// Set the active representation. void setRepresentation(pqDataRepresentation* repr); + + void showPropertiesTab() + { + this->setCurrentIndex(pqProxyTabWidget::PROPERTIES); + } + protected: /// Set the display whose properties we want to edit. void setProxy(pqPipelineSource* source); diff --git a/Qt/Components/pqSelectReaderDialog.cxx b/Qt/Components/pqSelectReaderDialog.cxx index fdbebdbb20..72621dd718 100644 --- a/Qt/Components/pqSelectReaderDialog.cxx +++ b/Qt/Components/pqSelectReaderDialog.cxx @@ -36,17 +36,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QListWidgetItem> -#include "pqReaderFactory.h" +#include "vtkSMReaderFactory.h" +#include "vtkStringList.h" +#include "pqServer.h" +//----------------------------------------------------------------------------- class pqSelectReaderDialog::pqInternal : public QObject, public Ui::pqSelectReaderDialog { public: pqInternal(QObject* p) : QObject(p) {} }; +//----------------------------------------------------------------------------- pqSelectReaderDialog::pqSelectReaderDialog(const QString& file, pqServer* s, - pqReaderFactory* readerInfo, QWidget* p) + vtkSMReaderFactory* readerFactory, QWidget* p) : QDialog(p) { this->Internal = new pqInternal(this); @@ -60,19 +64,39 @@ pqSelectReaderDialog::pqSelectReaderDialog(const QString& file, // populate the list view with readers QListWidget* lw = this->Internal->listWidget; - QStringList readers = readerInfo->getSupportedReadersForFile(s, file); - foreach(QString reader, readers) + vtkStringList* readers = readerFactory->GetPossibleReaders( + file.toAscii().data(), s->GetConnectionID()); + + for (int cc=0; (cc+2) < readers->GetNumberOfStrings(); cc+=3) { - QString desc = readerInfo->getReaderDescription(reader); + QString desc = readers->GetString(cc+2); QListWidgetItem* item = new QListWidgetItem(desc, lw); - item->setData(Qt::UserRole, reader); + item->setData(Qt::UserRole, readers->GetString(cc+0)); + item->setData(Qt::UserRole+1, readers->GetString(cc+1)); } }; +//----------------------------------------------------------------------------- pqSelectReaderDialog::~pqSelectReaderDialog() { } +//----------------------------------------------------------------------------- +QString pqSelectReaderDialog::getGroup() const +{ + QListWidget* lw = this->Internal->listWidget; + QList<QListWidgetItem*> selection = lw->selectedItems(); + if(selection.empty()) + { + return QString(); + } + + // should have only one with single selection mode + QListWidgetItem* item = selection[0]; + return item->data(Qt::UserRole+0).toString(); +} + +//----------------------------------------------------------------------------- QString pqSelectReaderDialog::getReader() const { QListWidget* lw = this->Internal->listWidget; @@ -87,8 +111,7 @@ QString pqSelectReaderDialog::getReader() const // should have only one with single selection mode QListWidgetItem* item = selection[0]; - return item->data(Qt::UserRole).toString(); + return item->data(Qt::UserRole+1).toString(); } - diff --git a/Qt/Components/pqSelectReaderDialog.h b/Qt/Components/pqSelectReaderDialog.h index ceafdbe06f..cb3bdd89a6 100644 --- a/Qt/Components/pqSelectReaderDialog.h +++ b/Qt/Components/pqSelectReaderDialog.h @@ -37,7 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqComponentsExport.h" class pqServer; -class pqReaderFactory; +class vtkSMReaderFactory; /// a dialog that prompts for a reader type to open a file class PQCOMPONENTS_EXPORT pqSelectReaderDialog : public QDialog @@ -47,7 +47,7 @@ public: /// constructor pqSelectReaderDialog(const QString& file, pqServer* s, - pqReaderFactory* factory, + vtkSMReaderFactory* factory, QWidget* p = 0); /// destructor ~pqSelectReaderDialog(); @@ -55,6 +55,9 @@ public: /// get the reader that was chosen to read a file QString getReader() const; + /// get the group for the chosen reader. + QString getGroup() const; + protected: class pqInternal; pqInternal* Internal; diff --git a/Qt/Components/pqSelectionInspectorPanel.cxx b/Qt/Components/pqSelectionInspectorPanel.cxx index d2f45830a9..458af60d10 100644 --- a/Qt/Components/pqSelectionInspectorPanel.cxx +++ b/Qt/Components/pqSelectionInspectorPanel.cxx @@ -863,7 +863,7 @@ void pqSelectionInspectorPanel::updateThreholdDataArrays() } vtkPVDataInformation* geomInfo = - this->Implementation->InputPort->getDataInformation(true); + this->Implementation->InputPort->getDataInformation(); vtkPVDataSetAttributesInformation* attrInfo; @@ -1801,7 +1801,7 @@ bool pqSelectionInspectorPanel::hasGlobalIDs(pqOutputPort* port) return false; } - vtkPVDataInformation* info = port->getDataInformation(false); + vtkPVDataInformation* info = port->getDataInformation(); vtkPVDataSetAttributesInformation* attrInfo = 0; if (this->Implementation->comboFieldType->currentText() == QString("POINT")) diff --git a/Qt/Components/pqSelectionManager.cxx b/Qt/Components/pqSelectionManager.cxx index f24997ab0f..fa88336efa 100644 --- a/Qt/Components/pqSelectionManager.cxx +++ b/Qt/Components/pqSelectionManager.cxx @@ -34,15 +34,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QtDebug> +#include "pqActiveObjects.h" #include "pqApplicationCore.h" #include "pqOutputPort.h" #include "pqPipelineSource.h" #include "pqRenderView.h" +#include "pqServer.h" #include "pqServerManagerModel.h" #include "pqServerManagerSelectionModel.h" #include "pqSMAdaptor.h" - -#include "pqServer.h" #include "pqTimeKeeper.h" #include "vtkAlgorithm.h" #include "vtkCollection.h" @@ -127,6 +127,11 @@ pqSelectionManager::pqSelectionManager(QObject* _parent/*=null*/) : this, SLOT(clearSelection())); pqApplicationCore::instance()->registerManager("SelectionManager", this); + + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(setActiveView(pqView*))); + this->setActiveView(pqActiveObjects::instance().activeView()); } //----------------------------------------------------------------------------- diff --git a/Qt/Components/pqSignalAdaptorCompositeTreeWidget.cxx b/Qt/Components/pqSignalAdaptorCompositeTreeWidget.cxx index dfe467edef..2659804f3a 100644 --- a/Qt/Components/pqSignalAdaptorCompositeTreeWidget.cxx +++ b/Qt/Components/pqSignalAdaptorCompositeTreeWidget.cxx @@ -148,11 +148,11 @@ public: }; // This TreeItem specialization needs some explanation. -// Default Qt behaviour for tristate items: +// Default Qt behavior for tristate items: // - If all immediate children are checked or partially checked // then the item becomes fully checked. // This is not appropriate for this widget. A parent item should never be fully -// checked unless the user explicitly checked it, since otherwise, the behaviour +// checked unless the user explicitly checked it, since otherwise, the behavior // of the filter is to pass the entire subtree through. // This class fixes that issue. class pqCompositeTreeWidgetItem : public pqTreeWidgetItem @@ -807,7 +807,8 @@ void pqSignalAdaptorCompositeTreeWidget::updateSelectionCounts() // Iterate over the selection data information and then update the labels. vtkSMSourceProxy* sourceProxy = this->Internal->Domain->GetSource(); - if (!sourceProxy->GetSelectionOutput(this->Internal->Domain->GetSourcePort())) + if (!sourceProxy || + !sourceProxy->GetSelectionOutput(this->Internal->Domain->GetSourcePort())) { return; } diff --git a/Qt/Components/pqSourceHistoryModel.cxx b/Qt/Components/pqSourceHistoryModel.cxx deleted file mode 100644 index b4ca4bfbc1..0000000000 --- a/Qt/Components/pqSourceHistoryModel.cxx +++ /dev/null @@ -1,234 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceHistoryModel.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceHistoryModel.cxx -/// \date 5/26/2006 - -#include "pqSourceHistoryModel.h" - -#include <QList> -#include <QString> -#include <QStringList> - - -class pqSourceHistoryModelInternal : public QList<QString> {}; - - -pqSourceHistoryModel::pqSourceHistoryModel(QObject *parentObject) - : QAbstractListModel(parentObject) -{ - this->Internal = new pqSourceHistoryModelInternal(); - this->Icons = 0; - this->Pixmap = pqSourceInfoIcons::Invalid; - this->Limit = 20; -} - -pqSourceHistoryModel::~pqSourceHistoryModel() -{ - if(this->Internal) - { - delete this->Internal; - } -} - -int pqSourceHistoryModel::rowCount(const QModelIndex &parentIndex) const -{ - if(this->Internal && !parentIndex.isValid()) - { - return this->Internal->size(); - } - - return 0; -} - -QModelIndex pqSourceHistoryModel::index(int row, int column, - const QModelIndex &parentIndex) const -{ - if(this->Internal && !parentIndex.isValid() && column == 0 && row >= 0 && - row < this->Internal->size()) - { - return this->createIndex(row, column, 0); - } - - return QModelIndex(); -} - -QVariant pqSourceHistoryModel::data(const QModelIndex &idx, int role) const -{ - if(this->Internal && idx.isValid() && idx.model() == this) - { - QString itemName = (*this->Internal)[idx.row()]; - switch(role) - { - case Qt::DisplayRole: - case Qt::ToolTipRole: - case Qt::EditRole: - { - return QVariant(itemName); - } - case Qt::DecorationRole: - { - if(this->Icons) - { - // Get the user specified icon. - return QVariant(this->Icons->getPixmap(itemName, this->Pixmap)); - } - else - { - // Default to the source pixmap. - return QVariant(QPixmap(":/pqWidgets/Icons/pqSource16.png")); - } - } - } - } - - return QVariant(); -} - -Qt::ItemFlags pqSourceHistoryModel::flags(const QModelIndex&) const -{ - return Qt::ItemIsSelectable | Qt::ItemIsEnabled; -} - -QString pqSourceHistoryModel::getSourceName(const QModelIndex &idx) const -{ - if(this->Internal && idx.isValid() && idx.model() == this) - { - return (*this->Internal)[idx.row()]; - } - - return QString(); -} - -QModelIndex pqSourceHistoryModel::getIndexFor(const QString&) const -{ - return QModelIndex(); -} - -void pqSourceHistoryModel::setHistoryLimit(int limit) -{ - if(this->Internal && limit > 0 && limit != this->Limit) - { - this->Limit = limit; - - // If there are too many items on the list, prune it. - if(this->Internal->size() > this->Limit) - { - this->beginRemoveRows(QModelIndex(), this->Limit, - this->Internal->size()); - QList<QString>::Iterator iter = this->Internal->begin(); - iter += this->Limit; - this->Internal->erase(iter, this->Internal->end()); - this->endRemoveRows(); - } - } -} - -void pqSourceHistoryModel::getHistoryList(QStringList &list) const -{ - if(this->Internal) - { - QList<QString>::Iterator iter = this->Internal->begin(); - for( ; iter != this->Internal->end(); ++iter) - { - list.append(*iter); - } - } -} - -void pqSourceHistoryModel::setHistoryList(const QStringList &list) -{ - if(this->Internal) - { - this->Internal->clear(); - QStringList::ConstIterator iter = list.begin(); - for(int i = 0; iter != list.end() && i < this->Limit; ++iter, ++i) - { - this->Internal->append(*iter); - } - - // Signal the view that everything has changed. - this->reset(); - } -} - -void pqSourceHistoryModel::addRecentSource(const QString &source) -{ - if(this->Internal && !source.isEmpty()) - { - // See if the source is in the history list. - int row = this->Internal->indexOf(source); - if(row != -1) - { - // Remove the source from the list. - this->beginRemoveRows(QModelIndex(), row, row); - this->Internal->removeAt(row); - this->endRemoveRows(); - } - - // Add the source to the front of the list. - this->beginInsertRows(QModelIndex(), 0, 0); - this->Internal->prepend(source); - this->endInsertRows(); - - // Make sure the list stays within its limit. - if(this->Internal->size() > this->Limit) - { - row = this->Internal->size() - 1; - this->beginRemoveRows(QModelIndex(), row, row); - this->Internal->removeAt(row); - this->endRemoveRows(); - } - } -} - -void pqSourceHistoryModel::setIcons(pqSourceInfoIcons *icons, - pqSourceInfoIcons::DefaultPixmap type) -{ - this->Icons = icons; - this->Pixmap = type; - - // Listen for pixmap updates. - QObject::connect(this->Icons, SIGNAL(pixmapChanged(const QString &)), - this, SLOT(updatePixmap(const QString &))); -} - -void pqSourceHistoryModel::updatePixmap(const QString &name) -{ - QModelIndex idx = this->getIndexFor(name); - if(idx.isValid()) - { - emit this->dataChanged(idx, idx); - } -} - - diff --git a/Qt/Components/pqSourceHistoryModel.h b/Qt/Components/pqSourceHistoryModel.h deleted file mode 100644 index bf8036464c..0000000000 --- a/Qt/Components/pqSourceHistoryModel.h +++ /dev/null @@ -1,178 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceHistoryModel.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceHistoryModel.h -/// \date 5/26/2006 - -#ifndef _pqSourceHistoryModel_h -#define _pqSourceHistoryModel_h - - -#include "pqComponentsExport.h" -#include <QAbstractListModel> - -#include "pqSourceInfoIcons.h" // Needed for enum - -class pqSourceHistoryModelInternal; -class QStringList; - - -/// \class pqSourceHistoryModel -/// \brief -/// The pqSourceHistoryModel class is used to store the list of -/// recent sources. -/// -/// The pqSourceHistoryModel can be used for recent sources or -/// filters. The underlying data is the same for each type. The only -/// difference is the default icon type used. The default icon type -/// can be configured using the \c setIcons method. -class PQCOMPONENTS_EXPORT pqSourceHistoryModel : public QAbstractListModel -{ - Q_OBJECT - -public: - pqSourceHistoryModel(QObject *parent=0); - virtual ~pqSourceHistoryModel(); - - /// \name QAbstractItemModel Methods - //@{ - /// \brief - /// Gets the number of rows for a given index. - /// \param parent The parent index. - /// \return - /// The number of rows for the given index. - virtual int rowCount(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets a model index for a given location. - /// \param row The row number. - /// \param column The column number. - /// \param parent The parent index. - /// \return - /// A model index for the given location. - virtual QModelIndex index(int row, int column, - const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets the data for a given model index. - /// \param index The model index. - /// \param role The role to get data for. - /// \return - /// The data for the given model index. - virtual QVariant data(const QModelIndex &index, - int role=Qt::DisplayRole) const; - - /// \brief - /// Gets the flags for a given model index. - /// - /// The flags for an item indicate if it is enabled, editable, etc. - /// - /// \param index The model index. - /// \return - /// The flags for the given model index. - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - //@} - - /// \name Index Mapping Methods - //@{ - /// \brief - /// Gets the source name for a given index. - /// \param index The index to look up. - /// \return - /// The source name for the given index or an empty string if the - /// index is not valid. - QString getSourceName(const QModelIndex &index) const; - - /// \brief - /// Gets the index for the given source name. - /// \param source The source name to look up. - /// \return - /// The model index for the given source name. - QModelIndex getIndexFor(const QString &source) const; - //@} - - /// \name History Methods - //@{ - /// \brief - /// Gets the history limit. - /// \return - /// The history limit. - int getHistoryLimit() const {return this->Limit;} - - /// \brief - /// Sets the history limit. - /// \param limit The new history limit. - void setHistoryLimit(int limit); - - /// \brief - /// Gets the list of sources in the history list. - /// \param list Used to return the list of sources. - void getHistoryList(QStringList &list) const; - - /// \brief - /// Sets the list of sources in the history list. - /// \param list The list of sources. - void setHistoryList(const QStringList &list); - - /// \brief - /// Adds the source to the history list. - /// - /// If the history list excedes the limit when adding the source, - /// the oldest source in the list will be removed. If the source - /// is already in the list, it will be moved to the most recent - /// position. - /// - /// \param source The source name to add to the history list. - void addRecentSource(const QString &source); - //@} - - /// \brief - /// Initializes the icon database. - /// \param icons The icon database. - /// \param type The default icon type to display. - void setIcons(pqSourceInfoIcons *icons, - pqSourceInfoIcons::DefaultPixmap type); - -private slots: - /// \brief - /// Updates the pixmap for the given source name. - /// \param name The name of the source whose icon changed. - void updatePixmap(const QString &name); - -private: - pqSourceHistoryModelInternal *Internal; ///< Stores the history list. - pqSourceInfoIcons *Icons; ///< A pointer to the icons. - pqSourceInfoIcons::DefaultPixmap Pixmap; ///< The default icon type. - int Limit; ///< Stores the history limit. -}; - -#endif diff --git a/Qt/Components/pqSourceInfoFilterModel.cxx b/Qt/Components/pqSourceInfoFilterModel.cxx deleted file mode 100644 index 47efbc200b..0000000000 --- a/Qt/Components/pqSourceInfoFilterModel.cxx +++ /dev/null @@ -1,524 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoFilterModel.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoFilterModel.cxx -/// \date 6/26/2006 - -#include "pqSourceInfoFilterModel.h" - -#include "pqSourceInfoModel.h" - -#include <QList> -#include <QModelIndex> -#include <QPersistentModelIndex> -#include <QString> -#include <QStringList> - - -/// \class pqSourceInfoFilterModelItem -class pqSourceInfoFilterModelItem -{ -public: - pqSourceInfoFilterModelItem(pqSourceInfoFilterModelItem *parent=0); - ~pqSourceInfoFilterModelItem(); - - QPersistentModelIndex SourceIndex; - pqSourceInfoFilterModelItem *Parent; - QList<pqSourceInfoFilterModelItem *> Children; -}; - - -/// \class pqSourceInfoFilterModelInternal -class pqSourceInfoFilterModelInternal -{ -public: - pqSourceInfoFilterModelInternal(); - ~pqSourceInfoFilterModelInternal() {} - - QStringList Allowed; - QList<pqSourceInfoFilterModelItem *> ToRemove; -}; - - -//----------------------------------------------------------------------------- -pqSourceInfoFilterModelItem::pqSourceInfoFilterModelItem( - pqSourceInfoFilterModelItem *parent) - : SourceIndex(), Children() -{ - this->Parent = parent; -} - -pqSourceInfoFilterModelItem::~pqSourceInfoFilterModelItem() -{ - QList<pqSourceInfoFilterModelItem *>::Iterator iter = this->Children.begin(); - for( ; iter != this->Children.end(); ++iter) - { - delete *iter; - } - - this->Children.clear(); -} - - -//----------------------------------------------------------------------------- -pqSourceInfoFilterModelInternal::pqSourceInfoFilterModelInternal() - : Allowed(), ToRemove() -{ -} - - -//----------------------------------------------------------------------------- -pqSourceInfoFilterModel::pqSourceInfoFilterModel(QObject *parentObject) - : QAbstractProxyModel(parentObject) -{ - this->Internal = new pqSourceInfoFilterModelInternal(); - this->Root = new pqSourceInfoFilterModelItem(); - this->SourceInfo = 0; -} - -pqSourceInfoFilterModel::~pqSourceInfoFilterModel() -{ - delete this->Internal; - delete this->Root; -} - -int pqSourceInfoFilterModel::rowCount(const QModelIndex &parentIndex) const -{ - pqSourceInfoFilterModelItem *item = this->getModelItem(parentIndex); - if(item && (item == this->Root || parentIndex.column() == 0)) - { - return item->Children.size(); - } - - return 0; -} - -int pqSourceInfoFilterModel::columnCount(const QModelIndex &parentIndex) const -{ - if(this->sourceModel()) - { - QModelIndex sourceIndex = this->mapToSource(parentIndex); - return this->sourceModel()->columnCount(sourceIndex); - } - - return 0; -} - -bool pqSourceInfoFilterModel::hasChildren(const QModelIndex &parentIndex) const -{ - return this->rowCount(parentIndex) > 0; -} - -QModelIndex pqSourceInfoFilterModel::index(int row, int column, - const QModelIndex &parentIndex) const -{ - pqSourceInfoFilterModelItem *item = this->getModelItem(parentIndex); - if(item && column >= 0 && row >= 0 && row < item->Children.size()) - { - pqSourceInfoFilterModelItem *child = item->Children[row]; - return this->createIndex(row, column, child); - } - - return QModelIndex(); -} - -QModelIndex pqSourceInfoFilterModel::parent(const QModelIndex &idx) const -{ - pqSourceInfoFilterModelItem *item = this->getModelItem(idx); - if(item && item->Parent && item->Parent != this->Root) - { - int row = item->Parent->Parent->Children.indexOf(item->Parent); - return this->createIndex(row, 0, item->Parent); - } - - return QModelIndex(); -} - -QVariant pqSourceInfoFilterModel::data(const QModelIndex &idx, int role) const -{ - if(this->sourceModel()) - { - QModelIndex sourceIndex = this->mapToSource(idx); - return this->sourceModel()->data(sourceIndex, role); - } - - return QVariant(); -} - -Qt::ItemFlags pqSourceInfoFilterModel::flags(const QModelIndex &idx) const -{ - if(this->sourceModel()) - { - QModelIndex sourceIndex = this->mapToSource(idx); - return this->sourceModel()->flags(sourceIndex); - } - - return Qt::ItemIsEnabled; -} - -void pqSourceInfoFilterModel::setSourceModel(QAbstractItemModel *source) -{ - QAbstractProxyModel::setSourceModel(source); - this->SourceInfo = qobject_cast<pqSourceInfoModel *>(source); - - // Listen for model changes. - QObject::connect(source, SIGNAL(rowsInserted(const QModelIndex &, int, int)), - this, SLOT(addModelRows(const QModelIndex &, int, int))); - QObject::connect(source, - SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), - this, SLOT(startRemovingRows(const QModelIndex &, int, int))); - QObject::connect(source, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), - this, SLOT(finishRemovingRows(const QModelIndex &, int, int))); - QObject::connect(source, SIGNAL(modelReset()), - this, SLOT(handleSourceReset())); - - // Clean up the data for the old model. Fill in the data for the new model. - this->clearData(); - this->loadData(); - - // Inform the view that the model has changed. - this->reset(); -} - -QModelIndex pqSourceInfoFilterModel::mapFromSource( - const QModelIndex &sourceIndex) const -{ - pqSourceInfoFilterModelItem *item = this->getModelItemFromSource(sourceIndex); - if(item && item != this->Root) - { - int row = item->Parent->Children.indexOf(item); - return this->createIndex(row, sourceIndex.column(), item); - } - - return QModelIndex(); -} - -QModelIndex pqSourceInfoFilterModel::mapToSource( - const QModelIndex &proxyIndex) const -{ - pqSourceInfoFilterModelItem *item = this->getModelItem(proxyIndex); - if(item && item != this->Root) - { - return item->SourceIndex.sibling(item->SourceIndex.row(), - proxyIndex.column()); - } - - return QModelIndex(); -} - -void pqSourceInfoFilterModel::setAllowedNames(const QStringList &allowed) -{ - // Clean up the current model data. - this->clearData(); - - // Load the model data using the new list of allowed names. - this->Internal->Allowed = allowed; - this->loadData(); - - // Notify the view that the model has changed. - this->reset(); -} - -void pqSourceInfoFilterModel::addModelRows(const QModelIndex &sourceIndex, - int start, int end) -{ - pqSourceInfoFilterModelItem *item = - this->getModelItemFromSource(sourceIndex); - if(item) - { - // Find the location to add the new rows. - int row = 0; - QList<pqSourceInfoFilterModelItem *>::Iterator iter = - item->Children.begin(); - for( ; iter != item->Children.end(); ++iter, ++row) - { - if(start <= (*iter)->SourceIndex.row()) - { - break; - } - } - - // Use the allowed list to determine if the rows can be added. - QString name; - QModelIndex idx; - pqSourceInfoFilterModelItem *child = 0; - QList<pqSourceInfoFilterModelItem *> toAdd; - QAbstractItemModel *source = this->sourceModel(); - for(int i = start; i <= end; i++) - { - idx = source->index(i, 0, sourceIndex); - if(this->SourceInfo && !this->SourceInfo->isSource(idx)) - { - // Folders always pass the filter. - child = new pqSourceInfoFilterModelItem(item); - } - else - { - name = source->data(idx, Qt::DisplayRole).toString(); - if(this->Internal->Allowed.contains(name)) - { - child = new pqSourceInfoFilterModelItem(item); - } - } - - if(child) - { - toAdd.append(child); - child->SourceIndex = idx; - this->loadData(source, idx, child); - } - } - - // Add the rows that passed the filter to the model. - if(toAdd.size() > 0) - { - this->beginInsertRows(this->mapFromSource(sourceIndex), row, - row + toAdd.size() - 1); - for(iter = toAdd.begin(); iter != toAdd.end(); ++iter, ++row) - { - item->Children.insert(row, *iter); - } - - this->endInsertRows(); - } - } -} - -void pqSourceInfoFilterModel::startRemovingRows(const QModelIndex &sourceIndex, - int start, int end) -{ - // Remove the associated proxy indexes. Place them on a list to be - // deleted after the rows have been removed. - pqSourceInfoFilterModelItem *item = - this->getModelItemFromSource(sourceIndex); - if(item) - { - // Find the location to remove the rows. - int row = 0; - QList<pqSourceInfoFilterModelItem *>::Iterator iter = - item->Children.begin(); - for( ; iter != item->Children.end(); ++iter, ++row) - { - if(start <= (*iter)->SourceIndex.row()) - { - break; - } - } - - // There's nothing to remove if the start is not in the list. - if(row > item->Children.size()) - { - return; - } - - // Find the end in the filtered list. - int endRow = row; - for( ; iter != item->Children.end(); ++iter, ++endRow) - { - if((*iter)->SourceIndex.row() > end) - { - break; - } - } - - // The endRow will always be one more than the actual endRow. - endRow--; - - // Notify the view that the model is changing. - this->beginRemoveRows(this->mapFromSource(sourceIndex), row, endRow); - for(int i = endRow; i >= row; i--) - { - // Remove the item from the list of children and save the item - // for clean up later. - this->Internal->ToRemove.prepend(item->Children.takeAt(i)); - } - } -} - -void pqSourceInfoFilterModel::finishRemovingRows( - const QModelIndex &/*sourceIndex*/, int /*start*/, int /*end*/) -{ - // Signal the view that the removal is complete. Then, delete the - // proxy items on the list. - if(this->Internal->ToRemove.size() > 0) - { - this->endRemoveRows(); - QList<pqSourceInfoFilterModelItem *>::Iterator iter = - this->Internal->ToRemove.begin(); - for( ; iter != this->Internal->ToRemove.end(); ++iter) - { - delete *iter; - } - - this->Internal->ToRemove.clear(); - } -} - -void pqSourceInfoFilterModel::handleSourceReset() -{ - // Clean up the the current model data and reload the new data. - this->clearData(); - this->loadData(); - - // Notify the view that the model has changed. - this->reset(); -} - -pqSourceInfoFilterModelItem *pqSourceInfoFilterModel::getModelItem( - const QModelIndex &proxyIndex) const -{ - if(!proxyIndex.isValid()) - { - return this->Root; - } - else if(proxyIndex.model() == this) - { - return reinterpret_cast<pqSourceInfoFilterModelItem *>( - proxyIndex.internalPointer()); - } - - return 0; -} - -pqSourceInfoFilterModelItem *pqSourceInfoFilterModel::getModelItemFromSource( - const QModelIndex &sourceIndex) const -{ - if(!sourceIndex.isValid()) - { - return this->Root; - } - - QModelIndex idx = sourceIndex; - if(idx.column() != 0) - { - idx = idx.sibling(idx.row(), 0); - } - - // Get the parent chain. - QList<QModelIndex> chain; - while(idx.isValid()) - { - chain.prepend(idx); - idx = idx.parent(); - } - - // Start with the proxy model root and find the index at the end of - // the source model chain. - int row = 0; - pqSourceInfoFilterModelItem *child = 0; - pqSourceInfoFilterModelItem *item = this->Root; - QList<QModelIndex>::Iterator iter = chain.begin(); - for( ; item && iter != chain.end(); ++iter) - { - child = 0; - for(row = (*iter).row(); row >= 0; row--) - { - child = item->Children[row]; - if(child->SourceIndex == *iter) - { - break; - } - } - - if(row < 0) - { - item = 0; - break; - } - - item = child; - } - - return item; -} - -void pqSourceInfoFilterModel::clearData() -{ - QList<pqSourceInfoFilterModelItem *>::Iterator iter = - this->Root->Children.begin(); - for( ; iter != this->Root->Children.end(); ++iter) - { - delete *iter; - } - - this->Root->Children.clear(); -} - -void pqSourceInfoFilterModel::loadData() -{ - // Leave the model empty if the allowed names is empty. - QAbstractItemModel *source = this->sourceModel(); - if(this->Internal->Allowed.size() == 0 || source == 0) - { - return; - } - - // Start with the root and load all the data recursively. - this->loadData(source, QModelIndex(), this->Root); -} - -void pqSourceInfoFilterModel::loadData(QAbstractItemModel *source, - const QModelIndex &sourceIndex, pqSourceInfoFilterModelItem *item) -{ - // Filter the items using the list of allowed names. - QString name; - QModelIndex idx; - pqSourceInfoFilterModelItem *child = 0; - int count = source->rowCount(sourceIndex); - for(int row = 0; row < count; row ++) - { - child = 0; - idx = source->index(row, 0, sourceIndex); - if(this->SourceInfo && !this->SourceInfo->isSource(idx)) - { - // Folders always pass the filter. - child = new pqSourceInfoFilterModelItem(item); - } - else - { - name = source->data(idx, Qt::DisplayRole).toString(); - if(this->Internal->Allowed.contains(name)) - { - child = new pqSourceInfoFilterModelItem(item); - } - } - - if(child) - { - item->Children.append(child); - child->SourceIndex = idx; - this->loadData(source, idx, child); - } - } -} - - diff --git a/Qt/Components/pqSourceInfoFilterModel.h b/Qt/Components/pqSourceInfoFilterModel.h deleted file mode 100644 index bbc5749443..0000000000 --- a/Qt/Components/pqSourceInfoFilterModel.h +++ /dev/null @@ -1,235 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoFilterModel.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoFilterModel.h -/// \date 6/26/2006 - -#ifndef _pqSourceInfoFilterModel_h -#define _pqSourceInfoFilterModel_h - - -#include "pqComponentsExport.h" -#include <QAbstractProxyModel> - -class pqSourceInfoFilterModelInternal; -class pqSourceInfoFilterModelItem; -class pqSourceInfoModel; -class QStringList; - - -/// \class pqSourceInfoFilterModel -/// \brief -/// The pqSourceInfoFilterModel class is used to display only the -/// allowed sources for a model. -/// -/// It is designed to filter a pqSourceHistoryModel or a -/// pqSourceInfoModel. The filtering functionality is needed by the -/// "Add Filter..." dialog to only display filters that can be -/// connected to the selected input. -class PQCOMPONENTS_EXPORT pqSourceInfoFilterModel : public QAbstractProxyModel -{ - Q_OBJECT - -public: - pqSourceInfoFilterModel(QObject *parent=0); - virtual ~pqSourceInfoFilterModel(); - - /// \name QAbstractItemModel Methods - //@{ - /// \brief - /// Gets the number of rows for a given index. - /// \param parent The parent index. - /// \return - /// The number of rows for the given index. - virtual int rowCount(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets the number of columns for a given index. - /// \param parent The parent index. - /// \return - /// The number of columns for the given index. - virtual int columnCount(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets whether or not the given index has child items. - /// \param parent The parent index. - /// \return - /// True if the given index has child items. - virtual bool hasChildren(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets a model index for a given location. - /// \param row The row number. - /// \param column The column number. - /// \param parent The parent index. - /// \return - /// A model index for the given location. - virtual QModelIndex index(int row, int column, - const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets the parent for a given index. - /// \param index The model index. - /// \return - /// A model index for the parent of the given index. - virtual QModelIndex parent(const QModelIndex &index) const; - - /// \brief - /// Gets the data for a given model index. - /// \param index The model index. - /// \param role The role to get data for. - /// \return - /// The data for the given model index. - virtual QVariant data(const QModelIndex &index, - int role=Qt::DisplayRole) const; - - /// \brief - /// Gets the flags for a given model index. - /// - /// The flags for an item indicate if it is enabled, editable, etc. - /// - /// \param index The model index. - /// \return - /// The flags for the given model index. - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - //@} - - /// \name QAbstractProxyModel Methods - //@{ - /// \brief - /// Sets the source model for the proxy model. - /// \param source The source model. - virtual void setSourceModel(QAbstractItemModel *source); - - /// \brief - /// Gets the proxy model index for a given source model index. - /// \param sourceIndex The source model index to map. - virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; - - /// \brief - /// Gets the source model index for a given proxy model index. - /// \param proxyIndex The proxy model index to map. - virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - //@} - - /// \name Model Filter Methods - //@{ - /// \brief - /// Sets the list of allowed names. - /// - /// The proxy model will load or reload the data from the source - /// model based on the list of allowed names. If the proxy model is - /// filtering a pqSourceInfoModel, it will pass through the group - /// indexes and only filter the source indexes. - /// - /// \param allowed The list of allowed source names. - void setAllowedNames(const QStringList &allowed); - //@} - -private slots: - /// \brief - /// Loads new source model rows in the proxy model. - /// \param sourceIndex The parent source model index. - /// \param start The first row added. - /// \param end The last row added. - void addModelRows(const QModelIndex &sourceIndex, int start, int end); - - /// \brief - /// Removes source model rows from the proxy model. - /// - /// This method is called when the source model begins removing - /// rows. It send the corresponding signal to the view and then - /// removes the proxy model items from the data structure. The - /// items being removed are not deleted until the source model - /// signals that it has finished removing the rows. - /// - /// \param sourceIndex The parent source model index. - /// \param start The first row to be removed. - /// \param end The last row to be removed. - /// \sa pqSourceInfoFilterModel::finishRemovingRows(const QModelIndex &, int, int) - void startRemovingRows(const QModelIndex &sourceIndex, int start, int end); - - /// \brief - /// Removes source model rows from the proxy model. - /// - /// This method is called when the source model finishes removing - /// rows. The corresponding signal is sent to the view and then the - /// proxy model items are deleted. - /// - /// \param sourceIndex The parent source model index. - /// \param start The first row to be removed. - /// \param end The last row to be removed. - /// \sa pqSourceInfoFilterModel::startRemovingRows(const QModelIndex &, int, int) - void finishRemovingRows(const QModelIndex &sourceIndex, int start, int end); - - /// Reloads the source model data. - void handleSourceReset(); - -private: - /// \brief - /// Gets the proxy model item for a given proxy model index. - /// \param proxyIndex The proxy model index. - pqSourceInfoFilterModelItem *getModelItem( - const QModelIndex &proxyIndex) const; - - /// \brief - /// Gets the proxy model item for a given source model index. - /// \param sourceIndex The source model index to look up. - pqSourceInfoFilterModelItem *getModelItemFromSource( - const QModelIndex &sourceIndex) const; - - /// Clears the proxy model data. - void clearData(); - - /// Loads all the data from the source model. - void loadData(); - - /// \brief - /// Loads the source model data for a given index. - /// - /// This method is called recursively to load all the source model - /// data. The source data is filtered out according to the list of - /// allowed names. - /// - /// \param source A pointer to the source model for convenience. - /// \param sourceIndex The source index to load data from. - /// \param item The proxy model item for the source index. - void loadData(QAbstractItemModel *source, const QModelIndex &sourceIndex, - pqSourceInfoFilterModelItem *item); - -private: - pqSourceInfoFilterModelInternal *Internal; ///< Stores the model mapping. - pqSourceInfoFilterModelItem *Root; ///< Root of the proxy tree. - pqSourceInfoModel *SourceInfo; ///< Used in filtering. -}; - -#endif diff --git a/Qt/Components/pqSourceInfoGroupMap.cxx b/Qt/Components/pqSourceInfoGroupMap.cxx deleted file mode 100644 index 06580b3183..0000000000 --- a/Qt/Components/pqSourceInfoGroupMap.cxx +++ /dev/null @@ -1,506 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoGroupMap.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoGroupMap.cxx -/// \date 5/31/2006 - -#include "pqSourceInfoGroupMap.h" - -#include "pqSourceInfoModel.h" - -#include <QList> -#include <QStack> -#include <QString> -#include <QStringList> -#include <QtDebug> - -#include "vtkPVXMLElement.h" - - -class pqSourceInfoGroupMapItem -{ -public: - pqSourceInfoGroupMapItem(pqSourceInfoGroupMapItem *parent=0); - ~pqSourceInfoGroupMapItem(); - - pqSourceInfoGroupMapItem *Parent; - QList<pqSourceInfoGroupMapItem *> Children; - QString Name; - bool IsFolder; -}; - - -class pqSourceInfoGroupMapXml -{ -public: - pqSourceInfoGroupMapXml(vtkPVXMLElement *element=0, - pqSourceInfoGroupMapItem *item=0); - ~pqSourceInfoGroupMapXml() {} - - vtkPVXMLElement *Element; - pqSourceInfoGroupMapItem *Item; - unsigned int Index; -}; - - -pqSourceInfoGroupMapItem::pqSourceInfoGroupMapItem( - pqSourceInfoGroupMapItem *parent) - : Children(), Name() -{ - this->Parent = parent; - this->IsFolder = false; -} - -pqSourceInfoGroupMapItem::~pqSourceInfoGroupMapItem() -{ - QList<pqSourceInfoGroupMapItem *>::Iterator iter = this->Children.begin(); - for( ; iter != this->Children.end(); ++iter) - { - delete *iter; - } - - this->Children.clear(); -} - - -pqSourceInfoGroupMapXml::pqSourceInfoGroupMapXml(vtkPVXMLElement *element, - pqSourceInfoGroupMapItem *item) -{ - this->Element = element; - this->Item = item; - this->Index = 0; -} - - -pqSourceInfoGroupMap::pqSourceInfoGroupMap(QObject *parentObject) - : QObject(parentObject) -{ - this->Root = new pqSourceInfoGroupMapItem(); -} - -pqSourceInfoGroupMap::~pqSourceInfoGroupMap() -{ - if(this->Root) - { - delete this->Root; - } -} - -void pqSourceInfoGroupMap::loadSourceInfo(vtkPVXMLElement *root) -{ - // Signal the observers that the data is being cleared. Then, clean - // up all the grouping items. - emit this->clearingData(); - if(this->Root) - { - delete this->Root; - } - - // Create the new root item. - this->Root = new pqSourceInfoGroupMapItem(); - if(!this->Root) - { - return; - } - - if(!root || root->GetNumberOfNestedElements() == 0) - { - return; - } - - // Add the favorites item to the map. - pqSourceInfoGroupMapItem *item = new pqSourceInfoGroupMapItem(this->Root); - if(item) - { - item->Name = "Favorites"; - item->IsFolder = true; - this->Root->Children.append(item); - emit this->groupAdded("Favorites"); - } - - // Read through the xml to create groups and add sources to them. - QString elementName; - bool addToStack = false; - vtkPVXMLElement *element = 0; - QString attribute; - QStringList group; - QStack<pqSourceInfoGroupMapXml *> stack; - stack.push(new pqSourceInfoGroupMapXml(root, this->Root)); - pqSourceInfoGroupMapXml *current = stack.top(); - while(stack.size() > 0) - { - // Get the next nested element from the current xml element. - addToStack = false; - element = current->Element->GetNestedElement(current->Index); - elementName = element->GetName(); - if(elementName == "Filter" || elementName == "Source") - { - // Get the source name from the element. - attribute = element->GetAttribute("name"); - if(!attribute.isEmpty() && !this->isNameInItem(attribute, current->Item)) - { - item = new pqSourceInfoGroupMapItem(current->Item); - if(item) - { - item->Name = attribute; - item->IsFolder = false; - current->Item->Children.append(item); - emit this->sourceAdded(item->Name, group.join("/")); - } - } - } - else if(elementName == "Category") - { - // Get the group name from the element. Ignore the 'Alphabetical' - // category in the old filter menu xml. - attribute = element->GetAttribute("name"); - if(!attribute.isEmpty() && attribute != "Alphabetical") - { - // See if the group already exists. Make sure there are no '/' - // characters in the category name (CHT/AMR from the old xml). - attribute.replace("/", "-"); - group.append(attribute); - item = this->getChildItem(current->Item, attribute); - if(!item) - { - item = new pqSourceInfoGroupMapItem(current->Item); - if(item) - { - item->Name = attribute; - item->IsFolder = true; - current->Item->Children.append(item); - emit this->groupAdded(group.join("/")); - } - } - - if(item && element->GetNumberOfNestedElements() > 0) - { - addToStack = true; - } - else - { - // If the group is not being added to the stack, remove the - // name from the group name stack. - group.removeLast(); - } - } - } - else if(elementName == "CategoryGroup") - { - // Support the old xml format for the filter menu. The current - // item will be the same. The catagory group element needs to - // be pushed on the stack. - addToStack = true; - item = current->Item; - } - - if(addToStack) - { - stack.push(new pqSourceInfoGroupMapXml(element, item)); - current = stack.top(); - } - else - { - // When the index reaches the end of the nested elements, the - // stack item needs to be removed. Increment the index of the - // next stack item to keep the reader moving. - while(++current->Index >= current->Element->GetNumberOfNestedElements()) - { - delete current; - current = 0; - stack.pop(); - if(stack.size() == 0) - { - break; - } - - current = stack.top(); - if(group.size() > 0) - { - group.removeLast(); - } - } - } - } -} - -void pqSourceInfoGroupMap::saveSourceInfo(vtkPVXMLElement *) -{ -} - -void pqSourceInfoGroupMap::addGroup(const QString &group) -{ - if(group.isEmpty()) - { - qDebug() << "Unable to add empty group to the source info map."; - return; - } - - // Split the group path in order to get the parent group. - QStringList paths = group.split("/", QString::SkipEmptyParts); - QString groupName = paths.takeLast(); - pqSourceInfoGroupMapItem *parentItem = this->Root; - if(paths.size() > 0) - { - QString groupPath = paths.join("/"); - parentItem = this->getGroupItemFor(groupPath); - } - - if(!parentItem) - { - qDebug() << "Group's parent path not found in the source info map."; - return; - } - - // Make sure the parent group does not already have the sub-group. - if(this->isNameInItem(groupName, parentItem)) - { - return; - } - - // Create a new model item for the group. - pqSourceInfoGroupMapItem *groupItem = new pqSourceInfoGroupMapItem(parentItem); - if(groupItem) - { - groupItem->Name = groupName; - groupItem->IsFolder = true; - parentItem->Children.append(groupItem); - emit this->groupAdded(group); - } -} - -void pqSourceInfoGroupMap::removeGroup(const QString &group) -{ - if(group.isEmpty()) - { - qDebug() << "Unable to remove empty group from the source info map."; - return; - } - - pqSourceInfoGroupMapItem *groupItem = this->getGroupItemFor(group); - if(groupItem) - { - if(groupItem->Parent == this->Root && groupItem->Name == "Favorites") - { - qDebug() << "Unable to remove \"Favorites\" group."; - } - else - { - emit this->removingGroup(group); - groupItem->Parent->Children.removeAll(groupItem); - delete groupItem; - } - } - else - { - qDebug() << "Specified group not found in the source info map."; - } -} - -void pqSourceInfoGroupMap::addSource(const QString &name, const QString &group) -{ - if(name.isEmpty()) - { - qDebug() << "Unable to add empty source to source info map."; - return; - } - - pqSourceInfoGroupMapItem *parentItem = this->getGroupItemFor(group); - if(!parentItem) - { - qDebug() << "Source's parent path not found in the source info map."; - return; - } - - // Make sure the parent group does not already have the source. - if(this->isNameInItem(name, parentItem)) - { - return; - } - - // Create a new model item for the group. - pqSourceInfoGroupMapItem *source = new pqSourceInfoGroupMapItem(parentItem); - if(source) - { - source->Name = name; - source->IsFolder = false; - parentItem->Children.append(source); - emit this->sourceAdded(name, group); - } -} - -void pqSourceInfoGroupMap::removeSource(const QString &name, - const QString &group) -{ - if(name.isEmpty()) - { - qDebug() << "Unable to remove empty source from source info map."; - return; - } - - pqSourceInfoGroupMapItem *parentItem = this->getGroupItemFor(group); - if(!parentItem) - { - qDebug() << "Source's parent path not found in the source info map."; - return; - } - - // Find the source in the parent item. - pqSourceInfoGroupMapItem *source = this->getChildItem(parentItem, name); - if(source) - { - emit this->removingSource(name, group); - parentItem->Children.removeAll(source); - delete source; - } - else - { - qDebug() << "Source not found in specified group."; - } -} - -void pqSourceInfoGroupMap::initializeModel(pqSourceInfoModel *model) const -{ - if(model) - { - // Step through the items in the tree. Add all the groups and - // sources to the model. The model will filter out any sources - // that are not available in the model. - QString group; - pqSourceInfoGroupMapItem *item = this->getNextItem(this->Root); - while(item) - { - if(item->IsFolder) - { - this->getGroupPath(item, group); - model->addGroup(group); - } - else - { - this->getGroupPath(item->Parent, group); - model->addSource(item->Name, group); - } - - item = this->getNextItem(item); - } - } -} - -pqSourceInfoGroupMapItem *pqSourceInfoGroupMap::getNextItem( - pqSourceInfoGroupMapItem *item) const -{ - if(!item) - { - return 0; - } - - if(item->Children.size() > 0) - { - return item->Children[0]; - } - - int row = 0; - while(item->Parent) - { - row = item->Parent->Children.indexOf(item); - if(row < item->Parent->Children.size() - 1) - { - return item->Parent->Children[row + 1]; - } - - item = item->Parent; - } - - return 0; -} - -void pqSourceInfoGroupMap::getGroupPath(pqSourceInfoGroupMapItem *item, - QString &group) const -{ - QStringList paths; - while(item && item != this->Root) - { - paths.prepend(item->Name); - item = item->Parent; - } - - if(paths.size() > 0) - { - group = paths.join("/"); - } - else - { - group = QString(); - } -} - -pqSourceInfoGroupMapItem *pqSourceInfoGroupMap::getGroupItemFor( - const QString &group) const -{ - if(group.isEmpty()) - { - return this->Root; - } - - pqSourceInfoGroupMapItem *item = this->Root; - QStringList paths = group.split("/", QString::SkipEmptyParts); - QStringList::Iterator iter = paths.begin(); - for( ; item && iter != paths.end(); ++iter) - { - item = this->getChildItem(item, *iter); - } - - return item; -} - -pqSourceInfoGroupMapItem *pqSourceInfoGroupMap::getChildItem( - pqSourceInfoGroupMapItem *item, const QString &name) const -{ - QList<pqSourceInfoGroupMapItem *>::Iterator iter = item->Children.begin(); - for( ; iter != item->Children.end(); ++iter) - { - if((*iter)->Name == name) - { - return *iter; - } - } - - return 0; -} - -bool pqSourceInfoGroupMap::isNameInItem(const QString &name, - pqSourceInfoGroupMapItem *item) const -{ - return this->getChildItem(item, name) != 0; -} - - diff --git a/Qt/Components/pqSourceInfoGroupMap.h b/Qt/Components/pqSourceInfoGroupMap.h deleted file mode 100644 index c59cba47d2..0000000000 --- a/Qt/Components/pqSourceInfoGroupMap.h +++ /dev/null @@ -1,94 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoGroupMap.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoGroupMap.h -/// \date 5/31/2006 - -#ifndef _pqSourceInfoGroupMap_h -#define _pqSourceInfoGroupMap_h - - -#include "pqComponentsExport.h" -#include <QObject> - -class pqSourceInfoGroupMapItem; -class pqSourceInfoModel; -class QString; -class QStringList; -class vtkPVXMLElement; - - -class PQCOMPONENTS_EXPORT pqSourceInfoGroupMap : public QObject -{ - Q_OBJECT - -public: - pqSourceInfoGroupMap(QObject *parent=0); - ~pqSourceInfoGroupMap(); - - void loadSourceInfo(vtkPVXMLElement *root); - void saveSourceInfo(vtkPVXMLElement *root); - - void addGroup(const QString &group); - void removeGroup(const QString &group); - - void addSource(const QString &name, const QString &group); - void removeSource(const QString &name, const QString &group); - - /// \brief - /// Adds all the source groups from the map to the model. - /// \param model The model to initialize using the map. - void initializeModel(pqSourceInfoModel *model) const; - -signals: - void clearingData(); - - void groupAdded(const QString &group); - void removingGroup(const QString &group); - - void sourceAdded(const QString &name, const QString &group); - void removingSource(const QString &name, const QString &group); - -private: - pqSourceInfoGroupMapItem *getNextItem(pqSourceInfoGroupMapItem *item) const; - void getGroupPath(pqSourceInfoGroupMapItem *item, QString &group) const; - pqSourceInfoGroupMapItem *getGroupItemFor(const QString &group) const; - - pqSourceInfoGroupMapItem *getChildItem(pqSourceInfoGroupMapItem *item, - const QString &name) const; - bool isNameInItem(const QString &name, pqSourceInfoGroupMapItem *item) const; - -private: - pqSourceInfoGroupMapItem *Root; -}; - -#endif diff --git a/Qt/Components/pqSourceInfoIcons.cxx b/Qt/Components/pqSourceInfoIcons.cxx deleted file mode 100644 index c19b66c232..0000000000 --- a/Qt/Components/pqSourceInfoIcons.cxx +++ /dev/null @@ -1,106 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoIcons.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoIcons.cxx -/// \date 6/9/2006 - -#include "pqSourceInfoIcons.h" - -#include <QMap> -#include <QString> - - -class pqSourceInfoIconsInternal : public QMap<QString, QString> {}; - - -pqSourceInfoIcons::pqSourceInfoIcons(QObject *parentObject) - : QObject(parentObject) -{ - this->Internal = new pqSourceInfoIconsInternal(); -} - -pqSourceInfoIcons::~pqSourceInfoIcons() -{ - delete this->Internal; -} - -QPixmap pqSourceInfoIcons::getDefaultPixmap( - pqSourceInfoIcons::DefaultPixmap type) const -{ - if(type == pqSourceInfoIcons::Server) - { - return QPixmap(":/pqWidgets/Icons/pqServer16.png"); - } - else if(type == pqSourceInfoIcons::Source) - { - return QPixmap(":/pqWidgets/Icons/pqSource16.png"); - } - else if(type == pqSourceInfoIcons::Reader) - { - return QPixmap(":/pqWidgets/Icons/pqSource16.png"); - } - else if(type == pqSourceInfoIcons::Filter) - { - return QPixmap(":/pqWidgets/Icons/pqFilter16.png"); - } - - return QPixmap(); -} - -QPixmap pqSourceInfoIcons::getPixmap(const QString &source, - pqSourceInfoIcons::DefaultPixmap alternate) const -{ - QMap<QString, QString>::Iterator iter = this->Internal->find(source); - if(iter != this->Internal->end()) - { - return QPixmap(*iter); - } - - // If the source does not have a special icon, use the default. - return this->getDefaultPixmap(alternate); -} - -void pqSourceInfoIcons::setPixmap(const QString &source, - const QString &fileName) -{ - // Insert the new mapping. This will overwrite any previous icon - // for the given source. - this->Internal->insert(source, fileName); - emit this->pixmapChanged(source); -} - -void pqSourceInfoIcons::clearPixmaps() -{ - this->Internal->clear(); -} - - diff --git a/Qt/Components/pqSourceInfoIcons.h b/Qt/Components/pqSourceInfoIcons.h deleted file mode 100644 index 7e8bceda50..0000000000 --- a/Qt/Components/pqSourceInfoIcons.h +++ /dev/null @@ -1,110 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoIcons.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoIcons.h -/// \date 6/9/2006 - -#ifndef _pqSourceInfoIcons_h -#define _pqSourceInfoIcons_h - - -#include "pqComponentsExport.h" -#include <QObject> -#include <QPixmap> // Needed for return value - -class pqSourceInfoIconsInternal; -class QString; - - -/// \class pqSourceInfoIcons -/// \brief -/// The pqSourceInfoIcons class makes it possible to associate a -/// pixmap with a specific source. -class PQCOMPONENTS_EXPORT pqSourceInfoIcons : public QObject -{ - Q_OBJECT - -public: - enum DefaultPixmap - { - Invalid = -1, - Server = 0, - Source, - Reader, - Filter - }; - -public: - pqSourceInfoIcons(QObject *parent=0); - virtual ~pqSourceInfoIcons(); - - /// \brief - /// Gets the default pixmap for the given type. - /// \param type The default pixmap type. - /// \return - /// The default pixmap for the given type. - /// \sa pqSourceInfoIcons::getPixmap(const QString &, DefaultPixmap) - QPixmap getDefaultPixmap(DefaultPixmap type) const; - - /// \brief - /// Gets the pixmap associated with the specified source. - /// \param source The name of the source. - /// \param alternate The pixmap to use if the source doesn't have an - /// associated pixmap. - /// \return - /// The pixmap associated with the specified source. - QPixmap getPixmap(const QString &source, DefaultPixmap alternate) const; - - /// \brief - /// Associates a pixmap with the specified source. - /// - /// If the source already has an assigned pixmap, the old one is - /// replaced with the new one. - /// - /// \param source The name of the source. - /// \param fileName The pixmap file name or resource path. - void setPixmap(const QString &source, const QString &fileName); - - /// Clears all the source to icon mappings. - void clearPixmaps(); - -signals: - /// \brief - /// Emitted when a special pixmap is assigned to source. - /// \param name The name of the source. - void pixmapChanged(const QString &name); - -private: - pqSourceInfoIconsInternal *Internal; ///< Maps source name to icon. -}; - -#endif diff --git a/Qt/Components/pqSourceInfoModel.cxx b/Qt/Components/pqSourceInfoModel.cxx deleted file mode 100644 index 443548aa44..0000000000 --- a/Qt/Components/pqSourceInfoModel.cxx +++ /dev/null @@ -1,628 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoModel.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoModel.cxx -/// \date 5/26/2006 - -#include "pqSourceInfoModel.h" - -#include <QApplication> -#include <QList> -#include <QString> -#include <QStringList> -#include <QStyle> -#include <QtDebug> - - -/// \class pqSourceInfoModelItem -class pqSourceInfoModelItem -{ -public: - pqSourceInfoModelItem(pqSourceInfoModelItem *parent=0); - ~pqSourceInfoModelItem(); - - pqSourceInfoModelItem *Parent; - QList<pqSourceInfoModelItem *> Children; - QString Name; - bool IsFolder; -}; - - -//----------------------------------------------------------------------------- -pqSourceInfoModelItem::pqSourceInfoModelItem(pqSourceInfoModelItem *parent) - : Children(), Name() -{ - this->Parent = parent; - this->IsFolder = false; -} - -pqSourceInfoModelItem::~pqSourceInfoModelItem() -{ - QList<pqSourceInfoModelItem *>::Iterator iter = this->Children.begin(); - for( ; iter != this->Children.end(); ++iter) - { - delete *iter; - } - - this->Children.clear(); -} - - -//----------------------------------------------------------------------------- -pqSourceInfoModel::pqSourceInfoModel(const QStringList &sources, - QObject *parentObject) - : QAbstractItemModel(parentObject) -{ - this->Root = new pqSourceInfoModelItem(); - this->Icons = 0; - this->Pixmap = pqSourceInfoIcons::Invalid; - - // Add the list of available sources to the root. These sources - // will be used to filter sources added by the source info map. - // Make a copy of the list in order to sort it. - if(sources.size() > 0) - { - QStringList copy = sources; - copy.sort(); - this->beginInsertRows(QModelIndex(), 0, copy.size() - 1); - pqSourceInfoModelItem *item = 0; - QStringList::Iterator iter = copy.begin(); - for( ; iter != copy.end(); ++iter) - { - item = new pqSourceInfoModelItem(this->Root); - item->Name = *iter; - item->IsFolder = false; - this->Root->Children.append(item); - } - - this->endInsertRows(); - } -} - -pqSourceInfoModel::~pqSourceInfoModel() -{ - if(this->Root) - { - delete this->Root; - } -} - -int pqSourceInfoModel::rowCount(const QModelIndex &parentIndex) const -{ - pqSourceInfoModelItem *parentItem = this->getItemFor(parentIndex); - if(parentItem) - { - return parentItem->Children.size(); - } - - return 0; -} - -int pqSourceInfoModel::columnCount(const QModelIndex&) const -{ - return 1; -} - -bool pqSourceInfoModel::hasChildren(const QModelIndex &parentIndex) const -{ - return this->rowCount(parentIndex) > 0; -} - -QModelIndex pqSourceInfoModel::index(int row, int column, - const QModelIndex &parentIndex) const -{ - int rows = this->rowCount(parentIndex); - int columns = this->columnCount(parentIndex); - pqSourceInfoModelItem *parentItem = this->getItemFor(parentIndex); - if(parentItem && row >= 0 && row < rows && column >= 0 && column < columns) - { - return this->createIndex(row, column, parentItem->Children[row]); - } - - return QModelIndex(); -} - -QModelIndex pqSourceInfoModel::parent(const QModelIndex &idx) const -{ - pqSourceInfoModelItem *item = this->getItemFor(idx); - if(item && item->Parent && item->Parent != this->Root) - { - int row = item->Parent->Parent->Children.indexOf(item->Parent); - return this->createIndex(row, 0, item->Parent); - } - - return QModelIndex(); -} - -QVariant pqSourceInfoModel::data(const QModelIndex &idx, int role) const -{ - pqSourceInfoModelItem *item = this->getItemFor(idx); - if(item && item != this->Root) - { - switch(role) - { - case Qt::DisplayRole: - case Qt::ToolTipRole: - case Qt::EditRole: - { - return QVariant(item->Name); - } - case Qt::DecorationRole: - { - if(item->IsFolder) - { - if(item->Parent == this->Root && item->Name == "Favorites") - { - return QVariant(QPixmap(":/pqWidgets/Icons/pqFavorites16.png")); - } - - return QVariant(QPixmap(":/pqWidgets/Icons/pqFolder16.png")); - } - else if(this->Icons) - { - // Get the user specified icon. - return QVariant(this->Icons->getPixmap(item->Name, this->Pixmap)); - } - else - { - // Default to the source pixmap. - return QVariant(QPixmap(":/pqWidgets/Icons/pqSource16.png")); - } - } - case Qt::WhatsThisRole: - { - // TODO: Put the filter's description from the xml file as the - // what's this tip. - break; - } - } - } - - return QVariant(); -} - -Qt::ItemFlags pqSourceInfoModel::flags(const QModelIndex &/*idx*/) const -{ - return Qt::ItemIsSelectable | Qt::ItemIsEnabled; -} - -bool pqSourceInfoModel::isSource(const QModelIndex &idx) const -{ - pqSourceInfoModelItem *item = this->getItemFor(idx); - return item != 0 && item != this->Root && !item->IsFolder; -} - -bool pqSourceInfoModel::isSource(const QString &name) const -{ - // Look in the root's list of sources for the name. - if(!name.isEmpty()) - { - pqSourceInfoModelItem *item = this->getChildItem(this->Root, name); - return item != 0 && !item->IsFolder; - } - - return false; -} - -void pqSourceInfoModel::getGroup(const QModelIndex &_index, - QString &group) const -{ - pqSourceInfoModelItem *item = this->getItemFor(_index); - if(item && item != this->Root) - { - QStringList path; - if(item->IsFolder) - { - path.append(item->Name); - } - - pqSourceInfoModelItem *item_parent = item->Parent; - while(item_parent && item_parent != this->Root) - { - path.prepend(item_parent->Name); - item_parent = item_parent->Parent; - } - - group = path.join("/"); - } -} - -void pqSourceInfoModel::setIcons(pqSourceInfoIcons *icons, - pqSourceInfoIcons::DefaultPixmap type) -{ - this->Icons = icons; - this->Pixmap = type; - - // Listen for pixmap updates. - QObject::connect(this->Icons, SIGNAL(pixmapChanged(const QString &)), - this, SLOT(updatePixmap(const QString &))); -} - -void pqSourceInfoModel::getAvailableSources(QStringList &list) const -{ - if(this->Root) - { - QList<pqSourceInfoModelItem *>::ConstIterator iter = - this->Root->Children.begin(); - for( ; iter != this->Root->Children.end(); ++iter) - { - if(!(*iter)->IsFolder) - { - list.append((*iter)->Name); - } - } - } -} - -void pqSourceInfoModel::clearGroups() -{ - if(!this->Root) - { - return; - } - - // Remove all the groups from the root. Leave the list of sources - // on the root since they are the available list. - int firstSource = 0; - for( ; firstSource < this->Root->Children.size(); firstSource++) - { - if(!this->Root->Children[firstSource]->IsFolder) - { - break; - } - } - - if(firstSource > 0) - { - QList<pqSourceInfoModelItem *> toDelete; - this->beginRemoveRows(QModelIndex(), 0, firstSource - 1); - for(int i = firstSource - 1; i >= 0; i--) - { - toDelete.append(this->Root->Children.takeAt(i)); - } - - this->endRemoveRows(); - QList<pqSourceInfoModelItem *>::Iterator iter = toDelete.begin(); - for( ; iter != toDelete.end(); ++iter) - { - delete *iter; - } - } -} - -void pqSourceInfoModel::addGroup(const QString &group) -{ - if(group.isEmpty()) - { - qDebug() << "Unable to add empty group to the source info model."; - return; - } - - // Split the group path in order to get the parent group. - QStringList paths = group.split("/", QString::SkipEmptyParts); - QString groupName = paths.takeLast(); - pqSourceInfoModelItem *parentItem = this->Root; - if(paths.size() > 0) - { - QString groupPath = paths.join("/"); - parentItem = this->getGroupItemFor(groupPath); - } - - if(!parentItem) - { - qDebug() << "Group's parent path not found in the source info model."; - return; - } - - // Make sure the parent group does not already have the sub-group. - if(this->isNameInItem(groupName, parentItem)) - { - qDebug() << "Group already exists in source info model."; - return; - } - - // Create a new model item for the group. - pqSourceInfoModelItem *groupItem = new pqSourceInfoModelItem(parentItem); - if(groupItem) - { - groupItem->Name = groupName; - groupItem->IsFolder = true; - - // Add the group to the parent in alphabetical order. - this->addChildItem(groupItem); - } -} - -void pqSourceInfoModel::removeGroup(const QString &group) -{ - if(group.isEmpty()) - { - qDebug() << "Unable to remove empty group from the source info model."; - return; - } - - pqSourceInfoModelItem *groupItem = this->getGroupItemFor(group); - if(groupItem) - { - this->removeChildItem(groupItem); - } - else - { - qDebug() << "Specified group not found in the source info model."; - } -} - -void pqSourceInfoModel::addSource(const QString &name, const QString &group) -{ - if(name.isEmpty()) - { - qDebug() << "Unable to add empty source to source info model."; - return; - } - - pqSourceInfoModelItem *parentItem = this->getGroupItemFor(group); - if(!parentItem) - { - qDebug() << "Source's parent path not found in the source info model."; - return; - } - - // Make sure the parent group does not already have the source. - if(this->isNameInItem(name, parentItem)) - { - qDebug() << "Source already exists in the specified group."; - return; - } - - // Make sure the source is in the available list. - if(!this->isNameInItem(name, this->Root)) - { - return; - } - - // Create a new model item for the source. - pqSourceInfoModelItem *source = new pqSourceInfoModelItem(parentItem); - if(source) - { - source->Name = name; - source->IsFolder = false; - - // Add the group to the parent in alphabetical order. - this->addChildItem(source); - } -} - -void pqSourceInfoModel::removeSource(const QString &name, const QString &group) -{ - if(name.isEmpty()) - { - qDebug() << "Unable to remove empty source from source info model."; - return; - } - - pqSourceInfoModelItem *parentItem = this->getGroupItemFor(group); - if(!parentItem) - { - qDebug() << "Source's parent path not found in the source info model."; - return; - } - - // Find the source in the parent item. - pqSourceInfoModelItem *source = this->getChildItem(parentItem, name); - if(source) - { - this->removeChildItem(source); - } - else - { - qDebug() << "Source not found in specified group."; - } -} - -void pqSourceInfoModel::updatePixmap(const QString &name) -{ - // Signal the view to refresh the icon for the specified source. - // The source can be in multiple places. - QModelIndex idx; - pqSourceInfoModelItem *item = this->getNextItem(this->Root); - while(item) - { - if(!item->IsFolder && item->Name == name) - { - idx = this->getIndexFor(item); - emit this->dataChanged(idx, idx); - } - - item = this->getNextItem(item); - } -} - -QModelIndex pqSourceInfoModel::getIndexFor(pqSourceInfoModelItem *item) const -{ - if(item->Parent) - { - int row = item->Parent->Children.indexOf(item); - return this->createIndex(row, 0, item); - } - - return QModelIndex(); -} - -pqSourceInfoModelItem *pqSourceInfoModel::getItemFor( - const QModelIndex &idx) const -{ - if(!idx.isValid()) - { - return this->Root; - } - else if(idx.model() == this) - { - return reinterpret_cast<pqSourceInfoModelItem *>(idx.internalPointer()); - } - - return 0; -} - -pqSourceInfoModelItem *pqSourceInfoModel::getGroupItemFor( - const QString &group) const -{ - if(group.isEmpty()) - { - return this->Root; - } - - pqSourceInfoModelItem *item = this->Root; - QStringList paths = group.split("/", QString::SkipEmptyParts); - QStringList::Iterator iter = paths.begin(); - for( ; item && iter != paths.end(); ++iter) - { - item = this->getChildItem(item, *iter); - } - - return item; -} - -pqSourceInfoModelItem *pqSourceInfoModel::getChildItem( - pqSourceInfoModelItem *item, const QString &name) const -{ - QList<pqSourceInfoModelItem *>::Iterator iter = item->Children.begin(); - for( ; iter != item->Children.end(); ++iter) - { - if((*iter)->Name == name) - { - return *iter; - } - } - - return 0; -} - -bool pqSourceInfoModel::isNameInItem(const QString &name, - pqSourceInfoModelItem *item) const -{ - return this->getChildItem(item, name) != 0; -} - -void pqSourceInfoModel::addChildItem(pqSourceInfoModelItem *item) -{ - int row = 0; - QModelIndex parentIndex; - if(item->Parent != this->Root) - { - row = item->Parent->Parent->Children.indexOf(item->Parent); - parentIndex = this->createIndex(row, 0, item->Parent); - } - - // Find the correct insertion location. Groups should be before sources. - // Set up the index limits based on the type of child added. - int total = item->Parent->Children.size(); - int firstSource = 0; - for( ; firstSource < total; firstSource++) - { - if(!item->Parent->Children[firstSource]->IsFolder) - { - break; - } - } - - row = 0; - if(item->IsFolder) - { - total = firstSource; - } - else - { - row = firstSource; - } - - for( ; row < total; row++) - { - if(QString::compare(item->Name, item->Parent->Children[row]->Name) < 0) - { - break; - } - } - - this->beginInsertRows(parentIndex, row, row); - item->Parent->Children.insert(row, item); - this->endInsertRows(); -} - -void pqSourceInfoModel::removeChildItem(pqSourceInfoModelItem *item) -{ - int row = 0; - QModelIndex parentIndex; - if(item->Parent != this->Root) - { - row = item->Parent->Parent->Children.indexOf(item->Parent); - parentIndex = this->createIndex(row, 0, item->Parent); - } - - row = item->Parent->Children.indexOf(item); - this->beginRemoveRows(parentIndex, row, row); - item->Parent->Children.removeAt(row); - this->endRemoveRows(); - delete item; -} - -pqSourceInfoModelItem *pqSourceInfoModel::getNextItem( - pqSourceInfoModelItem *item) const -{ - if(item->Children.size() > 0) - { - return item->Children.first(); - } - - // Search up the ancestors for an item with multiple children. - // The next item will be the next child. - int row = 0; - int count = 0; - while(item->Parent) - { - count = item->Parent->Children.size(); - if(count > 1) - { - row = item->Parent->Children.indexOf(item) + 1; - if(row < count) - { - return item->Parent->Children[row]; - } - } - - item = item->Parent; - } - - return 0; -} - - - diff --git a/Qt/Components/pqSourceInfoModel.h b/Qt/Components/pqSourceInfoModel.h deleted file mode 100644 index 1a6d339636..0000000000 --- a/Qt/Components/pqSourceInfoModel.h +++ /dev/null @@ -1,191 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceInfoModel.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqSourceInfoModel.h -/// \date 5/26/2006 - -#ifndef _pqSourceInfoModel_h -#define _pqSourceInfoModel_h - - -#include "pqComponentsExport.h" -#include <QAbstractItemModel> - -#include "pqSourceInfoIcons.h" // Needed for enum - -class pqSourceInfoModelItem; -class QString; -class QStringList; - - -/// \class pqSourceInfoModel -/// \brief -/// The pqSourceInfoModel class stores the list of available sources -/// in groups. -/// -/// The model can be used in conjunction with a pqSourceInfoGroupMap -/// object. The model will display the sources available in the -/// groupings defined by the source group map. The available sources -/// are always shown in the top level of the hierarchy. -class PQCOMPONENTS_EXPORT pqSourceInfoModel : public QAbstractItemModel -{ - Q_OBJECT - -public: - /// \brief - /// Creates a source info model instance. - /// \param sources The list of available sources. - /// \param parent The parent object. - pqSourceInfoModel(const QStringList &sources, QObject *parent=0); - virtual ~pqSourceInfoModel(); - - /// \name QAbstractItemModel Methods - //@{ - /// \brief - /// Gets the number of rows for a given index. - /// \param parent The parent index. - /// \return - /// The number of rows for the given index. - virtual int rowCount(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets the number of columns for a given index. - /// \param parent The parent index. - /// \return - /// The number of columns for the given index. - virtual int columnCount(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets whether or not the given index has child items. - /// \param parent The parent index. - /// \return - /// True if the given index has child items. - virtual bool hasChildren(const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets a model index for a given location. - /// \param row The row number. - /// \param column The column number. - /// \param parent The parent index. - /// \return - /// A model index for the given location. - virtual QModelIndex index(int row, int column, - const QModelIndex &parent=QModelIndex()) const; - - /// \brief - /// Gets the parent for a given index. - /// \param index The model index. - /// \return - /// A model index for the parent of the given index. - virtual QModelIndex parent(const QModelIndex &index) const; - - /// \brief - /// Gets the data for a given model index. - /// \param index The model index. - /// \param role The role to get data for. - /// \return - /// The data for the given model index. - virtual QVariant data(const QModelIndex &index, - int role=Qt::DisplayRole) const; - - /// \brief - /// Gets the flags for a given model index. - /// - /// The flags for an item indicate if it is enabled, editable, etc. - /// - /// \param index The model index. - /// \return - /// The flags for the given model index. - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - //@} - - bool isSource(const QModelIndex &index) const; - - bool isSource(const QString &name) const; - - void getGroup(const QModelIndex &index, QString &group) const; - - /// \brief - /// Initializes the icon database. - /// \param icons The icon database. - /// \param type The default icon type to display. - void setIcons(pqSourceInfoIcons *icons, - pqSourceInfoIcons::DefaultPixmap type); - - /// \brief - /// Gets the list of available sources from the model. - /// - /// The available sources are not duplicated in the list. They are - /// all the top level sources. - /// - /// \param list Used to return the list of sources. - void getAvailableSources(QStringList &list) const; - -public slots: - /// \name Modification Methods - //@{ - void clearGroups(); - - void addGroup(const QString &group); - void removeGroup(const QString &group); - - void addSource(const QString &name, const QString &group); - void removeSource(const QString &name, const QString &group); - //@} - -private slots: - /// \brief - /// Updates the pixmap for the given source name. - /// \param name The name of the source whose icon changed. - void updatePixmap(const QString &name); - -private: - QModelIndex getIndexFor(pqSourceInfoModelItem *item) const; - pqSourceInfoModelItem *getItemFor(const QModelIndex &index) const; - pqSourceInfoModelItem *getGroupItemFor(const QString &group) const; - - pqSourceInfoModelItem *getChildItem(pqSourceInfoModelItem *item, - const QString &name) const; - bool isNameInItem(const QString &name, pqSourceInfoModelItem *item) const; - - void addChildItem(pqSourceInfoModelItem *item); - void removeChildItem(pqSourceInfoModelItem *item); - - pqSourceInfoModelItem *getNextItem(pqSourceInfoModelItem *item) const; - -private: - pqSourceInfoModelItem *Root; ///< The root of the tree. - pqSourceInfoIcons *Icons; ///< A pointer to the icons. - pqSourceInfoIcons::DefaultPixmap Pixmap; ///< The default icon type. -}; - -#endif diff --git a/Qt/Components/pqSourceProxyInfo.cxx b/Qt/Components/pqSourceProxyInfo.cxx deleted file mode 100644 index 6792bc397a..0000000000 --- a/Qt/Components/pqSourceProxyInfo.cxx +++ /dev/null @@ -1,397 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceProxyInfo.cxx - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - -/// \file pqSourceProxyInfo.cxx -/// -/// \date 1/27/2006 - -#include "pqSourceProxyInfo.h" - -#include <QList> -#include <QMap> -#include <QString> -#include <QStringList> - -#include "vtkPVXMLElement.h" - - -class pqSourceProxyInfoItem -{ -public: - pqSourceProxyInfoItem(); - ~pqSourceProxyInfoItem() {} - - QString Name; - QString Document; -}; - - -class pqSourceProxyInfoCategory -{ -public: - pqSourceProxyInfoCategory(); - ~pqSourceProxyInfoCategory() {} - - QString Name; - QString MenuName; - QList<pqSourceProxyInfoItem *> List; -}; - - -class pqSourceProxyInfoCategoryGroup -{ -public: - pqSourceProxyInfoCategoryGroup(); - ~pqSourceProxyInfoCategoryGroup(); - - QList<pqSourceProxyInfoCategory *> List; -}; - -class pqSourceProxyInfoInternal -{ -public: - pqSourceProxyInfoInternal(); - ~pqSourceProxyInfoInternal() {} - -public: - QList<pqSourceProxyInfoCategoryGroup *> Filters; - QMap<QString, pqSourceProxyInfoItem *> FilterMap; -}; - - -pqSourceProxyInfoItem::pqSourceProxyInfoItem() - : Name(), Document() -{ -} - - -pqSourceProxyInfoCategory::pqSourceProxyInfoCategory() - : Name(), MenuName(), List() -{ -} - - -pqSourceProxyInfoCategoryGroup::pqSourceProxyInfoCategoryGroup() - : List() -{ -} - -pqSourceProxyInfoCategoryGroup::~pqSourceProxyInfoCategoryGroup() -{ - // Clean up the categories on the list. - QList<pqSourceProxyInfoCategory *>::Iterator iter = this->List.begin(); - for( ; iter != this->List.end(); ++iter) - { - delete *iter; - } -} - - -pqSourceProxyInfoInternal::pqSourceProxyInfoInternal() - : Filters(), FilterMap() -{ -} - - -pqSourceProxyInfo::pqSourceProxyInfo() -{ - this->Internal = new pqSourceProxyInfoInternal(); -} - -pqSourceProxyInfo::~pqSourceProxyInfo() -{ - if(this->Internal) - { - this->Reset(); - delete this->Internal; - } -} - -void pqSourceProxyInfo::Reset() -{ - if(this->Internal) - { - // Clean up the filter information. - QList<pqSourceProxyInfoCategoryGroup *>::Iterator iter = - this->Internal->Filters.begin(); - for( ; iter != this->Internal->Filters.end(); ++iter) - { - delete *iter; - } - - QMap<QString, pqSourceProxyInfoItem *>::Iterator jter = - this->Internal->FilterMap.begin(); - for( ; jter != this->Internal->FilterMap.end(); ++jter) - { - delete *jter; - } - - this->Internal->Filters.clear(); - this->Internal->FilterMap.clear(); - } -} - -bool pqSourceProxyInfo::IsFilterInfoLoaded() const -{ - if(this->Internal) - { - return this->Internal->Filters.size() > 0; - } - - return false; -} - -void pqSourceProxyInfo::LoadFilterInfo(vtkPVXMLElement *root) -{ - if(!root || !this->Internal) - { - return; - } - - // Make sure the current information gets cleared out. - this->Reset(); - - // Walk through the xml to create the filter information. - QString name; - unsigned int i = 0; - unsigned int j = 0; - unsigned int k = 0; - const char *attribute = 0; - vtkPVXMLElement *element = 0; - vtkPVXMLElement *groupElement = 0; - vtkPVXMLElement *categoryElement = 0; - pqSourceProxyInfoItem *filter = 0; - pqSourceProxyInfoCategoryGroup *group = 0; - pqSourceProxyInfoCategory *category = 0; - QMap<QString, pqSourceProxyInfoItem *>::Iterator iter; - for(i = 0; i < root->GetNumberOfNestedElements(); i++) - { - groupElement = root->GetNestedElement(i); - name = groupElement->GetName(); - if(name != "CategoryGroup") - { - continue; - } - - // Create a category group for the element. - group = new pqSourceProxyInfoCategoryGroup(); - if(!group) - { - continue; - } - - // Add the group to the list. Get the list of group categories - // from the elements in the group element. - this->Internal->Filters.append(group); - for(j = 0; j < groupElement->GetNumberOfNestedElements(); j++) - { - categoryElement = groupElement->GetNestedElement(j); - name = categoryElement->GetName(); - if(name != "Category") - { - continue; - } - - // Create a category for the element. - category = new pqSourceProxyInfoCategory(); - if(!category) - { - continue; - } - - // Add the category to the group. Get the category name(s) - // from the element. - group->List.append(category); - attribute = categoryElement->GetAttribute("name"); - if(attribute) - { - category->Name = attribute; - } - - attribute = categoryElement->GetAttribute("menuName"); - if(attribute) - { - category->MenuName = attribute; - } - - // Get the list of filters from the elements in the category - // elements. - for(k = 0; k < categoryElement->GetNumberOfNestedElements(); k++) - { - element = categoryElement->GetNestedElement(k); - name = element->GetName(); - if(name != "Filter") - { - continue; - } - - // See if the filter already exists. If not, create a filter - // item for the element. - attribute = element->GetAttribute("name"); - if(!attribute) - { - continue; - } - - iter = this->Internal->FilterMap.find(attribute); - if(iter == this->Internal->FilterMap.end()) - { - filter = new pqSourceProxyInfoItem(); - if(filter) - { - filter->Name = attribute; - this->Internal->FilterMap.insert(filter->Name, filter); - } - } - else - { - filter = *iter; - } - - if(filter) - { - // Add the filter to the category. - category->List.append(filter); - } - } - } - } -} - -void pqSourceProxyInfo::GetFilterMenu(QStringList &menuList) const -{ - if(!this->Internal) - { - return; - } - - // Add in the menu name for all the categories. If the menu - // name is empty, use the category name. Put empty strings in - // the list to separate the category groups. - QList<pqSourceProxyInfoCategoryGroup *>::Iterator iter = - this->Internal->Filters.begin(); - for( ; iter != this->Internal->Filters.end(); ++iter) - { - if(iter != this->Internal->Filters.begin() && (*iter)->List.size() > 0) - { - menuList.append(QString()); - } - - QList<pqSourceProxyInfoCategory *>::Iterator jter = (*iter)->List.begin(); - for( ; jter != (*iter)->List.end(); ++jter) - { - if((*jter)->MenuName.isEmpty()) - { - menuList.append((*jter)->Name); - } - else - { - menuList.append((*jter)->MenuName); - } - } - } -} - -void pqSourceProxyInfo::GetFilterCategories(const QString &name, - QStringList &list) const -{ - if(!this->Internal) - { - return; - } - - // Get the filter info object from the filter map. - QMap<QString, pqSourceProxyInfoItem *>::Iterator iter = - this->Internal->FilterMap.find(name); - if(iter == this->Internal->FilterMap.end()) - { - return; - } - - // Search through the categories for the filter. - pqSourceProxyInfoItem *filter = *iter; - QList<pqSourceProxyInfoCategoryGroup *>::Iterator jter = - this->Internal->Filters.begin(); - for( ; jter != this->Internal->Filters.end(); ++jter) - { - QList<pqSourceProxyInfoCategory *>::Iterator kter = (*jter)->List.begin(); - for( ; kter != (*jter)->List.end(); ++kter) - { - if((*kter)->List.indexOf(filter) != -1) - { - list.append((*kter)->Name); - } - } - } -} - -void pqSourceProxyInfo::GetFilterMenuCategories(const QString &name, - QStringList &list) const -{ - if(!this->Internal) - { - return; - } - - // Get the filter info object from the filter map. - QMap<QString, pqSourceProxyInfoItem *>::Iterator iter = - this->Internal->FilterMap.find(name); - if(iter == this->Internal->FilterMap.end()) - { - return; - } - - // Search through the categories for the filter. - pqSourceProxyInfoItem *filter = *iter; - QList<pqSourceProxyInfoCategoryGroup *>::Iterator jter = - this->Internal->Filters.begin(); - for( ; jter != this->Internal->Filters.end(); ++jter) - { - QList<pqSourceProxyInfoCategory *>::Iterator kter = (*jter)->List.begin(); - for( ; kter != (*jter)->List.end(); ++kter) - { - if((*kter)->List.indexOf(filter) != -1) - { - if((*kter)->MenuName.isEmpty()) - { - list.append((*kter)->Name); - } - else - { - list.append((*kter)->MenuName); - } - } - } - } -} - - diff --git a/Qt/Components/pqSourceProxyInfo.h b/Qt/Components/pqSourceProxyInfo.h deleted file mode 100644 index 9eeacd5de8..0000000000 --- a/Qt/Components/pqSourceProxyInfo.h +++ /dev/null @@ -1,134 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqSourceProxyInfo.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ - - -/// \file pqSourceProxyInfo.h -/// \brief -/// The pqSourceProxyInfo class is used to group items in the filter -/// menu. -/// -/// \date 1/27/2006 - -#ifndef _pqSourceProxyInfo_h -#define _pqSourceProxyInfo_h - - -#include "pqComponentsExport.h" - -class pqSourceProxyInfoInternal; -class QString; -class QStringList; -class vtkPVXMLElement; - - -/// \class pqSourceProxyInfo -/// \brief -/// The pqSourceProxyInfo class is used to group items in the filter -/// menu. -class PQCOMPONENTS_EXPORT pqSourceProxyInfo -{ -public: - pqSourceProxyInfo(); - ~pqSourceProxyInfo(); - - /// Resets the filter grouping information. - void Reset(); - - /// \brief - /// Gets whether or not the filter information has been loaded. - /// \return - /// True if the filter information has been loaded - bool IsFilterInfoLoaded() const; - - /*! - \brief - Loads the filter grouping information from an xml structure. - - The current filter information will be cleared before reading in - the new information. The xml structure should define categories - inside of category groups. Grouping the categories determines - where to put the menu separators. - - The xml should be formatted as follows: - \code - <SomeRootName> - <CategoryGroup> - <Category name="Favorites" menuName="&Favorites"> - <Filter name="Clip" /> - ... - </Category> - <Category name="Alphbetical" menuName="&Alphbetical" /> - </CategoryGroup> - <CategoryGroup> - ... - </CategoryGroup> - ... - <\SomeRootName> - \endcode - The xml root name can be anything. The other elements should be - named accordint to the example. The category menu name is optional. - if there is no menu name, the menu will display the name. The menu - name can be used to specify a keyboard shortcut for the menu. Each - of the sub-elements can be entered multiple times. There is no limit - to the number of filters that can be added to a category, etc. - - \param root The root of the filter information in the xml. - */ - void LoadFilterInfo(vtkPVXMLElement *root); - - /// \brief - /// Gets the list of menu items based on the filter information. - /// - /// Each entry in the list corresponds to a category in the xml. An - /// empty entry is used to separate category groups. If a category - /// does not have a menu name specified, the category name is used. - /// - /// \param menuList Used to return the list of menu names. - void GetFilterMenu(QStringList &menuList) const; - - /// \brief - /// Gets the list of categories the specified filter is in. - /// \param name The name of the filter. - /// \param list Used to return the list of category names. - void GetFilterCategories(const QString &name, QStringList &list) const; - - /// \brief - /// Gets the list of categories the specified filter is in. - /// \param name The name of the filter. - /// \param list Used to return the list of category menu names. - void GetFilterMenuCategories(const QString &name, QStringList &list) const; - -private: - pqSourceProxyInfoInternal *Internal; ///< Stores the filter grouping. -}; - -#endif diff --git a/Qt/Components/pqSpreadSheetViewDecorator.cxx b/Qt/Components/pqSpreadSheetViewDecorator.cxx index 8ed7f3eb12..d108099814 100644 --- a/Qt/Components/pqSpreadSheetViewDecorator.cxx +++ b/Qt/Components/pqSpreadSheetViewDecorator.cxx @@ -100,7 +100,6 @@ pqSpreadSheetViewDecorator::pqSpreadSheetViewDecorator(pqSpreadSheetView* view): //----------------------------------------------------------------------------- pqSpreadSheetViewDecorator::~pqSpreadSheetViewDecorator() { - delete this->Internal->AttributeDomain; delete this->Internal; this->Internal = 0; } diff --git a/Qt/Components/pqStateLoader.cxx b/Qt/Components/pqStateLoader.cxx deleted file mode 100644 index 800e8b91d1..0000000000 --- a/Qt/Components/pqStateLoader.cxx +++ /dev/null @@ -1,298 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqStateLoader.cxx - - Copyright (c) 2005-2008 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 "pqStateLoader.h" - -#include "vtkObjectFactory.h" -#include "vtkPVXMLElement.h" -#include "vtkSmartPointer.h" -#include "vtkSMProxy.h" -#include "vtkSMProxyIterator.h" -#include "vtkSMProxyLocator.h" -#include "vtkSMProxyManager.h" - -#include <QPointer> -#include <QRegExp> - -#include "pqAnimationManager.h" -#include "pqAnimationScene.h" -#include "pqApplicationCore.h" -#include "pqMainWindowCore.h" -#include "pqProxy.h" -#include "pqServerManagerModel.h" -#include "pqViewManager.h" - -//----------------------------------------------------------------------------- -class pqStateLoaderInternal -{ -public: - QPointer<pqMainWindowCore> MainWindowCore; - QList<vtkSmartPointer<vtkPVXMLElement> > HelperProxyCollectionElements; -}; - -//----------------------------------------------------------------------------- - -vtkStandardNewMacro(pqStateLoader); -vtkCxxRevisionMacro(pqStateLoader, "1.18"); -//----------------------------------------------------------------------------- -pqStateLoader::pqStateLoader() -{ - this->Internal = new pqStateLoaderInternal; -} - -//----------------------------------------------------------------------------- -pqStateLoader::~pqStateLoader() -{ - delete this->Internal; -} - -//----------------------------------------------------------------------------- -void pqStateLoader::SetMainWindowCore(pqMainWindowCore* core) -{ - this->Internal->MainWindowCore = core; -} - -//----------------------------------------------------------------------------- -int pqStateLoader::LoadStateInternal(vtkPVXMLElement* root) -{ - this->Internal->HelperProxyCollectionElements.clear(); - - // Load the <ServerManagerState /> element first. - if (!this->Superclass::LoadStateInternal(root)) - { - return 0; - } - - vtkPVXMLElement *viewManagerXML = - root->FindNestedElementByName("ViewManager"); - if (viewManagerXML) - { - if (!this->Internal->MainWindowCore->multiViewManager().loadState( - viewManagerXML, this->ProxyLocator)) - { - return 0; - } - } - - // After having loaded all state, - // try to discover helper proxies for all pqProxies. - this->DiscoverHelperProxies(); - this->Internal->HelperProxyCollectionElements.clear(); - return 1; -} - -//----------------------------------------------------------------------------- -vtkSMProxy* pqStateLoader::CreateProxy( - const char* xml_group, const char* xml_name, vtkIdType cid) -{ - if (xml_group && xml_name && strcmp(xml_group, "animation")==0 - && strcmp(xml_name, "AnimationScene")==0) - { - // If an animation scene already exists, we use that. - pqAnimationScene* scene = - this->Internal->MainWindowCore->getAnimationManager()->getActiveScene(); - if (scene) - { - vtkSMProxy* proxy = scene->getProxy(); - proxy->Register(this); - return proxy; - } - } - else if (xml_group && xml_name && strcmp(xml_group, "misc") == 0 - && strcmp(xml_name, "TimeKeeper") == 0) - { - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - // There is only one time keeper per connection, simply - // load the state on the timekeeper. - vtkSMProxy* timekeeper = pxm->GetProxy("timekeeper", "TimeKeeper"); - if (timekeeper) - { - timekeeper->Register(this); - return timekeeper; - } - } - - return this->Superclass::CreateProxy(xml_group, xml_name, cid); -} - -//--------------------------------------------------------------------------- -void pqStateLoader::RegisterProxyInternal(const char* group, - const char* name, vtkSMProxy* proxy) -{ - // Don't re-register a proxy in the same group. - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - if (pxm->GetProxyName(group, proxy)) - { - // scene is registered, don't re-register it. - return; - } - - this->Superclass::RegisterProxyInternal(group, name, proxy); -} - -//----------------------------------------------------------------------------- -vtkPVXMLElement* pqStateLoader::LocateProxyElement(int id) -{ - vtkPVXMLElement* proxyElement = this->Superclass::LocateProxyElement(id); - if (!proxyElement || !proxyElement->GetAttribute("group") || - !proxyElement->GetAttribute("type")) - { - return proxyElement; - } - - const char* xml_group = proxyElement->GetAttribute("group"); - const char* xml_name = proxyElement->GetAttribute("type"); - if (strcmp(xml_group, "views") == 0) - { - unsigned int max = proxyElement->GetNumberOfNestedElements(); - for (unsigned int cc=0; cc < max; ++cc) - { - vtkPVXMLElement* element = proxyElement->GetNestedElement(cc); - if (element->GetName() == QString("Property") && - element->GetAttribute("name") == QString("ViewSize")) - { - proxyElement->RemoveNestedElement(element); - break; - } - } - } - else if (strcmp(xml_group, "misc")==0 && strcmp(xml_name, "TimeKeeper") == 0) - { - // FIXME: This needs to be fixed by making the vtkSMTimeKeeper internally - // manage the views and timestep values so that on never manually has to set - // it up. - unsigned int max = proxyElement->GetNumberOfNestedElements(); - for (unsigned int cc=0; cc < max; ++cc) - { - // Views are not loaded from state, since the pqTimeKeeper - // automatically updates the property appropriately. - vtkPVXMLElement* element = proxyElement->GetNestedElement(cc); - if (element->GetName() == QString("Property") && - element->GetAttribute("name") == QString("Views")) - { - proxyElement->RemoveNestedElement(element); - cc--; - max--; - continue; - } - // We don't want to upload the values from "TimestepValues" property - // either since that's populated by the GUI. - if (element->GetName() == QString("Property") && - element->GetAttribute("name") == QString("TimestepValues")) - { - proxyElement->RemoveNestedElement(element); - cc--; - max--; - continue; - } - } - } - - return proxyElement; -} - -//----------------------------------------------------------------------------- -int pqStateLoader::BuildProxyCollectionInformation( - vtkPVXMLElement* collectionElement) -{ - const char* groupName = collectionElement->GetAttribute("name"); - if (!groupName) - { - vtkErrorMacro("Required attribute name is missing."); - return 0; - } - - QRegExp helper_group_rx ("pq_helper_proxies.(\\d+)"); - if (helper_group_rx.indexIn(groupName) == -1) - { - return this->Superclass::BuildProxyCollectionInformation( - collectionElement); - } - - // The collection is a pq_helper_proxies collection. - // We don't register these proxies directly again, instead - // we add them as helper proxies which will get registered - // while adding them as helper proxies to pqProxy objects. - this->Internal->HelperProxyCollectionElements.push_back(collectionElement); - return 1; -} - -//----------------------------------------------------------------------------- -void pqStateLoader::DiscoverHelperProxies() -{ - pqServerManagerModel* smmodel = - pqApplicationCore::instance()->getServerManagerModel(); - QRegExp helper_group_rx ("pq_helper_proxies.(\\d+)"); - - foreach(vtkPVXMLElement* proxyCollection, - this->Internal->HelperProxyCollectionElements) - { - const char* groupname = proxyCollection->GetAttribute("name"); - if (helper_group_rx.indexIn(groupname) == -1) - { - continue; - } - int proxyid = helper_group_rx.cap(1).toInt(); - vtkSMProxy* proxy = this->ProxyLocator->LocateProxy(proxyid); - pqProxy *pq_proxy = smmodel->findItem<pqProxy*>(proxy); - if (!pq_proxy) - { - continue; - } - unsigned int num_children = proxyCollection->GetNumberOfNestedElements(); - for (unsigned int cc=0; cc < num_children; cc++) - { - vtkPVXMLElement* child = proxyCollection->GetNestedElement(cc); - if (child->GetName() != QString("Item")) - { - continue; - } - const char* name = child->GetAttribute("name"); - int helperid; - if (!name || !child->GetScalarAttribute("id", &helperid)) - { - continue; - } - vtkSMProxy* helper = this->ProxyLocator->LocateProxy(helperid); - if (helper) - { - pq_proxy->addHelperProxy(name, helper); - } - } - } -} - - -//----------------------------------------------------------------------------- -void pqStateLoader::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os, indent); -} diff --git a/Qt/Components/pqStateLoader.h b/Qt/Components/pqStateLoader.h deleted file mode 100644 index cbe83a32ea..0000000000 --- a/Qt/Components/pqStateLoader.h +++ /dev/null @@ -1,90 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqStateLoader.h - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -#ifndef __pqStateLoader_h -#define __pqStateLoader_h - - -#include "pqComponentsExport.h" -#include "vtkSMStateLoader.h" - -class pqMainWindowCore; -class pqStateLoaderInternal; - -/// State loader which makes it possible to load -/// additional GUI related state (including multiview layout). -/// This also ensures that the time-keeper and animation scene proxies are not -/// recreated (but existing ones are used). -class PQCOMPONENTS_EXPORT pqStateLoader : public vtkSMStateLoader -{ -public: - static pqStateLoader* New(); - vtkTypeRevisionMacro(pqStateLoader, vtkSMStateLoader); - void PrintSelf(ostream& os, vtkIndent indent); - - /// Set the main window core. The core is GUI side manager. - void SetMainWindowCore(pqMainWindowCore* core); -protected: - pqStateLoader(); - ~pqStateLoader(); - - /// Load the state. - virtual int LoadStateInternal(vtkPVXMLElement* rootElement); - - /// Description: - /// Locate the XML for the proxy with the given id. Overridden to filter the - /// XML for certain proxies. - virtual vtkPVXMLElement* LocateProxyElement(int id); - - /// Overridden so that animation scene proxy is not recreated types. - virtual vtkSMProxy* CreateProxy( - const char* xmlgroup, const char* xmlname, vtkIdType cid); - - /// Overridden to avoid registering the reused animation scene twice. - virtual void RegisterProxyInternal(const char* group, - const char* name, vtkSMProxy* proxy); - - /// Overridden to process pq_helper_proxies groups. - virtual int BuildProxyCollectionInformation(vtkPVXMLElement*); - - /// Finds helper proxies for any pqProxies and assigns them accordingly. - void DiscoverHelperProxies(); -private: - pqStateLoader(const pqStateLoader&); // Not implemented. - void operator=(const pqStateLoader&); // Not implemented. - - pqStateLoaderInternal* Internal; -}; - - -#endif - diff --git a/Qt/Components/pqVCRController.cxx b/Qt/Components/pqVCRController.cxx index 8a6f58c2e3..362d322d42 100644 --- a/Qt/Components/pqVCRController.cxx +++ b/Qt/Components/pqVCRController.cxx @@ -38,14 +38,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Qt includes. #include <QtDebug> -#include <QCoreApplication> +#include <QApplication> // ParaView includes. +#include "pqAnimationScene.h" #include "pqApplicationCore.h" +#include "pqEventDispatcher.h" #include "pqPipelineSource.h" -#include "pqAnimationScene.h" #include "pqSMAdaptor.h" -#include "pqEventDispatcher.h" +#include "pqUndoStack.h" //----------------------------------------------------------------------------- pqVCRController::pqVCRController(QObject* _parent/*=null*/) : QObject(_parent) { @@ -107,9 +108,13 @@ void pqVCRController::onPlay() return; } - this->Scene->getProxy()->InvokeCommand("Play"); - // NOTE: This is a blocking call, returns only after the - // the animation has stopped. + BEGIN_UNDO_EXCLUDE(); + + this->Scene->getProxy()->InvokeCommand("Play"); + + // NOTE: This is a blocking call, returns only after the + // the animation has stopped. + END_UNDO_EXCLUDE(); pqApplicationCore::instance()->render(); } @@ -121,11 +126,7 @@ void pqVCRController::onTick() // the animation scene proxy does it. // process the events so that the GUI remains responsive. - pqEventDispatcher::processEventsAndWait(1); // would be nice to enhance - // testing framework so we can - // simply call - // QApplication::processEvents - + QApplication::processEvents(); emit this->timestepChanged(); } diff --git a/Qt/Components/pqViewManager.cxx b/Qt/Components/pqViewManager.cxx index 0233ad6e02..63997c46d2 100644 --- a/Qt/Components/pqViewManager.cxx +++ b/Qt/Components/pqViewManager.cxx @@ -66,7 +66,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ParaView includes. -#include "pqActiveViewOptionsManager.h" +#include "pqActiveObjects.h" #include "pqApplicationCore.h" #include "pqCloseViewUndoElement.h" #include "pqComparativeRenderView.h" @@ -99,12 +99,8 @@ uint qHash(const QPointer<T> key) class pqViewManager::pqInternals { public: - QPointer<pqServer> ActiveServer; QPointer<pqView> ActiveView; - QPointer<pqUndoStack> UndoStack; - QPointer<pqActiveViewOptionsManager> ViewOptionsManager; QMenu ConvertMenu; - QSignalMapper* LookmarkSignalMapper; typedef QMap<pqMultiViewFrame*, QPointer<pqView> > FrameMapType; @@ -137,10 +133,6 @@ pqViewManager::pqViewManager(QWidget* _parent/*=null*/) this->Internal = new pqInternals(); this->Internal->DontCreateDeleteViewsModules = false; this->Internal->MaxWindowSize = QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); - this->Internal->LookmarkSignalMapper = new QSignalMapper(this); - QObject::connect(this->Internal->LookmarkSignalMapper, SIGNAL(mapped(QWidget*)), - this, SIGNAL(createLookmark(QWidget*))); - pqServerManagerModel* smModel = pqApplicationCore::instance()->getServerManagerModel(); @@ -176,11 +168,38 @@ pqViewManager::pqViewManager(QWidget* _parent/*=null*/) this->init(); qApp->installEventFilter(this); + + // Connect the view manager to the pqActiveView. + QObject::connect(this, SIGNAL(activeViewChanged(pqView*)), + &pqActiveObjects::instance(), SLOT(setActiveView(pqView*))); + QObject::connect( + &pqActiveObjects::instance(), SIGNAL(viewChanged(pqView*)), + this, SLOT(setActiveView(pqView*))); + + pqApplicationCore* core = pqApplicationCore::instance(); + + // When server disconnects, we reset the layout. + QObject::connect(core->getServerManagerModel(), + SIGNAL(finishedRemovingServer()), + this, SLOT(onServerDisconnect())); + + // This is essential since there are various GUI components such as the + // pqAnimationManager that require a pqViewManager to perform certain tasks. + // They get access to the pqViewManager using the pqAnimationCore. + core->registerManager("MULTIVIEW_MANAGER", this); + QObject::connect(core, + SIGNAL(stateLoaded(vtkPVXMLElement*, vtkSMProxyLocator*)), + this, SLOT(loadState(vtkPVXMLElement*, vtkSMProxyLocator*))); + QObject::connect(core, + SIGNAL(stateSaved(vtkPVXMLElement*)), + this, SLOT(saveState(vtkPVXMLElement*))); } //----------------------------------------------------------------------------- pqViewManager::~pqViewManager() { + // they will get cleared as the application quits. + this->Internal->DontCreateDeleteViewsModules = true; // Cleanup all render modules. foreach (pqMultiViewFrame* frame , this->Internal->Frames.keys()) { @@ -192,12 +211,6 @@ pqViewManager::~pqViewManager() delete this->Internal; } -//----------------------------------------------------------------------------- -void pqViewManager::setViewOptionsManager(pqActiveViewOptionsManager* mgr) -{ - this->Internal->ViewOptionsManager = mgr; -} - //----------------------------------------------------------------------------- void pqViewManager::buildConvertMenu() { @@ -232,42 +245,12 @@ void pqViewManager::buildConvertMenu() this->Internal->ConvertMenu.addAction(view_action); } -//----------------------------------------------------------------------------- -void pqViewManager::setActiveServer(pqServer* server) -{ - this->Internal->ActiveServer = server; -} - //----------------------------------------------------------------------------- pqView* pqViewManager::getActiveView() const { return this->Internal->ActiveView; } -//----------------------------------------------------------------------------- -void pqViewManager::setUndoStack(pqUndoStack* stack) -{ - if (this->Internal->UndoStack) - { - QObject::disconnect(this->Internal->UndoStack, 0, this, 0); - } - - this->Internal->UndoStack = stack; - - if (stack) - { - QObject::connect(this, SIGNAL(beginUndo(const QString&)), - stack, SLOT(beginUndoSet(QString))); - QObject::connect(this, SIGNAL(endUndo()), stack, SLOT(endUndoSet())); - QObject::connect(this, SIGNAL(addToUndoStack(vtkUndoElement*)), - stack, SLOT(addToActiveUndoSet(vtkUndoElement*))); - QObject::connect(this, SIGNAL(beginNonUndoableChanges()), - stack, SLOT(beginNonUndoableChanges())); - QObject::connect(this, SIGNAL(endNonUndoableChanges()), - stack, SLOT(endNonUndoableChanges())); - } -} - //----------------------------------------------------------------------------- void pqViewManager::updateConversionActions(pqMultiViewFrame* frame) { @@ -418,10 +401,10 @@ void pqViewManager::onFrameRemoved(pqMultiViewFrame* frame) if (this->Internal->CloseFrameUndoElement) { - emit this->addToUndoStack(this->Internal->CloseFrameUndoElement); + ADD_UNDO_ELEM(this->Internal->CloseFrameUndoElement); this->Internal->CloseFrameUndoElement = 0; + END_UNDO_SET(); } - emit this->endUndo(); // Now activate some frame, so that we have an active view. if (this->Internal->Frames.size() > 0) @@ -442,7 +425,7 @@ void pqViewManager::onFrameRemoved(pqMultiViewFrame* frame) //----------------------------------------------------------------------------- void pqViewManager::onPreFrameRemoved(pqMultiViewFrame* frame) { - emit this->beginUndo("Close View"); + BEGIN_UNDO_SET("Close View"); vtkPVXMLElement* state = vtkPVXMLElement::New(); this->saveState(state); @@ -456,6 +439,17 @@ void pqViewManager::onPreFrameRemoved(pqMultiViewFrame* frame) state->Delete(); } +//----------------------------------------------------------------------------- +void pqViewManager::reset() +{ + QList<QWidget*> removed; + this->reset(removed); + foreach (QWidget* widget, removed) + { + delete widget; + } +} + //----------------------------------------------------------------------------- void pqViewManager::reset(QList<QWidget*> &removed) { @@ -501,77 +495,6 @@ void pqViewManager::connect(pqMultiViewFrame* frame, pqView* view) } } - pqRenderView* const render_module = - qobject_cast<pqRenderView*>(view); - if(render_module) - { - QAction* cameraAction = new QAction(QIcon(":/pqWidgets/Icons/pqEditCamera16.png"), - "Adjust Camera", - this); - cameraAction->setObjectName("CameraButton"); - frame->addTitlebarAction(cameraAction); - cameraAction->setEnabled(true); - QObject::connect(cameraAction, SIGNAL(triggered()), - this, SLOT(onCameraTriggered())); - } - - if(view->supportsLookmarks()) - { - QAction* lookmarkAction = new QAction(QIcon(":/pqWidgets/Icons/pqLookmark16.png"), - "Lookmark", - this); - lookmarkAction->setObjectName("LookmarkButton"); - frame->addTitlebarAction(lookmarkAction); - - lookmarkAction->setEnabled(true); - this->Internal->LookmarkSignalMapper->setMapping(lookmarkAction, frame); - QObject::connect(lookmarkAction, SIGNAL(triggered(bool)), - this->Internal->LookmarkSignalMapper, SLOT(map())); - } - - QAction* optionsAction = new QAction( - QIcon(":/pqWidgets/Icons/pqOptions16.png"), "Edit View Options", this); - optionsAction->setObjectName("OptionsButton"); - optionsAction->setEnabled(false); - if (this->Internal->ViewOptionsManager && - this->Internal->ViewOptionsManager->canShowOptions(view)) - { - optionsAction->setEnabled(true); - } - frame->addTitlebarAction(optionsAction); - QObject::connect(optionsAction, SIGNAL(triggered()), - this, SLOT(onViewOptionsRequested())); - - if (view->supportsUndo()) - { - // Setup undo/redo connections if the view module - // supports interaction undo. - QAction* forwardAction = new QAction(QIcon(":/pqWidgets/Icons/pqRedoCamera24.png"), - "", - this); - forwardAction->setObjectName("ForwardButton"); - frame->addTitlebarAction(forwardAction); - forwardAction->setEnabled(false); - - QObject::connect(forwardAction, SIGNAL( triggered ()), - view, SLOT(redo())); - QObject::connect(view, SIGNAL(canRedoChanged(bool)), - forwardAction, SLOT(setEnabled(bool))); - - - QAction* backAction = new QAction(QIcon(":/pqWidgets/Icons/pqUndoCamera24.png"), - "", - this); - backAction->setObjectName("BackButton"); - frame->addTitlebarAction(backAction); - backAction->setEnabled(false); - - QObject::connect(backAction, SIGNAL( triggered ()), - view, SLOT(undo())); - QObject::connect(view, SIGNAL(canUndoChanged(bool)), - backAction, SLOT(setEnabled(bool))); - } - this->Internal->Frames.insert(frame, view); } @@ -593,54 +516,6 @@ void pqViewManager::disconnect(pqMultiViewFrame* frame, pqView* view) } frame->setMainWidget(NULL); - - pqRenderView* const render_module = - qobject_cast<pqRenderView*>(view); - if(render_module) - { - QAction *cameraAction= frame->getAction("CameraButton"); - if(cameraAction) - { - frame->removeTitlebarAction(cameraAction); - delete cameraAction; - } - } - - if(view->supportsLookmarks()) - { - QAction *lookmarkAction= frame->getAction("LookmarkButton"); - if(lookmarkAction) - { - frame->removeTitlebarAction(lookmarkAction); - delete lookmarkAction; - } - } - - QAction *optionsAction= frame->getAction("OptionsButton"); - if(optionsAction) - { - frame->removeTitlebarAction(optionsAction); - delete optionsAction; - } - - if (view->supportsUndo()) - { - QAction *forwardAction= frame->getAction("ForwardButton"); - if(forwardAction) - { - frame->removeTitlebarAction(forwardAction); - delete forwardAction; - } - - - QAction *backAction= frame->getAction("BackButton"); - if(backAction) - { - frame->removeTitlebarAction(backAction); - delete backAction; - } - } - // Search for view frame action group plugins and have them remove their // actions for this view's frame if need be. QObjectList ifaces = @@ -672,10 +547,10 @@ void pqViewManager::assignFrame(pqView* view) if (this->Internal->PendingFrames.size() == 0) { // Create a new frame. - - if (this->Internal->UndoStack && ( - this->Internal->UndoStack->getInUndo() || - this->Internal->UndoStack->getInRedo())) + + pqUndoStack* undoStack = pqApplicationCore::instance()->getUndoStack(); + if (undoStack && (undoStack->getInUndo() || + undoStack->getInRedo())) { // HACK: If undo-redoing, don't split // to create a new pane, it will be created @@ -841,7 +716,7 @@ void pqViewManager::onConvertToTriggered(QAction* action) return; } - emit this->beginUndo(QString("Convert View to %1").arg(type)); + BEGIN_UNDO_SET(QString("Convert View to %1").arg(type)); pqObjectBuilder* builder = pqApplicationCore::instance()-> getObjectBuilder(); @@ -855,7 +730,7 @@ void pqViewManager::onConvertToTriggered(QAction* action) builder->createView(type, server); } - emit this->endUndo(); + END_UNDO_SET(); } //----------------------------------------------------------------------------- @@ -976,7 +851,7 @@ void pqViewManager::updateViewPositions() /// GUISize, ViewSize and ViewPosition properties are managed /// by the GUI, the undo/redo stack should not worry about /// the changes made to them. - emit this->beginNonUndoableChanges(); + BEGIN_UNDO_EXCLUDE(); // Now we loop thorough all view modules and set the GUISize/ViewPosition. foreach(pqView* view, this->Internal->Frames) @@ -1005,7 +880,7 @@ void pqViewManager::updateViewPositions() // view->getProxy()->UpdateProperty("ViewSize"); } - emit this->endNonUndoableChanges(); + END_UNDO_EXCLUDE(); this->updateCompactViewPositions(); } @@ -1026,7 +901,7 @@ void pqViewManager::updateCompactViewPositions() /// GUISize, ViewSize and ViewPosition properties are managed /// by the GUI, the undo/redo stack should not worry about /// the changes made to them. - emit this->beginNonUndoableChanges(); + BEGIN_UNDO_EXCLUDE(); // Loop for each view QList<pqMultiViewFrame*> frames = ViewInfo.keys(); @@ -1065,7 +940,7 @@ void pqViewManager::updateCompactViewPositions() prop->SetElements2(viewSize.width(), viewSize.height()); } } - emit this->endNonUndoableChanges(); + END_UNDO_EXCLUDE(); } //----------------------------------------------------------------------------- @@ -1101,11 +976,16 @@ void pqViewManager::saveState(vtkPVXMLElement* root) bool pqViewManager::loadState(vtkPVXMLElement* rwRoot, vtkSMProxyLocator* locator) { - if (!rwRoot || !rwRoot->GetName() || strcmp(rwRoot->GetName(), "ViewManager")) + if (!rwRoot || !rwRoot->GetName()) { - qDebug() << "Argument must be <ViewManager /> element."; + // qDebug() << "Argument must be <ViewManager /> element."; return false; } + if (strcmp(rwRoot->GetName(), "ViewManager") != 0) + { + return this->loadState(rwRoot->FindNestedElementByName("ViewManager"), + locator); + } // When state is loaded by the server manager, // the View Manager will have already layed out all the view modules @@ -1114,7 +994,7 @@ bool pqViewManager::loadState(vtkPVXMLElement* rwRoot, // state file. this->Internal->DontCreateDeleteViewsModules = true; - // We remove all "randomly" layed out frames. Note that we are not + // We remove all "randomly" laid out frames. Note that we are not // destroying the view modules, only the frames that got created // when the server manager state was getting loaded. foreach (pqMultiViewFrame* frame, this->Internal->Frames.keys()) @@ -1307,20 +1187,14 @@ void pqViewManager::frameDrop(pqMultiViewFrame* acceptingFrame, void pqViewManager::onSplittingView(const Index& index, Qt::Orientation orientation, float fraction, const Index& childIndex) { - emit this->beginUndo("Split View"); + BEGIN_UNDO_SET("Split View"); pqSplitViewUndoElement* elem = pqSplitViewUndoElement::New(); elem->SplitView(index, orientation, fraction, childIndex); - emit this->addToUndoStack(elem); + ADD_UNDO_ELEM(elem); elem->Delete(); - emit this->endUndo(); -} - -//----------------------------------------------------------------------------- -void pqViewManager::onCameraTriggered() -{ - emit this->triggerCameraAdjustment(this->Internal->ActiveView); + END_UNDO_SET(); } #define PADDING_COMPENSATION QSize(16, 16); @@ -1428,15 +1302,6 @@ void pqViewManager::restoreWidget(QWidget* wdg) this->updateViewPositions(); } -//----------------------------------------------------------------------------- -void pqViewManager::onViewOptionsRequested() -{ - if (this->Internal->ViewOptionsManager) - { - this->Internal->ViewOptionsManager->showOptions(); - } -} - //----------------------------------------------------------------------------- void pqViewManager::setActiveView(pqView* view) { @@ -1454,6 +1319,20 @@ void pqViewManager::setActiveView(pqView* view) else if (this->Internal->ActiveView) { frame = this->getFrame(this->Internal->ActiveView); - frame->setActive(false); + if (frame) + { + frame->setActive(false); + } + } +} + +//----------------------------------------------------------------------------- +void pqViewManager::onServerDisconnect() +{ + QList<QWidget*> removed; + this->reset(removed); + foreach (QWidget* widget, removed) + { + delete widget; } } diff --git a/Qt/Components/pqViewManager.h b/Qt/Components/pqViewManager.h index 0b0c48d2d1..585309b565 100644 --- a/Qt/Components/pqViewManager.h +++ b/Qt/Components/pqViewManager.h @@ -34,15 +34,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqMultiView.h" -class pqActiveViewOptionsManager; class pqMultiViewFrame; class pqServer; -class pqUndoStack; class pqView; class vtkImageData; class vtkPVXMLElement; class vtkSMProxyLocator; -class vtkUndoElement; /// This class manages all view windows. View windows occupy the central /// area in the application are all layed out using split windows. This @@ -61,12 +58,6 @@ public: /// returns the active view module. pqView* getActiveView() const; - /// Save the state of the view window manager. - void saveState(vtkPVXMLElement* root); - - /// Loads the state for the view window manager. - bool loadState(vtkPVXMLElement* rwRoot, vtkSMProxyLocator* loader); - /// This option is used for testing. When size.isEmpty() is true, /// it resets the maximum bounds on the view windows. /// This is useful when running tests, so that we are guranteed that @@ -80,9 +71,6 @@ public: /// Given a frame, returns the view, if any contained in it. pqView* getView(pqMultiViewFrame* frame) const; - /// Set the undo stack used for the application. - void setUndoStack(pqUndoStack* stack); - /// Prepare the multiview for a screen capture for the given size. Returns the /// magnification to be used while performing the capture, if the /// requested size is greater than the widget size. One must call @@ -108,39 +96,22 @@ public: /// Resets the multi-view to its original state. /// \param removed Used to return all the removed widgets. virtual void reset(QList<QWidget*> &removed); + virtual void reset(); + +protected slots: + /// Save the state of the view window manager. + void saveState(vtkPVXMLElement* root); - /// View options manager is used to show the view options dialog for the - /// current view. If the manager is not set, then the view options tool button - /// will be disabled. - void setViewOptionsManager(pqActiveViewOptionsManager* manager); + /// Loads the state for the view window manager. + bool loadState(vtkPVXMLElement* rwRoot, vtkSMProxyLocator* loader); + + /// Called when server disconnects, we reset the view layout. + void onServerDisconnect(); signals: /// Fired when the active view module changes. void activeViewChanged(pqView*); - /// Fired when the user pressed the lookmark button for one of the views - void createLookmark(QWidget*); - - /// Fired when the manager begins an undoable change. - void beginUndo(const QString& label); - - /// Fired when the manager is done with an undoable change. - void endUndo(); - - /// Fired to add the elem to the undo stack. - void addToUndoStack(vtkUndoElement* elem); - - /// emitted when the manager begins changes that should not get - /// recorded on the undo stack. - void beginNonUndoableChanges(); - - /// emitted when the manager is done with changes that - /// should not get recorded on the undo stack. - void endNonUndoableChanges(); - - /// Fired when the camera button is clicked. - void triggerCameraAdjustment(pqView*); - private slots: /// This will create a view module to fill the frame. /// the render window is created on the active server @@ -186,19 +157,7 @@ private slots: /// We add an undo element to the stack to undo/redo the split. void onSplittingView(const Index&, Qt::Orientation, float, const Index&); - /// Called when the camera button is clicked - virtual void onCameraTriggered(); - - /// Called when the view options button is clicked. - void onViewOptionsRequested(); - public slots: - /// Set the active server. This must be called whenever - /// active server changes. The active server is used to - /// determine the server on whcih to create new view modules - /// when a frame a split. - void setActiveServer(pqServer* server); - /// Called to change the active view. If view==null and then if the view /// manager is currently focused on an empty frame, then it does not change /// that. Otherwise the frame containing the view is activated. @@ -249,6 +208,9 @@ protected: QAction* getAction(pqMultiViewFrame* frame,QString name); + /// need access to the loadState()/saveState() methods. + friend class pqCloseViewUndoElement; + friend class pqSplitViewUndoElement; private: pqViewManager(pqViewManager&); // Not implemented. diff --git a/Qt/Core/CMakeLists.txt b/Qt/Core/CMakeLists.txt index 7d8f4480b8..40d19523d2 100644 --- a/Qt/Core/CMakeLists.txt +++ b/Qt/Core/CMakeLists.txt @@ -40,6 +40,7 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqAnimationScene.h pqApplicationCore.h pqBarChartView.h + pqBrandPluginsLoader.h pqChartRepresentation.h pqChartView.h pqColorButtonEventPlayer.h @@ -60,6 +61,7 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqFileDialogRecentDirsModel.h pqFlatTreeViewEventTranslator.h pqFormBuilder.h + pqHelperProxyStateLoader.h pqHistogramTableModel.h pqLineChartView.h pqLinksModel.h @@ -81,7 +83,6 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqPropertyManager.h pqProxy.h pqQVTKWidgetEventTranslator.h - pqReaderFactory.h pqRenderView.h pqRenderViewBase.h pqRepresentation.h @@ -129,8 +130,22 @@ QT4_WRAP_UI(UI_BUILT_SOURCES ${UI_FORMS} ) +SET(PV_TEST_SERVER_ROOT "localhost" CACHE STRING + "Node which serves as the root node for the cluster when testing in parallel") +MARK_AS_ADVANCED(PV_TEST_SERVER_ROOT) + +CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/Resources/pqTestingServers.pvsc.in" + "${CMAKE_CURRENT_BINARY_DIR}/Resources/pqTestingServers.pvsc") + +GENERATE_QT_RESOURCE_FROM_FILES( + "${CMAKE_CURRENT_BINARY_DIR}/Resources/pqCoreTesting.qrc" + "/pqCoreTesting" + "${CMAKE_CURRENT_BINARY_DIR}/Resources/pqTestingServers.pvsc") + SET(UI_RESOURCES - Resources/pqCore.qrc + "${CMAKE_CURRENT_SOURCE_DIR}/Resources/pqCore.qrc" + "${CMAKE_CURRENT_BINARY_DIR}/Resources/pqCoreTesting.qrc" ) QT4_ADD_RESOURCES(RCS_SOURCES @@ -162,6 +177,8 @@ ADD_LIBRARY(pqCore pqApplicationCore.h pqBarChartView.cxx pqBarChartView.h + pqBrandPluginsLoader.cxx + pqBrandPluginsLoader.h pqChartRepresentation.cxx pqChartRepresentation.h pqChartView.cxx @@ -185,6 +202,8 @@ ADD_LIBRARY(pqCore pqCoreInit.h pqCoreTestUtility.cxx pqCoreTestUtility.h + pqCoreUtilities.cxx + pqCoreUtilities.h pqDataRepresentation.cxx pqDataRepresentation.h pqDisplayPolicy.cxx @@ -211,6 +230,8 @@ ADD_LIBRARY(pqCore pqFormBuilder.h pqHelperProxyRegisterUndoElement.cxx pqHelperProxyRegisterUndoElement.h + pqHelperProxyStateLoader.cxx + pqHelperProxyStateLoader.h pqHistogramTableModel.cxx pqHistogramTableModel.h pqImageUtil.cxx @@ -263,14 +284,14 @@ ADD_LIBRARY(pqCore pqPropertyManager.h pqProxy.cxx pqProxy.h + pqProxyModifiedStateUndoElement.cxx + pqProxyModifiedStateUndoElement.h pqProxyUnRegisterUndoElement.cxx pqProxyUnRegisterUndoElement.h pqQVTKWidgetEventPlayer.cxx pqQVTKWidgetEventPlayer.h pqQVTKWidgetEventTranslator.cxx pqQVTKWidgetEventTranslator.h - pqReaderFactory.cxx - pqReaderFactory.h pqRenderView.cxx pqRenderView.h pqRenderViewBase.cxx diff --git a/Qt/Core/Resources/pqTestingServers.pvsc.in b/Qt/Core/Resources/pqTestingServers.pvsc.in new file mode 100644 index 0000000000..4a3724f5fa --- /dev/null +++ b/Qt/Core/Resources/pqTestingServers.pvsc.in @@ -0,0 +1,19 @@ +<Servers> + <!-- Default server resources used by testing framework. These servers are + loaded by default when "disable-registry" option is used --> + <Server name="builtin" resource="builtin:"> + <ManualStartup/> + </Server> + <Server name="testserver" resource="cs://@PV_TEST_SERVER_ROOT@:11111"> + <ManualStartup/> + </Server> + <Server name="testserver-rc" resource="csrc://@PV_TEST_SERVER_ROOT@:11111"> + <ManualStartup/> + </Server> + <Server name="testserver-dsrs" resource="cdsrs://@PV_TEST_SERVER_ROOT@:11111//@PV_TEST_SERVER_ROOT@:22221"> + <ManualStartup/> + </Server> + <Server name="testserver-dsrs-rc" resource="cdsrsrc://@PV_TEST_SERVER_ROOT@:11111//@PV_TEST_SERVER_ROOT@:22221"> + <ManualStartup/> + </Server> +</Servers> diff --git a/Qt/Core/Testing/BasicApp.cxx b/Qt/Core/Testing/BasicApp.cxx index f5ec436cd8..15717d69fc 100644 --- a/Qt/Core/Testing/BasicApp.cxx +++ b/Qt/Core/Testing/BasicApp.cxx @@ -1,9 +1,9 @@ // A Test of a very simple app based on pqCore +#include "BasicApp.h" -#include <QMainWindow> +#include <QTimer> #include <QApplication> -#include <QPointer> #include "QVTKWidget.h" #include "vtkObjectFactory.h" @@ -14,108 +14,110 @@ #include "pqCoreTestUtility.h" #include "pqMain.h" #include "pqObjectBuilder.h" +#include "pqOptions.h" #include "pqPipelineSource.h" -#include "pqProcessModuleGUIHelper.h" -#include "pqRenderView.h" +#include "pqPluginManager.h" #include "pqServer.h" +#include "pqStandardViewModules.h" +#include "vtkProcessModule.h" -// our main window -class MainWindow : public QMainWindow +MainWindow::MainWindow() { -public: - MainWindow() - { - // automatically make a server connection - pqApplicationCore* core = pqApplicationCore::instance(); - pqObjectBuilder* ob = core->getObjectBuilder(); - pqServer* server = ob->createServer(pqServerResource("builtin:")); - - // create a graphics window and put it in our main window - this->RenderView = qobject_cast<pqRenderView*>( - ob->createView(pqRenderView::renderViewType(), server)); - this->setCentralWidget(this->RenderView->getWidget()); - - // create source and elevation filter - pqPipelineSource* source; - pqPipelineSource* elevation; - - source = ob->createSource("sources", "SphereSource", server); - // updating source so that when elevation filter is created, the defaults - // are setup correctly using the correct data bounds etc. - vtkSMSourceProxy::SafeDownCast(source->getProxy())->UpdatePipeline(); - - elevation = ob->createFilter("filters", "ElevationFilter", source); - - // put the elevation in the window - ob->createDataRepresentation(elevation->getOutputPort(0), this->RenderView); - - // zoom to sphere - this->RenderView->resetCamera(); - // make sure we update - this->RenderView->render(); - } - - QPointer<pqRenderView> RenderView; + // automatically make a server connection + pqApplicationCore* core = pqApplicationCore::instance(); + pqObjectBuilder* ob = core->getObjectBuilder(); + pqServer* server = ob->createServer(pqServerResource("builtin:")); -}; + // Register ParaView interfaces. + pqPluginManager* pgm = pqApplicationCore::instance()->getPluginManager(); + // * adds support for standard paraview views. + pgm->addInterface(new pqStandardViewModules(pgm)); -// our gui helper makes our MainWindow -class GUIHelper : public pqProcessModuleGUIHelper -{ -public: - static GUIHelper* New(); - vtkTypeMacro(GUIHelper, pqProcessModuleGUIHelper); - - QWidget* CreateMainWindow() - { - Win = new MainWindow; - Win->resize(200,150); - return Win; - } - bool compareView(const QString& referenceImage, double threshold, - ostream& output, const QString& tempDirectory) - { - pqRenderView* renModule = Win->RenderView; - - if (!renModule) - { - output << "ERROR: Could not locate the render module." << endl; - return false; - } + // create a graphics window and put it in our main window + this->RenderView = qobject_cast<pqRenderView*>( + ob->createView(pqRenderView::renderViewType(), server)); + this->setCentralWidget(this->RenderView->getWidget()); - QVTKWidget* const widget = qobject_cast<QVTKWidget*>(renModule->getWidget()); - if(!widget) - { - output << "ERROR: Not a QVTKWidget." << endl; - return false; - } + // create source and elevation filter + pqPipelineSource* source; + pqPipelineSource* elevation; - vtkRenderWindow* const render_window = - widget->GetRenderWindow(); + source = ob->createSource("sources", "SphereSource", server); + // updating source so that when elevation filter is created, the defaults + // are setup correctly using the correct data bounds etc. + vtkSMSourceProxy::SafeDownCast(source->getProxy())->UpdatePipeline(); - if(!render_window) - { - output << "ERROR: Could not locate the Render Window." << endl; - return false; - } + elevation = ob->createFilter("filters", "ElevationFilter", source); - bool ret = pqCoreTestUtility::CompareImage(render_window, referenceImage, - threshold, output, tempDirectory); - renModule->render(); - return ret; - } + // put the elevation in the window + ob->createDataRepresentation(elevation->getOutputPort(0), this->RenderView); - QPointer<MainWindow> Win; -}; + // zoom to sphere + this->RenderView->resetCamera(); + // make sure we update + this->RenderView->render(); + QTimer::singleShot(100, this, SLOT(processTest())); +} -vtkStandardNewMacro(GUIHelper); +void MainWindow::processTest() +{ + if (pqOptions* const options = pqApplicationCore::instance()->getOptions()) + { + bool comparison_succeeded = true; + if (options->GetBaselineImage()) + { + comparison_succeeded = this->compareView(options->GetBaselineImage(), + options->GetImageThreshold(), cout, options->GetTestDirectory()); + } + if (options->GetExitAppWhenTestsDone()) + { + QApplication::instance()->exit(comparison_succeeded ? 0 : 1); + } + } +} +bool MainWindow::compareView(const QString& referenceImage, double threshold, + ostream& output, const QString& tempDirectory) +{ + pqRenderView* renModule = this->RenderView; + + if (!renModule) + { + output << "ERROR: Could not locate the render module." << endl; + return false; + } + + QVTKWidget* const widget = qobject_cast<QVTKWidget*>(renModule->getWidget()); + if(!widget) + { + output << "ERROR: Not a QVTKWidget." << endl; + return false; + } + + vtkRenderWindow* const render_window = + widget->GetRenderWindow(); + + if(!render_window) + { + output << "ERROR: Could not locate the Render Window." << endl; + return false; + } + + bool ret = pqCoreTestUtility::CompareImage(render_window, referenceImage, + threshold, output, tempDirectory); + renModule->render(); + return ret; +} + int main(int argc, char** argv) { QApplication app(argc, argv); - vtkSmartPointer<GUIHelper> helper = vtkSmartPointer<GUIHelper>::New(); - return pqMain::Run(app, helper); + pqApplicationCore appCore(argc, argv); + MainWindow window; + window.resize(200, 150); + window.show(); + return app.exec(); } diff --git a/Qt/Core/Testing/BasicApp.h b/Qt/Core/Testing/BasicApp.h new file mode 100644 index 0000000000..2d23eae215 --- /dev/null +++ b/Qt/Core/Testing/BasicApp.h @@ -0,0 +1,20 @@ + +#include <QMainWindow> +#include <QPointer> +#include "pqRenderView.h" +#include "vtkObject.h" + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(); + bool compareView(const QString& referenceImage, double threshold, + ostream& output, const QString& tempDirectory); + + QPointer<pqRenderView> RenderView; + +public slots: + void processTest(); + +}; diff --git a/Qt/Core/Testing/CMakeLists.txt b/Qt/Core/Testing/CMakeLists.txt index 1304bceeda..ece3cc95b9 100644 --- a/Qt/Core/Testing/CMakeLists.txt +++ b/Qt/Core/Testing/CMakeLists.txt @@ -2,7 +2,13 @@ IF(PARAVIEW_DATA_ROOT) SET(BASELINE_DIR ${PARAVIEW_DATA_ROOT}/Baseline) - ADD_EXECUTABLE(pqCoreBasicApp BasicApp.cxx) + # Reduce the number of dirs that get included on moc command line + # since it causes issues on Windows 2000. + GET_DIRECTORY_PROPERTY(include_dirs_tmp INCLUDE_DIRECTORIES) + SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${MOC_INCLUDE_DIRS}") + QT4_WRAP_CPP(MOC_SRCS BasicApp.h) + SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${include_dirs_tmp}") + ADD_EXECUTABLE(pqCoreBasicApp BasicApp.cxx BasicApp.h ${MOC_SRCS}) TARGET_LINK_LIBRARIES(pqCoreBasicApp pqCore QtTesting ${QT_LIBRARIES} ) ADD_TEST(pqCoreBasicApp "${EXECUTABLE_OUTPUT_PATH}/pqCoreBasicApp" -dr "--test-directory=${PARAVIEW_TEST_DIR}" "--compare-view=${BASELINE_DIR}/pqCoreBasicApp.png" --exit) @@ -15,6 +21,7 @@ IF(QT_TESTING_WITH_PYTHON) # since it causes issues on Windows 2000. GET_DIRECTORY_PROPERTY(include_dirs_tmp INCLUDE_DIRECTORIES) SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${MOC_INCLUDE_DIRS}") + SET (MOC_SRCS) QT4_WRAP_CPP(MOC_SRCS pqFileDialogTest.h) SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${include_dirs_tmp}") ADD_EXECUTABLE(pqFileDialogTest diff --git a/Qt/Core/Testing/pqFileDialogTest.cxx b/Qt/Core/Testing/pqFileDialogTest.cxx index 959b480486..11fce63b9b 100644 --- a/Qt/Core/Testing/pqFileDialogTest.cxx +++ b/Qt/Core/Testing/pqFileDialogTest.cxx @@ -18,7 +18,6 @@ #include "vtkSmartPointer.h" #include "pqMain.h" -#include "pqProcessModuleGUIHelper.h" #include "pqServer.h" #include "pqFileDialog.h" #include "pqApplicationCore.h" @@ -35,39 +34,24 @@ pqFileDialogTestUtility::~pqFileDialogTestUtility() this->cleanupFiles(); } -void pqFileDialogTestUtility::playTests(const QStringList& filenames) +void pqFileDialogTestUtility::playTheTests(const QStringList& files) { - if (filenames.size() > 0) - { - this->playTests(filenames[0]); - } + this->playTests(files); } - -void pqFileDialogTestUtility::playTests(const QString& filename) +bool pqFileDialogTestUtility::playTests(const QStringList& filenames) { this->setupFiles(); - pqTestUtility::playTests(filename); -} + bool val = this->pqTestUtility::playTests(filenames); -void pqFileDialogTestUtility::testSucceeded() -{ pqOptions* const options = pqOptions::SafeDownCast( vtkProcessModule::GetProcessModule()->GetOptions()); if(options && options->GetExitAppWhenTestsDone()) { - QApplication::exit(0); + QApplication::exit(val? 0 : 1); } + return val; } -void pqFileDialogTestUtility::testFailed() -{ - pqOptions* const options = pqOptions::SafeDownCast( - vtkProcessModule::GetProcessModule()->GetOptions()); - if(options && options->GetExitAppWhenTestsDone()) - { - QApplication::exit(1); - } -} static void CreateEmptyFile(const QString& f) { @@ -233,32 +217,20 @@ void pqFileDialogTestWidget::record() } } -// our gui helper makes our MainWindow -class GUIHelper : public pqProcessModuleGUIHelper -{ -public: - vtkTypeMacro(GUIHelper, pqProcessModuleGUIHelper) - static GUIHelper* New(); - - pqTestUtility* TestUtility() - { - return this->TestWidget->Tester(); - } - - QWidget* CreateMainWindow() - { - this->TestWidget = new pqFileDialogTestWidget(); - return this->TestWidget; - } - pqFileDialogTestWidget* TestWidget; -}; - -vtkStandardNewMacro(GUIHelper); - int main(int argc, char** argv) { QApplication app(argc, argv); - return pqMain::Run(app, vtkSmartPointer<GUIHelper>::New()); + pqOptions* options = pqOptions::New(); + pqApplicationCore appCore(argc, argv, options); + options->Delete(); + + pqFileDialogTestWidget mainWidget; + mainWidget.show(); + + QMetaObject::invokeMethod(mainWidget.Tester(), "playTheTests", + Qt::QueuedConnection, + Q_ARG(QStringList, options->GetTestFiles())); + return app.exec(); } diff --git a/Qt/Core/Testing/pqFileDialogTest.h b/Qt/Core/Testing/pqFileDialogTest.h index e60c4e1d98..843bf84c52 100644 --- a/Qt/Core/Testing/pqFileDialogTest.h +++ b/Qt/Core/Testing/pqFileDialogTest.h @@ -12,13 +12,14 @@ class pqServer; class pqFileDialogTestUtility : public pqTestUtility { + Q_OBJECT public: pqFileDialogTestUtility(); ~pqFileDialogTestUtility(); - void playTests(const QString& filename); - void playTests(const QStringList& filenames); - void testSucceeded(); - void testFailed(); + virtual bool playTests(const QStringList& filenames); +public slots: + void playTheTests(const QStringList&); + protected: void setupFiles(); void cleanupFiles(); diff --git a/Qt/Core/pqApplicationCore.cxx b/Qt/Core/pqApplicationCore.cxx index 6a999b92df..a054d3b408 100644 --- a/Qt/Core/pqApplicationCore.cxx +++ b/Qt/Core/pqApplicationCore.cxx @@ -31,34 +31,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ========================================================================*/ #include "pqApplicationCore.h" -// ParaView Server Manager includes. -#include "vtkProcessModuleConnectionManager.h" -#include "vtkProcessModule.h" -#include "vtkPVArrayInformation.h" -#include "vtkPVDataInformation.h" -#include "vtkPVDataSetAttributesInformation.h" -#include "vtkPVXMLElement.h" -#include "vtkSMArrayListDomain.h" -#include "vtkSmartPointer.h" -#include "vtkSMDoubleRangeDomain.h" -#include "vtkSMDoubleVectorProperty.h" -#include "vtkSMGlobalPropertiesManager.h" -#include "vtkSMIntVectorProperty.h" -#include "vtkSMPQStateLoader.h" -#include "vtkSMPropertyHelper.h" -#include "vtkSMPropertyIterator.h" -#include "vtkSMProxy.h" -#include "vtkSMProxyLocator.h" -#include "vtkSMProxyManager.h" -#include "vtkSMProxyProperty.h" -#include "vtkSMRenderViewProxy.h" -#include "vtkSMSourceProxy.h" -#include "vtkSMStringVectorProperty.h" - #include <vtksys/SystemTools.hxx> // Qt includes. #include <QApplication> +#include <QDebug> +#include <QFile> +#include <QMainWindow> #include <QMap> #include <QPointer> #include <QSize> @@ -68,12 +47,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pq3DWidgetFactory.h" #include "pqAnimationScene.h" #include "pqCoreInit.h" +#include "pqCoreTestUtility.h" #include "pqDisplayPolicy.h" #include "pqEventDispatcher.h" #include "pqLinksModel.h" #include "pqLookupTableManager.h" #include "pqObjectBuilder.h" #include "pqOptions.h" +#include "pqOutputWindowAdapter.h" +#include "pqOutputWindow.h" #include "pqPipelineFilter.h" #include "pqPluginManager.h" #include "pqProgressManager.h" @@ -90,31 +72,45 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqStandardViewModules.h" #include "pqUndoStack.h" #include "pqXMLUtil.h" +#include "vtkInitializationHelper.h" +#include "vtkProcessModule.h" +#include "vtkPVXMLElement.h" +#include "vtkPVXMLParser.h" +#include "vtkSmartPointer.h" +#include "vtkSMGlobalPropertiesManager.h" +#include "vtkSMProperty.h" +#include "vtkSMPropertyHelper.h" +#include "vtkSMPropertyIterator.h" +#include "vtkSMProxy.h" +#include "vtkSMProxyManager.h" +#include "vtkSMReaderFactory.h" +#include "vtkSMWriterFactory.h" + +static void QtMessageOutput(QtMsgType type, const char *msg) +{ + switch(type) + { + case QtDebugMsg: + vtkOutputWindow::GetInstance()->DisplayText(msg); + break; + case QtWarningMsg: + vtkOutputWindow::GetInstance()->DisplayErrorText(msg); + break; + case QtCriticalMsg: + vtkOutputWindow::GetInstance()->DisplayErrorText(msg); + break; + case QtFatalMsg: + vtkOutputWindow::GetInstance()->DisplayErrorText(msg); + break; + } +} //----------------------------------------------------------------------------- -class pqApplicationCoreInternal +class pqApplicationCore::pqInternals { public: - pqServerManagerObserver* ServerManagerObserver; - pqServerManagerModel* ServerManagerModel; - pqObjectBuilder* ObjectBuilder; - pq3DWidgetFactory* WidgetFactory; - pqServerManagerSelectionModel* SelectionModel; - QPointer<pqDisplayPolicy> DisplayPolicy; - vtkSmartPointer<vtkSMStateLoader> StateLoader; - QPointer<pqLookupTableManager> LookupTableManager; - pqLinksModel LinksModel; - pqPluginManager* PluginManager; - pqProgressManager* ProgressManager; vtkSmartPointer<vtkSMGlobalPropertiesManager> GlobalPropertiesManager; - - QPointer<pqUndoStack> UndoStack; - QMap<QString, QPointer<QObject> > RegisteredManagers; - - QPointer<pqServerResources> ServerResources; - QPointer<pqServerStartups> ServerStartups; - QPointer<pqSettings> Settings; }; //----------------------------------------------------------------------------- @@ -127,159 +123,225 @@ pqApplicationCore* pqApplicationCore::instance() } //----------------------------------------------------------------------------- -pqApplicationCore::pqApplicationCore(QObject* p/*=null*/) - : QObject(p) +// deprecated constructor. +pqApplicationCore::pqApplicationCore(QObject* parentObject) + : QObject(parentObject) { + this->createOutputWindow(); + this->constructor(); + this->FinalizeOnExit = false; + + // Register ParaView interfaces. + pqPluginManager* pgm = this->getPluginManager(); + + // * adds support for standard paraview views. + pgm->addInterface(new pqStandardViewModules(pgm)); + + this->Options = pqOptions::SafeDownCast( + vtkProcessModule::GetProcessModule()->GetOptions()); +} + +//----------------------------------------------------------------------------- +pqApplicationCore::pqApplicationCore(int& argc, char** argv, pqOptions* options, + QObject* parentObject) + : QObject(parentObject) +{ + vtkSmartPointer<pqOptions> defaultOptions; + if (!options) + { + defaultOptions = vtkSmartPointer<pqOptions>::New(); + options = defaultOptions; + } + this->Options = options; + + // Create output window before initializing server manager. + this->createOutputWindow(); + vtkInitializationHelper::Initialize(argc, argv, options); + this->constructor(); + this->FinalizeOnExit = true; +} + +//----------------------------------------------------------------------------- +void pqApplicationCore::constructor() +{ + // Only 1 pqApplicationCore instance can be created. + Q_ASSERT(pqApplicationCore::Instance == NULL); + pqApplicationCore::Instance = this; + + this->LookupTableManager = NULL; + this->UndoStack = NULL; + this->ServerResources = NULL; + this->ServerStartups = NULL; + this->Settings = NULL; + // initialize statics in case we're a static library pqCoreInit(); - this->Internal = new pqApplicationCoreInternal(); - - this->setApplicationName("ParaViewBasedApplication"); - this->setOrganizationName("Humanity"); + this->Internal = new pqInternals(); // * Create pqServerManagerObserver first. This is the vtkSMProxyManager observer. - this->Internal->ServerManagerObserver = new pqServerManagerObserver(this); + this->ServerManagerObserver = new pqServerManagerObserver(this); // * Make signal-slot connections between ServerManagerObserver and ServerManagerModel. - //this->connect(this->Internal->ServerManagerObserver, this->Internal->ServerManagerModel); - - this->Internal->ServerManagerModel = new pqServerManagerModel( - this->Internal->ServerManagerObserver, this); + this->ServerManagerModel = new pqServerManagerModel( + this->ServerManagerObserver, this); // * Create the pqObjectBuilder. This is used to create pipeline objects. - this->Internal->ObjectBuilder = new pqObjectBuilder(this); + this->ObjectBuilder = new pqObjectBuilder(this); - if (!pqApplicationCore::Instance) - { - pqApplicationCore::Instance = this; - } - - this->Internal->PluginManager = new pqPluginManager(this); + this->PluginManager = new pqPluginManager(this); // * Create various factories. - this->Internal->WidgetFactory = new pq3DWidgetFactory(this); + this->WidgetFactory = new pq3DWidgetFactory(this); // * Setup the selection model. - this->Internal->SelectionModel = new pqServerManagerSelectionModel( - this->Internal->ServerManagerModel, this); + this->SelectionModel = new pqServerManagerSelectionModel( + this->ServerManagerModel, this); - this->Internal->DisplayPolicy = new pqDisplayPolicy(this); + this->DisplayPolicy = new pqDisplayPolicy(this); - this->Internal->ProgressManager = new pqProgressManager(this); - - // add standard views - this->Internal->PluginManager->addInterface( - new pqStandardViewModules(this->Internal->PluginManager)); + this->ProgressManager = new pqProgressManager(this); // add standard server manager model interface - this->Internal->PluginManager->addInterface( - new pqStandardServerManagerModelInterface(this->Internal->PluginManager)); + this->PluginManager->addInterface( + new pqStandardServerManagerModelInterface(this->PluginManager)); + + this->LinksModel = new pqLinksModel(this); + this->LoadingState = false; + QObject::connect(this->ServerManagerObserver, + SIGNAL(stateLoaded(vtkPVXMLElement*, vtkSMProxyLocator*)), + this, SLOT(onStateLoaded(vtkPVXMLElement*, vtkSMProxyLocator*))); + QObject::connect(this->ServerManagerObserver, + SIGNAL(stateSaved(vtkPVXMLElement*)), + this, SLOT(onStateSaved(vtkPVXMLElement*))); } //----------------------------------------------------------------------------- pqApplicationCore::~pqApplicationCore() { // Ensure that startup plugins get a chance to cleanup before pqApplicationCore is gone. - delete this->Internal->PluginManager; + delete this->PluginManager; + this->PluginManager = 0; // give chance to save before pqApplicationCore is gone - delete this->Internal->ServerStartups; + delete this->ServerStartups; + this->ServerStartups = 0; - if (pqApplicationCore::Instance == this) - { - pqApplicationCore::Instance = 0; - } - delete this->Internal; + // Ensure that all managers are deleted. + delete this->WidgetFactory; + this->WidgetFactory = 0; - // Unregister all proxies registered with the proxy manager. - vtkSMProxyManager* pxm = vtkSMObject::GetProxyManager(); - pxm->UnRegisterProxies(); -} + delete this->LinksModel; + this->LinksModel = 0; -//----------------------------------------------------------------------------- -void pqApplicationCore::setLookupTableManager(pqLookupTableManager* mgr) -{ - this->Internal->LookupTableManager = mgr; -} + delete this->ObjectBuilder; + this->ObjectBuilder = 0; -//----------------------------------------------------------------------------- -pqLookupTableManager* pqApplicationCore::getLookupTableManager() const -{ - return this->Internal->LookupTableManager; -} + delete this->ProgressManager; + this->ProgressManager = 0; -//----------------------------------------------------------------------------- -void pqApplicationCore::setUndoStack(pqUndoStack* stack) -{ - this->Internal->UndoStack = stack; -} + delete this->ServerManagerModel; + this->ServerManagerModel = 0; -//----------------------------------------------------------------------------- -pqUndoStack* pqApplicationCore::getUndoStack() const -{ - return this->Internal->UndoStack; -} + delete this->ServerManagerObserver; + this->ServerManagerObserver = 0; -//----------------------------------------------------------------------------- -pqObjectBuilder* pqApplicationCore::getObjectBuilder() const -{ - return this->Internal->ObjectBuilder; -} + delete this->SelectionModel; + this->SelectionModel = 0; -//----------------------------------------------------------------------------- -pqServerManagerObserver* pqApplicationCore::getServerManagerObserver() -{ - return this->Internal->ServerManagerObserver; -} -//----------------------------------------------------------------------------- -pqServerManagerModel* pqApplicationCore::getServerManagerModel() const -{ - return this->Internal->ServerManagerModel; -} + delete this->ServerResources; + this->ServerResources = 0; -//----------------------------------------------------------------------------- -pq3DWidgetFactory* pqApplicationCore::get3DWidgetFactory() -{ - return this->Internal->WidgetFactory; -} + delete this->Settings; + this->Settings = 0; -//----------------------------------------------------------------------------- -pqServerManagerSelectionModel* pqApplicationCore::getSelectionModel() -{ - return this->Internal->SelectionModel; -} + + // We don't call delete on these since we have already setup parent on these + // correctly so they will be deleted. It's possible that the user calls delete + // on these explicitly in which case we end up with segfaults. + this->LookupTableManager = 0; + this->DisplayPolicy = 0; + this->UndoStack = 0; + + // Delete all children, which clears up all managers etc. before the server + // manager application is finalized. + delete this->Internal; -//----------------------------------------------------------------------------- -pqLinksModel* pqApplicationCore::getLinksModel() -{ - return &this->Internal->LinksModel; + delete this->TestUtility; + + if (pqApplicationCore::Instance == this) + { + pqApplicationCore::Instance = 0; + } + + if (this->FinalizeOnExit) + { + vtkInitializationHelper::Finalize(); + } + vtkOutputWindow::SetInstance(NULL); + delete this->OutputWindow; + this->OutputWindow = NULL; + this->OutputWindowAdapter->Delete(); + this->OutputWindowAdapter= 0; } //----------------------------------------------------------------------------- -pqPluginManager* pqApplicationCore::getPluginManager() +void pqApplicationCore::createOutputWindow() { - return this->Internal->PluginManager; + // Set up error window. + pqOutputWindowAdapter* owAdapter = pqOutputWindowAdapter::New(); + qInstallMsgHandler(::QtMessageOutput); + this->OutputWindow = new pqOutputWindow(0); + this->OutputWindow->setAttribute(Qt::WA_QuitOnClose, false); + this->OutputWindow->connect(owAdapter, + SIGNAL(displayText(const QString&)), SLOT(onDisplayText(const QString&))); + this->OutputWindow->connect(owAdapter, + SIGNAL(displayErrorText(const QString&)), SLOT(onDisplayErrorText(const QString&))); + this->OutputWindow->connect(owAdapter, + SIGNAL(displayWarningText(const QString&)), SLOT(onDisplayWarningText(const QString&))); + this->OutputWindow->connect(owAdapter, + SIGNAL(displayGenericWarningText(const QString&)), + SLOT(onDisplayGenericWarningText(const QString&))); + vtkOutputWindow::SetInstance(owAdapter); + this->OutputWindowAdapter = owAdapter; + } //----------------------------------------------------------------------------- -pqProgressManager* pqApplicationCore::getProgressManager() const +void pqApplicationCore::setLookupTableManager(pqLookupTableManager* mgr) { - return this->Internal->ProgressManager; + this->LookupTableManager = mgr; + if (mgr) + { + mgr->setParent(this); + } } //----------------------------------------------------------------------------- -void pqApplicationCore::setDisplayPolicy(pqDisplayPolicy* policy) +void pqApplicationCore::setUndoStack(pqUndoStack* stack) { - this->Internal->DisplayPolicy = policy; + if (stack != this->UndoStack) + { + this->UndoStack = stack; + if (stack) + { + stack->setParent(this); + } + emit this->undoStackChanged(stack); + } } //----------------------------------------------------------------------------- -pqDisplayPolicy* pqApplicationCore::getDisplayPolicy() const +void pqApplicationCore::setDisplayPolicy(pqDisplayPolicy* policy) { - return this->Internal->DisplayPolicy; + delete this->DisplayPolicy; + this->DisplayPolicy = policy; + if (policy) + { + policy->setParent(this); + } } //----------------------------------------------------------------------------- @@ -420,67 +482,74 @@ QObject* pqApplicationCore::manager(const QString& function) } //----------------------------------------------------------------------------- -void pqApplicationCore::setStateLoader(vtkSMStateLoader* loader) +void pqApplicationCore::saveState(const QString& filename) { - this->Internal->StateLoader = loader; + // * Save the Proxy Manager state. + vtkSMProxyManager::GetProxyManager()->SaveState(filename.toAscii().data()); } //----------------------------------------------------------------------------- -void pqApplicationCore::saveState(vtkPVXMLElement* rootElement) +vtkPVXMLElement* pqApplicationCore::saveState() { // * Save the Proxy Manager state. - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); // Eventually proxy manager will save state for each connection separately. // For now, we only have one connection, so simply save it. - vtkPVXMLElement* smState = pxm->SaveState(); - rootElement->AddNestedElement(smState); - smState->Delete(); - + return pxm->SaveState(); } //----------------------------------------------------------------------------- -void pqApplicationCore::loadState(vtkPVXMLElement* rootElement, - pqServer* server, vtkSMStateLoader* arg_loader/*=NULL*/) +void pqApplicationCore::loadState(const char* filename, pqServer* server) { - if (!server || !rootElement) + if (!server || !filename) { return ; } - vtkSmartPointer<vtkSMStateLoader> loader = arg_loader; - if (!loader) + QList<pqView*> current_views = + this->ServerManagerModel->findItems<pqView*>(server); + foreach (pqView* view, current_views) { - loader = this->Internal->StateLoader; + this->ObjectBuilder->destroy(view); } - if (!loader) + // FIXME: this->LoadingState cannot be relied upon. + this->LoadingState = true; + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + pxm->LoadState(filename, server->GetConnectionID()); + this->LoadingState = false; +} + +//----------------------------------------------------------------------------- +void pqApplicationCore::loadState( + vtkPVXMLElement* rootElement, pqServer* server) +{ + if (!server || !rootElement) { - // Create a default server manager state loader. - // Since server manager state loader does not handle - // any elements except "ServerManagerState", - // we make that the root element. - loader.TakeReference(vtkSMPQStateLoader::New()); - rootElement = pqXMLUtil::FindNestedElementByName(rootElement, - "ServerManagerState"); + return ; } QList<pqView*> current_views = - this->Internal->ServerManagerModel->findItems<pqView*>(server); + this->ServerManagerModel->findItems<pqView*>(server); foreach (pqView* view, current_views) { - this->Internal->ObjectBuilder->destroy(view); + this->ObjectBuilder->destroy(view); } + // FIXME: this->LoadingState cannot be relied upon. this->LoadingState = true; + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + pxm->LoadState(rootElement, server->GetConnectionID()); + this->LoadingState = false; +} + +//----------------------------------------------------------------------------- +void pqApplicationCore::onStateLoaded( + vtkPVXMLElement* root, vtkSMProxyLocator* locator) +{ + emit this->stateLoaded(root, locator); - if (rootElement) - { - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - pxm->LoadState(rootElement, server->GetConnectionID(), loader); - loader->GetProxyLocator()->Clear(); - } pqEventDispatcher::processEventsAndWait(1); // This is essential since it's possible that the AnimationTime property on @@ -492,150 +561,162 @@ void pqApplicationCore::loadState(vtkPVXMLElement* rootElement, { scene->getProxy()->UpdateProperty("AnimationTime", 1); } - this->render(); - this->LoadingState = false; - emit this->stateLoaded(); +} + +//----------------------------------------------------------------------------- +void pqApplicationCore::onStateSaved(vtkPVXMLElement* root) +{ + if (!QApplication::applicationName().isEmpty()) + { + // Change root element to match the application name. + QString valid_name = + QApplication::applicationName().replace(QRegExp("\\W"), "_"); + root->SetName(valid_name.toAscii().data()); + } + emit this->stateSaved(root); } //----------------------------------------------------------------------------- pqServerResources& pqApplicationCore::serverResources() { - if(!this->Internal->ServerResources) + if(!this->ServerResources) { - this->Internal->ServerResources = new pqServerResources(this); - this->Internal->ServerResources->load(*this->settings()); + this->ServerResources = new pqServerResources(this); + this->ServerResources->load(*this->settings()); } - return *this->Internal->ServerResources; + return *this->ServerResources; } //----------------------------------------------------------------------------- void pqApplicationCore::setServerResources( pqServerResources* aserverResources) { - this->Internal->ServerResources = aserverResources; - if(this->Internal->ServerResources) + this->ServerResources = aserverResources; + if(this->ServerResources) { - this->Internal->ServerResources->load(*this->settings()); + this->ServerResources->load(*this->settings()); } } //----------------------------------------------------------------------------- pqServerStartups& pqApplicationCore::serverStartups() { - if(!this->Internal->ServerStartups) + if(!this->ServerStartups) { - this->Internal->ServerStartups = new pqServerStartups(this); + this->ServerStartups = new pqServerStartups(this); } - return *this->Internal->ServerStartups; + return *this->ServerStartups; } //----------------------------------------------------------------------------- pqSettings* pqApplicationCore::settings() { - if ( !this->Internal->Settings ) + if ( !this->Settings ) { pqOptions* options = pqOptions::SafeDownCast( vtkProcessModule::GetProcessModule()->GetOptions()); if (options && options->GetDisableRegistry()) { - this->Internal->Settings = new pqSettings(QApplication::organizationName(), + this->Settings = new pqSettings(QApplication::organizationName(), QApplication::applicationName() + ".DisabledRegistry", this); - this->Internal->Settings->clear(); + this->Settings->clear(); } else { - this->Internal->Settings = new pqSettings(QApplication::organizationName(), + this->Settings = new pqSettings(QApplication::organizationName(), QApplication::applicationName(), this); } } - return this->Internal->Settings; + return this->Settings; } //----------------------------------------------------------------------------- -void pqApplicationCore::setApplicationName(const QString& an) +void pqApplicationCore::render() { - QApplication::setApplicationName(an); + QList<pqView*> list = + this->ServerManagerModel->findItems<pqView*>(); + foreach(pqView* view, list) + { + view->render(); + } } //----------------------------------------------------------------------------- -QString pqApplicationCore::applicationName() +pqServer* pqApplicationCore::getActiveServer() const { - return QApplication::applicationName(); + pqServerManagerModel* smmodel = this->getServerManagerModel(); + return smmodel->getItemAtIndex<pqServer*>(0); } //----------------------------------------------------------------------------- -void pqApplicationCore::setOrganizationName(const QString& on) +void pqApplicationCore::quit() { - QApplication::setOrganizationName(on); + // As tempting as it is to connect this slot to + // aboutToQuit() signal, it doesn;t work since that signal is not + // fired until the event loop exits, which doesn't happen until animation + // stops playing. + QList<pqAnimationScene*> scenes = + this->getServerManagerModel()->findItems<pqAnimationScene*>(); + foreach (pqAnimationScene* scene, scenes) + { + scene->pause(); + } + QCoreApplication::instance()->quit(); } //----------------------------------------------------------------------------- -QString pqApplicationCore::organizationName() +void pqApplicationCore::showOutputWindow() { - return QApplication::organizationName(); + this->OutputWindow->show(); + this->OutputWindow->raise(); + this->OutputWindow->activateWindow(); } //----------------------------------------------------------------------------- -void pqApplicationCore::render() +void pqApplicationCore::disableOutputWindow() { - QList<pqView*> list = - this->Internal->ServerManagerModel->findItems<pqView*>(); - foreach(pqView* view, list) - { - view->render(); - } + this->OutputWindowAdapter->setActive(false); } //----------------------------------------------------------------------------- -void pqApplicationCore::prepareProgress() +void pqApplicationCore::loadConfiguration(const QString& filename) { - if (this->Internal->ProgressManager) + QFile xml(filename); + if (!xml.open(QIODevice::ReadOnly)) { - this->Internal->ProgressManager->setEnableProgress(true); + qCritical() << "Failed to load " << filename; + return; } -} -//----------------------------------------------------------------------------- -void pqApplicationCore::cleanupPendingProgress() -{ - if (this->Internal->ProgressManager) + QByteArray dat = xml.readAll(); + vtkSmartPointer<vtkPVXMLParser> parser = + vtkSmartPointer<vtkPVXMLParser>::New(); + if (!parser->Parse(dat.data())) { - this->Internal->ProgressManager->setEnableProgress(false); + xml.close(); + return; } -} -//----------------------------------------------------------------------------- -void pqApplicationCore::sendProgress(const char* name, int value) -{ - QString message = name; - if (this->Internal->ProgressManager) - { - this->Internal->ProgressManager->setProgress(message, value); - } -} + vtkPVXMLElement* root = parser->GetRootElement(); + + // Load configuration files for server manager components since they don't + // listen to Qt signals. + vtkSMProxyManager::GetProxyManager()->GetReaderFactory()-> + LoadConfiguration(root); + vtkSMProxyManager::GetProxyManager()->GetWriterFactory()-> + LoadConfiguration(root); -//----------------------------------------------------------------------------- -pqServer* pqApplicationCore::getActiveServer() const -{ - pqServerManagerModel* smmodel = this->getServerManagerModel(); - return smmodel->getItemAtIndex<pqServer*>(0); + emit this->loadXML(root); } //----------------------------------------------------------------------------- -void pqApplicationCore::quit() +pqTestUtility* pqApplicationCore::testUtility() { - // As tempting as it is to connect this slot to - // aboutToQuit() signal, it doesn;t work since that signal is not - // fired until the event loop exits, which doesn't happen until animation - // stops playing. - QList<pqAnimationScene*> scenes = - this->getServerManagerModel()->findItems<pqAnimationScene*>(); - foreach (pqAnimationScene* scene, scenes) + if (!this->TestUtility) { - scene->pause(); + this->TestUtility = new pqCoreTestUtility(this); } - QCoreApplication::instance()->quit(); + return this->TestUtility; } - diff --git a/Qt/Core/pqApplicationCore.h b/Qt/Core/pqApplicationCore.h index 16cdaf516e..e64582f66b 100644 --- a/Qt/Core/pqApplicationCore.h +++ b/Qt/Core/pqApplicationCore.h @@ -33,21 +33,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define __pqApplicationCore_h #include "pqCoreExport.h" +#include "vtkSetGet.h" // for VTK_LEGACY macro #include <QObject> +#include <QPointer> class pq3DWidgetFactory; -class pqApplicationCoreInternal; class pqDisplayPolicy; -class vtkSMGlobalPropertiesManager; class pqLinksModel; -class pqLookmarkManagerModel; class pqLookupTableManager; class pqObjectBuilder; -class pqPendingDisplayManager; +class pqOptions; +class pqOutputWindow; +class pqOutputWindowAdapter; class pqPipelineSource; class pqPluginManager; class pqProgressManager; -class pqRenderViewModule; class pqServer; class pqServerManagerModel; class pqServerManagerObserver; @@ -56,20 +56,22 @@ class pqServerResource; class pqServerResources; class pqServerStartups; class pqSettings; +class pqTestUtility; class pqUndoStack; +class QApplication; +class QStringList; class vtkPVXMLElement; -class vtkSMStateLoader; +class vtkSMGlobalPropertiesManager; +class vtkSMProxyLocator; /// This class is the crux of the ParaView application. It creates -/// and manages various managers which are necessary for the PQClient -/// to work with the ServerManager. The functionality implemented by -/// this class itself should be kept minimal. It should typically use -/// delegates to do all the work. This class is merely the toolbox -/// to look for anything of interest. -/// This class also must be free of actual GUI element i.e. QWidget -/// (and subclasses) probably don't belong here. This will make it -/// it possible for the GUI to change isolated from the core (hopefully). - +/// and manages various managers which are necessary for the ParaView-based +/// client to work with the ServerManager. +/// For clients based of the pqCore library, +/// simply instantiate this pqApplicationCore after QApplication initialization +/// and then create your main window etc. like a standard Qt application. You can then +/// use the facilities provided by pqCore such as the pqObjectBuilder, +/// pqUndoStack etc. in your application. After that point. class PQCORE_EXPORT pqApplicationCore : public QObject { Q_OBJECT @@ -77,27 +79,39 @@ public: // Get the global instace for the pqApplicationCore. static pqApplicationCore* instance(); - pqApplicationCore(QObject* parent=NULL); - virtual ~pqApplicationCore(); + /// DEPRECATED CONSTRUCTOR. This expects the old-style + /// pqProcessModuleGUIHelper shebang. Only here till all application switch to + /// new style. + /// @deprecated Use pqApplicationCore(int, char**, pqOptions*, QObject*) + /// instead which uses the new style application initialization process. + VTK_LEGACY(pqApplicationCore(QObject* parentObject=NULL)); + + /// Preferred constructor. Initializes the server-manager engine and sets up + /// the core functionality. If application supports special command line + /// options, pass an instance of pqOptions subclass to the constructor, + /// otherwise a new instance of pqOptions with standard ParaView command line + /// options will be created. + pqApplicationCore(int& argc, char** argv, pqOptions* options=0, QObject* parent=0); + + /// Dangerous option that disables the debug output window, intended for + /// demo purposes only + void disableOutputWindow(); + + /// Provides access to the command line options object. + pqOptions* getOptions() const + { return this->Options; } /// Get the Object Builder. Object Buider must be used /// to create complex objects such as sources, filters, /// readers, views, displays etc. - pqObjectBuilder* getObjectBuilder() const; - - /// Set/Get the application undo stack. - /// No undo stack is set up by default. The application - /// must create and set one if it should support undo/redo - /// operations. - /// I'd really like the application core not reference the - /// the undo stack at all. However, time and again we have - /// some widget somewhere in the GUI that needs access to the undo - /// stack. It's a pain to provide the undo stack to evety such deep - /// widget, hence we provide this access location. - /// Everyone using getUndoStack() must handle the case - /// when this method returns NULL. + pqObjectBuilder* getObjectBuilder() const + { return this->ObjectBuilder; } + + /// Set/Get the application's central undo stack. By default no undo stack is + /// provided. Applications must set on up as required. void setUndoStack(pqUndoStack* stack); - pqUndoStack* getUndoStack() const; + pqUndoStack* getUndoStack() const + { return this->UndoStack; } /// Custom Applications may need use various "managers" /// All such manager can be registered with the pqApplicationCore @@ -121,80 +135,91 @@ public: /// for changes to the server manager and fires signals on /// certain actions such as registeration/unregistration of proxies /// etc. Returns the ServerManagerObserver used by the application. - pqServerManagerObserver* getServerManagerObserver(); + pqServerManagerObserver* getServerManagerObserver() + { return this->ServerManagerObserver; } /// ServerManagerModel is the representation of the ServerManager /// using pqServerManagerModelItem subclasses. It makes it possible to /// explore the ServerManager with ease by separating proxies based /// on their functionality/type. - pqServerManagerModel* getServerManagerModel() const; - - pq3DWidgetFactory* get3DWidgetFactory(); - pqLinksModel* getLinksModel(); - pqPluginManager* getPluginManager(); - - /// ProgressManager is the manager that streamlines progress. - pqProgressManager* getProgressManager() const; + pqServerManagerModel* getServerManagerModel() const + { return this->ServerManagerModel; } - // Returns the display policy instance used by the application. - // pqDisplayPolicy defines the policy for creating displays - // given a (source,view) pair. - pqDisplayPolicy* getDisplayPolicy() const; + pq3DWidgetFactory* get3DWidgetFactory() const + { return this->WidgetFactory; } - // It is possible to change the display policy used by - // the application. Used to change the active display - // policy. - void setDisplayPolicy(pqDisplayPolicy*); + /// pqLinksModel is the model used to keep track of proxy/property links + /// maintained by vtkSMProxyManager. + /// TODO: It may be worthwhile to investigate if we even need a global + /// pqLinksModel. All the information is already available in + /// vtkSMProxyManager. + pqLinksModel* getLinksModel() const + { return this->LinksModel; } - // Returns the server manager selection model. - pqServerManagerSelectionModel* getSelectionModel(); + /// pqPluginManager manages all functionality associated with loading plugins. + pqPluginManager* getPluginManager() const + { return this->PluginManager; } - // Set/Get the lookup table manager. + /// ProgressManager is the manager that streamlines progress. + pqProgressManager* getProgressManager() const + { return this->ProgressManager; } + + //// Returns the display policy instance used by the application. + //// pqDisplayPolicy defines the policy for creating representations + //// for sources. + pqDisplayPolicy* getDisplayPolicy() const + { return this->DisplayPolicy; } + + /// It is possible to change the display policy used by + /// the application. Used to change the active display + /// policy. The pqApplicationCore takes over the ownership of the display policy. + void setDisplayPolicy(pqDisplayPolicy* dp); + + /// Returns the server manager selection model which keeps track of the active + /// sources/filters. + pqServerManagerSelectionModel* getSelectionModel() + { return this->SelectionModel; } + + /// Provides access to the test utility. + virtual pqTestUtility* testUtility(); + + /// Set/Get the lookup table manager. Lookup table manager is used to manage + /// lookup tables used for coloring using data arrays. + /// policy. The pqApplicationCore takes over the ownership of the manager. void setLookupTableManager(pqLookupTableManager*); - pqLookupTableManager* getLookupTableManager() const; + pqLookupTableManager* getLookupTableManager() const + { return this->LookupTableManager; } - /// Save the ServerManager state. - void saveState(vtkPVXMLElement* root); - - /// Loads the ServerManager state. Emits the signal - /// stateLoaded() on loading state successfully. - void loadState(vtkPVXMLElement* root, pqServer* server, - vtkSMStateLoader* loader=NULL); + /// Returns the manager for the global properties such as ForegroundColor etc. + vtkSMGlobalPropertiesManager* getGlobalPropertiesManager(); /// Returns the set of available server resources pqServerResources& serverResources(); /// Set server resources void setServerResources(pqServerResources* serverResources); - /// Returns an object that can start remote servers pqServerStartups& serverStartups(); /// Get the application settings. pqSettings* settings(); - /// Set/get the application name for the application settings. - void setApplicationName(const QString&); - QString applicationName(); - - /// Set/get the organization name for the application settngs. - void setOrganizationName(const QString&); - QString organizationName(); - - /// Renders all windows - void render(); + /// Save the ServerManager state. + vtkPVXMLElement* saveState(); + void saveState(const QString& filename); - /// Set the application specific state loader to use - /// while loading states, if any. This is used - /// only when loadState is called with loader=NULL. - void setStateLoader(vtkSMStateLoader* loader); + /// Loads the ServerManager state. Emits the signal + /// stateLoaded() on loading state successfully. + void loadState(vtkPVXMLElement* root, pqServer* server); + void loadState(const char* filename, pqServer* server); - // Check to see if its in the process of loading a state + /// Check to see if its in the process of loading a state + /// Reliance on this flag is chimerical since we cannot set this ivar when + /// state file is being loaded from python shell. bool isLoadingState(){return this->LoadingState;}; - /// Returns the manager for the global properties such as ForegroundColor etc. - vtkSMGlobalPropertiesManager* getGlobalPropertiesManager(); - /// Loads global properties values from settings. + /// HACK: Need more graceful way of dealing with changes to settings and + /// updating items that depend on it. void loadGlobalPropertiesFromSettings(); /// loads palette i.e. global property values given the name of the palette. @@ -211,7 +236,9 @@ public: /// returns the active server is any. pqServer* getActiveServer() const; - + + /// Destructor. + virtual ~pqApplicationCore(); public slots: /// Called QCoreApplication::quit(). /// Applications should use this method instead of directly @@ -219,28 +246,70 @@ public slots: /// that any cleanup is performed correctly. void quit(); + /// Causes the output window to be shown. + void showOutputWindow(); + + /// Load configuration xml. This results in firing of the loadXML() signal + /// which different components that support configuration catch and process to + /// update their behavior. + void loadConfiguration(const QString& filename); + + /// Renders all windows + void render(); + signals: // Fired when a state file is loaded successfully. - void stateLoaded(); + // GUI components that may have state saved in the XML state file must listen + // to this signal and handle process the XML to update their state. + void stateLoaded(vtkPVXMLElement* root, vtkSMProxyLocator* locator); -protected: - - friend class pqProcessModuleGUIHelper; + // Fired to save state xml. Components that need to save XML state should + // listen to this signal and add their XML elements to the root. DO NOT MODIFY + // THE ROOT besides adding new children. + void stateSaved(vtkPVXMLElement* root); - /// called to start accepting progress. - void prepareProgress(); + /// Fired when the undo stack is set. + void undoStackChanged(pqUndoStack*); - /// called to stop accepting progress. - void cleanupPendingProgress(); + /// Fired on loadConfiguration(). + void loadXML(vtkPVXMLElement*); - /// called to udpate progress. - void sendProgress(const char* name, int value); +protected slots: + void onStateLoaded(vtkPVXMLElement* root, vtkSMProxyLocator* locator); + void onStateSaved(vtkPVXMLElement* root); +protected: bool LoadingState; + pqOutputWindow* OutputWindow; + pqOutputWindowAdapter* OutputWindowAdapter; + pqOptions* Options; + + pq3DWidgetFactory* WidgetFactory; + pqDisplayPolicy* DisplayPolicy; + pqLinksModel* LinksModel; + pqLookupTableManager* LookupTableManager; + pqObjectBuilder* ObjectBuilder; + pqPluginManager* PluginManager; + pqProgressManager* ProgressManager; + pqServerManagerModel* ServerManagerModel; + pqServerManagerObserver* ServerManagerObserver; + pqServerManagerSelectionModel* SelectionModel; + pqUndoStack* UndoStack; + pqServerResources* ServerResources; + pqServerStartups* ServerStartups; + pqSettings* Settings; + QPointer<pqTestUtility> TestUtility; + private: - pqApplicationCoreInternal* Internal; + Q_DISABLE_COPY(pqApplicationCore) + + class pqInternals; + pqInternals* Internal; static pqApplicationCore* Instance; + void constructor(); + void createOutputWindow(); + bool FinalizeOnExit; }; #endif diff --git a/Qt/Core/pqBrandPluginsLoader.cxx b/Qt/Core/pqBrandPluginsLoader.cxx new file mode 100644 index 0000000000..982a4d4874 --- /dev/null +++ b/Qt/Core/pqBrandPluginsLoader.cxx @@ -0,0 +1,118 @@ +/*========================================================================= + + Program: ParaView + Module: pqBrandPluginsLoader.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 "pqBrandPluginsLoader.h" + +#include "pqApplicationCore.h" +#include "pqPluginManager.h" + +#include <QApplication> +#include <QDebug> +#include <QDir> +#include <QFileInfo> + +#include "vtkObjectBase.h" + +//----------------------------------------------------------------------------- +pqBrandPluginsLoader::pqBrandPluginsLoader(QObject* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +static QString locatePlugin(const QStringList& paths, const QString& name) +{ + QString filename; +#if defined(Q_WS_WIN) + filename = name + ".dll"; +#elif defined(Q_WS_MAC) + filename = "lib" + name + ".dylib"; +#else + filename = "lib" + name + ".so"; +#endif + foreach (QString path, paths) + { + QFileInfo info(path + "/" + filename); + if (info.exists() && info.isReadable()) + { + return (path + "/" + filename); + } + } + return QString(); +} + +//----------------------------------------------------------------------------- +bool pqBrandPluginsLoader::loadPlugins(const QStringList& plugins, + bool skip_missing_plugins) +{ + pqPluginManager* pluginManager = + pqApplicationCore::instance()->getPluginManager(); + + // with "/" as the separator on all platforms. + QString app_dir = + QDir::fromNativeSeparators(QApplication::applicationDirPath()); + + foreach (QString plugin, plugins) + { + QStringList paths_to_search; + paths_to_search << app_dir; + paths_to_search << app_dir + "/plugins/" + plugin; +#if defined(Q_WS_MAC) + paths_to_search << app_dir + "/../Plugins"; + paths_to_search << app_dir + "/../../.." ; +#endif + QString plugin_library = locatePlugin(paths_to_search, plugin); + if (plugin_library.isEmpty()) + { + if (skip_missing_plugins) + { + continue; + } + qDebug() << "Failed to locate plugin: " << plugin; + } + else if (pluginManager->loadExtension(NULL, plugin_library) == + pqPluginManager::NOTLOADED) + { + if (skip_missing_plugins) + { + continue; + } + qCritical() << "Failed to load plugin: " << plugin; + return false; + } + else + { + cout << "Loaded plugin: " << plugin_library.toAscii().data() << endl; + } + } + return true; +} + diff --git a/Qt/Core/pqBrandPluginsLoader.h b/Qt/Core/pqBrandPluginsLoader.h new file mode 100644 index 0000000000..41bfcb2a8b --- /dev/null +++ b/Qt/Core/pqBrandPluginsLoader.h @@ -0,0 +1,71 @@ +/*========================================================================= + + Program: ParaView + Module: pqBrandPluginsLoader.h + + 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. + +========================================================================*/ +#ifndef __pqBrandPluginsLoader_h +#define __pqBrandPluginsLoader_h + +#include <QObject> +#include "pqCoreExport.h" + +class QStringList; + +/// pqBrandPluginsLoader is used to load the plugins required to be loaded at +/// the start of a ParaView-based application, if any. Given the list of plugin +/// names, it tries to locate and load them during the application +/// initialization process. You need to use this class only if you are +/// writing a custom main. +class PQCORE_EXPORT pqBrandPluginsLoader : public QObject +{ + Q_OBJECT + typedef QObject Superclass; +public: + pqBrandPluginsLoader(QObject* parent=0); + + /// Called at startup to load required list of plugins to be loaded on + /// startup. Typically this method is called after the MainWindow has been + /// created but before the event loop is started and before the GUI + /// configuration XMLs, if any, are loaded. + /// The argument is a list of plugin-names (without platform specific + /// extensions or path). + /// The locations where the plugin is searched for are as follows in the + /// given order: + /// \li executable-dir (for Mac *.app, it's the app dir) + /// \li executable-dir/plugins/pluginname + /// \li *.app/Contents/Plugins/ (for Mac) + bool loadPlugins(const QStringList& plugins, bool skip_missing_plugins=false); + +private: + Q_DISABLE_COPY(pqBrandPluginsLoader) +}; + +#endif + + diff --git a/Qt/Core/pqChartView.cxx b/Qt/Core/pqChartView.cxx index e461a0bb36..871112aadc 100644 --- a/Qt/Core/pqChartView.cxx +++ b/Qt/Core/pqChartView.cxx @@ -256,7 +256,7 @@ bool pqChartView::canDisplay(pqOutputPort* opPort) const return true; } - vtkPVDataInformation* dataInfo = opPort->getDataInformation(true); + vtkPVDataInformation* dataInfo = opPort->getDataInformation(); return (dataInfo && dataInfo->DataSetTypeIsA("vtkTable")); } diff --git a/Qt/Core/pqCoreInit.cxx b/Qt/Core/pqCoreInit.cxx index 39db1ac585..1b51b9b1af 100644 --- a/Qt/Core/pqCoreInit.cxx +++ b/Qt/Core/pqCoreInit.cxx @@ -39,6 +39,7 @@ void pqCoreInit() #ifndef PARAVIEW_BUILD_SHARED_LIBS Q_INIT_RESOURCE(pqCore); Q_INIT_RESOURCE(QtWidgets); + Q_INIT_RESOURCE(pqCoreTesting); Q_IMPORT_PLUGIN(QtWidgets); #endif } diff --git a/Qt/Core/pqCoreTestUtility.cxx b/Qt/Core/pqCoreTestUtility.cxx index 3d33c3d667..f1ae662ec7 100644 --- a/Qt/Core/pqCoreTestUtility.cxx +++ b/Qt/Core/pqCoreTestUtility.cxx @@ -216,34 +216,6 @@ bool pqCoreTestUtility::CompareImage(vtkImageData* testImage, return false; } -void pqCoreTestUtility::playTests(const QStringList& filenames) -{ - this->TestFilenames = filenames; - if (this->TestFilenames.size() > 0) - { - QString filename = this->TestFilenames[0]; - this->TestFilenames.pop_front(); - this->pqTestUtility::playTests(filename); - } - else - { - this->testSucceeded(); - } -} - -void pqCoreTestUtility::playTests(const QString& filename) -{ - this->TestFilenames.clear(); - if(!filename.isEmpty()) - { - pqTestUtility::playTests(filename); - } - else - { - this->testSucceeded(); - } -} - QString pqCoreTestUtility::TestDirectory() { if (pqOptions* const options = pqOptions::SafeDownCast( @@ -254,50 +226,36 @@ QString pqCoreTestUtility::TestDirectory() return QString(); } -void pqCoreTestUtility::testSucceeded() + +void pqCoreTestUtility::testFinished(bool success) { - if (this->TestFilenames.size() > 0) - { - QString filename = this->TestFilenames[0]; - this->TestFilenames.pop_front(); - this->pqTestUtility::playTests(filename); - return; - } + + // OBSOLETE: This is obsolete code only here till old paraview and application + // are fixed. if(pqOptions* const options = pqOptions::SafeDownCast( - vtkProcessModule::GetProcessModule()->GetOptions()) - ) + vtkProcessModule::GetProcessModule()->GetOptions())) { // TODO: image comparisons probably ought to be done the same // way widget validation is done (when that gets implemented) // That is, check that the text of a QLineEdit is a certain value // Referencing a QVTKWidget can then be done the same way as referencing // any other widget, instead of relying on the "active" view. - bool comparison_succeeded = true; - if(options->GetBaselineImage()) - { - pqProcessModuleGUIHelper * helper; - helper = pqProcessModuleGUIHelper::SafeDownCast( - vtkProcessModule::GetProcessModule()->GetGUIHelper()); - - comparison_succeeded = helper->compareView(options->GetBaselineImage(), - options->GetImageThreshold(), cout, options->GetTestDirectory()); - } - - if(options->GetExitAppWhenTestsDone()) - { - QApplication::instance()->exit(comparison_succeeded ? 0 : 1); - } - } -} - -void pqCoreTestUtility::testFailed() -{ - if(pqOptions* const options = pqOptions::SafeDownCast( - vtkProcessModule::GetProcessModule()->GetOptions())) - { - if(options->GetExitAppWhenTestsDone()) + pqProcessModuleGUIHelper * helper = pqProcessModuleGUIHelper::SafeDownCast( + vtkProcessModule::GetProcessModule()->GetGUIHelper()); + if (helper) { - QApplication::instance()->exit(1); + if (success) + { + if(options->GetBaselineImage()) + { + success = helper->compareView(options->GetBaselineImage(), + options->GetImageThreshold(), cout, options->GetTestDirectory()); + } + } + if(options->GetExitAppWhenTestsDone()) + { + QApplication::instance()->exit(success? 0 : 1); + } } } } diff --git a/Qt/Core/pqCoreTestUtility.h b/Qt/Core/pqCoreTestUtility.h index f43a9a77d2..1b7e01f593 100644 --- a/Qt/Core/pqCoreTestUtility.h +++ b/Qt/Core/pqCoreTestUtility.h @@ -41,7 +41,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. class QString; class pqEventPlayer; class pqEventTranslator; -class pqProcessModuleGUIHelper; class vtkRenderWindow; class vtkImageData; @@ -49,11 +48,19 @@ class vtkImageData; class PQCORE_EXPORT pqCoreTestUtility : public pqTestUtility { Q_OBJECT + typedef pqTestUtility Superclass; public: pqCoreTestUtility(QObject* parent = 0); ~pqCoreTestUtility(); + virtual bool playTests(const QStringList& filenames) + { + bool ret = this->Superclass::playTests(filenames); + this->testFinished(ret); + return ret; + } + public: /// Returns the absolute path to the PARAVIEW_DATA_ROOT in canonical form /// (slashes forward), or empty string @@ -83,13 +90,8 @@ public: ostream& Output, const QString& TempDirectory); -public slots: - void playTests(const QString& filename); - void playTests(const QStringList& filenames); - -protected slots: - void testSucceeded(); - void testFailed(); +private: + void testFinished(bool success); private: QStringList TestFilenames; diff --git a/Applications/Client/main.cxx b/Qt/Core/pqCoreUtilities.cxx similarity index 52% rename from Applications/Client/main.cxx rename to Qt/Core/pqCoreUtilities.cxx index 1548715305..6ef6c5c2d6 100644 --- a/Applications/Client/main.cxx +++ b/Qt/Core/pqCoreUtilities.cxx @@ -1,9 +1,9 @@ /*========================================================================= Program: ParaView - Module: main.cxx + Module: pqCoreUtilities.cxx - Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + Copyright (c) 2005,2006 Sandia Corporation, Kitware Inc. All rights reserved. ParaView is a free software; you can redistribute it and/or modify it @@ -28,62 +28,36 @@ 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 "pqCoreUtilities.h" +#include <QMainWindow> #include <QApplication> -#include <QDir> -#include "ProcessModuleGUIHelper.h" -#include "pqMain.h" -#include "pqComponentsInit.h" -#include "pqOptions.h" -#ifdef Q_WS_X11 -#include <QPlastiqueStyle> -#endif +QPointer<QWidget> pqCoreUtilities::MainWidget = 0; -int main(int argc, char* argv[]) +//----------------------------------------------------------------------------- +QWidget* pqCoreUtilities::findMainWindow() { - -#ifdef Q_WS_X11 - // Using motif style gives us test failures (and its ugly). - // Using cleanlooks style gives us errors when using valgrind (Trolltech's bug #179200) - // let's just use plastique for now - QApplication::setStyle(new QPlastiqueStyle); -#endif - - QApplication app(argc, argv); - - pqComponentsInit(); - - QDir dir(QApplication::applicationDirPath()); - dir.cdUp(); - dir.cd("Plugins"); - QApplication::addLibraryPath(dir.absolutePath()); - ProcessModuleGUIHelper * guiHelper = ProcessModuleGUIHelper::New(); - int appStatus = 0; - pqOptions * options = NULL; - int reply = pqMain::preRun(app, guiHelper, options); - if (! reply) + foreach (QWidget* widget, QApplication::topLevelWidgets()) { - reply = pqMain::Run(options); - if (! reply) - { - appStatus = app.exec(); - } - else + if (widget->isWindow() && widget->isVisible() && + qobject_cast<QMainWindow*>(widget)) { - return reply; + return widget; } - - reply = guiHelper->postAppExec(); } - pqMain::postRun(); - guiHelper->Delete(); - if (appStatus != 0) + // Find any window (even if not visible). + foreach (QWidget* widget, QApplication::topLevelWidgets()) { - return appStatus; + if (widget->isWindow() && qobject_cast<QMainWindow*>(widget)) + { + return widget; + } } - return reply; + + return NULL; } + diff --git a/Qt/Core/pqCoreUtilities.h b/Qt/Core/pqCoreUtilities.h new file mode 100644 index 0000000000..d1c98f36eb --- /dev/null +++ b/Qt/Core/pqCoreUtilities.h @@ -0,0 +1,69 @@ +/*========================================================================= + + Program: ParaView + Module: pqCoreUtilities.h + + 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. + +========================================================================*/ +#ifndef __pqCoreUtilities_h +#define __pqCoreUtilities_h + +#include "pqCoreExport.h" + +#include <QPointer> +#include <QWidget> + +/// pqCoreUtilities is a collection of arbitrary utility functions that can be +/// used by the application. +class PQCORE_EXPORT pqCoreUtilities +{ +public: + /// When popuping up dialogs, it's generally better if we set the parent + /// widget for those dialogs to be the QMainWindow so that the dialogs show up + /// centered correctly in the application. For that purpose this convenience + /// method is provided. It locates a QMainWindow and returns it. + static void setMainWidget(QWidget* widget) + { + pqCoreUtilities::MainWidget = widget; + } + static QWidget* mainWidget() + { + if (!pqCoreUtilities::MainWidget) + { + pqCoreUtilities::MainWidget = pqCoreUtilities::findMainWindow(); + } + return pqCoreUtilities::MainWidget; + } + +private: + static QWidget* findMainWindow(); + static QPointer<QWidget> MainWidget; +}; + +#endif + + diff --git a/Qt/Core/pqDataRepresentation.cxx b/Qt/Core/pqDataRepresentation.cxx index 29696bff66..16380cd8e7 100644 --- a/Qt/Core/pqDataRepresentation.cxx +++ b/Qt/Core/pqDataRepresentation.cxx @@ -32,6 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqDataRepresentation.h" #include "vtkEventQtSlotConnect.h" +#include "vtkPVDataInformation.h" #include "vtkSMDataRepresentationProxy.h" #include "vtkSMInputProperty.h" #include "vtkSMSourceProxy.h" @@ -208,6 +209,18 @@ unsigned long pqDataRepresentation::getFullResMemorySize() return 0; } +//----------------------------------------------------------------------------- +bool pqDataRepresentation::getDataBounds(double bounds[6]) +{ + vtkPVDataInformation* info = this->getRepresentedDataInformation(true); + if (!info) + { + return false; + } + info->GetBounds(bounds); + return true; +} + //----------------------------------------------------------------------------- vtkPVDataInformation* pqDataRepresentation::getRepresentedDataInformation( bool update/*=true*/) const diff --git a/Qt/Core/pqDataRepresentation.h b/Qt/Core/pqDataRepresentation.h index 925f69b8ca..5d7e817a3b 100644 --- a/Qt/Core/pqDataRepresentation.h +++ b/Qt/Core/pqDataRepresentation.h @@ -72,6 +72,10 @@ public: /// about the polydata forming the outline not the input dataset. vtkPVDataInformation* getRepresentedDataInformation(bool update=true) const; + /// Get the data bounds for the input of this display. + /// Returns if the operation was successful. + bool getDataBounds(double bounds[6]); + /// Returns the lookuptable proxy, if any. /// Most consumer displays take a lookup table. This method /// provides access to the Lookup table, if one exists. diff --git a/Qt/Core/pqDisplayPolicy.cxx b/Qt/Core/pqDisplayPolicy.cxx index be94736f85..78333c7b9f 100644 --- a/Qt/Core/pqDisplayPolicy.cxx +++ b/Qt/Core/pqDisplayPolicy.cxx @@ -121,11 +121,9 @@ QString pqDisplayPolicy::getPreferredViewType(pqOutputPort* opPort, return view_type; } - vtkPVDataInformation* datainfo = update_pipeline? - opPort->getDataInformation(true) : opPort->getCachedDataInformation(); + vtkPVDataInformation* datainfo = opPort->getDataInformation(); QString className = datainfo? datainfo->GetDataClassName() : QString(); - // * Check if we should create the 2D view. if ((className == "vtkImageData" || className == "vtkUniformGrid") && datainfo->GetCompositeDataClassName()==0) @@ -208,7 +206,7 @@ pqView* pqDisplayPolicy::getPreferredView( if (!currentView || (currentView && !currentView->canDisplay(opPort))) { - vtkPVDataInformation* info = opPort->getDataInformation(false); + vtkPVDataInformation* info = opPort->getDataInformation(); // GetDataSetType() == -1 signifies that there's no data to show. if (info->GetDataSetType() != -1) { @@ -253,8 +251,7 @@ pqDataRepresentation* pqDisplayPolicy::createPreferredRepresentation( // Simply create a display for the view set up the connections and // return. - pqDataRepresentation* display = pqApplicationCore::instance()-> - getObjectBuilder()->createDataRepresentation(opPort, view); + pqDataRepresentation* display = this->newRepresentation(opPort, view); // If this is the only source displayed in the view, reset the camera to make sure its visible if(view->getNumberOfVisibleRepresentations()==1) @@ -297,8 +294,7 @@ pqDataRepresentation* pqDisplayPolicy::setRepresentationVisibility( } if (view) { - repr = pqApplicationCore::instance()->getObjectBuilder()-> - createDataRepresentation(opPort, view); + repr = this->newRepresentation(opPort, view); } } if (!repr) @@ -352,7 +348,15 @@ pqDisplayPolicy::VisibilityState pqDisplayPolicy::getVisibility( } } - // Default behaviour if no view is present + // Default behavior if no view is present return Hidden; } + +//----------------------------------------------------------------------------- +pqDataRepresentation* pqDisplayPolicy::newRepresentation(pqOutputPort* port, + pqView* view) const +{ + return pqApplicationCore::instance()->getObjectBuilder()-> + createDataRepresentation(port, view); +} diff --git a/Qt/Core/pqDisplayPolicy.h b/Qt/Core/pqDisplayPolicy.h index 3e91bd1e20..658273dc84 100644 --- a/Qt/Core/pqDisplayPolicy.h +++ b/Qt/Core/pqDisplayPolicy.h @@ -83,7 +83,7 @@ public: /// </ul> /// or not of the type preferred by the source, it may create a new view and /// add the displayto new view. \c dont_create_view can be used to - /// override this behaviour. + /// override this behavior. virtual pqDataRepresentation* createPreferredRepresentation( pqOutputPort* port, pqView* view, bool dont_create_view) const; @@ -127,6 +127,10 @@ protected: /// type may be created and returned. A new 3D view will be created if the /// view has no preferred view type and the active view cannot show the data. virtual pqView* getPreferredView(pqOutputPort* opPort, pqView* view) const; + + /// Create a new representation. port and view cannot be null at this point. + virtual pqDataRepresentation* newRepresentation(pqOutputPort* port, + pqView* view) const; }; #endif diff --git a/Qt/Core/pqHelperProxyStateLoader.cxx b/Qt/Core/pqHelperProxyStateLoader.cxx new file mode 100644 index 0000000000..e0b3b905fa --- /dev/null +++ b/Qt/Core/pqHelperProxyStateLoader.cxx @@ -0,0 +1,161 @@ +/*========================================================================= + + Program: ParaView + Module: pqHelperProxyStateLoader.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 "pqHelperProxyStateLoader.h" + +#include "pqApplicationCore.h" +#include "pqProxy.h" +#include "pqServerManagerModel.h" +#include "vtkPVXMLElement.h" +#include "vtkSMProxyLocator.h" + +#include <QRegExp> + +//----------------------------------------------------------------------------- +pqHelperProxyStateLoader::pqHelperProxyStateLoader(QObject* parentObject) + : Superclass(parentObject) +{ +} + +//----------------------------------------------------------------------------- +bool pqHelperProxyStateLoader::loadState(vtkPVXMLElement* root, + vtkSMProxyLocator* locator) +{ + this->HelperProxyCollectionElements.clear(); + + if (root->GetName() && + strcmp(root->GetName(),"ServerManagerState") != 0) + { + root = root->FindNestedElementByName("ServerManagerState"); + } + else + { + root = NULL; + } + if (!root) + { + qCritical("Failed to locate <ServerManagerState /> element. " + "Cannot load server manager state."); + return false; + } + + unsigned int numElems = root->GetNumberOfNestedElements(); + unsigned int i; + for (i=0; i<numElems; i++) + { + vtkPVXMLElement* currentElement = root->GetNestedElement(i); + const char* name = currentElement->GetName(); + if (name) + { + if (strcmp(name, "ProxyCollection") == 0) + { + if (!this->buildProxyCollectionInformation(currentElement)) + { + return false; + } + } + } + } + this->discoverHelperProxies(locator); + this->HelperProxyCollectionElements.clear(); + return true; +} + +//----------------------------------------------------------------------------- +void pqHelperProxyStateLoader::discoverHelperProxies(vtkSMProxyLocator* locator) +{ + pqServerManagerModel* smmodel = + pqApplicationCore::instance()->getServerManagerModel(); + QRegExp helper_group_rx ("pq_helper_proxies.(\\d+)"); + + foreach(vtkPVXMLElement* proxyCollection, this->HelperProxyCollectionElements) + { + const char* groupname = proxyCollection->GetAttribute("name"); + if (helper_group_rx.indexIn(groupname) == -1) + { + continue; + } + int proxyid = helper_group_rx.cap(1).toInt(); + vtkSMProxy* proxy = locator->LocateProxy(proxyid); + pqProxy *pq_proxy = smmodel->findItem<pqProxy*>(proxy); + if (!pq_proxy) + { + continue; + } + unsigned int num_children = proxyCollection->GetNumberOfNestedElements(); + for (unsigned int cc=0; cc < num_children; cc++) + { + vtkPVXMLElement* child = proxyCollection->GetNestedElement(cc); + if (child->GetName() != QString("Item")) + { + continue; + } + const char* name = child->GetAttribute("name"); + int helperid; + if (!name || !child->GetScalarAttribute("id", &helperid)) + { + continue; + } + vtkSMProxy* helper = locator->LocateProxy(helperid); + if (helper) + { + pq_proxy->addHelperProxy(name, helper); + } + } + } + // TODO: unregister helper proxies from their old names and groups. +} + +//----------------------------------------------------------------------------- +int pqHelperProxyStateLoader::buildProxyCollectionInformation( + vtkPVXMLElement* collectionElement) +{ + const char* groupName = collectionElement->GetAttribute("name"); + if (!groupName) + { + qCritical("Required attribute name is missing."); + return 0; + } + + QRegExp helper_group_rx ("pq_helper_proxies.(\\d+)"); + if (helper_group_rx.indexIn(groupName) != -1) + { + // The collection is a pq_helper_proxies collection. + // We don't register these proxies directly again, instead + // we add them as helper proxies which will get registered + // while adding them as helper proxies to pqProxy objects. + this->HelperProxyCollectionElements.push_back(collectionElement); + } + return 1; +} + + + diff --git a/Qt/Components/pqPipelineBrowserStateManager.h b/Qt/Core/pqHelperProxyStateLoader.h similarity index 52% rename from Qt/Components/pqPipelineBrowserStateManager.h rename to Qt/Core/pqHelperProxyStateLoader.h index ec65fce909..ea0248218d 100644 --- a/Qt/Components/pqPipelineBrowserStateManager.h +++ b/Qt/Core/pqHelperProxyStateLoader.h @@ -1,14 +1,14 @@ /*========================================================================= Program: ParaView - Module: pqPipelineBrowserStateManager.h + Module: pqHelperProxyStateLoader.h - Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + 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,54 +28,42 @@ 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. -=========================================================================*/ - -/// \file pqPipelineBrowserStateManager.h -/// \date 1/10/2007 - -#ifndef _pqPipelineBrowserStateManager_h -#define _pqPipelineBrowserStateManager_h +========================================================================*/ +#ifndef __pqHelperProxyStateLoader_h +#define __pqHelperProxyStateLoader_h - -#include "pqComponentsExport.h" #include <QObject> +#include <QList> +#include "pqCoreExport.h" -class pqFlatTreeView; -class pqPipelineBrowserStateManagerInternal; -class pqPipelineModel; -class QModelIndex; class vtkPVXMLElement; +class vtkSMProxyLocator; - -/// \class pqPipelineBrowserStateManager -/// \brief -/// The pqPipelineBrowserStateManager class is used to save and -/// restore the view state. -class PQCOMPONENTS_EXPORT pqPipelineBrowserStateManager : public QObject +/// pqHelperProxyStateLoader is used by pqServerManagerModel to load state for +/// helper proxies. +class PQCORE_EXPORT pqHelperProxyStateLoader : public QObject { Q_OBJECT - + typedef QObject Superclass; public: - pqPipelineBrowserStateManager(QObject *parent=0); - virtual ~pqPipelineBrowserStateManager(); + pqHelperProxyStateLoader(QObject* parent=0); - void setModelAndView(pqPipelineModel *model, pqFlatTreeView *view); + /// Load helper proxy state. + bool loadState(vtkPVXMLElement* root, vtkSMProxyLocator* locator); - void saveState(vtkPVXMLElement *root) const; - void restoreState(vtkPVXMLElement *root); +private: + /// Overridden to process pq_helper_proxies groups. + int buildProxyCollectionInformation(vtkPVXMLElement*); -public slots: - void saveState(const QModelIndex &index); - void restoreState(const QModelIndex &index); + /// Finds helper proxies for any pqProxies and assigns them accordingly. + void discoverHelperProxies(vtkSMProxyLocator*); -private: - void saveState(const QModelIndex &index, vtkPVXMLElement *root) const; - void restoreState(const QModelIndex &index, vtkPVXMLElement *root); + QList<vtkPVXMLElement*> HelperProxyCollectionElements; private: - pqPipelineBrowserStateManagerInternal *Internal; - pqPipelineModel *Model; - pqFlatTreeView *View; + Q_DISABLE_COPY(pqHelperProxyStateLoader) }; #endif + + diff --git a/Qt/Core/pqObjectBuilder.cxx b/Qt/Core/pqObjectBuilder.cxx index e40b5f9bf9..b634f378a8 100644 --- a/Qt/Core/pqObjectBuilder.cxx +++ b/Qt/Core/pqObjectBuilder.cxx @@ -57,12 +57,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqPipelineFilter.h" #include "pqPipelineSource.h" #include "pqPluginManager.h" +#include "pqProxyModifiedStateUndoElement.h" #include "pqRenderView.h" #include "pqScalarBarRepresentation.h" #include "pqScalarsToColors.h" #include "pqServer.h" #include "pqServerManagerModel.h" #include "pqSMAdaptor.h" +#include "pqUndoStack.h" #include "pqView.h" #include "pqViewModuleInterface.h" @@ -103,6 +105,12 @@ pqPipelineSource* pqObjectBuilder::createSource(const QString& sm_group, source->setDefaultPropertyValues(); source->setModifiedState(pqProxy::UNINITIALIZED); + pqProxyModifiedStateUndoElement* elem = + pqProxyModifiedStateUndoElement::New(); + elem->MadeUninitialized(source); + ADD_UNDO_ELEM(elem); + elem->Delete(); + emit this->sourceCreated(source); emit this->proxyCreated(source); return source; @@ -273,8 +281,15 @@ pqPipelineSource* pqObjectBuilder::createReader(const QString& sm_group, reader->setDefaultPropertyValues(); reader->setModifiedState(pqProxy::UNINITIALIZED); + pqProxyModifiedStateUndoElement* elem = + pqProxyModifiedStateUndoElement::New(); + elem->MadeUninitialized(reader); + ADD_UNDO_ELEM(elem); + elem->Delete(); + emit this->readerCreated(reader, files[0]); emit this->readerCreated(reader, files); + emit this->sourceCreated(reader); emit this->proxyCreated(reader); return reader; } @@ -735,7 +750,7 @@ void pqObjectBuilder::destroyProxyInternal(pqProxy* proxy) } //----------------------------------------------------------------------------- -QString pqObjectBuilder::getFileNamePropertyName(vtkSMProxy* proxy) const +QString pqObjectBuilder::getFileNamePropertyName(vtkSMProxy* proxy) { // Find the first property that has a vtkSMFileListDomain. Assume that // it is the property used to set the filename. diff --git a/Qt/Core/pqObjectBuilder.h b/Qt/Core/pqObjectBuilder.h index 470c4d1ad7..820255523f 100644 --- a/Qt/Core/pqObjectBuilder.h +++ b/Qt/Core/pqObjectBuilder.h @@ -167,7 +167,7 @@ public: /// This is a convenience method to return the name of the /// property on the proxy, if any, which can be used to set the filename. /// If no such property exists, this retruns a null string. - QString getFileNamePropertyName(vtkSMProxy*) const; + static QString getFileNamePropertyName(vtkSMProxy*); // HACK: pqSimpleServerStartup needs to fire the // finishedAddingServer() signal on successful diff --git a/Qt/Core/pqOptions.cxx b/Qt/Core/pqOptions.cxx index f8a9d387f3..3df5cb8282 100644 --- a/Qt/Core/pqOptions.cxx +++ b/Qt/Core/pqOptions.cxx @@ -37,7 +37,37 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <vtkstd/string> vtkStandardNewMacro(pqOptions); -vtkCxxRevisionMacro(pqOptions, "1.8"); +vtkCxxRevisionMacro(pqOptions, "1.9"); + +static int AddTestScript(const char*, const char* value, void* call_data) +{ + pqOptions* self = reinterpret_cast<pqOptions*>(call_data); + if (self) + { + return self->AddTestScript(value); + } + return 0; +} + +static int AddTestBaseline(const char*, const char* value, void* call_data) +{ + pqOptions* self = reinterpret_cast<pqOptions*>(call_data); + if (self) + { + return self->SetLastTestBaseline(value); + } + return 0; +} + +static int AddTestImageThreshold(const char*, const char* value, void* call_data) +{ + pqOptions* self = reinterpret_cast<pqOptions*>(call_data); + if (self) + { + return self->SetLastTestImageThreshold(QString(value).toInt()); + } + return 0; +} //----------------------------------------------------------------------------- pqOptions::pqOptions() @@ -51,6 +81,7 @@ pqOptions::pqOptions() this->TestFileName = 0; this->TestInitFileName = 0; this->ServerResourceName = 0; + this->DisableLightKit = 0; } //----------------------------------------------------------------------------- @@ -99,6 +130,23 @@ void pqOptions::Initialize() this->AddArgument("--server", "-s", &this->ServerResourceName, "Set the name of the server resource to connect with when the client starts."); + + this->AddBooleanArgument("--disable-light-kit", 0, + &this->DisableLightKit, + "When present, disables light kit by default. Useful for dashboard tests."); + + this->AddCallback("--test-script", NULL, + &::AddTestScript, this, "Add test script. Can be used multiple times to " + "specify multiple tests."); + this->AddCallback("--test-baseline", NULL, + &::AddTestBaseline, this, + "Add test baseline. Can be used multiple times to specify " + "multiple baselines for multiple tests, in order."); + this->AddCallback("--test-threshold", NULL, + &::AddTestImageThreshold, this, + "Add test image threshold. " + "Can be used multiple times to specify multiple image thresholds for " + "multiple tests in order."); } //----------------------------------------------------------------------------- @@ -134,6 +182,36 @@ int pqOptions::WrongArgument(const char* arg) return this->Superclass::WrongArgument(arg); } +//----------------------------------------------------------------------------- +int pqOptions::AddTestScript(const char* script) +{ + TestInfo info; + info.TestFile = script; + this->TestScripts.push_back(info); + return 1; +} +//----------------------------------------------------------------------------- +int pqOptions::SetLastTestBaseline(const char* image) +{ + if (this->TestScripts.size() > 0) + { + this->TestScripts.last().TestBaseline = image; + return 1; + } + return 0; +} + +//----------------------------------------------------------------------------- +int pqOptions::SetLastTestImageThreshold(int threshold) +{ + if (this->TestScripts.size() > 0) + { + this->TestScripts.last().ImageThreshold = threshold; + return 1; + } + return 0; +} + //----------------------------------------------------------------------------- void pqOptions::PrintSelf(ostream& os, vtkIndent indent) { diff --git a/Qt/Core/pqOptions.h b/Qt/Core/pqOptions.h index 2200a5bd7f..3c95a6b373 100644 --- a/Qt/Core/pqOptions.h +++ b/Qt/Core/pqOptions.h @@ -51,11 +51,22 @@ public: vtkGetStringMacro(TestDirectory); vtkGetStringMacro(DataDirectory); - vtkGetStringMacro(BaselineImage); - vtkGetMacro(ImageThreshold, int); + + /// DEPRECATED. + /// @deprecated Use GetTestScript(int)/GetTestBaseline(int)/ + /// GetTestImageThreshold(int) instead which allows for providing + /// multiples tests/baselines/thresholds on the command line. + VTK_LEGACY(vtkGetStringMacro(BaselineImage)); + VTK_LEGACY(vtkGetMacro(ImageThreshold, int)); + VTK_LEGACY(vtkSetMacro(ImageThreshold, int)); + vtkGetMacro(ExitAppWhenTestsDone, int); vtkGetMacro(DisableRegistry, int); - + + /// DEPRECATED. + /// @deprecated Use GetTestScript(int)/GetTestBaseline(int)/ + /// GetTestImageThreshold(int) instead which allows for providing + /// multiples tests/baselines/thresholds on the command line. const QStringList& GetTestFiles() { return this->TestFiles; } @@ -70,6 +81,26 @@ public: vtkSetStringMacro(TestInitFileName); vtkSetStringMacro(ServerResourceName); + int GetNumberOfTestScripts() + { return this->TestScripts.size(); } + QString GetTestScript(int cc) + { return this->TestScripts[cc].TestFile; } + QString GetTestBaseline(int cc) + { return this->TestScripts[cc].TestBaseline; } + int GetTestImageThreshold(int cc) + { return this->TestScripts[cc].ImageThreshold; } + + // Description + // Get/Set whether lightkit is disabled by default. This is useful for + // testing. + vtkGetMacro(DisableLightKit, int); + vtkSetMacro(DisableLightKit, int); + + // DO NOT CALL. Public for internal callbacks. + int AddTestScript(const char*); + int SetLastTestBaseline(const char*); + int SetLastTestImageThreshold(int); + protected: pqOptions(); virtual ~pqOptions(); @@ -86,6 +117,17 @@ protected: int ImageThreshold; int ExitAppWhenTestsDone; int DisableRegistry; + int DisableLightKit; + + struct TestInfo + { + QString TestFile; + QString TestBaseline; + int ImageThreshold; + TestInfo():ImageThreshold(12) { } + }; + + QList<TestInfo> TestScripts; QStringList TestFiles; diff --git a/Qt/Core/pqOutputPort.cxx b/Qt/Core/pqOutputPort.cxx index ac2d26b9c0..dad73cba0d 100644 --- a/Qt/Core/pqOutputPort.cxx +++ b/Qt/Core/pqOutputPort.cxx @@ -99,7 +99,7 @@ vtkSMOutputPort* pqOutputPort::getOutputPortProxy() const } //----------------------------------------------------------------------------- -vtkPVDataInformation* pqOutputPort::getDataInformation(bool vtkNotUsed(update)) const +vtkPVDataInformation* pqOutputPort::getDataInformation() const { vtkSMSourceProxy* source = vtkSMSourceProxy::SafeDownCast( this->getSource()->getProxy()); @@ -112,22 +112,6 @@ vtkPVDataInformation* pqOutputPort::getDataInformation(bool vtkNotUsed(update)) return source->GetDataInformation(this->PortNumber); } -//----------------------------------------------------------------------------- -vtkPVDataInformation* pqOutputPort::getCachedDataInformation() const -{ - vtkSMSourceProxy* source = vtkSMSourceProxy::SafeDownCast( - this->getSource()->getProxy()); - - if (!source || !source->GetOutputPortsCreated()) - { - return NULL; - } - - vtkSMOutputPort* port = source->GetOutputPort(this->PortNumber); - return port? port->GetCachedDataInformation(): NULL; -} - - //----------------------------------------------------------------------------- const char* pqOutputPort::getDataClassName() const { diff --git a/Qt/Core/pqOutputPort.h b/Qt/Core/pqOutputPort.h index 1dc98510a3..a50916ee8d 100644 --- a/Qt/Core/pqOutputPort.h +++ b/Qt/Core/pqOutputPort.h @@ -102,13 +102,10 @@ public: /// immediate render otherwise render on idle. void renderAllViews(bool force=false); - /// Returns the current data information at this output port. - /// Note \c update is no longer used and will be deprecated soon. - vtkPVDataInformation* getDataInformation(bool update=false) const; - - /// Simply returns the data information as available on the client, without any - /// gathers from the server side or any pipeline updates. - vtkPVDataInformation* getCachedDataInformation() const; + /// Returns the current data information at this output port. + /// This does not update the pipeline, it simply returns the data information + /// for data currently present on the output port on the server. + vtkPVDataInformation* getDataInformation() const; /// Returns the class name of the output data. const char* getDataClassName() const; diff --git a/Qt/Core/pqPipelineFilter.cxx b/Qt/Core/pqPipelineFilter.cxx index 8fc0858547..771b276e7d 100644 --- a/Qt/Core/pqPipelineFilter.cxx +++ b/Qt/Core/pqPipelineFilter.cxx @@ -43,7 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "vtkSMDomainIterator.h" #include "vtkSMInputProperty.h" #include "vtkSMPropertyIterator.h" -#include "vtkSMProxy.h" +#include "vtkSMPVRepresentationProxy.h" //Qt includes. #include <QList> @@ -56,6 +56,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqApplicationCore.h" #include "pqServerManagerModel.h" #include "pqOutputPort.h" +#include "pqPipelineRepresentation.h" uint qHash(QPair<QPointer<pqPipelineSource>, int> arg) { @@ -452,3 +453,36 @@ int pqPipelineFilter::replaceInput() const return 1; // default value. } +//----------------------------------------------------------------------------- +void pqPipelineFilter::hideInputIfRequired(pqView* view) +{ + int replace_input = this->replaceInput(); + if (replace_input > 0) + { + // hide input source. + QList<pqOutputPort*> inputs = this->getAllInputs(); + for(int kk=0; kk < inputs.size(); ++kk) + { + pqOutputPort* input = inputs[kk]; + pqDataRepresentation* inputRepr = input->getRepresentation(view); + if (inputRepr) + { + pqPipelineRepresentation* sourceDisp = + qobject_cast<pqPipelineRepresentation*>(inputRepr); + if (sourceDisp && replace_input == 2) + { + // Conditionally turn off the input. The input should be turned + // off if the representation is surface and the opacity is 1. + int reprType = sourceDisp->getRepresentationType(); + if ((reprType != vtkSMPVRepresentationProxy::SURFACE && + reprType != vtkSMPVRepresentationProxy::SURFACE_WITH_EDGES) || + sourceDisp->getOpacity() < 1.0) + { + continue; + } + } + inputRepr->setVisible(false); + } + } + } +} diff --git a/Qt/Core/pqPipelineFilter.h b/Qt/Core/pqPipelineFilter.h index 7f3bfa543a..c7032ecbf8 100644 --- a/Qt/Core/pqPipelineFilter.h +++ b/Qt/Core/pqPipelineFilter.h @@ -101,6 +101,9 @@ public: /// returns false, otherwise true. int replaceInput() const; + /// Hides the representations for the input if required, in the given view. + void hideInputIfRequired(pqView* view); + protected slots: /// process some change in the input property for the proxy. void inputChanged(vtkObject*, unsigned long, void* client_data); diff --git a/Qt/Core/pqPipelineRepresentation.cxx b/Qt/Core/pqPipelineRepresentation.cxx index 2eecdfed93..6910f57f34 100644 --- a/Qt/Core/pqPipelineRepresentation.cxx +++ b/Qt/Core/pqPipelineRepresentation.cxx @@ -63,6 +63,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ParaView includes. #include "pqApplicationCore.h" +#include "pqDisplayPolicy.h" #include "pqLookupTableManager.h" #include "pqObjectBuilder.h" #include "pqOutputPort.h" @@ -76,7 +77,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqServerManagerModel.h" #include "pqSettings.h" #include "pqSMAdaptor.h" -#include "pqDisplayPolicy.h" +#include "pqUndoStack.h" //----------------------------------------------------------------------------- class pqPipelineRepresentation::pqInternal @@ -167,6 +168,14 @@ pqPipelineRepresentation::pqPipelineRepresentation( QObject::connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(updateScalarBarVisibility(bool))); + + // Whenever the pipeline gets be updated, it's possible that the scalar ranges + // change. If that happens, we try to ensure that the lookuptable range is big + // enough to show the entire data (unless of course, the user locked the + // lookuptable ranges). + this->Internal->VTKConnect->Connect( + display, vtkCommand::UpdateDataEvent, + this, SLOT(onDataUpdated())); } //----------------------------------------------------------------------------- @@ -287,7 +296,7 @@ void pqPipelineRepresentation::setDefaultPropertyValues() // Get the time that this representation is going to use. vtkPVDataInformation* dataInfo = 0; - dataInfo = this->getOutputPortFromInput()->getDataInformation(true); + dataInfo = this->getOutputPortFromInput()->getDataInformation(); // get data set type // and set the default representation @@ -712,6 +721,19 @@ void pqPipelineRepresentation::resetLookupTableScalarRange() } } +//----------------------------------------------------------------------------- +void pqPipelineRepresentation::onDataUpdated() +{ + // Since this part of the code happens every time the pipeline is updated, we + // don't need to record it on the undo stack. It will happen automatically + // each time. + BEGIN_UNDO_EXCLUDE(); + + this->updateLookupTableScalarRange(); + + END_UNDO_EXCLUDE(); +} + //----------------------------------------------------------------------------- void pqPipelineRepresentation::updateLookupTableScalarRange() { @@ -808,7 +830,7 @@ QList<QString> pqPipelineRepresentation::getColorFields() vtkPVDataInformation* dataInfo = NULL; if(this->getInput()) { - dataInfo = this->getOutputPortFromInput()->getDataInformation(false); + dataInfo = this->getOutputPortFromInput()->getDataInformation(); } if(dataInfo) { @@ -1041,22 +1063,6 @@ QString pqPipelineRepresentation::getColorField(bool raw) return pqPipelineRepresentation::solidColor(); } -//----------------------------------------------------------------------------- -bool pqPipelineRepresentation::getDataBounds(double bounds[6]) -{ - vtkSMPropRepresentationProxy* repr = - this->getRepresentationProxy(); - - vtkPVDataInformation* info = repr? - repr->GetRepresentedDataInformation() : 0; - if(!info) - { - return false; - } - info->GetBounds(bounds); - return true; -} - //----------------------------------------------------------------------------- void pqPipelineRepresentation::setRepresentation(int representation) { diff --git a/Qt/Core/pqPipelineRepresentation.h b/Qt/Core/pqPipelineRepresentation.h index e38689cb08..cb285b74b6 100644 --- a/Qt/Core/pqPipelineRepresentation.h +++ b/Qt/Core/pqPipelineRepresentation.h @@ -122,10 +122,6 @@ public: /// field is a string of format "<arrayname> (cell|point)". int getColorFieldNumberOfComponents(const QString& field); - /// Get the data bounds for the input of this display. - /// Returns if the operation was successful. - bool getDataBounds(double bounds[6]); - /// Returns the proxy for the piecewise function used to /// map scalars to opacity. virtual vtkSMProxy* getScalarOpacityFunctionProxy(); @@ -186,6 +182,10 @@ protected slots: /// used to color this repr is being used by any other repr. If not, we turn off /// the scalar bar. void updateScalarBarVisibility(bool visible); + + /// Called when the data is updated. We call updateLookupTableScalarRange() to + /// ensure that the lookuptable has correct ranges. + void onDataUpdated(); protected: /// Creates helper proxies such as as the proxy /// for volume opacity function. diff --git a/Qt/Core/pqPipelineSource.cxx b/Qt/Core/pqPipelineSource.cxx index aecee7956e..1cbda62e85 100644 --- a/Qt/Core/pqPipelineSource.cxx +++ b/Qt/Core/pqPipelineSource.cxx @@ -57,11 +57,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ParaView #include "pqDataRepresentation.h" +#include "pqHelperProxyRegisterUndoElement.h" #include "pqOutputPort.h" #include "pqPipelineFilter.h" #include "pqServer.h" #include "pqSMAdaptor.h" #include "pqTimeKeeper.h" +#include "pqUndoStack.h" #include "pqXMLUtil.h" //----------------------------------------------------------------------------- @@ -381,6 +383,15 @@ void pqPipelineSource::setDefaultPropertyValues() } this->createAnimationHelpersIfNeeded(); + + // This is sort-of-a-hack to ensure that when this operation is undo, all the + // helper proxies are discovered correctly. This needs to happen only after + // all helper proxies have been created. + pqHelperProxyRegisterUndoElement* elem = + pqHelperProxyRegisterUndoElement::New(); + elem->RegisterHelperProxies(this); + ADD_UNDO_ELEM(elem); + elem->Delete(); } //----------------------------------------------------------------------------- diff --git a/Qt/Core/pqProcessModuleGUIHelper.cxx b/Qt/Core/pqProcessModuleGUIHelper.cxx index a893c42aad..9dd55dc136 100644 --- a/Qt/Core/pqProcessModuleGUIHelper.cxx +++ b/Qt/Core/pqProcessModuleGUIHelper.cxx @@ -33,8 +33,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqApplicationCore.h" #include "pqPluginManager.h" -#include "pqOutputWindowAdapter.h" -#include "pqOutputWindow.h" #include "pqCoreTestUtility.h" #include "pqOptions.h" @@ -59,8 +57,6 @@ class pqProcessModuleGUIHelper::pqImplementation { public: pqImplementation() : - OutputWindowAdapter(vtkSmartPointer<pqOutputWindowAdapter>::New()), - OutputWindow(0), SMApplication(vtkSMApplication::New()), ApplicationCore(0), Window(0), @@ -68,8 +64,6 @@ public: ReadyEnableProgress(false), LastProgress(0) { - // Redirect Qt debug output to VTK ... - qInstallMsgHandler(QtMessageOutput); } ~pqImplementation() @@ -77,35 +71,9 @@ public: this->SMApplication->Finalize(); this->SMApplication->Delete(); delete this->Window; - delete this->OutputWindow; delete this->ApplicationCore; } - /// Routes Qt debug output through the VTK output window mechanism - static void QtMessageOutput(QtMsgType type, const char *msg) - { - switch(type) - { - case QtDebugMsg: - vtkOutputWindow::GetInstance()->DisplayText(msg); - break; - case QtWarningMsg: - vtkOutputWindow::GetInstance()->DisplayErrorText(msg); - break; - case QtCriticalMsg: - vtkOutputWindow::GetInstance()->DisplayErrorText(msg); - break; - case QtFatalMsg: - vtkOutputWindow::GetInstance()->DisplayErrorText(msg); - break; - } - } - - /// Converts VTK debug output into Qt signals - vtkSmartPointer<pqOutputWindowAdapter> OutputWindowAdapter; - /// Displays VTK debug output in a console window - pqOutputWindow* OutputWindow; - vtkSMApplication* SMApplication; pqApplicationCore* ApplicationCore; QWidget* Window; @@ -118,7 +86,7 @@ public: //////////////////////////////////////////////////////////////////////////// // pqProcessModuleGUIHelper -vtkCxxRevisionMacro(pqProcessModuleGUIHelper, "1.29"); +vtkCxxRevisionMacro(pqProcessModuleGUIHelper, "1.30"); //----------------------------------------------------------------------------- pqProcessModuleGUIHelper::pqProcessModuleGUIHelper() : Implementation(new pqImplementation()) @@ -134,15 +102,13 @@ pqProcessModuleGUIHelper::~pqProcessModuleGUIHelper() //----------------------------------------------------------------------------- void pqProcessModuleGUIHelper::disableOutputWindow() { - this->Implementation->OutputWindowAdapter->setActive(false); + this->Implementation->ApplicationCore->disableOutputWindow(); } //----------------------------------------------------------------------------- void pqProcessModuleGUIHelper::showOutputWindow() { - this->Implementation->OutputWindow->show(); - this->Implementation->OutputWindow->raise(); - this->Implementation->OutputWindow->activateWindow(); + this->Implementation->ApplicationCore->showOutputWindow(); } //----------------------------------------------------------------------------- @@ -246,11 +212,11 @@ int pqProcessModuleGUIHelper::postAppExec() int status = 0; this->FinalizeApplication(); - // If there were any errors from Qt / VTK, ensure that we return an error code - if(!status && this->Implementation->OutputWindowAdapter->getErrorCount()) - { - status = 1; - } + //// If there were any errors from Qt / VTK, ensure that we return an error code + //if(!status && this->Implementation->OutputWindowAdapter->getErrorCount()) + // { + // status = 1; + // } return status; } @@ -260,20 +226,6 @@ int pqProcessModuleGUIHelper::InitializeApplication(int vtkNotUsed(argc), char** vtkNotUsed(argv)) { this->Implementation->ApplicationCore = this->CreateApplicationCore(); - - // Redirect VTK debug output to a Qt window ... - this->Implementation->OutputWindow = new pqOutputWindow(0); - this->Implementation->OutputWindow->setAttribute(Qt::WA_QuitOnClose, false); - this->Implementation->OutputWindow->connect(this->Implementation->OutputWindowAdapter, - SIGNAL(displayText(const QString&)), SLOT(onDisplayText(const QString&))); - this->Implementation->OutputWindow->connect(this->Implementation->OutputWindowAdapter, - SIGNAL(displayErrorText(const QString&)), SLOT(onDisplayErrorText(const QString&))); - this->Implementation->OutputWindow->connect(this->Implementation->OutputWindowAdapter, - SIGNAL(displayWarningText(const QString&)), SLOT(onDisplayWarningText(const QString&))); - this->Implementation->OutputWindow->connect(this->Implementation->OutputWindowAdapter, - SIGNAL(displayGenericWarningText(const QString&)), SLOT(onDisplayGenericWarningText(const QString&))); - vtkOutputWindow::SetInstance(Implementation->OutputWindowAdapter); - this->Implementation->Window = this->CreateMainWindow(); return 1; @@ -313,7 +265,7 @@ void pqProcessModuleGUIHelper::SendCleanupPendingProgress() this->Implementation->ReadyEnableProgress = false; if(this->Implementation->EnableProgress) { - this->Implementation->ApplicationCore->cleanupPendingProgress(); + //this->Implementation->ApplicationCore->cleanupPendingProgress(); } this->Implementation->EnableProgress = false; } @@ -354,7 +306,7 @@ void pqProcessModuleGUIHelper::SetLocalProgress(const char* text, if(this->Implementation->EnableProgress == false) { this->Implementation->EnableProgress = true; - this->Implementation->ApplicationCore->prepareProgress(); + //this->Implementation->ApplicationCore->prepareProgress(); } this->Implementation->LastProgress = lastprog; @@ -369,7 +321,7 @@ void pqProcessModuleGUIHelper::SetLocalProgress(const char* text, this->SetStatusText(text); this->GetProgressGauge()->SetValue(val); */ - this->Implementation->ApplicationCore->sendProgress(text, progress); + //this->Implementation->ApplicationCore->sendProgress(text, progress); //cout << (name? name : "(null)") << " : " << progress << endl; // Here we would call something like // this->Window->SetProgress(name, progress). @@ -417,5 +369,6 @@ pqTestUtility* pqProcessModuleGUIHelper::TestUtility() //----------------------------------------------------------------------------- int pqProcessModuleGUIHelper::ErrorCount() { - return this->Implementation->OutputWindowAdapter->getErrorCount(); + return 0; + //return this->Implementation->OutputWindowAdapter->getErrorCount(); } diff --git a/Qt/Core/pqProcessModuleGUIHelper.h b/Qt/Core/pqProcessModuleGUIHelper.h index fc545b20b1..1d0330c6d8 100644 --- a/Qt/Core/pqProcessModuleGUIHelper.h +++ b/Qt/Core/pqProcessModuleGUIHelper.h @@ -48,6 +48,8 @@ class vtkSMApplication; * when the ProcessModule requests the event loop to begin. * \todo When the GUI Helper receives Progress, it must be conveyed over to the * MainWindow so that the progress can be shown. + * @deprecated vtkProcessModuleGUIHelper and subclasses will soon be removed. + * Switch to using new style application initialization. */ class PQCORE_EXPORT pqProcessModuleGUIHelper : public vtkProcessModuleGUIHelper { @@ -135,7 +137,7 @@ protected: /// Returns the number of errors registered in the OutputWindow virtual int ErrorCount(); - pqProcessModuleGUIHelper(); + VTK_LEGACY(pqProcessModuleGUIHelper()); ~pqProcessModuleGUIHelper(); private: diff --git a/Qt/Core/pqProgressManager.cxx b/Qt/Core/pqProgressManager.cxx index deaf6dba90..61faeec3c8 100644 --- a/Qt/Core/pqProgressManager.cxx +++ b/Qt/Core/pqProgressManager.cxx @@ -36,6 +36,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QKeyEvent> #include <QMouseEvent> +#include "vtkEventQtSlotConnect.h" +#include "vtkProcessModule.h" +#include "vtkTimerLog.h" + //----------------------------------------------------------------------------- pqProgressManager::pqProgressManager(QObject* _parent) : QObject(_parent) @@ -43,14 +47,28 @@ pqProgressManager::pqProgressManager(QObject* _parent) this->ProgressCount = 0; this->InUpdate = false; QApplication::instance()->installEventFilter(this); + + this->EnableProgress = false; + this->ReadyEnableProgress = false; + this->LastProgressTime = 0; + + this->VTKConnect = vtkEventQtSlotConnect::New(); + vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); + + this->VTKConnect->Connect(pm, vtkCommand::StartEvent, + this, SLOT(onStartProgress())); + this->VTKConnect->Connect(pm, vtkCommand::EndEvent, + this, SLOT(onEndProgress())); + this->VTKConnect->Connect(pm, vtkCommand::ProgressEvent, + this, SLOT(onProgress())); } //----------------------------------------------------------------------------- pqProgressManager::~pqProgressManager() { + this->VTKConnect->Delete(); } - //----------------------------------------------------------------------------- bool pqProgressManager::eventFilter(QObject* obj, QEvent* evt) { @@ -163,3 +181,70 @@ void pqProgressManager::triggerAbort() { emit this->abort(); } + +//----------------------------------------------------------------------------- +void pqProgressManager::onStartProgress() +{ + this->ReadyEnableProgress = true; +} + +//----------------------------------------------------------------------------- +void pqProgressManager::onEndProgress() +{ + this->ReadyEnableProgress = false; + if (this->EnableProgress) + { + this->setEnableProgress(false); + } + this->EnableProgress = false; +} + +//----------------------------------------------------------------------------- +void pqProgressManager::onProgress() +{ + int progress = vtkProcessModule::GetProcessModule()->GetLastProgress(); + QString text = vtkProcessModule::GetProcessModule()->GetLastProgressName(); + + // forgive those who don't call SendPrepareProgress beforehand + if (this->EnableProgress == false && + this->ReadyEnableProgress == false && progress == 0) + { + this->onStartProgress(); + return; + } + + // forgive those who don't cleanup or want to go the extra mile + if (progress >= 100) + { + this->onEndProgress(); + return; + } + + // only forward progress events to the GUI if we get at least .05 seconds + // since the last time we forwarded the progress event + double lastprog = vtkTimerLog::GetUniversalTime(); + if (lastprog - this->LastProgressTime < .05) + { + return; + } + + // We will show progress. Reset timer. + this->LastProgressTime = vtkTimerLog::GetUniversalTime(); + + // delayed progress starting so the progress bar doesn't flicker + // so much for the quick operations + if (this->EnableProgress == false) + { + this->EnableProgress = true; + this->setEnableProgress(true); + } + + this->LastProgressTime = lastprog; + + // chop of "vtk" prefix + if (text.startsWith("vtk")) + { + text = text.mid(3); + } + this->setProgress(text, progress); +} diff --git a/Qt/Core/pqProgressManager.h b/Qt/Core/pqProgressManager.h index 4afe8244d2..d9c7de0405 100644 --- a/Qt/Core/pqProgressManager.h +++ b/Qt/Core/pqProgressManager.h @@ -37,6 +37,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QPointer> #include <QList> +class vtkEventQtSlotConnect; + /// pqProgressManager is progress manager. It centralizes progress raising/ /// handling. Provides ability for any object to lock progress so that /// only progress fired by itself will be notified to the rest of the world. @@ -69,7 +71,6 @@ public: void removeNonBlockableObject(QObject* o) { this->NonBlockableObjects.removeAll(o); } - /// Returns the list of non-blockable objects. const QList<QPointer<QObject> >& nonBlockableObjects() const {return this->NonBlockableObjects; } @@ -106,11 +107,22 @@ signals: void enableAbort(bool); +protected slots: + /// callbacks for signals fired from vtkProcessModule. + void onStartProgress(); + void onEndProgress(); + void onProgress(); + protected: QPointer<QObject> Lock; QList<QPointer<QObject> > NonBlockableObjects; int ProgressCount; bool InUpdate; // used to avoid recursive updates. + + double LastProgressTime; + bool EnableProgress; + bool ReadyEnableProgress; + vtkEventQtSlotConnect* VTKConnect; private: pqProgressManager(const pqProgressManager&); // Not implemented. void operator=(const pqProgressManager&); // Not implemented. diff --git a/Qt/Core/pqProxyModifiedStateUndoElement.cxx b/Qt/Core/pqProxyModifiedStateUndoElement.cxx new file mode 100644 index 0000000000..e1f2d3ad56 --- /dev/null +++ b/Qt/Core/pqProxyModifiedStateUndoElement.cxx @@ -0,0 +1,112 @@ +/*========================================================================= + + Program: ParaView + Module: pqProxyModifiedStateUndoElement.cxx + + Copyright (c) Kitware, Inc. + All rights reserved. + See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +#include "pqProxyModifiedStateUndoElement.h" + +#include "pqApplicationCore.h" +#include "pqProxy.h" +#include "pqServerManagerModel.h" +#include "vtkObjectFactory.h" +#include "vtkPVXMLElement.h" +#include "vtkSMProxy.h" +#include "vtkSMProxyLocator.h" + +vtkStandardNewMacro(pqProxyModifiedStateUndoElement); +vtkCxxRevisionMacro(pqProxyModifiedStateUndoElement, "1.1"); +//---------------------------------------------------------------------------- +pqProxyModifiedStateUndoElement::pqProxyModifiedStateUndoElement() +{ +} + +//---------------------------------------------------------------------------- +pqProxyModifiedStateUndoElement::~pqProxyModifiedStateUndoElement() +{ +} + +//---------------------------------------------------------------------------- +bool pqProxyModifiedStateUndoElement::CanLoadState(vtkPVXMLElement* elem) +{ + return (elem && elem->GetName() && + strcmp(elem->GetName(), "ProxyModifiedState") == 0); +} + +//---------------------------------------------------------------------------- +void pqProxyModifiedStateUndoElement::MadeUnmodified(pqProxy* source) +{ + vtkPVXMLElement* elem = vtkPVXMLElement::New(); + elem->SetName("ProxyModifiedState"); + elem->AddAttribute("id", source->getProxy()->GetSelfIDAsString()); + elem->AddAttribute("reverse", 0); + this->SetXMLElement(elem); + elem->Delete(); +} + +//---------------------------------------------------------------------------- +void pqProxyModifiedStateUndoElement::MadeUninitialized(pqProxy* source) +{ + vtkPVXMLElement* elem = vtkPVXMLElement::New(); + elem->SetName("ProxyModifiedState"); + elem->AddAttribute("id", source->getProxy()->GetSelfIDAsString()); + elem->AddAttribute("reverse", 1); + this->SetXMLElement(elem); + elem->Delete(); +} + +//---------------------------------------------------------------------------- +bool pqProxyModifiedStateUndoElement::InternalUndoRedo(bool undo) +{ + vtkPVXMLElement* element = this->XMLElement; + int id = 0; + element->GetScalarAttribute("id",&id); + if (!id) + { + vtkErrorMacro("Failed to locate proxy id."); + return false; + } + + int reverse = 0; + element->GetScalarAttribute("reverse", &reverse); + + vtkSMProxyLocator* locator = this->GetProxyLocator(); + vtkSMProxy* proxy = locator->LocateProxy(id); + + if (!proxy) + { + vtkErrorMacro("Failed to locate the proxy to register."); + return false; + } + + pqApplicationCore* core = pqApplicationCore::instance(); + pqServerManagerModel* smModel = core->getServerManagerModel(); + pqProxy* pqproxy = smModel->findItem<pqProxy*>(proxy); + if (pqproxy && !reverse) + { + pqproxy->setModifiedState(undo? pqProxy::UNINITIALIZED : + pqProxy::UNMODIFIED); + } + else if (pqproxy && reverse) + { + pqproxy->setModifiedState(undo? pqProxy::UNMODIFIED: + pqProxy::UNINITIALIZED); + } + return true; +} + +//---------------------------------------------------------------------------- +void pqProxyModifiedStateUndoElement::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os, indent); +} + + diff --git a/Qt/Core/pqProxyModifiedStateUndoElement.h b/Qt/Core/pqProxyModifiedStateUndoElement.h new file mode 100644 index 0000000000..241c4afbff --- /dev/null +++ b/Qt/Core/pqProxyModifiedStateUndoElement.h @@ -0,0 +1,71 @@ +/*========================================================================= + + Program: ParaView + Module: pqProxyModifiedStateUndoElement.h + + Copyright (c) Kitware, Inc. + All rights reserved. + See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +/// .NAME pqProxyModifiedStateUndoElement - undo element to capture the change +/// in the modified state for a pqProxy. +/// .SECTION Description +/// pqProxyModifiedStateUndoElement can be used to capture the change in the +/// modified state of a pqProxy. Currently it only captures the change from +/// UNINITIALIZED to UNMODIFIED or vice-versa. This is used by the +/// pqObjectInspectorWidget to control the apply button state when the first +/// accept is undone. + +#ifndef __pqProxyModifiedStateUndoElement_h +#define __pqProxyModifiedStateUndoElement_h + +#include "vtkSMUndoElement.h" +#include "pqCoreExport.h" + +class pqProxy; + +class PQCORE_EXPORT pqProxyModifiedStateUndoElement : public vtkSMUndoElement +{ +public: + static pqProxyModifiedStateUndoElement* New(); + vtkTypeRevisionMacro(pqProxyModifiedStateUndoElement, vtkSMUndoElement); + void PrintSelf(ostream& os, vtkIndent indent); + + virtual int Undo() + { + return this->InternalUndoRedo(true)? 1 : 0; + } + virtual int Redo() + { + return this->InternalUndoRedo(false)? 1 : 0; + } + + virtual bool CanLoadState(vtkPVXMLElement*); + + /// Use this to initialize the element if the pqProxy was marked as + /// UNMODIFIED. + void MadeUnmodified(pqProxy*); + + /// Use this to initialize the element if the pqProxy was marked as + /// UNINITIALIZED. + void MadeUninitialized(pqProxy*); + +//BTX +protected: + pqProxyModifiedStateUndoElement(); + ~pqProxyModifiedStateUndoElement(); + + bool InternalUndoRedo(bool undo); +private: + pqProxyModifiedStateUndoElement(const pqProxyModifiedStateUndoElement&); // Not implemented + void operator=(const pqProxyModifiedStateUndoElement&); // Not implemented +//ETX +}; + +#endif + diff --git a/Qt/Core/pqPythonEventSourceImage.cxx b/Qt/Core/pqPythonEventSourceImage.cxx index 1edba888f4..fae3296af0 100644 --- a/Qt/Core/pqPythonEventSourceImage.cxx +++ b/Qt/Core/pqPythonEventSourceImage.cxx @@ -83,7 +83,9 @@ QtTestingImage_compareImage(PyObject* /*self*/, PyObject* args) // void QtTestingImage.compareImage('png file', 'baselineFile') or // void QtTestingImage.compareImage('object', 'baselineFile', width, height) // an exception is thrown in this fails - + + pqThreadedEventSource::msleep(1000); + const char* object = 0; const char* baseline = 0; const char* pngfile = 0; diff --git a/Qt/Core/pqReaderFactory.cxx b/Qt/Core/pqReaderFactory.cxx deleted file mode 100644 index 203be1d7a8..0000000000 --- a/Qt/Core/pqReaderFactory.cxx +++ /dev/null @@ -1,484 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqReaderFactory.cxx - - Copyright (c) 2005-2008 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 "pqReaderFactory.h" - -// ParaView Server Manager includes. -#include "vtkClientServerStream.h" -#include "vtkProcessModuleConnectionManager.h" -#include "vtkProcessModule.h" -#include "vtkProcessModule.h" -#include "vtkSmartPointer.h" -#include "vtkSMIntVectorProperty.h" -#include "vtkSMProxyManager.h" -#include "vtkSMSourceProxy.h" -#include "vtkSMStringVectorProperty.h" -#include "vtkSMPropertyIterator.h" -#include "vtkSMDomainIterator.h" -#include "vtkSMDomain.h" -#include "vtkPVXMLElement.h" -#include "vtkPVXMLParser.h" - - -// Qt includes. -#include <QFileInfo> -#include <QDir> -#include <QList> -#include <QStringList> -#include <QtDebug> - -// ParaView includes. -#include "pqApplicationCore.h" -#include "pqObjectBuilder.h" -#include "pqPipelineSource.h" -#include "pqServer.h" -#include "pqPluginManager.h" - - -//----------------------------------------------------------------------------- -struct pqReaderInfo -{ - vtkSmartPointer<vtkSMProxy> PrototypeProxy; - QString Description; - QList<QString> Extensions; - - bool operator==(const pqReaderInfo& other) const - { - return (this->Description == other.Description && - this->PrototypeProxy == other.PrototypeProxy && - this->Extensions == other.Extensions); - } - - QString getTypeString() const - { - QString type ; - type += this->Description + "("; - foreach (QString ext, this->Extensions) - { - type += "*." + ext + " "; - } - type += ")"; - return type; - } - - bool canReadFile(const QString& filename, const QString& extension, pqServer* server) const - { - if (!this->PrototypeProxy.GetPointer()) - { - return false; - } - - if (!extension.isEmpty() && !this->Extensions.contains(extension)) - { - return false; - } - // extension matches. - - vtkIdType cid = server->GetConnectionID(); - - vtkClientServerStream stream; - // Assume that it can read the file (based on extension match) - // if CanReadFile does not exist. - int canRead = 1; - // ImageReader always returns 0 so don't test it - if (strcmp(this->PrototypeProxy->GetXMLName(), "ImageReader") != 0) - { - vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - vtkSMProxy* proxy = - pxm->NewProxy("sources", this->PrototypeProxy->GetXMLName()); - proxy->SetConnectionID(cid); - proxy->SetServers(vtkProcessModule::DATA_SERVER_ROOT); - proxy->UpdateVTKObjects(); - stream << vtkClientServerStream::Invoke - << pm->GetProcessModuleID() << "SetReportInterpreterErrors" << 0 - << vtkClientServerStream::End; - stream << vtkClientServerStream::Invoke - << proxy->GetID() << "CanReadFile" << filename.toAscii().data() - << vtkClientServerStream::End; - pm->SendStream(cid, vtkProcessModule::DATA_SERVER_ROOT, stream); - pm->GetLastResult(cid, - vtkProcessModule::DATA_SERVER_ROOT).GetArgument(0, 0, &canRead); - stream << vtkClientServerStream::Invoke - << pm->GetProcessModuleID() << "SetReportInterpreterErrors" << 1 - << vtkClientServerStream::End; - pm->SendStream(cid, vtkProcessModule::DATA_SERVER_ROOT, stream); - proxy->Delete(); - } - return canRead; - } -}; - -//----------------------------------------------------------------------------- -class pqReaderFactoryInternal -{ -public: - QList<pqReaderInfo> ReaderList; - - vtkSMProxy* getPrototype(const QString& xmlgroup, const QString& xmlname) const - { - foreach (const pqReaderInfo& info, this->ReaderList) - { - if (info.PrototypeProxy && xmlname == info.PrototypeProxy->GetXMLName() - && xmlgroup == info.PrototypeProxy->GetXMLGroup()) - { - return info.PrototypeProxy; - } - } - return NULL; - } - - // Get a single type string for all supported types. - QString getTypeString() const - { - QString types = "ParaView Files ("; - foreach (const pqReaderInfo& info, this->ReaderList) - { - QList<QString>::const_iterator extIter = info.Extensions.begin(); - for (;extIter!=info.Extensions.end(); extIter++) - { - types += "*." + *extIter +" "; - } - } - types += ")"; - return types; - } -}; - -//----------------------------------------------------------------------------- -pqReaderFactory::pqReaderFactory(QObject* _parent) : QObject(_parent) -{ - this->Internal = new pqReaderFactoryInternal(); - this->loadFileTypes(); - - // watch for both types of plugins - // the client vs. server load order is not defined - // and we require both before adding a new reader to the GUI - QObject::connect(pqApplicationCore::instance()->getPluginManager(), - SIGNAL(guiExtensionLoaded()), - this, SLOT(loadFileTypes())); - QObject::connect(pqApplicationCore::instance()->getPluginManager(), - SIGNAL(serverManagerExtensionLoaded()), - this, SLOT(loadFileTypes())); -} - -//----------------------------------------------------------------------------- -pqReaderFactory::~pqReaderFactory() -{ - delete this->Internal; -} - -//----------------------------------------------------------------------------- -void pqReaderFactory::addFileType(const QString& description, - const QString& extension, const QString& xmlgroup, const QString& xmlname) -{ - QList<QString> exts; - exts.push_back(extension); - this->addFileType(description, exts, xmlgroup, xmlname); -} - -//----------------------------------------------------------------------------- -void pqReaderFactory::addFileType(const QString& description, - const QList<QString>& extensions, const QString& xmlgroup, - const QString& xmlname) -{ - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - vtkSmartPointer<vtkSMProxy> reader; - - reader = this->Internal->getPrototype(xmlgroup, xmlname); - if (!reader && pxm->ProxyElementExists(xmlgroup.toAscii().data(), - xmlname.toAscii().data())) - { - reader.TakeReference(pxm->NewProxy(xmlgroup.toAscii().data(), - xmlname.toAscii().data())); - if (!reader) - { - qDebug() << "Failed to create reader prototype : " << xmlgroup - << ", " << xmlname; - return; - } - reader->SetConnectionID( - vtkProcessModuleConnectionManager::GetSelfConnectionID()); - reader->SetServers(vtkProcessModule::CLIENT); - } - if (reader) - { - this->addFileType(description, extensions, reader); - } -} - -//----------------------------------------------------------------------------- -void pqReaderFactory::addFileType(const QString& description, - const QString& extension, vtkSMProxy* prototype) -{ - QList<QString> exts; - exts.push_back(extension); - this->addFileType(description, exts, prototype); -} - -//----------------------------------------------------------------------------- -void pqReaderFactory::addFileType(const QString& description, - const QList<QString>& extensions, vtkSMProxy* prototype) -{ - pqReaderInfo info; - info.Description = description; - info.Extensions = extensions; - info.PrototypeProxy = prototype; - - // check that it is already added - foreach(const pqReaderInfo &i, this->Internal->ReaderList) - { - if(info == i) - { - return; - } - } - - this->Internal->ReaderList.push_back(info); -} - -//----------------------------------------------------------------------------- -bool pqReaderFactory::checkIfFileIsReadable(const QString& filename, - pqServer* server) -{ - vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - vtkSmartPointer<vtkSMProxy> proxy; - proxy.TakeReference(pxm->NewProxy("file_listing", "ServerFileListing")); - if (!proxy) - { - qDebug() << "Failed to create ServerFileListing proxy."; - return false; - } - proxy->SetConnectionID(server->GetConnectionID()); - proxy->SetServers(vtkProcessModule::DATA_SERVER_ROOT); - - vtkSMStringVectorProperty* svp = vtkSMStringVectorProperty::SafeDownCast( - proxy->GetProperty("ActiveFileName")); - svp->SetElement(0, filename.toAscii().data()); - proxy->UpdateVTKObjects(); - proxy->UpdatePropertyInformation(); - - vtkSMIntVectorProperty* ivp = vtkSMIntVectorProperty::SafeDownCast( - proxy->GetProperty("ActiveFileIsReadable")); - - if (ivp->GetElement(0)) - { - return true; - } - return false; -} - -//----------------------------------------------------------------------------- -pqPipelineSource* pqReaderFactory::createReader(const QStringList& files, - const QString& readerName, pqServer* server) -{ - foreach(const pqReaderInfo &info, this->Internal->ReaderList) - { - if(readerName == info.PrototypeProxy->GetXMLName()) - { - pqObjectBuilder* builder = - pqApplicationCore::instance()->getObjectBuilder(); - pqPipelineSource* source = - builder->createReader("sources", // TODO: support other groups - info.PrototypeProxy->GetXMLName(), files, server); - return source; - } - } - return NULL; -} - -//----------------------------------------------------------------------------- -QString pqReaderFactory::getReaderType(const QString& filename, - pqServer* server) -{ - int num = this->Internal->ReaderList.size(); - QFileInfo finfo(filename); - QStringList exts = finfo.completeSuffix().split('.'); - // start with the last extension component working our way back to handle - // cases such as "foo.xyz.vtk" as well as "foo.vtk.000". - for (int cc=(exts.size()-1); cc >= 0; cc--) - { - QString extension = exts[cc]; - // loop backwards, allowing extensions to be overloaded - for (int i=num-1; i >= 0; i--) - { - const pqReaderInfo &info = this->Internal->ReaderList[i]; - if (info.canReadFile(filename, extension, server)) - { - return QString(info.PrototypeProxy->GetXMLName()); - } - } - } - return QString(); -} - -//----------------------------------------------------------------------------- -QString pqReaderFactory::getSupportedFileTypes(pqServer* server) -{ - QList<QString> supportedSources; - - // TODO: We are only looking into sources group for now. - server->getSupportedProxies("sources", supportedSources); - - - QString types = this->Internal->getTypeString(); - foreach(const pqReaderInfo &info, this->Internal->ReaderList) - { - if (info.PrototypeProxy && - supportedSources.contains(info.PrototypeProxy->GetXMLName())) - { - types += ";;" + info.getTypeString(); - } - } - return types; -} - -//----------------------------------------------------------------------------- -QStringList pqReaderFactory::getSupportedReaders(pqServer* server) -{ - return this->getSupportedReadersForFile(server, QString()); -} - -//----------------------------------------------------------------------------- -QStringList pqReaderFactory::getSupportedReadersForFile(pqServer *server, - const QString &filename) -{ - QStringList supportedSources; - QStringList supportedReaders; - - // TODO: We are only looking into sources group for now. - server->getSupportedProxies("sources", supportedSources); - - foreach(const pqReaderInfo &info, this->Internal->ReaderList) - { - if ( info.PrototypeProxy - && supportedSources.contains(info.PrototypeProxy->GetXMLName()) - && (filename.isEmpty() || info.canReadFile(filename,QString(),server)) ) - { - supportedReaders.append(info.PrototypeProxy->GetXMLName()); - } - } - return supportedReaders; -} - -//----------------------------------------------------------------------------- -QString pqReaderFactory::getReaderDescription(const QString& reader) -{ - foreach(const pqReaderInfo &info, this->Internal->ReaderList) - { - if (info.PrototypeProxy && - reader == info.PrototypeProxy->GetXMLName()) - { - return info.Description; - } - } - return QString("No Description"); -} - -QString pqReaderFactory::getExtensionTypeString(pqPipelineSource* reader) -{ - QString ext; - foreach(const pqReaderInfo &info, this->Internal->ReaderList) - { - vtkSMSourceProxy* psp; - psp = vtkSMSourceProxy::SafeDownCast(info.PrototypeProxy); - vtkSMSourceProxy* sp; - sp = vtkSMSourceProxy::SafeDownCast(reader->getProxy()); - - if (sp && psp && - strcmp(psp->GetXMLName(), sp->GetXMLName()) == 0) - { - ext = info.getTypeString(); - } - } - return ext; -} - -//----------------------------------------------------------------------------- -void pqReaderFactory::loadFileTypes() -{ - QString readersDirName(":/CustomResources"); - QDir readersDir(readersDirName); - if (!readersDir.exists("CustomReaders.xml")) - { - readersDirName=":/ParaViewResources"; - readersDir.setPath(readersDirName); - } - QStringList resources = readersDir.entryList(QDir::Files); - foreach(QString resource, resources) - { - if (QFileInfo(resource).suffix() == "xml") - { - this->loadFileTypes(readersDirName + QString("/") + resource); - } - } -} - -//----------------------------------------------------------------------------- -void pqReaderFactory::loadFileTypes(const QString& xmlfilename) -{ - QFile xml(xmlfilename); - if (!xml.open(QIODevice::ReadOnly)) - { - qDebug() << "Failed to load " << xmlfilename; - return; - } - - QByteArray dat = xml.readAll(); - - vtkSmartPointer<vtkPVXMLParser> parser = - vtkSmartPointer<vtkPVXMLParser>::New(); - - if(!parser->Parse(dat.data())) - { - qDebug() << "Failed to parse " << xmlfilename; - xml.close(); - return; - } - - vtkPVXMLElement* elem = parser->GetRootElement(); - int num = elem->GetNumberOfNestedElements(); - for(int i=0; i<num; i++) - { - vtkPVXMLElement* reader = elem->GetNestedElement(i); - if(QString(reader->GetName()) == "Reader") - { - QString name = reader->GetAttribute("name"); - QString extensions = reader->GetAttribute("extensions"); - QString desc = reader->GetAttribute("file_description"); - const char* grp = reader->GetAttribute("group"); - QString group = grp ? grp : "sources"; - QStringList exts = extensions.split(" ", QString::SkipEmptyParts); - this->addFileType(desc, exts, group, name.toAscii().data()); - } - } -} - diff --git a/Qt/Core/pqReaderFactory.h b/Qt/Core/pqReaderFactory.h deleted file mode 100644 index f0eedc0089..0000000000 --- a/Qt/Core/pqReaderFactory.h +++ /dev/null @@ -1,140 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqReaderFactory.h - - Copyright (c) 2005-2008 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. - -=========================================================================*/ -#ifndef __pqReaderFactory_h -#define __pqReaderFactory_h - -#include "pqCoreExport.h" -#include <QObject> - -class pqPipelineSource; -class pqReaderFactoryInternal; -class pqServer; -class vtkSMProxy; -class vtkSMProperty; - -/// This class is a reader factory. The factory must be made file-type aware -/// by using addFileType. Once initialized, one can use createReader() -/// to create a reader that can read a particular file. -/// Applications that want to use the reader factory for creating readers, -/// must instantiate their own reader factory, initialize it and then -/// use it to create readers. pqApplicationCore/pqObjectBuilder does not require -/// that a reader factory is used at all. -class PQCORE_EXPORT pqReaderFactory : public QObject -{ - Q_OBJECT -public: - pqReaderFactory(QObject* parent=NULL); - virtual ~pqReaderFactory(); - - /// Register an extension (or extensions) with a particular reader proxy - /// identified by - /// the \c xmlgroup and \c xmlname. Same extension can be associated with - /// more than one reader, however, in that case, the reader(s) must support - /// \c CanReadFile() for this work correctly. - void addFileType(const QString& description, const QString& extension, - const QString& xmlgroup, const QString& xmlname); - - void addFileType(const QString& description, const QList<QString>& extensions, - const QString& xmlgroup, const QString& xmlname); - - /// An overload of addFileType where one can specify the prototype of the - /// reader proxy. - void addFileType(const QString& description, const QString& extension, - vtkSMProxy* prototype); - void addFileType(const QString& description, const QList<QString>& extensions, - vtkSMProxy* prototype); - - /// Create a reader given by name on the given server to read the given - /// file(s). File types must be registered before a file of the given - /// type can be read. This method creates and registers the reader proxy - /// that can read - pqPipelineSource* createReader(const QStringList& files, - const QString& readerName, pqServer* server); - - /// Returns a list of file types suitable for use with file dialog. - /// \c server is required to ensure that only those readers that can - /// be instantiated on the server will be considered. - QString getSupportedFileTypes(pqServer* server); - - /// Returns a list of the supported readers on a server. - /// \c server is required to ensure that only those readers that can - /// be instantiated on the server will be considered. - QStringList getSupportedReaders(pqServer* server); - - /// Same as getSupportedReaders but further constrains the list to contain - /// only those readers that report they can read the file pointed to by - /// \c filename (or perhaps do not report anything) - QStringList getSupportedReadersForFile(pqServer* server, - const QString &filename); - - /// Returns a short description of the reader. - QString getReaderDescription(const QString& readerName); - - /// Returns the list of extensions for a reader - QString getExtensionTypeString(pqPipelineSource* reader); - - /// Return the reader type for a file - QString getReaderType(const QString& filename, pqServer*); - - bool checkIfFileIsReadable(const QString& name, pqServer*); - -public slots: - - /// loads file types from the Qt resource directory - /// ":/ParaViewResources/" - void loadFileTypes(); - -protected: - - /// Loads file type definitions from the xml file. - /// Format of this xml is: - /// \verbatim - /// <ParaViewReaders> - /// <Reader name="[reader name should match the xmlname of the proxy]" - /// extensions="[space separated extensions supported, dont include ." - /// file_description="[short description]" - /// group=[optional: server manager group under which the reader definition - /// can be found.]" > - /// </Reader> - /// ... - /// </ParaViewReaders> - /// \endverbatim - /// By default, the reader is searched for under the \c sources group. - void loadFileTypes(const QString& xmlfilename); - -private: - pqReaderFactoryInternal* Internal; -}; - - -#endif - diff --git a/Qt/Core/pqRenderView.cxx b/Qt/Core/pqRenderView.cxx index 69d68b7c7d..80ee05de55 100644 --- a/Qt/Core/pqRenderView.cxx +++ b/Qt/Core/pqRenderView.cxx @@ -74,6 +74,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqApplicationCore.h" #include "pqDataRepresentation.h" #include "pqLinkViewWidget.h" +#include "pqOptions.h" #include "pqOutputPort.h" #include "pqPipelineSource.h" #include "pqServer.h" @@ -250,8 +251,11 @@ void pqRenderView::initializeWidgets() void pqRenderView::setDefaultPropertyValues() { vtkSMProxy* proxy = this->getProxy(); - pqSMAdaptor::setElementProperty(proxy->GetProperty("UseLight"), 1); - pqSMAdaptor::setElementProperty(proxy->GetProperty("LightSwitch"), 0); + if (!pqApplicationCore::instance()->getOptions()->GetDisableLightKit()) + { + pqSMAdaptor::setElementProperty(proxy->GetProperty("UseLight"), 1); + pqSMAdaptor::setElementProperty(proxy->GetProperty("LightSwitch"), 0); + } this->Superclass::setDefaultPropertyValues(); this->clearUndoStack(); } @@ -260,10 +264,13 @@ void pqRenderView::setDefaultPropertyValues() void pqRenderView::restoreDefaultLightSettings() { this->Superclass::restoreDefaultLightSettings(); - vtkSMProxy* proxy = this->getProxy(); - pqSMAdaptor::setElementProperty(proxy->GetProperty("UseLight"), 1); - pqSMAdaptor::setElementProperty(proxy->GetProperty("LightSwitch"), 0); - proxy->UpdateVTKObjects(); + if (!pqApplicationCore::instance()->getOptions()->GetDisableLightKit()) + { + vtkSMProxy* proxy = this->getProxy(); + pqSMAdaptor::setElementProperty(proxy->GetProperty("UseLight"), 1); + pqSMAdaptor::setElementProperty(proxy->GetProperty("LightSwitch"), 0); + proxy->UpdateVTKObjects(); + } } //----------------------------------------------------------------------------- diff --git a/Qt/Core/pqRenderView.h b/Qt/Core/pqRenderView.h index 88d7f69557..2610ddefe7 100644 --- a/Qt/Core/pqRenderView.h +++ b/Qt/Core/pqRenderView.h @@ -132,9 +132,6 @@ public: /// if that's not the case. virtual bool supportsUndo() const { return true; } - /// This view supports lookmarks. - virtual bool supportsLookmarks() const { return true; } - /// Returns if the view module can undo/redo interaction /// given the current state of the interaction undo stack. virtual bool canUndo() const; @@ -261,7 +258,7 @@ protected: /// through undo-redo/state/python, we try to use the first Axes display in /// the view as the center axes if any. Otherwise a new center axes will be /// created for the view then setCenterAxesVisibility(true) is called. Thus, - /// for such views the behaviour is analogous to center axis visibility being + /// for such views the behavior is analogous to center axis visibility being /// off. Once, the user enables the center axes, we will show one. void initializeCenterAxes(); diff --git a/Qt/Core/pqRenderViewBase.cxx b/Qt/Core/pqRenderViewBase.cxx index 483e26f47b..c697af13f9 100644 --- a/Qt/Core/pqRenderViewBase.cxx +++ b/Qt/Core/pqRenderViewBase.cxx @@ -646,7 +646,7 @@ bool pqRenderViewBase::canDisplay(pqOutputPort* opPort) const } } - vtkPVDataInformation* dinfo = opPort->getDataInformation(false); + vtkPVDataInformation* dinfo = opPort->getDataInformation(); if (dinfo->GetDataSetType() == -1 || dinfo->GetDataSetType() == VTK_TABLE) { diff --git a/Qt/Core/pqScalarBarVisibilityAdaptor.cxx b/Qt/Core/pqScalarBarVisibilityAdaptor.cxx index 960de94980..018d235aa0 100644 --- a/Qt/Core/pqScalarBarVisibilityAdaptor.cxx +++ b/Qt/Core/pqScalarBarVisibilityAdaptor.cxx @@ -63,15 +63,6 @@ pqScalarBarVisibilityAdaptor::pqScalarBarVisibilityAdaptor(QAction* p) p, SLOT(setEnabled(bool)), Qt::QueuedConnection); QObject::connect(this, SIGNAL(scalarBarVisible(bool)), p, SLOT(setChecked(bool))); - - pqUndoStack* us = pqApplicationCore::instance()->getUndoStack(); - if (us) - { - QObject::connect(this, SIGNAL(begin(const QString&)), - us, SLOT(beginUndoSet(const QString&))); - QObject::connect(this, SIGNAL(end()), - us, SLOT(endUndoSet())); - } } //----------------------------------------------------------------------------- @@ -132,10 +123,10 @@ void pqScalarBarVisibilityAdaptor::setScalarBarVisibility(bool visible) return; } - emit this->begin("Toggle Color Legend Visibility"); + BEGIN_UNDO_SET( "Toggle Color Legend Visibility"); pqScalarBarRepresentation* scalar_bar = lut_mgr->setScalarBarVisibility(this->Internal->ActiveRenderView, lut, visible); - emit this->end(); + END_UNDO_SET(); if (scalar_bar) { scalar_bar->renderViewEventually(); diff --git a/Qt/Core/pqScalarBarVisibilityAdaptor.h b/Qt/Core/pqScalarBarVisibilityAdaptor.h index c8e90fafa1..0c5127ac16 100644 --- a/Qt/Core/pqScalarBarVisibilityAdaptor.h +++ b/Qt/Core/pqScalarBarVisibilityAdaptor.h @@ -43,6 +43,8 @@ class QAction; /// any action to make it control the scalar bar /// visibility of the scalar bar for the selected source /// in the selected render window. +/// TO_DEPRECATE: This class will be deprecated soon and replaced by +/// pqScalarBarVisibilityReaction. class PQCORE_EXPORT pqScalarBarVisibilityAdaptor : public QObject { Q_OBJECT @@ -58,13 +60,6 @@ signals: /// Fired to update the scalarbar visibility state. void scalarBarVisible(bool); - /// Fired before scalar bar visibility is changed. - /// This signal can be connected with pqUndoStack. - void begin(const QString& label); - - /// Fired after changing scalar bar visibility. - void end(); - public slots: /// Set the active display which this adaptor is going to /// show/hide the scalar bar for. diff --git a/Qt/Core/pqScatterPlotRepresentation.cxx b/Qt/Core/pqScatterPlotRepresentation.cxx index a087ae24ff..4014497cad 100644 --- a/Qt/Core/pqScatterPlotRepresentation.cxx +++ b/Qt/Core/pqScatterPlotRepresentation.cxx @@ -264,7 +264,7 @@ void pqScatterPlotRepresentation::setDefaultPropertyValues() // Get the time that this representation is going to use. vtkPVDataInformation* dataInfo = 0; - dataInfo = this->getOutputPortFromInput()->getDataInformation(true); + dataInfo = this->getOutputPortFromInput()->getDataInformation(); /* if (repr->GetProperty("ScalarOpacityUnitDistance")) diff --git a/Qt/Core/pqServerManagerModel.cxx b/Qt/Core/pqServerManagerModel.cxx index eec3db9218..f7ce0168b1 100644 --- a/Qt/Core/pqServerManagerModel.cxx +++ b/Qt/Core/pqServerManagerModel.cxx @@ -48,15 +48,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ParaView Includes. #include "pqApplicationCore.h" +#include "pqHelperProxyStateLoader.h" +#include "pqOutputPort.h" +#include "pqPipelineSource.h" #include "pqPluginManager.h" #include "pqProxy.h" +#include "pqRepresentation.h" #include "pqServer.h" #include "pqServerManagerModelInterface.h" #include "pqServerManagerObserver.h" -#include "pqPipelineSource.h" #include "pqView.h" -#include "pqRepresentation.h" -#include "pqOutputPort.h" //----------------------------------------------------------------------------- class pqServerManagerModel::pqInternal @@ -92,6 +93,9 @@ pqServerManagerModel::pqServerManagerModel( this, SLOT(onConnectionCreated(vtkIdType))); QObject::connect(observer, SIGNAL(connectionClosed(vtkIdType)), this, SLOT(onConnectionClosed(vtkIdType))); + QObject::connect(observer, + SIGNAL(stateLoaded(vtkPVXMLElement*, vtkSMProxyLocator*)), + this, SLOT(onStateLoaded(vtkPVXMLElement*, vtkSMProxyLocator*))); } //----------------------------------------------------------------------------- @@ -314,6 +318,9 @@ void pqServerManagerModel::onProxyRegistered(const QString& group, QObject::connect( source, SIGNAL(modifiedStateChanged(pqServerManagerModelItem*)), this, SIGNAL(nameChanged(pqServerManagerModelItem*))); + QObject::connect( + source, SIGNAL(dataUpdated(pqPipelineSource*)), + this, SIGNAL(dataUpdated(pqPipelineSource*))); emit this->preSourceAdded(source); } @@ -469,6 +476,14 @@ void pqServerManagerModel::onConnectionClosed(vtkIdType id) delete server; } +//----------------------------------------------------------------------------- +void pqServerManagerModel::onStateLoaded(vtkPVXMLElement* root, + vtkSMProxyLocator* locator) +{ + pqHelperProxyStateLoader loader; + loader.loadState(root, locator); +} + //----------------------------------------------------------------------------- void pqServerManagerModel::beginRemoveServer(pqServer *server) { diff --git a/Qt/Core/pqServerManagerModel.h b/Qt/Core/pqServerManagerModel.h index 285cee9e43..c5fba3a93b 100644 --- a/Qt/Core/pqServerManagerModel.h +++ b/Qt/Core/pqServerManagerModel.h @@ -46,7 +46,9 @@ class pqServerManagerModelItem; class pqServerManagerObserver; class pqServerResource; class pqView; +class vtkPVXMLElement; class vtkSMProxy; +class vtkSMProxyLocator; //BTX class pqServerManagerModel; @@ -238,6 +240,9 @@ signals: void preConnectionRemoved(pqPipelineSource* source, pqPipelineSource* consumer, int srcOutputPort); + /// Fired when a source indicates that data was updated i.e. the pipeline was + /// updated. + void dataUpdated(pqPipelineSource*); protected slots: /// Called when a proxy is registered. @@ -254,6 +259,10 @@ protected slots: /// Called when a server connection is closed. virtual void onConnectionClosed(vtkIdType id); + /// Called when state file is loaded. We need to discover "helper proxies" and + /// set up the associations accordingly. + virtual void onStateLoaded(vtkPVXMLElement*, vtkSMProxyLocator*); + private: pqServerManagerModel(const pqServerManagerModel&); // Not implemented. void operator=(const pqServerManagerModel&); // Not implemented. diff --git a/Qt/Core/pqServerManagerObserver.cxx b/Qt/Core/pqServerManagerObserver.cxx index 85a973e80a..fa6ca76543 100644 --- a/Qt/Core/pqServerManagerObserver.cxx +++ b/Qt/Core/pqServerManagerObserver.cxx @@ -86,6 +86,10 @@ pqServerManagerObserver::pqServerManagerObserver(QObject* p) : QObject(p) this, SLOT(connectionCreated(vtkObject*, unsigned long, void*, void*))); this->Internal->VTKConnect->Connect(pm, vtkCommand::ConnectionClosedEvent, this, SLOT(connectionClosed(vtkObject*, unsigned long, void*, void*))); + this->Internal->VTKConnect->Connect(proxyManager, vtkCommand::LoadStateEvent, + this, SLOT(stateLoaded(vtkObject*, unsigned long, void*, void*))); + this->Internal->VTKConnect->Connect(proxyManager, vtkCommand::SaveStateEvent, + this, SLOT(stateSaved(vtkObject*, unsigned long, void*, void*))); } //----------------------------------------------------------------------------- @@ -159,3 +163,19 @@ void pqServerManagerObserver::connectionClosed(vtkObject*, unsigned long, void*, emit this->connectionClosed(*reinterpret_cast<vtkIdType*>(callData)); } +//----------------------------------------------------------------------------- +void pqServerManagerObserver::stateLoaded(vtkObject*, unsigned long, void*, void* callData) +{ + vtkSMProxyManager::LoadStateInformation &info = *reinterpret_cast< + vtkSMProxyManager::LoadStateInformation*>(callData); + emit this->stateLoaded(info.RootElement, info.ProxyLocator); +} + +//----------------------------------------------------------------------------- +void pqServerManagerObserver::stateSaved(vtkObject*, unsigned long, void*, void* callData) +{ + vtkSMProxyManager::LoadStateInformation &info = *reinterpret_cast< + vtkSMProxyManager::LoadStateInformation*>(callData); + emit this->stateSaved(info.RootElement); +} + diff --git a/Qt/Core/pqServerManagerObserver.h b/Qt/Core/pqServerManagerObserver.h index 2b6f078ce3..23c3ddcbfb 100644 --- a/Qt/Core/pqServerManagerObserver.h +++ b/Qt/Core/pqServerManagerObserver.h @@ -36,15 +36,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqCoreExport.h" #include <QObject> #include "vtkType.h" // needed for vtkIdType + class pqMultiView; class pqServerManagerObserverInternal; - class QVTKWidget; - class vtkCommand; class vtkObject; class vtkPVXMLElement; class vtkSMProxy; +class vtkSMProxyLocator; // This is a vtkSMProxyManager observer. This class should simply listen to events // fired by proxy manager and responds. It does not support any creation method. @@ -79,6 +79,12 @@ signals: /// Fired when a server connection is closed by the vtkProcessModule. void connectionClosed(vtkIdType connectionId); + /// Fired when a state file is loaded successfully. + void stateLoaded(vtkPVXMLElement* root, vtkSMProxyLocator* locator); + + /// Fired when state is being saved. + void stateSaved(vtkPVXMLElement* root); + private slots: void proxyRegistered(vtkObject* object, unsigned long e, void* clientData, void* callData, vtkCommand* command); @@ -86,6 +92,8 @@ private slots: void* callData, vtkCommand*); void connectionCreated(vtkObject*, unsigned long, void*, void* callData); void connectionClosed(vtkObject*, unsigned long, void*, void* callData); + void stateLoaded(vtkObject*, unsigned long, void*, void* callData); + void stateSaved(vtkObject*, unsigned long, void*, void* callData); protected: pqServerManagerObserverInternal *Internal; ///< Stores the pipeline objects. diff --git a/Qt/Core/pqServerResources.cxx b/Qt/Core/pqServerResources.cxx index cdae6db6c8..e31b81882e 100644 --- a/Qt/Core/pqServerResources.cxx +++ b/Qt/Core/pqServerResources.cxx @@ -32,7 +32,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqApplicationCore.h" #include "pqObjectBuilder.h" -#include "pqReaderFactory.h" #include "pqServer.h" #include "pqServerResources.h" #include "pqServerStartups.h" @@ -166,7 +165,7 @@ void pqServerResources::open(pqServer* server, const pqServerResource& resource) // Get the root element from the parser. if(vtkPVXMLElement* const root = xmlParser->GetRootElement()) { - pqApplicationCore::instance()->loadState(root, server, 0/*this->getActiveRenderModule()*/); + pqApplicationCore::instance()->loadState(root, server); } else { diff --git a/Qt/Core/pqServerStartups.cxx b/Qt/Core/pqServerStartups.cxx index 8848c08226..64fa743888 100644 --- a/Qt/Core/pqServerStartups.cxx +++ b/Qt/Core/pqServerStartups.cxx @@ -220,6 +220,11 @@ pqServerStartups::pqServerStartups(QObject* p) : // load user settings this->load(userSettings(), true); } + else if (options && options->GetDisableRegistry()) + { + // load the testing servers resource. + this->load(":/pqCoreTesting/pqTestingServers.pvsc", false); + } } pqServerStartups::~pqServerStartups() @@ -424,12 +429,12 @@ void pqServerStartups::load(vtkPVXMLElement* xml_servers, bool userPrefs) void pqServerStartups::load(const QString& path, bool userPrefs) { QFile file(path); - if(file.exists()) + if (file.open(QIODevice::ReadOnly)) { + QByteArray dat = file.readAll(); vtkSmartPointer<vtkPVXMLParser> parser = vtkSmartPointer<vtkPVXMLParser>::New(); - parser->SetFileName(path.toAscii().data()); - if(parser->Parse()) + if (parser->Parse(dat.data())) { this->load(parser->GetRootElement(), userPrefs); } diff --git a/Qt/Core/pqSpreadSheetViewSelectionModel.cxx b/Qt/Core/pqSpreadSheetViewSelectionModel.cxx index 0d3df9dde5..329b48f6bc 100644 --- a/Qt/Core/pqSpreadSheetViewSelectionModel.cxx +++ b/Qt/Core/pqSpreadSheetViewSelectionModel.cxx @@ -237,7 +237,7 @@ vtkSMSourceProxy* pqSpreadSheetViewSelectionModel::getSelectionSource() // Determine what selection proxy name we want. If the name differs then not // updatable. const char* proxyname = "IDSelectionSource"; - vtkPVDataInformation* dinfo = opport->getDataInformation(false); + vtkPVDataInformation* dinfo = opport->getDataInformation(); const char* cdclassname = dinfo->GetCompositeDataClassName(); if (cdclassname && strcmp(cdclassname, "vtkHierarchicalBoxDataSet") == 0) { diff --git a/Qt/Core/pqStandardViewModules.h b/Qt/Core/pqStandardViewModules.h index 7d9b0219ff..7eaba08b9a 100644 --- a/Qt/Core/pqStandardViewModules.h +++ b/Qt/Core/pqStandardViewModules.h @@ -39,7 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// interface class for plugins that create view modules class PQCORE_EXPORT pqStandardViewModules : public QObject, - public pqViewModuleInterface + public pqViewModuleInterface { Q_OBJECT Q_INTERFACES(pqViewModuleInterface) diff --git a/Qt/Core/pqUndoStack.cxx b/Qt/Core/pqUndoStack.cxx index a318f3b8e9..dd51bcf276 100644 --- a/Qt/Core/pqUndoStack.cxx +++ b/Qt/Core/pqUndoStack.cxx @@ -49,6 +49,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqApplicationCore.h" #include "pqHelperProxyRegisterUndoElement.h" #include "pqPendingDisplayUndoElement.h" +#include "pqProxyModifiedStateUndoElement.h" #include "pqProxyUnRegisterUndoElement.h" #include "pqServer.h" @@ -106,6 +107,10 @@ pqUndoStack::pqUndoStack(bool clientOnly, loader->RegisterElement(elem); elem->Delete(); + elem = pqProxyModifiedStateUndoElement::New(); + loader->RegisterElement(elem); + elem->Delete(); + this->Implementation->UndoStack->SetStateLoader(loader); this->Implementation->StateLoader = loader; loader->Delete(); diff --git a/Qt/Core/pqUndoStack.h b/Qt/Core/pqUndoStack.h index 1cf9495b0c..d59570babd 100644 --- a/Qt/Core/pqUndoStack.h +++ b/Qt/Core/pqUndoStack.h @@ -144,5 +144,60 @@ private: }; +#include "pqApplicationCore.h" + +inline void BEGIN_UNDO_SET(const QString& name) +{ + pqUndoStack* usStack = pqApplicationCore::instance()->getUndoStack(); + if (usStack) + { + usStack->beginUndoSet(name); + } +} + +inline void END_UNDO_SET() +{ + pqUndoStack* usStack = pqApplicationCore::instance()->getUndoStack(); + if (usStack) + { + usStack->endUndoSet(); + } +} + +inline void CLEAR_UNDO_STACK() +{ + pqUndoStack* usStack = pqApplicationCore::instance()->getUndoStack(); + if (usStack) + { + usStack->clear(); + } +} + +inline void ADD_UNDO_ELEM(vtkUndoElement* elem) +{ + pqUndoStack* usStack = pqApplicationCore::instance()->getUndoStack(); + if (usStack) + { + usStack->addToActiveUndoSet(elem); + } +} + +inline void BEGIN_UNDO_EXCLUDE() +{ + pqUndoStack* usStack = pqApplicationCore::instance()->getUndoStack(); + if (usStack) + { + usStack->beginNonUndoableChanges(); + } +} + +inline void END_UNDO_EXCLUDE() +{ + pqUndoStack* usStack = pqApplicationCore::instance()->getUndoStack(); + if (usStack) + { + usStack->endNonUndoableChanges(); + } +} #endif diff --git a/Qt/Core/pqView.h b/Qt/Core/pqView.h index 4dcb198e64..c7cdeef2ce 100644 --- a/Qt/Core/pqView.h +++ b/Qt/Core/pqView.h @@ -75,11 +75,6 @@ public: /// all undo related signals defined by this class. virtual bool supportsUndo() const { return false; } - /// Returns if this view module can support lookmarks. - /// Returns false by default. Subclassess must override - /// if that's not the case. - virtual bool supportsLookmarks() const { return false; } - /// Returns the type of this view module. QString getViewType() const { return this->ViewType; } @@ -121,7 +116,7 @@ public: /// Returns the current size of the rendering context. /// Default implementation returns the client size ofthe widget. Subclasses - /// may override to change this behaviour. + /// may override to change this behavior. virtual QSize getSize(); /// Capture the view image into a new vtkImageData with the given magnification diff --git a/Qt/Core/pqViewExporterManager.cxx b/Qt/Core/pqViewExporterManager.cxx index cf1088e6b5..0e0e1cc617 100644 --- a/Qt/Core/pqViewExporterManager.cxx +++ b/Qt/Core/pqViewExporterManager.cxx @@ -43,41 +43,37 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QFileInfo> // ParaView Includes. -#include "pqView.h" +#include "pqApplicationCore.h" +#include "pqPluginManager.h" #include "pqSMAdaptor.h" - -class pqViewExporterManager::pqInternal -{ -public: - QPointer<pqView> View; - -}; +#include "pqView.h" //----------------------------------------------------------------------------- pqViewExporterManager::pqViewExporterManager(QObject* _parent): Superclass(_parent) { - this->Internal = new pqInternal(); this->refresh(); + QObject::connect(pqApplicationCore::instance()->getPluginManager(), + SIGNAL(serverManagerExtensionLoaded()), + this, SLOT(refresh())); } //----------------------------------------------------------------------------- pqViewExporterManager::~pqViewExporterManager() { - delete this->Internal; } //----------------------------------------------------------------------------- void pqViewExporterManager::refresh() { vtkSMProxyManager::GetProxyManager()->InstantiateGroupPrototypes("exporters"); - this->setView(this->Internal->View); + this->setView(this->View); } //----------------------------------------------------------------------------- void pqViewExporterManager::setView(pqView* view) { - this->Internal->View = view; + this->View = view; if (!view) { emit this->exportable(false); @@ -105,14 +101,14 @@ void pqViewExporterManager::setView(pqView* view) QString pqViewExporterManager::getSupportedFileTypes() const { QString types = ""; - if (!this->Internal->View) + if (!this->View) { return types; } QList<QString> supportedWriters; - vtkSMProxy* proxy = this->Internal->View->getProxy(); + vtkSMProxy* proxy = this->View->getProxy(); bool first = true; vtkSMProxyIterator* iter = vtkSMProxyIterator::New(); @@ -149,7 +145,7 @@ QString pqViewExporterManager::getSupportedFileTypes() const //----------------------------------------------------------------------------- bool pqViewExporterManager::write(const QString& filename) { - if (!this->Internal->View) + if (!this->View) { return false; } @@ -158,7 +154,7 @@ bool pqViewExporterManager::write(const QString& filename) QString extension = info.suffix(); vtkSMProxy* exporter = 0; - vtkSMProxy* proxy = this->Internal->View->getProxy(); + vtkSMProxy* proxy = this->View->getProxy(); vtkSMProxyIterator* iter = vtkSMProxyIterator::New(); iter->SetModeToOneGroup(); diff --git a/Qt/Core/pqViewExporterManager.h b/Qt/Core/pqViewExporterManager.h index cc1fa41751..e0e6e3b8f2 100644 --- a/Qt/Core/pqViewExporterManager.h +++ b/Qt/Core/pqViewExporterManager.h @@ -33,6 +33,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define __pqViewExporterManager_h #include <QObject> +#include <QPointer> #include "pqCoreExport.h" class pqView; @@ -74,8 +75,7 @@ private: pqViewExporterManager(const pqViewExporterManager&); // Not implemented. void operator=(const pqViewExporterManager&); // Not implemented. - class pqInternal; - pqInternal* Internal; + QPointer<pqView> View; }; #endif diff --git a/Qt/Python/pqPythonManager.cxx b/Qt/Python/pqPythonManager.cxx index 18ba1ef58a..45c63c5403 100644 --- a/Qt/Python/pqPythonManager.cxx +++ b/Qt/Python/pqPythonManager.cxx @@ -31,6 +31,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =========================================================================*/ #include "pqPythonManager.h" #include "pqApplicationCore.h" +#include "pqCoreUtilities.h" #include "pqPythonDialog.h" #include "pqPythonMacroSupervisor.h" #include "pqPythonToolsWidget.h" @@ -55,7 +56,6 @@ public: QPointer<pqPythonToolsWidget> ToolsWidget; QPointer<pqPythonMacroSupervisor> MacroSupervisor; QPointer<pqServer> ActiveServer; - QPointer<QWidget> DialogParent; }; //----------------------------------------------------------------------------- @@ -110,7 +110,8 @@ pqPythonDialog* pqPythonManager::pythonShellDialog() if (!this->Internal->PythonDialog) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - this->Internal->PythonDialog = new pqPythonDialog(this->Internal->DialogParent); + this->Internal->PythonDialog = + new pqPythonDialog(pqCoreUtilities::mainWidget()); // Initialize the interpreter and then import paraview modules this->Internal->PythonDialog->initializeInterpretor(); @@ -203,12 +204,6 @@ void pqPythonManager::initializeParaviewPythonModules() } } -//----------------------------------------------------------------------------- -void pqPythonManager::setParentForPythonDialog(QWidget* widget) -{ - this->Internal->DialogParent = widget; -} - //----------------------------------------------------------------------------- void pqPythonManager::addWidgetForMacros(QWidget* widget) { diff --git a/Qt/Python/pqPythonManager.h b/Qt/Python/pqPythonManager.h index f3052be021..53973f6c1b 100644 --- a/Qt/Python/pqPythonManager.h +++ b/Qt/Python/pqPythonManager.h @@ -75,15 +75,6 @@ public: // of widget. void addWidgetForMacros(QWidget* widget); - // Description: - // Set the widget (usually a QMainWindow) that will be used as parent to the - // pqPythonDialog. This is optional. From Qt documentation: - // - // "A dialog is always a top-level widget, but if it has a parent, its default - // location is centered on top of the parent. It will also share the parent's - // taskbar entry." - void setParentForPythonDialog(QWidget* parent = 0); - signals: void paraviewPythonModulesImported(); diff --git a/Qt/Testing/pqAbstractActivateEventPlayer.cxx b/Qt/Testing/pqAbstractActivateEventPlayer.cxx index 87bd6d2ce8..c9f9701b18 100644 --- a/Qt/Testing/pqAbstractActivateEventPlayer.cxx +++ b/Qt/Testing/pqAbstractActivateEventPlayer.cxx @@ -55,6 +55,30 @@ bool pqAbstractActivateEventPlayer::playEvent(QObject* Object, if(Command != "activate") return false; + if (QMenuBar* const menu_bar = qobject_cast<QMenuBar*>(Object)) + { + QMenu* sub_menu = menu_bar->findChild<QMenu*>(Arguments); + if (sub_menu) + { + QAction* action = 0; + foreach (QAction* cur_action, menu_bar->actions()) + { + if (cur_action->menu() == sub_menu) + { + action = cur_action; + break; + } + } + if (action) + { + menu_bar->setActiveAction(action); + return true; + } + } + Error = true; + return true; + } + if(QMenu* const object = qobject_cast<QMenu*>(Object)) { @@ -107,7 +131,8 @@ bool pqAbstractActivateEventPlayer::playEvent(QObject* Object, if(QMenuBar* menu_bar = qobject_cast<QMenuBar*>(p)) { menu_bar->setActiveAction(next->menuAction()); - while(!next->isVisible()) + int max_wait = 0; + while(!next->isVisible() && (++max_wait) <= 10) { pqEventDispatcher::processEventsAndWait(100); } @@ -131,7 +156,8 @@ bool pqAbstractActivateEventPlayer::playEvent(QObject* Object, menu->setActiveAction(next->menuAction()); #endif - while(!next->isVisible()) + int max_wait = 0; + while(!next->isVisible() && (++max_wait) <= 10) { pqEventDispatcher::processEventsAndWait(100); } @@ -149,12 +175,21 @@ bool pqAbstractActivateEventPlayer::playEvent(QObject* Object, QApplication::sendEvent(object, &keyDown); QApplication::sendEvent(object, &keyUp); + QApplication::processEvents(); return true; } if(QAbstractButton* const object = qobject_cast<QAbstractButton*>(Object)) { object->click(); + QApplication::processEvents(); + return true; + } + + if (QAction* const action = qobject_cast<QAction*>(Object)) + { + action->activate(QAction::Trigger); + QApplication::processEvents(); return true; } diff --git a/Qt/Testing/pqAbstractBooleanEventPlayer.cxx b/Qt/Testing/pqAbstractBooleanEventPlayer.cxx index 1d290e1d43..d28eee55f8 100644 --- a/Qt/Testing/pqAbstractBooleanEventPlayer.cxx +++ b/Qt/Testing/pqAbstractBooleanEventPlayer.cxx @@ -34,6 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QAbstractButton> #include <QtDebug> +#include <QAction> pqAbstractBooleanEventPlayer::pqAbstractBooleanEventPlayer(QObject* p) : pqWidgetEventPlayer(p) @@ -54,6 +55,15 @@ bool pqAbstractBooleanEventPlayer::playEvent(QObject* Object, const QString& Com return true; } + if (QAction* const action = qobject_cast<QAction*>(Object)) + { + if (action->isChecked() != value) + { + action->trigger(); + } + return true; + } + qCritical() << "calling set_boolean on unhandled type " << Object; Error = true; return true; diff --git a/Qt/Testing/pqAbstractButtonEventTranslator.cxx b/Qt/Testing/pqAbstractButtonEventTranslator.cxx index 4234afab32..8670fb860a 100644 --- a/Qt/Testing/pqAbstractButtonEventTranslator.cxx +++ b/Qt/Testing/pqAbstractButtonEventTranslator.cxx @@ -37,6 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QKeyEvent> #include <QMouseEvent> #include <QPushButton> +#include <QToolButton> #include <iostream> @@ -91,11 +92,17 @@ bool pqAbstractButtonEventTranslator::translateEvent(QObject* Object, QEvent* Ev return true; } -void pqAbstractButtonEventTranslator::onActivate(QAbstractButton* object) +void pqAbstractButtonEventTranslator::onActivate(QAbstractButton* actualObject) { - if(object->isCheckable()) + QObject* object = actualObject; + QToolButton* tb = qobject_cast<QToolButton*>(object); + if (tb && tb->defaultAction()) { - const bool new_value = !object->isChecked(); + object = tb->defaultAction(); + } + if(actualObject->isCheckable()) + { + const bool new_value = !actualObject->isChecked(); emit recordEvent(object, "set_boolean", new_value ? "true" : "false"); } else diff --git a/Qt/Testing/pqEventDispatcher.cxx b/Qt/Testing/pqEventDispatcher.cxx index e7a27329d9..11c7c88e02 100644 --- a/Qt/Testing/pqEventDispatcher.cxx +++ b/Qt/Testing/pqEventDispatcher.cxx @@ -42,149 +42,78 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QApplication> #include <QEventLoop> #include <QThread> +#include <QDialog> +#include <QMainWindow> -//////////////////////////////////////////////////////////////////////////// -// pqEventDispatcher::pqImplementation +#include <iostream> +using namespace std; -class pqEventDispatcher::pqImplementation -{ -public: - pqImplementation() : - Source(0), - Player(0), - EventState(FlushEvents), - FlushCount(0) - { - this->Timer.setSingleShot(true); - this->QueueTimer.setSingleShot(true); - } - - pqEventSource* Source; - pqEventPlayer* Player; - QTimer Timer; - QTimer QueueTimer; - enum EventStates - { - FlushEvents, - DoEvent, - Done - }; - int EventState; - int FlushCount; - - static int WaitTime; -}; - -// #include <iostream> -// using namespace std; - -static int MaxFlushCount = 2; -int pqEventDispatcher::pqImplementation::WaitTime = 0; - -//////////////////////////////////////////////////////////////////////////// -// pqEventDispatcher - -pqEventDispatcher::pqEventDispatcher() : - Implementation(new pqImplementation()) +//----------------------------------------------------------------------------- +pqEventDispatcher::pqEventDispatcher(QObject* parentObject) : + Superclass(parentObject) { - QObject::connect(this, SIGNAL(readyPlayNextEvent()), - this, SLOT(playNextEvent())); - - QObject::connect(&this->Implementation->Timer, SIGNAL(timeout()), - this, SLOT(checkPlayNextEvent())); - - // QueueTimer is only used to continue processing of events when blocking - // actions such as opening of modal dialogs are executed. - QObject::connect(&this->Implementation->QueueTimer, SIGNAL(timeout()), - this, SLOT(checkPlayNextEvent())); - + this->ActiveSource = NULL; + this->ActivePlayer = NULL; + this->PlayBackStatus = false; + this->PlayBackFinished = false; + this->AdhocMenuTimer.setInterval(1000); + this->AdhocMenuTimer.setSingleShot(true); + QObject::connect(&this->AdhocMenuTimer, SIGNAL(timeout()), + this, SLOT(onMenuTimerTimeout())); + QObject::connect(this, SIGNAL(triggerPlayEventStack(void*)), + this, SLOT(playEventStack(void*)), Qt::QueuedConnection); } //----------------------------------------------------------------------------- pqEventDispatcher::~pqEventDispatcher() { - delete this->Implementation; } //----------------------------------------------------------------------------- -void pqEventDispatcher::playEvents(pqEventSource& source, pqEventPlayer& player) +bool pqEventDispatcher::playEvents(pqEventSource& source, pqEventPlayer& player) { - if(this->Implementation->Source) + if (this->ActiveSource || this->ActivePlayer) { qCritical() << "Event dispatcher is already playing"; - return; + return false; } - this->Implementation->Source = &source; - this->Implementation->Player = &player; - + this->ActiveSource = &source; + this->ActivePlayer = &player; + QApplication::setEffectEnabled(Qt::UI_General, false); - this->Implementation->Timer.setInterval(1); - this->Implementation->Timer.start(); - this->Implementation->EventState = pqImplementation::FlushEvents; - this->Implementation->WaitTime = 0; + QApplication::instance()->installEventFilter(this); + + this->PlayBackStatus = true; // success. + this->PlayBackFinished = false; + this->playEventStack(NULL); + this->ActiveSource = NULL; + this->ActivePlayer = NULL; + + QApplication::instance()->removeEventFilter(this); + return this->PlayBackStatus; } //----------------------------------------------------------------------------- -void pqEventDispatcher::checkPlayNextEvent() +void pqEventDispatcher::playEventStack(void* activeWidget) { - if(this->Implementation->EventState == pqImplementation::Done) + QWidget* activePopup = QApplication::activePopupWidget(); + QWidget* activeModal = QApplication::activeModalWidget(); + + if (activeWidget != activePopup && activeWidget != activeModal) { return; } - - this->Implementation->Timer.setInterval(1); - QApplication::syncX(); - // do an event every other time through here to be sure events are processed - if(this->Implementation->WaitTime) + if (this->PlayBackFinished) { - this->Implementation->FlushCount = 0; - this->Implementation->Timer.setInterval(this->Implementation->WaitTime); - } - else if(this->Implementation->EventState == pqImplementation::DoEvent) - { - this->Implementation->FlushCount = 0; - this->Implementation->EventState = pqImplementation::FlushEvents; - pqEventDispatcher::processEventsAndWait(1); - emit this->readyPlayNextEvent(); - } - else if(this->Implementation->EventState == pqImplementation::FlushEvents) - { - if(this->Implementation->FlushCount < MaxFlushCount && - QAbstractEventDispatcher::instance()->hasPendingEvents()) - { - this->Implementation->FlushCount++; - } - else - { - this->Implementation->EventState = pqImplementation::DoEvent; - } + return; } - this->Implementation->Timer.start(); -} - -//----------------------------------------------------------------------------- -void pqEventDispatcher::queueNextEvent() -{ - // cout << "About To Block -- queue, next event" << endl; - // This has a longer delay, so as to take into consideration the time needed - // to handle the normal event. If the normal processing completes within this - // time, then the timer is stopped and we continue with the regular execution. - this->Implementation->QueueTimer.setInterval(1000); - this->Implementation->QueueTimer.start(); - QObject::disconnect(QAbstractEventDispatcher::instance(), - SIGNAL(aboutToBlock()), - this, SLOT(queueNextEvent())); -} -//----------------------------------------------------------------------------- -void pqEventDispatcher::playNextEvent() -{ - - if(!this->Implementation->Source) + if (!this->ActiveSource) { + qCritical("Internal error: playEventStack Ecalled without valid source."); return; } @@ -192,78 +121,142 @@ void pqEventDispatcher::playNextEvent() QString command; QString arguments; - // block signals as some event sources may interact with the event loop - this->blockSignals(true); - - int result = this->Implementation->Source->getNextEvent( - object, command, arguments); - this->blockSignals(false); - - if(result == pqEventSource::DONE) + int result = this->ActiveSource->getNextEvent(object, command, arguments); + if (result == pqEventSource::DONE) { - this->stopPlayback(); - emit this->succeeded(); + this->PlayBackFinished = true; return; } else if(result == pqEventSource::FAILURE) { - this->stopPlayback(); - emit this->failed(); + this->PlayBackFinished = true; + this->PlayBackStatus = false; // failure. return; } + QApplication::syncX(); + static unsigned long counter=0; + unsigned long local_counter = counter++; + int indent = this->ActiveModalWidgetStack.size(); + QString pretty_name = object.mid(object.lastIndexOf('/')); + bool print_debug = getenv("PV_DEBUG_TEST") != NULL; + if (print_debug) + { + cout << QString().fill(' ', 4*indent).toStdString().c_str() + << local_counter << ": Test (" << indent << "): " + << pretty_name.toStdString().c_str() << ": " + << command.toStdString().c_str() << " : " + << arguments.toStdString().c_str() << endl; + } + bool error = false; - // cout << "Start Play" << endl; - // When modal dialogs are being popped up, we want to ensure that the - // command-queue processing still continues. Hence we listen to this - // aboutToBlock() signal and then continue with the event processing. - QObject::connect(QAbstractEventDispatcher::instance(), SIGNAL(aboutToBlock()), - this, SLOT(queueNextEvent())); - this->Implementation->Player->playEvent(object, command, arguments, error); - QObject::disconnect(QAbstractEventDispatcher::instance(), SIGNAL(aboutToBlock()), - this, SLOT(queueNextEvent())); - // We are done with normal processing so no need to processing the event queue - // using this modal-dialog mechanism. - this->Implementation->QueueTimer.stop(); - // cout << "End Play" << endl; - if(error) + this->ActivePlayer->playEvent(object, command, arguments, error); + this->processEventsAndWait(100); // let what's going to happen after the + if (print_debug) + { + cout << QString().fill(' ', 4*indent).toStdString().c_str() + << local_counter << ": Done" << endl; + } + if (error) + { + this->PlayBackStatus = false; + this->PlayBackFinished = true; + return; + } + + if (QApplication::activeModalWidget() != activeWidget) { - this->stopPlayback(); - emit this->failed(); + // done. return; } + + this->playEventStack(activeWidget); } //----------------------------------------------------------------------------- -void pqEventDispatcher::stopPlayback() +void pqEventDispatcher::processEventsAndWait(int ms) { - this->Implementation->Timer.stop(); - this->Implementation->EventState = pqImplementation::Done; - - this->Implementation->Source->stop(); - - this->Implementation->Source = 0; - this->Implementation->Player = 0; - - // ensure that everything is completed - QCoreApplication::processEvents(); + if (ms > 0) + { + QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + QEventLoop loop; + QTimer::singleShot(ms, &loop, SLOT(quit())); + loop.exec(QEventLoop::ExcludeUserInputEvents); + } + QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } //----------------------------------------------------------------------------- -void pqEventDispatcher::processEventsAndWait(int ms) +void pqEventDispatcher::onMenuTimerTimeout() { - if(QThread::currentThread() == qApp->thread()) - { - pqEventDispatcher::pqImplementation::WaitTime = ms <= 0 ? 1 : ms; - } - - QEventLoop loop; - QTimer::singleShot(ms, &loop, SLOT(quit())); - loop.exec(); - - if(QThread::currentThread() == qApp->thread()) - { - pqEventDispatcher::pqImplementation::WaitTime = 0; - } + QWidget* currentPopup = QApplication::activePopupWidget(); +#if defined(__APPLE__) + if (!currentPopup) + { + currentPopup = QApplication::activeModalWidget(); + } +#endif + + if (currentPopup) + { + this->playEventStack(currentPopup); + } } +//----------------------------------------------------------------------------- +bool pqEventDispatcher::eventFilter(QObject *obj, QEvent *ev) +{ + QWidget* currentPopup = QApplication::activePopupWidget(); +#if defined(__APPLE__) + if (!currentPopup) + { + currentPopup = QApplication::activeModalWidget(); + } +#endif + if (currentPopup && !this->AdhocMenuTimer.isActive()) + { + // it's possible that this is temporary popup (eg. standard menus), so we do + // a deferred handling for this event (I hate these menus in tests, btw). + // cout << "Start Menu Timer" << endl; + this->AdhocMenuTimer.start(); + } + if (!currentPopup && this->AdhocMenuTimer.isActive()) + { + // cout << "Stop Menu Timer" << endl; + this->AdhocMenuTimer.stop(); + } + +#if defined(__APPLE__) + return this->Superclass::eventFilter(obj, ev); +#endif + + QWidget* currentWidget = QApplication::activeModalWidget(); + + if ( + (this->ActiveModalWidgetStack.size() == 0 && currentWidget == 0) || + (this->ActiveModalWidgetStack.size() > 0 && this->ActiveModalWidgetStack.back() == + currentWidget)) + { + return this->Superclass::eventFilter(obj, ev); + } + + if (currentWidget && this->ActiveModalWidgetStack.contains(currentWidget)) + { + // a modal dialog was closed. + this->ActiveModalWidgetStack = this->ActiveModalWidgetStack.mid(0, + this->ActiveModalWidgetStack.indexOf(currentWidget)+1); + } + else if ((currentWidget && this->ActiveModalWidgetStack.size() == 0) || + (currentWidget && !this->ActiveModalWidgetStack.contains(currentWidget)) ) + { + // new modal dialog, + this->ActiveModalWidgetStack.push_back(currentWidget); + emit this->triggerPlayEventStack(this->ActiveModalWidgetStack.back()); + } + else if (!currentWidget) + { + // all modal dialogs were closed. + this->ActiveModalWidgetStack.clear(); + } + return this->Superclass::eventFilter(obj, ev); +} diff --git a/Qt/Testing/pqEventDispatcher.h b/Qt/Testing/pqEventDispatcher.h index df95c5d7dd..4b2de6afa6 100644 --- a/Qt/Testing/pqEventDispatcher.h +++ b/Qt/Testing/pqEventDispatcher.h @@ -36,46 +36,57 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "QtTestingExport.h" #include <QObject> +#include <QTimer> +#include <QEvent> class pqEventPlayer; class pqEventSource; -class QTTESTING_EXPORT pqEventDispatcher : - public QObject +/// pqEventDispatcher is responsible for taking each "event" from the test and +/// then "playing" it using the player. The dispatcher is the critical component +/// of this playback since it decides when it's time to dispatch the next +/// "event" from the test. +class QTTESTING_EXPORT pqEventDispatcher : public QObject { Q_OBJECT - + typedef QObject Superclass; public: - pqEventDispatcher(); + pqEventDispatcher(QObject* parent=0); ~pqEventDispatcher(); - /** Retrieves events from the given event source, dispatching them to - the given event player for test case playback. Note that playback is - asynchronous - the call to playEvents() returns immediately. Callers - must ensure that the source, dispatcher, and player objects remain - in-scope until either the succeeded() or failed() signal is emitted - to indicate that playback has finished. */ - void playEvents(pqEventSource& source, pqEventPlayer& player); + /// Retrieves events from the given event source, dispatching them to + /// the given event player for test case playback. This call blocks until all + /// the events from the source have been played back (or failure). Returns + /// true if playback was successful. + bool playEvents(pqEventSource& source, pqEventPlayer& player); /** Wait function provided for players that need to wait for the GUI to perform a certain action */ static void processEventsAndWait(int ms); -signals: - void succeeded(); - void failed(); - void readyPlayNextEvent(); - -private slots: - void playNextEvent(); - void checkPlayNextEvent(); - void queueNextEvent(); +protected: + /// filter application level events. This is not really a "filter", but more + /// like an observer of the application level events. + bool eventFilter(QObject *obj, QEvent *ev); -private: - void stopPlayback(); - - class pqImplementation; - pqImplementation* const Implementation; +signals: + void triggerPlayEventStack(void*); + +protected slots: + /// Plays event set, until + /// 2> All events have been processed + /// 3> There's an error. + void playEventStack(void* activeWidget); + + void onMenuTimerTimeout(); +protected: + bool PlayBackFinished; + bool PlayBackStatus; + + pqEventSource* ActiveSource; + pqEventPlayer* ActivePlayer; + QTimer AdhocMenuTimer; + QList<QWidget*> ActiveModalWidgetStack; }; #endif // !_pqEventDispatcher_h diff --git a/Qt/Testing/pqMenuEventTranslator.cxx b/Qt/Testing/pqMenuEventTranslator.cxx index 02d3d98e18..6cf4ae426d 100644 --- a/Qt/Testing/pqMenuEventTranslator.cxx +++ b/Qt/Testing/pqMenuEventTranslator.cxx @@ -57,8 +57,18 @@ bool pqMenuEventTranslator::translateEvent(QObject* Object, QEvent* Event, return false; } - if(menubar) + if (menubar) { + QMouseEvent* e = static_cast<QMouseEvent*>(Event); + if (e->button() == Qt::LeftButton) + { + QAction* action = menubar->actionAt(e->pos()); + if (action && action->menu()) + { + QString which = action->menu()->objectName(); + emit recordEvent(menubar, "activate", which); + } + } return true; } @@ -86,7 +96,7 @@ bool pqMenuEventTranslator::translateEvent(QObject* Object, QEvent* Event, if(e->button() == Qt::LeftButton) { QAction* action = menu->actionAt(e->pos()); - if(action && !action->menu()) + if (action && !action->menu()) { QString which = action->objectName(); if(which == QString::null) diff --git a/Qt/Testing/pqTestUtility.cxx b/Qt/Testing/pqTestUtility.cxx index c94feccef2..95566bc491 100644 --- a/Qt/Testing/pqTestUtility.cxx +++ b/Qt/Testing/pqTestUtility.cxx @@ -45,22 +45,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "pqPythonEventObserver.h" #endif - +//----------------------------------------------------------------------------- pqTestUtility::pqTestUtility(QObject* p) : QObject(p) { - QObject::connect( - &this->Dispatcher, - SIGNAL(succeeded()), - this, - SLOT(testSucceeded())); - - QObject::connect( - &this->Dispatcher, - SIGNAL(failed()), - this, - SLOT(testFailed())); - + this->PlayingTest = false; this->Translator.addDefaultWidgetEventTranslators(); this->Player.addDefaultWidgetEventPlayers(); @@ -71,25 +60,30 @@ pqTestUtility::pqTestUtility(QObject* p) : #endif } +//----------------------------------------------------------------------------- pqTestUtility::~pqTestUtility() { } +//----------------------------------------------------------------------------- pqEventDispatcher* pqTestUtility::dispatcher() { return &this->Dispatcher; } +//----------------------------------------------------------------------------- pqEventPlayer* pqTestUtility::eventPlayer() { return &this->Player; } +//----------------------------------------------------------------------------- pqEventTranslator* pqTestUtility::eventTranslator() { return &this->Translator; } +//----------------------------------------------------------------------------- void pqTestUtility::addEventSource(const QString& fileExtension, pqEventSource* source) { QMap<QString, pqEventSource*>::iterator iter; @@ -104,6 +98,7 @@ void pqTestUtility::addEventSource(const QString& fileExtension, pqEventSource* source->setParent(this); } +//----------------------------------------------------------------------------- void pqTestUtility::addEventObserver(const QString& fileExtension, pqEventObserver* observer) { @@ -125,27 +120,49 @@ void pqTestUtility::addEventObserver(const QString& fileExtension, } -void pqTestUtility::playTests(const QString& filename) +//----------------------------------------------------------------------------- +bool pqTestUtility::playTests(const QString& filename) { - QFileInfo info(filename); - QString suffix = info.completeSuffix(); - QMap<QString, pqEventSource*>::iterator iter; - iter = this->EventSources.find(suffix); - if(info.isReadable() && iter != this->EventSources.end()) - { - iter.value()->setContent(filename); - this->Dispatcher.playEvents(*iter.value(), this->Player); - } + QStringList files; + files << filename; + return this->playTests(files); } -void pqTestUtility::playTests(const QStringList& filenames) +//----------------------------------------------------------------------------- +bool pqTestUtility::playTests(const QStringList& filenames) { - foreach(QString filename, filenames) + if (this->PlayingTest) { - this->playTests(filename); + qCritical("playTests() cannot be called recursively."); + return false; } + + this->PlayingTest = true; + + bool success = true; + foreach (QString filename, filenames) + { + QFileInfo info(filename); + QString suffix = info.completeSuffix(); + QMap<QString, pqEventSource*>::iterator iter; + iter = this->EventSources.find(suffix); + if(info.isReadable() && iter != this->EventSources.end()) + { + iter.value()->setContent(filename); + if (!this->Dispatcher.playEvents(*iter.value(), this->Player)) + { + // dispatcher returned failure, don't continue with rest of the tests + // and flag error. + success = false; + break; + } + } + } + this->PlayingTest = false; + return success; } +//----------------------------------------------------------------------------- void pqTestUtility::recordTests(const QString& filename) { #if defined(Q_WS_MAC) @@ -185,11 +202,3 @@ void pqTestUtility::recordTests(const QString& filename) dialog->show(); } -void pqTestUtility::testSucceeded() -{ -} - -void pqTestUtility::testFailed() -{ -} - diff --git a/Qt/Testing/pqTestUtility.h b/Qt/Testing/pqTestUtility.h index d772c02775..83b25cbb54 100644 --- a/Qt/Testing/pqTestUtility.h +++ b/Qt/Testing/pqTestUtility.h @@ -38,6 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QSet> #include <QTextStream> #include <QFile> +#include <QStringList> #include "QtTestingExport.h" #include "pqEventDispatcher.h" @@ -58,11 +59,15 @@ public: public: - /// get the event dispatcher + /// Get the event dispatcher. Dispatcher is used to play tests back. pqEventDispatcher* dispatcher(); - /// get the event player + + /// Get the event player. This the test-file-interpreter (if you will), that + /// parses the test file and creates events from it that can be dispatched by + /// the pqEventDispatcher. pqEventPlayer* eventPlayer(); - /// get the event translator + + /// Get the event translator. This is used for recording tests. pqEventTranslator* eventTranslator(); /// add an event source for playback of files @@ -75,25 +80,25 @@ public: /// A pqPythonEventObserver is automatically added if Python support is enabled. void addEventObserver(const QString& fileExtension, pqEventObserver* translator); - -public slots: - /// start the playing of tests in a file - virtual void playTests(const QString& filename); - /// start playing the tests in the collection of files. - virtual void playTests(const QStringList& filenames); + /// Returns if the utility is currently playing a test. + bool playingTest() const + { return this->PlayingTest; } - /// start the recording of tests to a file - virtual void recordTests(const QString& filename); + /// Plays back the test given by the filename(s). This is a blocking call i.e. + /// it does not return until the test has been played or aborted due to + /// failure. Returns true if the test played successfully. + bool playTests(const QString& filename); + virtual bool playTests(const QStringList& filenames); -protected slots: - virtual void testSucceeded(); - virtual void testFailed(); + /// start the recording of tests to a file + void recordTests(const QString& filename); protected: pqEventDispatcher Dispatcher; pqEventPlayer Player; pqEventTranslator Translator; + bool PlayingTest; QMap<QString, pqEventSource*> EventSources; QMap<QString, pqEventObserver*> EventObservers; diff --git a/Qt/Testing/pqThreadedEventSource.cxx b/Qt/Testing/pqThreadedEventSource.cxx index 82909ad0c0..2c96a533c3 100644 --- a/Qt/Testing/pqThreadedEventSource.cxx +++ b/Qt/Testing/pqThreadedEventSource.cxx @@ -180,6 +180,11 @@ void pqThreadedEventSource::guiAcknowledge() this->Internal->Waiting = 0; } +void pqThreadedEventSource::msleep(int msec) +{ + pqInternal::ThreadHelper::msleep(msec); +} + void pqThreadedEventSource::done(int success) { if(success == 0) diff --git a/Qt/Testing/pqThreadedEventSource.h b/Qt/Testing/pqThreadedEventSource.h index beccbac0bf..e4cf8693a8 100644 --- a/Qt/Testing/pqThreadedEventSource.h +++ b/Qt/Testing/pqThreadedEventSource.h @@ -80,6 +80,9 @@ public: /** Give the testing thread an acknowledgement. For use by the GUI thread */ void guiAcknowledge(); + + // helper method to sleep. + static void msleep(int msecs); private slots: diff --git a/Qt/Widgets/CMakeLists.txt b/Qt/Widgets/CMakeLists.txt index a0cecc6d35..7d758d8990 100644 --- a/Qt/Widgets/CMakeLists.txt +++ b/Qt/Widgets/CMakeLists.txt @@ -56,8 +56,6 @@ SET(QtWidgets_SRCS pqListWidgetCheckHelper.h pqListWidgetItemObject.cxx pqListWidgetItemObject.h - pqLookmarkToolbar.cxx - pqLookmarkToolbar.h pqProgressBar.cxx pqProgressBar.h pqProgressBarHelper.h @@ -132,7 +130,6 @@ QT4_WRAP_CPP(QtWidgets_MOC_SOURCES pqLineEdit.h pqListWidgetCheckHelper.h pqListWidgetItemObject.h - pqLookmarkToolbar.h pqProgressBar.h pqProgressWidget.h pqQuickLaunchDialog.h diff --git a/Qt/Widgets/Testing/CMakeLists.txt b/Qt/Widgets/Testing/CMakeLists.txt index 88a6601b72..35e91c9429 100644 --- a/Qt/Widgets/Testing/CMakeLists.txt +++ b/Qt/Widgets/Testing/CMakeLists.txt @@ -9,7 +9,8 @@ SET(MyTests INCLUDE_DIRECTORIES(${QtWidgets_SOURCE_DIR} ${QtWidgets_BINARY_DIR}) CREATE_TEST_SOURCELIST(Tests pqWidgetsTest.cxx ${MyTests}) ADD_EXECUTABLE(pqWidgetsTest QTestApp.cxx ${Tests}) -TARGET_LINK_LIBRARIES(pqWidgetsTest pqWidgets ${QT_LIBRARIES}) +TARGET_LINK_LIBRARIES(pqWidgetsTest pqWidgets ${QT_LIBRARIES} + ${QT_QTNETWORK_LIBRARY}) FOREACH(test ${MyTests}) ADD_TEST(pqWidgets${test} "${EXECUTABLE_OUTPUT_PATH}/pqWidgetsTest" ${test} --exit) diff --git a/Qt/Widgets/pqHelpWindow.cxx b/Qt/Widgets/pqHelpWindow.cxx index 8c8ad6cf8b..70869a56ba 100644 --- a/Qt/Widgets/pqHelpWindow.cxx +++ b/Qt/Widgets/pqHelpWindow.cxx @@ -35,6 +35,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <QApplication> #include <QHelpEngine> #include <QHelpContentWidget> +#include <QHelpContentModel> +#include <QHelpContentItem> #include <QHelpIndexWidget> #include <QDir> #include <QTextBrowser> @@ -115,7 +117,24 @@ void pqHelpWindow::showPage(const QString& url) } //----------------------------------------------------------------------------- -void pqHelpWindow::registerDocumentation(const QString& qchfilename) +void pqHelpWindow::showHomePage(const QString& namespace_name) +{ + QList<QUrl> html_pages = this->HelpEngine->files(namespace_name, + QStringList(), "html"); + // now try to locate a file named index.html in this collection. + foreach (QUrl url, html_pages) + { + if (url.path().endsWith("index.html")) + { + this->showPage(url.toString()); + return; + } + } + qWarning() << "Could not locate index.html"; +} + +//----------------------------------------------------------------------------- +QString pqHelpWindow::registerDocumentation(const QString& qchfilename) { QString filename = qchfilename; // this piece of code handles the case where a resource file name is passed. @@ -128,5 +147,6 @@ void pqHelpWindow::registerDocumentation(const QString& qchfilename) tFile->setAutoRemove(true); } this->HelpEngine->registerDocumentation(filename); + return this->HelpEngine->namespaceName(filename); } diff --git a/Qt/Widgets/pqHelpWindow.h b/Qt/Widgets/pqHelpWindow.h index e25b381648..0e6628c877 100644 --- a/Qt/Widgets/pqHelpWindow.h +++ b/Qt/Widgets/pqHelpWindow.h @@ -58,12 +58,17 @@ public: /// which have the assistant configuration details. /// Unlike registering the documentation with the Qt assistant, this is not /// remembered across sessions and must be done each time. - virtual void registerDocumentation(const QString& qchfilename); + /// On successful loading, returns the namespace name provided by the help + /// file. + virtual QString registerDocumentation(const QString& qchfilename); /// Requests showing of a particular page. The url must begin with "qthelp:" /// scheme when referring to pages from the help files. virtual void showPage(const QString& url); + /// Experimental. I am not sure how to reliably determine the home page. + virtual void showHomePage(const QString& namespace_name); + signals: /// fired to relay warning messages from the help system. void helpWarnings(const QString&); diff --git a/Qt/Widgets/pqLookmarkToolbar.cxx b/Qt/Widgets/pqLookmarkToolbar.cxx deleted file mode 100644 index afd7bab508..0000000000 --- a/Qt/Widgets/pqLookmarkToolbar.cxx +++ /dev/null @@ -1,165 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: pqLookmarkToolbar.cxx - - Copyright (c) 2005-2008 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. - -========================================================================*/ - -/// \file pqLookmarkToolbar.cxx -/// \date 7/3/2006 - -#include "pqLookmarkToolbar.h" - -#include <QAction> -#include <QImage> -#include <QIcon> -#include <QPixmap> -#include <QMenu> - -#include "pqSetData.h" -#include "pqSetName.h" - -//----------------------------------------------------------------------------- -pqLookmarkToolbar::pqLookmarkToolbar(const QString &title, QWidget* p) : QToolBar(title, p) -{ - this->CurrentLookmark = 0; - this->setContextMenuPolicy(Qt::CustomContextMenu); - - this->connectActions(); -} - -//----------------------------------------------------------------------------- -pqLookmarkToolbar::pqLookmarkToolbar(QWidget* p) : QToolBar(p) -{ - this->CurrentLookmark = 0; - this->setContextMenuPolicy(Qt::CustomContextMenu); - - this->connectActions(); -} - -void pqLookmarkToolbar::connectActions() -{ - QObject::connect(this, - SIGNAL(customContextMenuRequested(const QPoint &)), - this, SLOT(showContextMenu(const QPoint &))); - - QObject::connect(this, - SIGNAL(actionTriggered(QAction*)), SLOT(onLoadLookmark(QAction*))); - - this->ActionEdit = new QAction("Edit",this); - connect(this->ActionEdit, - SIGNAL(triggered()), this, SLOT(editCurrentLookmark())); - - this->ActionRemove = new QAction("Delete",this); - connect(this->ActionRemove, - SIGNAL(triggered()), this, SLOT(removeCurrentLookmark())); -} - -//----------------------------------------------------------------------------- -void pqLookmarkToolbar::onLoadLookmark(QAction* action) -{ - if(!action) - { - return; - } - - QString sourceName = action->data().toString(); - - emit this->loadLookmark(sourceName); -} - - -//----------------------------------------------------------------------------- -void pqLookmarkToolbar::onLookmarkAdded(const QString &name, const QImage &icon) -{ - this->addAction(QIcon(QPixmap::fromImage(icon.scaled(48,48))), name) - << pqSetName(name) << pqSetData(name); -} - -//----------------------------------------------------------------------------- -void pqLookmarkToolbar::editCurrentLookmark() -{ - if(this->CurrentLookmark) - { - emit this->editLookmark(this->CurrentLookmark->text()); - } -} - -//----------------------------------------------------------------------------- -void pqLookmarkToolbar::removeCurrentLookmark() -{ - if(this->CurrentLookmark) - { - emit this->removeLookmark(this->CurrentLookmark->text()); - } -} - -//----------------------------------------------------------------------------- -void pqLookmarkToolbar::showContextMenu(const QPoint &menuPos) -{ - this->CurrentLookmark = this->actionAt(menuPos); - if(!this->CurrentLookmark) - { - return; - } - - QMenu menu; - menu.setObjectName("ToolbarLookmarkMenu"); - - menu.addAction(this->ActionEdit); - menu.addAction(this->ActionRemove); - - menu.exec(this->mapToGlobal(menuPos)); -} - -//----------------------------------------------------------------------------- -void pqLookmarkToolbar::onLookmarkRemoved(const QString &name) -{ - // Remove the action associated with the lookmark. - QAction *action = this->findChild<QAction *>(name); - if(action) - { - this->removeAction(action); - delete action; - } -} - -void pqLookmarkToolbar::onLookmarkNameChanged(const QString &oldName, const QString &newName) -{ - QAction *action = this->findChild<QAction *>(oldName); - if(action) - { - action << pqSetName(newName); - action << pqSetData(newName); - action->setText(newName); - action->setIconText(newName); - action->setToolTip(newName); - } -} - - diff --git a/Qt/Widgets/pqTreeWidget.cxx b/Qt/Widgets/pqTreeWidget.cxx index e3f00e84d0..ea6000e96d 100644 --- a/Qt/Widgets/pqTreeWidget.cxx +++ b/Qt/Widgets/pqTreeWidget.cxx @@ -365,7 +365,7 @@ QModelIndex pqTreeWidget::moveCursor(CursorAction cursorAction, Qt::KeyboardModi // if the table grows, the index may change. suggestedIndex = this->Superclass::moveCursor(cursorAction, modifiers); } - // otherwise default behaviour takes it to the first column in the next + // otherwise default behavior takes it to the first column in the next // row, which is what is expected. } else if (cursorAction == QAbstractItemView::MovePrevious && modifiers == Qt::NoModifier) diff --git a/Servers/Common/vtkCommandOptions.cxx b/Servers/Common/vtkCommandOptions.cxx index 1eb254000d..d56bde00f7 100644 --- a/Servers/Common/vtkCommandOptions.cxx +++ b/Servers/Common/vtkCommandOptions.cxx @@ -34,7 +34,7 @@ public: //---------------------------------------------------------------------------- vtkStandardNewMacro(vtkCommandOptions); -vtkCxxRevisionMacro(vtkCommandOptions, "1.10"); +vtkCxxRevisionMacro(vtkCommandOptions, "1.11"); //---------------------------------------------------------------------------- vtkCommandOptions::vtkCommandOptions() @@ -274,6 +274,30 @@ void vtkCommandOptions::AddArgument(const char* longarg, const char* shortarg, c } } +//---------------------------------------------------------------------------- +void vtkCommandOptions::AddCallback(const char* longarg, const char* shortarg, + vtkCommandOptions::CallbackType callback, void* call_data, const char* help, + int type) +{ + if(type & XMLONLY) + { + vtkErrorMacro("Callback arguments cannot be processed through XML."); + return; + } + + if (type & this->ProcessType || type == vtkCommandOptions::EVERYBODY) + { + typedef vtksys::CommandLineArguments argT; + this->Internals->CMD.AddCallback(longarg, argT::EQUAL_ARGUMENT, + callback, call_data, help); + if ( shortarg ) + { + this->Internals->CMD.AddCallback(shortarg, argT::EQUAL_ARGUMENT, + callback, call_data, longarg); + } + } +} + //---------------------------------------------------------------------------- int vtkCommandOptions::UnknownArgumentHandler(const char* argument, void* call_data) { diff --git a/Servers/Common/vtkCommandOptions.h b/Servers/Common/vtkCommandOptions.h index 05104c1eb9..52bd72d7b1 100644 --- a/Servers/Common/vtkCommandOptions.h +++ b/Servers/Common/vtkCommandOptions.h @@ -92,6 +92,11 @@ protected: // Destructor. virtual ~vtkCommandOptions(); + // Description: + // Prototype for callbacks. + typedef int(*CallbackType)(const char* argument, const char* value, + void* call_data); + // Description: // Add a command line option. For each argument added there is a long // version --long and a short version -l, a help string, and a variable @@ -109,6 +114,10 @@ protected: int* var, const char* help, int type=EVERYBODY); void AddArgument(const char* longarg, const char* shortarg, char** var, const char* help, int type=EVERYBODY); + + void AddCallback(const char* longarg, const char* shortarg, + CallbackType callback, void* call_data, const char* help, + int type=EVERYBODY); // Description: // Initialize arguments. diff --git a/Servers/Common/vtkPVOptions.cxx b/Servers/Common/vtkPVOptions.cxx index 4ad9583e1e..5959e7a0a6 100644 --- a/Servers/Common/vtkPVOptions.cxx +++ b/Servers/Common/vtkPVOptions.cxx @@ -24,7 +24,7 @@ //---------------------------------------------------------------------------- vtkStandardNewMacro(vtkPVOptions); -vtkCxxRevisionMacro(vtkPVOptions, "1.48"); +vtkCxxRevisionMacro(vtkPVOptions, "1.49"); //---------------------------------------------------------------------------- vtkPVOptions::vtkPVOptions() @@ -207,10 +207,11 @@ void vtkPVOptions::Initialize() "after which the server may timeout. The client typically shows warning " "messages before the server times out.", vtkPVOptions::PVDATA_SERVER|vtkPVOptions::PVSERVER); - - // This should be deprecated when I get the time - this->AddArgument("--cave-configuration", "-cc", &this->CaveConfigurationFileName, - "Specify the file that defines the displays for a cave. It is used only with CaveRenderModule."); + + // Disabling for now since we don't support Cave anymore. + // this->AddArgument("--cave-configuration", "-cc", &this->CaveConfigurationFileName, + // "Specify the file that defines the displays for a cave. It is used only with CaveRenderModule."); + this->AddArgument("--machines", "-m", &this->MachinesFileName, "Specify the network configurations file for the render server."); diff --git a/Servers/Common/vtkProcessModule.cxx b/Servers/Common/vtkProcessModule.cxx index 41814ebdd2..66dfec3c80 100644 --- a/Servers/Common/vtkProcessModule.cxx +++ b/Servers/Common/vtkProcessModule.cxx @@ -137,7 +137,7 @@ protected: vtkStandardNewMacro(vtkProcessModule); -vtkCxxRevisionMacro(vtkProcessModule, "1.95"); +vtkCxxRevisionMacro(vtkProcessModule, "1.96"); vtkCxxSetObjectMacro(vtkProcessModule, ActiveRemoteConnection, vtkRemoteConnection); vtkCxxSetObjectMacro(vtkProcessModule, GUIHelper, vtkProcessModuleGUIHelper); @@ -1175,6 +1175,7 @@ void vtkProcessModule::SendPrepareProgress(vtkIdType connectionId, { this->Internals->ProgressServersFlag = servers; this->GUIHelper->SendPrepareProgress(); + this->InvokeEvent(vtkCommand::StartEvent); } else { @@ -1233,6 +1234,7 @@ void vtkProcessModule::SendCleanupPendingProgress(vtkIdType connectionId) this->InvokeEvent(vtkCommand::ProgressEvent, &fprog); this->SetLastProgressName(0); } + this->InvokeEvent(vtkCommand::EndEvent); } //----------------------------------------------------------------------------- diff --git a/Servers/Common/vtkProcessModuleGUIHelper.h b/Servers/Common/vtkProcessModuleGUIHelper.h index 5e256d27c6..1c6521e8bf 100644 --- a/Servers/Common/vtkProcessModuleGUIHelper.h +++ b/Servers/Common/vtkProcessModuleGUIHelper.h @@ -45,7 +45,9 @@ public: // Description: // Open a connection dialog GUI. - virtual int OpenConnectionDialog(int* start) = 0; + // OBSOLETE. This is no longer applicable was used in 2.*, but not since 3.0. + // We may just want to get rid of it. + virtual int OpenConnectionDialog(int* vtkNotUsed(start)){ return 0; } // Description: // Handle progress links. diff --git a/Servers/Executables/CMakeLists.txt b/Servers/Executables/CMakeLists.txt index 34cc3813f4..af72941370 100644 --- a/Servers/Executables/CMakeLists.txt +++ b/Servers/Executables/CMakeLists.txt @@ -1,13 +1,13 @@ PROJECT(PVServers) INCLUDE_DIRECTORIES( ${ParaView_BINARY_DIR} - ${ParaView_BINARY_DIR}/GUI/Client ${PVSERVERCOMMON_INCLUDE_DIR} ${PVFILTERS_INCLUDE_DIR} ${PVSERVERMANAGER_INCLUDE_DIR} ${VTKCLIENTSERVER_INCLUDE_DIR} ${VTK_INCLUDE_DIR} ${XDMF_INCLUDE_DIRS} + ${CMAKE_CURRENT_BINARY_DIR} ) SET(LIBS vtkPVServerCommon vtkPVFilters vtkPVServerManager) IF(VTK_USE_MPI) @@ -32,6 +32,32 @@ FOREACH(pvexe ${PV_EXE_LIST}) ENDFOREACH(pvexe) +SET(PV_TEST_INIT_COMMAND "" CACHE STRING + "Command to run before a test begins. Multiple commands are separated by ';'.") +MARK_AS_ADVANCED(PV_TEST_INIT_COMMAND) + +SET(PV_TEST_CLEAN_COMMAND "" CACHE STRING + "Command to run after a failed test to cleanup processes. Example: \"killall -9 rsh paraview\"") +MARK_AS_ADVANCED(PV_TEST_CLEAN_COMMAND) + +SET (PV_TEST_CLIENT "localhost" CACHE STRING + "Node which serves as the client node, used to connect from the server side in reverse connection mode.") +MARK_AS_ADVANCED(PV_TEST_CLIENT) + +# Add the test driver executable. This is not done in the above loop to avoid +# adding dependencies ${LIBS} since we only need vtksys for this executable. +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/vtkSMTestDriverConfig.h.in + ${CMAKE_CURRENT_BINARY_DIR}/vtkSMTestDriverConfig.h @ONLY ESCAPE_QUOTES) + +ADD_EXECUTABLE(smTestDriver${PV_EXE_SUFFIX} vtkSMTestDriver.cxx) +TARGET_LINK_LIBRARIES(smTestDriver${PV_EXE_SUFFIX} vtksys) +IF (NOT PV_INSTALL_NO_RUNTIME) + INSTALL(TARGETS smTestDriver${PV_EXE_SUFFIX} + DESTINATION ${PV_EXE_INSTALL} + COMPONENT Runtime) +ENDIF (NOT PV_INSTALL_NO_RUNTIME) +SET (PV_EXE_LIST ${PV_EXE_LIST} smTestDriver) + # Add shared link forwarding executables if necessary. IF(PV_NEED_SHARED_FORWARD) FOREACH(pvexe ${PV_EXE_LIST}) diff --git a/Applications/Client/Testing/Cxx/pvTestDriver.cxx b/Servers/Executables/vtkSMTestDriver.cxx similarity index 79% rename from Applications/Client/Testing/Cxx/pvTestDriver.cxx rename to Servers/Executables/vtkSMTestDriver.cxx index 0a1985d6f2..a5e2b31202 100644 --- a/Applications/Client/Testing/Cxx/pvTestDriver.cxx +++ b/Servers/Executables/vtkSMTestDriver.cxx @@ -1,7 +1,7 @@ /*========================================================================= Program: ParaView - Module: pvTestDriver.cxx + Module: vtkSMTestDriver.cxx Copyright (c) Kitware, Inc. All rights reserved. @@ -12,11 +12,10 @@ PURPOSE. See the above copyright notice for more information. =========================================================================*/ - #include "vtkSystemIncludes.h" -#include "pvTestDriver.h" -#include "pvTestDriverConfig.h" +#include "vtkSMTestDriver.h" +#include "vtkSMTestDriverConfig.h" #include <vtksys/SystemTools.hxx> #include <vtksys/String.hxx> @@ -29,11 +28,11 @@ // The main function as this class should only be used by this program int main(int argc, char* argv[]) { - pvTestDriver d; + vtkSMTestDriver d; return d.Main(argc, argv); } -pvTestDriver::pvTestDriver() +vtkSMTestDriver::vtkSMTestDriver() { this->AllowErrorInOutput = 0; this->RenderServerNumProcesses = 0; @@ -46,13 +45,13 @@ pvTestDriver::pvTestDriver() this->TestRemoteRendering = 0; } -pvTestDriver::~pvTestDriver() +vtkSMTestDriver::~vtkSMTestDriver() { } -// now implement the pvTestDriver class +// now implement the vtkSMTestDriver class -void pvTestDriver::SeparateArguments(const char* str, +void vtkSMTestDriver::SeparateArguments(const char* str, vtkstd::vector<vtkstd::string>& flags) { vtkstd::string arg = str; @@ -73,7 +72,7 @@ void pvTestDriver::SeparateArguments(const char* str, } -void pvTestDriver::CollectConfiguredOptions() +void vtkSMTestDriver::CollectConfiguredOptions() { // try to make sure that this timesout before dart so it can kill all the processes this->TimeOut = DART_TESTING_TIMEOUT - 10.0; @@ -81,22 +80,6 @@ void pvTestDriver::CollectConfiguredOptions() { this->TimeOut = 1500; } -// set the path to the binary directory - this->ParaView = PARAVIEW_BINARY_DIR; -#ifdef CMAKE_INTDIR - this->ParaView += "/" CMAKE_INTDIR; -#endif - // now set the base part of the executables - this->ParaViewClient = this->ParaView; - this->ParaViewRenderServer = this->ParaView; - this->ParaViewServer = this->ParaView; - this->ParaViewDataServer = this->ParaView; - // now set the final execuable names - this->ParaView += "/" PARAVIEW_CLIENT; - this->ParaViewClient += "/" PARAVIEW_CLIENT; - this->ParaViewRenderServer += "/" PARAVIEW_RENDER_SERVER; - this->ParaViewServer += "/" PARAVIEW_SERVER; - this->ParaViewDataServer += "/" PARAVIEW_DATA_SERVER; // now find all the mpi information if mpi run is set #ifdef VTK_USE_MPI @@ -163,36 +146,58 @@ void pvTestDriver::CollectConfiguredOptions() # endif //PV_SETUP_SCRIPT } -int pvTestDriver::ProcessCommandLine(int argc, char* argv[]) +/// This adds the debug/build configuration crap for the executable on windows. +static vtkstd::string FixExecutablePath(const vtkstd::string& path) +{ +#ifdef CMAKE_INTDIR + vtkstd::string parent_dir = + vtksys::SystemTools::GetFilenamePath(path.c_str()); + + vtkstd::string filename = + vtksys::SystemTools::GetFilenameName(path); + parent_dir += "/" CMAKE_INTDIR "/"; + return parent_dir + filename; +#endif + + return path; +} + +int vtkSMTestDriver::ProcessCommandLine(int argc, char* argv[]) { this->ArgStart = 1; int i; for(i =1; i < argc - 1; ++i) { + if(strcmp(argv[i], "--client") == 0) + { + this->ArgStart = i+2; + this->ClientExecutable = ::FixExecutablePath(argv[i+1]); + } if(strcmp(argv[i], "--test-remote-rendering") == 0) { this->ArgStart = i+1; this->TestRemoteRendering = 1; fprintf(stderr, "Test Render Server.\n"); } - if(strcmp(argv[i], "--test-render-server") == 0) + if(strcmp(argv[i], "--render-server") == 0) { - this->ArgStart = i+1; + this->ArgStart = i+2; this->TestRenderServer = 1; - this->TestServer = 1; + this->RenderServerExecutable = ::FixExecutablePath(argv[i+1]); fprintf(stderr, "Test Render Server.\n"); } - if(strcmp(argv[i], "--test-r2d") == 0) + if (strcmp(argv[i], "--data-server") == 0) { - this->ArgStart = i+1; - this->TestRenderServer = 2; + this->ArgStart = i+2; this->TestServer = 1; + this->DataServerExecutable = ::FixExecutablePath(argv[i+1]); fprintf(stderr, "Test Render Server.\n"); } - if(strcmp(argv[i], "--test-server") == 0) + if(strcmp(argv[i], "--server") == 0) { - this->ArgStart = i+1; + this->ArgStart = i+2; this->TestServer = 1; + this->ServerExecutable = ::FixExecutablePath(argv[i+1]); fprintf(stderr, "Test Server.\n"); } if(strcmp(argv[i], "--test-tiled") == 0) @@ -254,9 +259,9 @@ int pvTestDriver::ProcessCommandLine(int argc, char* argv[]) } void -pvTestDriver::CreateCommandLine(vtksys_stl::vector<const char*>& commandLine, +vtkSMTestDriver::CreateCommandLine(vtksys_stl::vector<const char*>& commandLine, const char* paraView, - pvTestDriver::ProcessType type, + vtkSMTestDriver::ProcessType type, const char* numProc, int argStart, int argCount, @@ -380,7 +385,7 @@ pvTestDriver::CreateCommandLine(vtksys_stl::vector<const char*>& commandLine, commandLine.push_back(0); } -int pvTestDriver::StartServer(vtksysProcess* server, const char* name, +int vtkSMTestDriver::StartServer(vtksysProcess* server, const char* name, vtkstd::vector<char>& out, vtkstd::vector<char>& err) { @@ -388,7 +393,7 @@ int pvTestDriver::StartServer(vtksysProcess* server, const char* name, { return 1; } - cerr << "pvTestDriver: starting process " << name << "\n"; + cerr << "vtkSMTestDriver: starting process " << name << "\n"; vtksysProcess_SetTimeout(server, this->TimeOut); vtksysProcess_Execute(server); int foundWaiting = 0; @@ -405,29 +410,29 @@ int pvTestDriver::StartServer(vtksysProcess* server, const char* name, } if(foundWaiting) { - cerr << "pvTestDriver: " << name << " sucessfully started.\n"; + cerr << "vtkSMTestDriver: " << name << " sucessfully started.\n"; return 1; } else { - cerr << "pvTestDriver: " << name << " never started.\n"; + cerr << "vtkSMTestDriver: " << name << " never started.\n"; vtksysProcess_Kill(server); return 0; } } -int pvTestDriver::StartClient(vtksysProcess* client, const char* name) +int vtkSMTestDriver::StartClient(vtksysProcess* client, const char* name) { if(!client) { return 1; } - cerr << "pvTestDriver: starting process " << name << "\n"; + cerr << "vtkSMTestDriver: starting process " << name << "\n"; vtksysProcess_SetTimeout(client, this->TimeOut); vtksysProcess_Execute(client); if(vtksysProcess_GetState(client) == vtksysProcess_State_Executing) { - cerr << "pvTestDriver: " << name << " sucessfully started.\n"; + cerr << "vtkSMTestDriver: " << name << " sucessfully started.\n"; return 1; } else @@ -438,17 +443,17 @@ int pvTestDriver::StartClient(vtksysProcess* client, const char* name) } } -void pvTestDriver::Stop(vtksysProcess* p, const char* name) +void vtkSMTestDriver::Stop(vtksysProcess* p, const char* name) { if(p) { - cerr << "pvTestDriver: killing process " << name << "\n"; + cerr << "vtkSMTestDriver: killing process " << name << "\n"; vtksysProcess_Kill(p); vtksysProcess_WaitForExit(p, 0); } } -int pvTestDriver::OutputStringHasError(const char* pname, vtkstd::string& output) +int vtkSMTestDriver::OutputStringHasError(const char* pname, vtkstd::string& output) { const char* possibleMPIErrors[] = { "error", @@ -503,9 +508,9 @@ int pvTestDriver::OutputStringHasError(const char* pname, vtkstd::string& output } if ( !found ) { - cerr << "pvTestDriver: ***** Test will fail, because the string: \"" + cerr << "vtkSMTestDriver: ***** Test will fail, because the string: \"" << possibleMPIErrors[i] - << "\"\npvTestDriver: ***** was found in the following output from the " + << "\"\nvtkSMTestDriver: ***** was found in the following output from the " << pname << ":\n\"" << it->c_str() << "\"\n"; return 1; @@ -522,7 +527,7 @@ int pvTestDriver::OutputStringHasError(const char* pname, vtkstd::string& output vtksysProcess_Delete(server); //---------------------------------------------------------------------------- -int pvTestDriver::Main(int argc, char* argv[]) +int vtkSMTestDriver::Main(int argc, char* argv[]) { #ifdef PV_TEST_INIT_COMMAND @@ -571,7 +576,7 @@ int pvTestDriver::Main(int argc, char* argv[]) if(!renderServer) { VTK_CLEAN_PROCESSES; - cerr << "pvTestDriver: Cannot allocate vtksysProcess to run the render server.\n"; + cerr << "vtkSMTestDriver: Cannot allocate vtksysProcess to run the render server.\n"; return 1; } } @@ -581,7 +586,7 @@ int pvTestDriver::Main(int argc, char* argv[]) if(!server) { VTK_CLEAN_PROCESSES; - cerr << "pvTestDriver: Cannot allocate vtksysProcess to run the server.\n"; + cerr << "vtkSMTestDriver: Cannot allocate vtksysProcess to run the server.\n"; return 1; } } @@ -589,7 +594,7 @@ int pvTestDriver::Main(int argc, char* argv[]) if(!client) { VTK_CLEAN_PROCESSES; - cerr << "pvTestDriver: Cannot allocate vtksysProcess to run the client.\n"; + cerr << "vtkSMTestDriver: Cannot allocate vtksysProcess to run the client.\n"; return 1; } @@ -605,21 +610,23 @@ int pvTestDriver::Main(int argc, char* argv[]) if(renderServer) { this->CreateCommandLine(renderServerCommand, - this->ParaViewRenderServer.c_str(), + this->RenderServerExecutable.c_str(), RENDER_SERVER, this->MPIRenderServerNumProcessFlag.c_str()); this->ReportCommand(&renderServerCommand[0], "renderserver"); vtksysProcess_SetCommand(renderServer, &renderServerCommand[0]); + vtksysProcess_SetWorkingDirectory(renderServer, + this->GetDirectory(this->RenderServerExecutable).c_str()); } vtksys_stl::vector<const char*> serverCommand; if(server) { - const char* serverExe = this->ParaViewServer.c_str(); - pvTestDriver::ProcessType serverType = SERVER; + const char* serverExe = this->ServerExecutable.c_str(); + vtkSMTestDriver::ProcessType serverType = SERVER; if(this->TestRenderServer) { - serverExe = this->ParaViewDataServer.c_str(); + serverExe = this->DataServerExecutable.c_str(); serverType = DATA_SERVER; } @@ -630,105 +637,13 @@ int pvTestDriver::Main(int argc, char* argv[]) this->MPIServerNumProcessFlag.c_str()); this->ReportCommand(&serverCommand[0], "server"); vtksysProcess_SetCommand(server, &serverCommand[0]); + vtksysProcess_SetWorkingDirectory(server, this->GetDirectory(serverExe).c_str()); } // Construct the client process command line. vtksys_stl::vector<const char*> clientCommand; - if (renderServer) - { - if (this->TestRemoteRendering) - { -#ifdef CONNECT_TO_RS_DS_REMOTE_RENDER_SCRIPT - vtkstd::string temp = CONNECT_TO_RS_DS_REMOTE_RENDER_SCRIPT; - this->ClientPostFlags.push_back("--run-test-init=" + temp); -#else - cerr << "CONNECT_TO_RS_DS_REMOTE_RENDER_SCRIPT must be specified." - << endl; - - VTK_CLEAN_PROCESSES; - return 1; -#endif - } - else if (this->ReverseConnection) - { -#ifdef CONNECT_TO_RS_DS_REVERSE_SCRIPT - vtkstd::string temp = CONNECT_TO_RS_DS_REVERSE_SCRIPT; - this->ClientPostFlags.push_back("--run-test-init=" + temp); -#else - cerr << "CONNECT_TO_RS_DS_REVERSE_SCRIPT must be specified." << endl; - VTK_CLEAN_PROCESSES; - return 1; -#endif - } - else - { -#ifdef CONNECT_TO_RS_DS_SCRIPT - vtkstd::string temp = CONNECT_TO_RS_DS_SCRIPT; - this->ClientPostFlags.push_back("--run-test-init=" + temp); -#else - cerr << "CONNECT_TO_RS_DS_SCRIPT must be specified." << endl; - VTK_CLEAN_PROCESSES; - return 1; -#endif - } - } - else if (server) - { - if (this->TestRemoteRendering) - { -#ifdef CONNECT_TO_SERVER_REMOTE_RENDER_SCRIPT - vtkstd::string temp = CONNECT_TO_SERVER_REMOTE_RENDER_SCRIPT; - this->ClientPostFlags.push_back("--run-test-init=" + temp); -#else - cerr << "CONNECT_TO_SERVER_REMOTE_RENDER_SCRIPT must be specified." - << endl; - VTK_CLEAN_PROCESSES; - return 1; -#endif - } - else if (this->ReverseConnection) - { -#ifdef CONNECT_TO_SERVER_REVERSE_SCRIPT - vtkstd::string temp = CONNECT_TO_SERVER_REVERSE_SCRIPT; - this->ClientPostFlags.push_back("--run-test-init=" + temp); -#else - cerr << "CONNECT_TO_SERVER_SCRIPT must be specified." << endl; - VTK_CLEAN_PROCESSES; - return 1; -#endif - } - else - { -#ifdef CONNECT_TO_SERVER_SCRIPT - vtkstd::string temp = CONNECT_TO_SERVER_SCRIPT; - this->ClientPostFlags.push_back("--run-test-init=" + temp); -#else - cerr << "CONNECT_TO_SERVER_SCRIPT must be specified." << endl; - VTK_CLEAN_PROCESSES; - return 1; -#endif - } - } - else - { -#ifdef CONNECT_TO_BUILTIN_SCRIPT - vtkstd::string temp = CONNECT_TO_BUILTIN_SCRIPT; - this->ClientPostFlags.push_back("--run-test-init=" + temp); -#else - cerr << "CONNECT_TO_BUILTIN_SCRIPT must be specified." << endl; - VTK_CLEAN_PROCESSES; - return 1; -#endif - } - // default to paraview for tests - const char* pv = this->ParaView.c_str(); - // if server or render server then use ParaViewClient - if(server || renderServer) - { - pv = this->ParaViewClient.c_str(); - } - + const char* pv = this->ClientExecutable.c_str(); this->CreateCommandLine(clientCommand, pv, CLIENT, @@ -736,6 +651,7 @@ int pvTestDriver::Main(int argc, char* argv[]) this->ArgStart, argc, argv); this->ReportCommand(&clientCommand[0], "client"); vtksysProcess_SetCommand(client, &clientCommand[0]); + vtksysProcess_SetWorkingDirectory(client, this->GetDirectory(pv).c_str()); // Kill the processes if they are taking too long. if(this->ReverseConnection) @@ -743,7 +659,7 @@ int pvTestDriver::Main(int argc, char* argv[]) if(!this->StartServer(client, "client", ClientStdOut, ClientStdErr)) { - cerr << "pvTestDriver: Reverse connection client never started.\n"; + cerr << "vtkSMTestDriver: Reverse connection client never started.\n"; VTK_CLEAN_PROCESSES; return -1; } @@ -769,7 +685,7 @@ int pvTestDriver::Main(int argc, char* argv[]) if(!this->StartServer(renderServer, "renderserver", RenderServerStdOut, RenderServerStdErr)) { - cerr << "pvTestDriver: Render server never started.\n"; + cerr << "vtkSMTestDriver: Render server never started.\n"; VTK_CLEAN_PROCESSES; return -1; } @@ -778,7 +694,7 @@ int pvTestDriver::Main(int argc, char* argv[]) ServerStdOut, ServerStdErr)) { this->Stop(renderServer, "renderserver"); - cerr << "pvTestDriver: Server never started.\n"; + cerr << "vtkSMTestDriver: Server never started.\n"; VTK_CLEAN_PROCESSES; return -1; } @@ -890,7 +806,7 @@ int pvTestDriver::Main(int argc, char* argv[]) } if(mpiError) { - cerr << "pvTestDriver: Error string found in ouput, pvTestDriver returning " + cerr << "vtkSMTestDriver: Error string found in ouput, vtkSMTestDriver returning " << mpiError << "\n"; return mpiError; } @@ -899,9 +815,9 @@ int pvTestDriver::Main(int argc, char* argv[]) } //---------------------------------------------------------------------------- -void pvTestDriver::ReportCommand(const char* const* command, const char* name) +void vtkSMTestDriver::ReportCommand(const char* const* command, const char* name) { - cerr << "pvTestDriver: " << name << " command is:\n"; + cerr << "vtkSMTestDriver: " << name << " command is:\n"; for(const char* const * c = command; *c; ++c) { cerr << " \"" << *c << "\""; @@ -910,24 +826,24 @@ void pvTestDriver::ReportCommand(const char* const* command, const char* name) } //---------------------------------------------------------------------------- -int pvTestDriver::ReportStatus(vtksysProcess* process, const char* name) +int vtkSMTestDriver::ReportStatus(vtksysProcess* process, const char* name) { int result = 1; switch(vtksysProcess_GetState(process)) { case vtksysProcess_State_Starting: { - cerr << "pvTestDriver: Never started " << name << " process.\n"; + cerr << "vtkSMTestDriver: Never started " << name << " process.\n"; } break; case vtksysProcess_State_Error: { - cerr << "pvTestDriver: Error executing " << name << " process: " + cerr << "vtkSMTestDriver: Error executing " << name << " process: " << vtksysProcess_GetErrorString(process) << "\n"; } break; case vtksysProcess_State_Exception: { - cerr << "pvTestDriver: " << name + cerr << "vtkSMTestDriver: " << name << " process exited with an exception: "; switch(vtksysProcess_GetExitException(process)) { @@ -960,28 +876,28 @@ int pvTestDriver::ReportStatus(vtksysProcess* process, const char* name) } break; case vtksysProcess_State_Executing: { - cerr << "pvTestDriver: Never terminated " << name << " process.\n"; + cerr << "vtkSMTestDriver: Never terminated " << name << " process.\n"; } break; case vtksysProcess_State_Exited: { result = vtksysProcess_GetExitValue(process); - cerr << "pvTestDriver: " << name << " process exited with code " + cerr << "vtkSMTestDriver: " << name << " process exited with code " << result << "\n"; } break; case vtksysProcess_State_Expired: { - cerr << "pvTestDriver: killed " << name << " process due to timeout.\n"; + cerr << "vtkSMTestDriver: killed " << name << " process due to timeout.\n"; } break; case vtksysProcess_State_Killed: { - cerr << "pvTestDriver: killed " << name << " process.\n"; + cerr << "vtkSMTestDriver: killed " << name << " process.\n"; } break; } return result; } //---------------------------------------------------------------------------- -int pvTestDriver::WaitForLine(vtksysProcess* process, vtkstd::string& line, +int vtkSMTestDriver::WaitForLine(vtksysProcess* process, vtkstd::string& line, double timeout, vtkstd::vector<char>& out, vtkstd::vector<char>& err) @@ -1084,7 +1000,7 @@ int pvTestDriver::WaitForLine(vtksysProcess* process, vtkstd::string& line, } //---------------------------------------------------------------------------- -void pvTestDriver::PrintLine(const char* pname, const char* line) +void vtkSMTestDriver::PrintLine(const char* pname, const char* line) { // if the name changed then the line is output from a different process if(this->CurrentPrintLineName != pname) @@ -1099,7 +1015,7 @@ void pvTestDriver::PrintLine(const char* pname, const char* line) } //---------------------------------------------------------------------------- -int pvTestDriver::WaitForAndPrintLine(const char* pname, vtksysProcess* process, +int vtkSMTestDriver::WaitForAndPrintLine(const char* pname, vtksysProcess* process, vtkstd::string& line, double timeout, vtkstd::vector<char>& out, vtkstd::vector<char>& err, @@ -1116,3 +1032,9 @@ int pvTestDriver::WaitForAndPrintLine(const char* pname, vtksysProcess* process, } return pipe; } + +//---------------------------------------------------------------------------- +vtkstd::string vtkSMTestDriver::GetDirectory(vtkstd::string location) +{ + return vtksys::SystemTools::GetParentDirectory(location.c_str()); +} diff --git a/Applications/Client/Testing/Cxx/pvTestDriver.h b/Servers/Executables/vtkSMTestDriver.h similarity index 84% rename from Applications/Client/Testing/Cxx/pvTestDriver.h rename to Servers/Executables/vtkSMTestDriver.h index 9a29cc57af..7a4f46ed8c 100644 --- a/Applications/Client/Testing/Cxx/pvTestDriver.h +++ b/Servers/Executables/vtkSMTestDriver.h @@ -1,24 +1,25 @@ /*========================================================================= - Program: Visualization Toolkit - Module: pvTestDriver.h + Program: ParaView + Module: vtkSMTestDriver.h - Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen + Copyright (c) Kitware, Inc. All rights reserved. - See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ -// .NAME pvTestDriver - A program to run paraview for testing mpi and server modes. +// .NAME vtkSMTestDriver - A program to run paraview-based clients for testing +// mpi and server modes. // .SECTION Description // -#ifndef __pvTestDriver_h -#define __pvTestDriver_h +#ifndef __vtkSMTestDriver_h +#define __vtkSMTestDriver_h #include <vtkstd/string> #include <vtkstd/vector> @@ -26,12 +27,12 @@ #include <vtksys/stl/string> #include <vtksys/stl/vector> -class pvTestDriver +class vtkSMTestDriver { public: int Main(int argc, char* argv[]); - pvTestDriver(); - ~pvTestDriver(); + vtkSMTestDriver(); + ~vtkSMTestDriver(); protected: enum ProcessType @@ -69,12 +70,14 @@ protected: vtkstd::string& line, double timeout, vtkstd::vector<char>& out, vtkstd::vector<char>& err, int* foundWaiting); + + vtkstd::string GetDirectory(vtkstd::string location); + private: - vtkstd::string ParaView; // fullpath to paraview executable - vtkstd::string ParaViewClient; // fullpath to paraview client executable - vtkstd::string ParaViewServer; // fullpath to paraview server executable - vtkstd::string ParaViewRenderServer; // fullpath to paraview renderserver executable - vtkstd::string ParaViewDataServer; // fullpath to paraview dataserver executable + vtkstd::string ClientExecutable; // fullpath to paraview executable + vtkstd::string ServerExecutable; // fullpath to paraview server executable + vtkstd::string RenderServerExecutable; // fullpath to paraview renderserver executable + vtkstd::string DataServerExecutable; // fullpath to paraview dataserver executable vtkstd::string MPIRun; // fullpath to mpirun executable diff --git a/Applications/Client/Testing/Cxx/pvTestDriverConfig.h.in b/Servers/Executables/vtkSMTestDriverConfig.h.in similarity index 64% rename from Applications/Client/Testing/Cxx/pvTestDriverConfig.h.in rename to Servers/Executables/vtkSMTestDriverConfig.h.in index 76a7302762..a381bf76f5 100644 --- a/Applications/Client/Testing/Cxx/pvTestDriverConfig.h.in +++ b/Servers/Executables/vtkSMTestDriverConfig.h.in @@ -1,7 +1,7 @@ /*========================================================================= Program: ParaView - Module: pvTestDriverConfig.h.in + Module: vtkSMTestDriverConfig.h.in Copyright (c) Kitware, Inc. All rights reserved. @@ -12,7 +12,6 @@ PURPOSE. See the above copyright notice for more information. =========================================================================*/ -#define PARAVIEW_BINARY_DIR "@EXECUTABLE_OUTPUT_PATH@" #cmakedefine VTK_MPIRUN_EXE "@VTK_MPIRUN_EXE@" #cmakedefine VTK_MPI_PRENUMPROC_FLAGS "@VTK_MPI_PRENUMPROC_FLAGS@" #cmakedefine VTK_MPI_NUMPROC_FLAG "@VTK_MPI_NUMPROC_FLAG@" @@ -27,24 +26,14 @@ #cmakedefine VTK_USE_MPI #cmakedefine PV_TEST_INIT_COMMAND "@PV_TEST_INIT_COMMAND@" #cmakedefine PV_TEST_CLEAN_COMMAND "@PV_TEST_CLEAN_COMMAND@" + +// host name for the client used when running reverse connect test. #cmakedefine PV_TEST_CLIENT "@PV_TEST_CLIENT@" // ssh command to connect to remote machine, usually ssh -l kitware dash8 #cmakedefine PV_SSH_FLAGS "@PV_SSH_FLAGS@" + // shell script to execute server, should contain proper port... // This line won't be split into smaller arguments #cmakedefine PV_SETUP_SCRIPT "@PV_SETUP_SCRIPT@" -#cmakedefine CONNECT_TO_SERVER_SCRIPT "@CONNECT_TO_SERVER_SCRIPT@" -#cmakedefine CONNECT_TO_SERVER_REVERSE_SCRIPT "@CONNECT_TO_SERVER_REVERSE_SCRIPT@" -#cmakedefine CONNECT_TO_SERVER_REMOTE_RENDER_SCRIPT "@CONNECT_TO_SERVER_REMOTE_RENDER_SCRIPT@" -#cmakedefine CONNECT_TO_BUILTIN_SCRIPT "@CONNECT_TO_BUILTIN_SCRIPT@" -#cmakedefine CONNECT_TO_RS_DS_SCRIPT "@CONNECT_TO_RS_DS_SCRIPT@" -#cmakedefine CONNECT_TO_RS_DS_REVERSE_SCRIPT "@CONNECT_TO_RS_DS_REVERSE_SCRIPT@" -#cmakedefine CONNECT_TO_RS_DS_REMOTE_RENDER_SCRIPT "@CONNECT_TO_RS_DS_REMOTE_RENDER_SCRIPT@" - -// These are not full paths, but just the names of the executables. -#cmakedefine PARAVIEW_CLIENT "@PARAVIEW_CLIENT@" -#cmakedefine PARAVIEW_SERVER "@PARAVIEW_SERVER@" -#cmakedefine PARAVIEW_DATA_SERVER "@PARAVIEW_DATA_SERVER@" -#cmakedefine PARAVIEW_RENDER_SERVER "@PARAVIEW_RENDER_SERVER@" diff --git a/Servers/Filters/vtkPVMain.cxx b/Servers/Filters/vtkPVMain.cxx index 9239e31f3e..2062085b4d 100644 --- a/Servers/Filters/vtkPVMain.cxx +++ b/Servers/Filters/vtkPVMain.cxx @@ -49,7 +49,7 @@ #endif vtkStandardNewMacro(vtkPVMain); -vtkCxxRevisionMacro(vtkPVMain, "1.25"); +vtkCxxRevisionMacro(vtkPVMain, "1.26"); int vtkPVMain::UseMPI = 1; int vtkPVMain::FinalizeMPI = 0; @@ -202,6 +202,7 @@ int vtkPVMain::Initialize(vtkPVOptions* options, #endif int display_help = 0; + bool ret_failure = false; vtksys_ios::ostringstream sscerr; if (argv && !options->Parse(argc, argv) ) { @@ -219,8 +220,9 @@ int vtkPVMain::Initialize(vtkPVOptions* options, { sscerr << options->GetHelp() << endl; vtkOutputWindow::GetInstance()->DisplayText( sscerr.str().c_str() ); - return 1; + ret_failure = true; } + if (options->GetTellVersion() ) { int MajorVersion = PARAVIEW_VERSION_MAJOR; @@ -228,7 +230,7 @@ int vtkPVMain::Initialize(vtkPVOptions* options, char name[128]; sprintf(name, "ParaView%d.%d\n", MajorVersion, MinorVersion); vtkOutputWindow::GetInstance()->DisplayText(name); - return 1; + ret_failure = true; } // Create the process module for initializing the processes. @@ -249,7 +251,7 @@ int vtkPVMain::Initialize(vtkPVOptions* options, (*initInterp)(this->ProcessModule); - return 0; + return ret_failure? 1 : 0; } //----------------------------------------------------------------------------- diff --git a/Servers/ServerManager/CMakeLists.txt b/Servers/ServerManager/CMakeLists.txt index e6b37547da..3efad5b07f 100644 --- a/Servers/ServerManager/CMakeLists.txt +++ b/Servers/ServerManager/CMakeLists.txt @@ -145,6 +145,7 @@ SET(Kit_SRCS vtkSMPVRepresentationProxy.cxx vtkSMPWriterProxy.cxx vtkSMRampKeyFrameProxy.cxx + vtkSMReaderFactory.cxx vtkSMRenderViewHelper.cxx vtkSMRenderViewProxy.cxx vtkSMRenderViewExporterProxy.cxx @@ -208,6 +209,7 @@ SET(Kit_SRCS vtkSMVectorProperty.cxx vtkSMViewProxy.cxx vtkSMWidgetRepresentationProxy.cxx + vtkSMWriterFactory.cxx vtkSMWriterProxy.cxx vtkSMXDMFInformationHelper.cxx vtkSMXDMFPropertyDomain.cxx @@ -461,13 +463,13 @@ ELSE(CMAKE_CROSSCOMPILING) GET_TARGET_PROPERTY(DOCUMENTATION_EXE vtkSMExtractDocumentation LOCATION) ENDIF(CMAKE_CROSSCOMPILING) -SET(adpFile ${ParaView_SOURCE_DIR}/Documentation/pqClient.adp) +# FIXME: DUDE! Dependency on Qt code in ServerManager!!!! FOREACH(gcf ${GUI_CONFIG_FILES}) - SET(fullXMLFile ${ParaView_SOURCE_DIR}/Qt/Components/Resources/XML/${gcf}.xml) + SET(fullXMLFile ${ParaView_SOURCE_DIR}/Applications/ParaView/${gcf}.xml) SET(fullHTMLFile ${ParaView_BINARY_DIR}/Documentation/${gcf}.html) ADD_CUSTOM_COMMAND( OUTPUT ${fullHTMLFile} - DEPENDS ${fullXMLFile} ${resourceFiles} ${adpFile} vtkSMExtractDocumentation + DEPENDS ${fullXMLFile} ${resourceFiles} vtkSMExtractDocumentation COMMAND ${DOCUMENTATION_EXE} ARGS ${ParaView_BINARY_DIR}/Documentation ${fullXMLFile} COMMENT "Creating Documentation for ${gcf}" diff --git a/Servers/ServerManager/Resources/readers.xml b/Servers/ServerManager/Resources/readers.xml index 3f37726ee8..653f76e511 100644 --- a/Servers/ServerManager/Resources/readers.xml +++ b/Servers/ServerManager/Resources/readers.xml @@ -1943,7 +1943,7 @@ <Documentation> If this property is set to 1, a VTK_VERTEX cell is created for each point. </Documentation> - </IntVectorProperty> + </IntVectorProperty> <IntVectorProperty name="TagSize" @@ -1957,6 +1957,9 @@ </Documentation> </IntVectorProperty> + <Hints> + <ReaderFactory extensions="cosmo" file_description="Cosmology files" /> + </Hints> <!-- End CosmoReader --> </SourceProxy> @@ -1979,6 +1982,11 @@ </Documentation> </StringVectorProperty> + <Hints> + <ReaderFactory extensions="dem" + file_description="Digital Elevation Map Files" /> + </Hints> + <!-- End DEMReader --> </SourceProxy> @@ -2009,6 +2017,11 @@ Available timestep values. </Documentation> </DoubleVectorProperty> + + <Hints> + <ReaderFactory extensions="pvd" + file_description="ParaView Data Files"/> + </Hints> <!-- End PVDReader --> </SourceProxy> @@ -2065,6 +2078,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="vtm vtmb" + file_description="VTK MultiBlock Data Files" /> + </Hints> + <!-- end of XMLMultiBlockDataReader --> </FileSeriesReaderProxy> @@ -2119,6 +2137,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="vtm vthb" + file_description="VTK Hierarchical Box Data Files" /> + </Hints> + <!-- end of XMLHierarchicalBoxDataReader --> </FileSeriesReaderProxy> @@ -2171,6 +2194,10 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="vtp" + file_description="VTK PolyData Files" /> + </Hints> </FileSeriesReaderProxy> <!-- XMLPolyDataReader --> <FileSeriesReaderProxy name="XMLUnstructuredGridReader" @@ -2223,6 +2250,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="vtu" + file_description="VTK UnstructuredGrid Files" /> + </Hints> + </FileSeriesReaderProxy> <!-- XMLUnstructuredGridReader --> <FileSeriesReaderProxy name="XMLImageDataReader" @@ -2275,6 +2307,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="vti" + file_description="VTK ImageData Files" /> + </Hints> + </FileSeriesReaderProxy> <!-- XMLImageDataReader --> <FileSeriesReaderProxy name="XMLStructuredGridReader" @@ -2327,6 +2364,10 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="vts" + file_description="VTK StructuredGrid Files" /> + </Hints> </FileSeriesReaderProxy> <!-- XMLStructuredGridReader --> <FileSeriesReaderProxy name="XMLRectilinearGridReader" @@ -2378,6 +2419,10 @@ Available timestep values. </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="vtr" + file_description="VTK RectilinearGrid Files" /> + </Hints> </FileSeriesReaderProxy> <!-- XMLRectilinearGridReader --> @@ -2430,6 +2475,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="pvtp" + file_description="VTK PolyData Files (partitioned)" /> + </Hints> + </FileSeriesReaderProxy> <!-- XMLPPolyDataReader --> <FileSeriesReaderProxy name="XMLPUnstructuredGridReader" @@ -2482,6 +2532,10 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="pvtu" + file_description="VTK UnstructuredGrid Files (partitioned)" /> + </Hints> </FileSeriesReaderProxy> <!-- XMLPUnstructuredGridReader --> <FileSeriesReaderProxy name="XMLPImageDataReader" @@ -2534,6 +2588,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="pvti" + file_description="VTK ImageData Files (partitioned)" /> + </Hints> + </FileSeriesReaderProxy> <!-- XMLPImageDataReader --> <FileSeriesReaderProxy name="XMLPStructuredGridReader" @@ -2586,6 +2645,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="pvts" + file_description="VTK StructuredGrid Files (partitioned)" /> + </Hints> + </FileSeriesReaderProxy> <!-- XMLPStructuredGridReader --> <FileSeriesReaderProxy name="XMLPRectilinearGridReader" @@ -2638,6 +2702,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="pvtr" + file_description="VTK RectilinearGrid Files (partitioned)" /> + </Hints> + </FileSeriesReaderProxy> <!-- XMLPRectilinearGridReader --> <SourceProxy name="RTXMLPolyDataReader" @@ -2736,7 +2805,12 @@ Available timestep values. </Documentation> </DoubleVectorProperty> - <!-- End legacyreader_t --> + + <Hints> + <ReaderFactory extensions="vtk" + file_description="Legacy VTK files" /> + </Hints> + <!-- End LegacyVTKFileReader --> </FileSeriesReaderProxy> <SourceProxy name="pvtkfile" @@ -2757,6 +2831,11 @@ This property specifies the file name for the Partitioned Legacy VTK reader. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="pvtk" + file_description="Legacy VTK Files (partitioned)" /> + </Hints> <!-- End pvtkfile --> </SourceProxy> @@ -2838,6 +2917,11 @@ This property lists which point-centered arrays to read. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="case CASE Case" + file_description="EnSight Files" /> + </Hints> <!-- End ensight --> </SourceProxy> @@ -2970,6 +3054,11 @@ This property lists which cell-centered arrays to read. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="spcth 0" + file_description="SpyPlot CTH dataset" /> + </Hints> <!-- End spcthreader--> </SourceProxy> @@ -3023,6 +3112,8 @@ <Hints> <!-- This property is here simply to set it. --> <Property name="UseMetaFile" show="0" /> + <ReaderFactory extensions="spcth-timeseries" + file_description="Case file for restarted CTH outputs" /> </Hints> <!-- SPCTHRestartReader --> </FileSeriesReaderProxy> @@ -3044,6 +3135,10 @@ This property specifies the file name for the VRML reader. </Documentation> </StringVectorProperty> + <Hints> + <ReaderFactory extensions="wrl vrml" + file_description="VRML 2 Files" /> + </Hints> <!-- End vrmlreader --> </SourceProxy> @@ -3063,6 +3158,10 @@ This property specifies the file name for the PLY reader. </Documentation> </StringVectorProperty> + <Hints> + <ReaderFactory extensions="ply" + file_description="PLY Polygonal File Format" /> + </Hints> <!-- End plyreader --> </SourceProxy> @@ -3082,6 +3181,9 @@ This property specifies the file name for the PDB reader. </Documentation> </StringVectorProperty> + <Hints> + <ReaderFactory extensions="pdb" file_description="Protein Data Bank Files" /> + </Hints> <!-- End pdbreader --> </SourceProxy> @@ -3113,6 +3215,11 @@ This property specifies the timestep the XYZ reader should load. </Documentation> </IntVectorProperty> + + <Hints> + <ReaderFactory extensions="xyz" + file_description="XMol Molecule Files" /> + </Hints> <!-- End xyzreader --> </SourceProxy> @@ -3251,6 +3358,11 @@ This property lists which functions (point-centered arrays) to compute. </Documentation> </IntVectorProperty> + + <Hints> + <ReaderFactory extensions="xyz" + file_description="PLOT3D Files" /> + </Hints> <!-- End P3DReader --> </SourceProxy> @@ -3282,6 +3394,11 @@ Available timestep values. </Documentation> </DoubleVectorProperty> + + <Hints> + <ReaderFactory extensions="pht" + file_description="Phasta Files" /> + </Hints> </SourceProxy> <FileSeriesReaderProxy name="stlreader" @@ -3330,7 +3447,11 @@ Available timestep values. </Documentation> </DoubleVectorProperty> - <!-- End legacyreader_t --> + <Hints> + <ReaderFactory extensions="stl" + file_description="Stereo Lithography" /> + </Hints> + <!-- End stlreader--> </FileSeriesReaderProxy> <SourceProxy name="byureader" class="vtkBYUReader" label="BYU Reader"> @@ -3349,7 +3470,11 @@ This property specifies the file name for the BYU reader. </Documentation> </StringVectorProperty> - <!-- End stlreader --> + <Hints> + <ReaderFactory extensions="g" + file_description="BYU Files"/> + </Hints> + <!-- End byureader --> </SourceProxy> <SourceProxy name="gaussiancubereader" class="vtkGaussianCubeReader" @@ -3395,6 +3520,11 @@ A scaling factor to compute bonds between non-hydrogen atoms </Documentation> </DoubleVectorProperty> + + <Hints> + <ReaderFactory extensions="cube" + file_description="Gaussian Cube Files" /> + </Hints> <!-- End gaussiancubereader --> </SourceProxy> @@ -3447,6 +3577,11 @@ This property indicates the number of ghost levels to generate. </Documentation> </IntVectorProperty> + + <Hints> + <ReaderFactory extensions="pop" + file_description="POP Ocean Files"/> + </Hints> <!-- End popreader --> </SourceProxy> @@ -3544,6 +3679,11 @@ This property lists which point-centered arrays to read. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="sos SOS" + file_description="EnSight Master Server Files" /> + </Hints> <!-- End ensightMS --> </SourceProxy> @@ -3561,6 +3701,8 @@ whether the given property is shown in the GUI or not. --> <Hints> <Property name="FilePrefix" show="1"/> + <ReaderFactory extensions="raw" + file_description="Raw (binary) Files" /> </Hints> <StringVectorProperty @@ -3839,6 +3981,11 @@ </Documentation> </IntVectorProperty> + <Hints> + <ReaderFactory extensions="xmf xdmf" + file_description="Xdmf Reader" /> + </Hints> + <!-- --> </SourceProxy> @@ -4029,11 +4176,14 @@ Set the current timestep. </Documentation> </IntVectorProperty> + <Hints> + <ReaderFactory extensions="xmf xdmf" + file_description="Xdmf Reader" /> + </Hints> <!-- End XdmfReader --> </SourceProxy> - <FileSeriesReaderProxy name="ExodusIIReader" class="vtkExodusFileSeriesReader" file_name_method="SetFileName"> @@ -4151,6 +4301,9 @@ <Property name="UseMetaFile" show="0" /> <!-- This is for special GUI control. --> <Property name="Refresh" show="0"/> + <ReaderFactory + extensions="g e ex2 ex2v2 exo gen exoII 0 00 000 0000 exii" + file_description="ExodusII"/> </Hints> <!-- ExodusIIReader --> </FileSeriesReaderProxy> @@ -4264,12 +4417,13 @@ <Property name="UseMetaFile" show="0" /> <!-- This is for special GUI control. --> <Property name="Refresh" show="0"/> + + <ReaderFactory extensions="ex-timeseries" + file_description="Metafile for restarted exodus outputs" /> </Hints> <!-- ExodusRestartReader --> </FileSeriesReaderProxy> - - <FileSeriesReaderProxy name="AVSucdSeriesReader" class="vtkFileSeriesReader" label="AVS UCD Reader" @@ -4326,6 +4480,11 @@ Available timestep values. </Documentation> </DoubleVectorProperty> + + <Hints> + <ReaderFactory extensions="inp" + file_description="AVS UCD Binary/ASCII Files"/> + </Hints> <!-- End of AVSucdSeriesReader --> </FileSeriesReaderProxy> @@ -4346,6 +4505,11 @@ This property specifies the file name for the Facet reader. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="facet" + file_description="Facet Polygonal Data Files" /> + </Hints> <!-- End Facet Reader --> </SourceProxy> @@ -4366,6 +4530,10 @@ This property specifies the file name for the Meta Image reader. </Documentation> </StringVectorProperty> + <Hints> + <ReaderFactory extensions="mhd mha" + file_description="Meta Image Data Files" /> + </Hints> <!-- End Meta Image Reader --> </SourceProxy> @@ -4387,6 +4555,11 @@ This property specifies the file name for the PNG reader. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="png" + file_description="PNG Image Files" /> + </Hints> <!-- End PNGReader --> </SourceProxy> @@ -4408,6 +4581,11 @@ This property specifies the file name for the TIFF reader. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="tif tiff" + file_description="TIFF Image Files"/> + </Hints> <!-- End TIFFReader --> </SourceProxy> @@ -4454,6 +4632,11 @@ information_only="1"> <ArraySelectionInformationHelper attribute_name="Table"/> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="sesame" + file_description="SESAME" /> + </Hints> <!-- End SESAMEReader --> </SourceProxy> @@ -4524,6 +4707,11 @@ information_only="1"> <TimeStepsInformationHelper/> </DoubleVectorProperty> + + <Hints> + <ReaderFactory extensions="foam" + file_description="OpenFOAM Files" /> + </Hints> </SourceProxy> <!-- End of foam Reader --> @@ -4578,6 +4766,11 @@ information_only="1"> <TimeStepsInformationHelper/> </DoubleVectorProperty> + + <Hints> + <ReaderFactory extensions="RES" + file_description="MFIX Unstructured Grid Files" /> + </Hints> </SourceProxy> <!-- End of MFIX Reader --> @@ -4621,6 +4814,11 @@ Select which cell-centered arrays to read. </Documentation> </StringVectorProperty> + + <Hints> + <ReaderFactory extensions="cas" + file_description="Fluent Case Files" /> + </Hints> </SourceProxy> <!-- End of FLUENT Reader --> @@ -4877,6 +5075,10 @@ </Documentation> </IntVectorProperty> + <Hints> + <ReaderFactory extensions="d3plot k lsdyna" file_description="LSDyna" /> + </Hints> + </SourceProxy> <!-- End of LSDyna Reader --> @@ -4953,6 +5155,11 @@ </Documentation> </DoubleVectorProperty> + <Hints> + <ReaderFactory extensions="ncdf nc" + file_description="netCDF Files" /> + </Hints> + </SourceProxy> <!-- netCDFReader --> <SourceProxy name="SLACReader" @@ -5064,12 +5271,13 @@ </Documentation> </DoubleVectorProperty> - <Hints> + <Hints> + <ReaderFactory extensions="ncdf nc" + file_description="SLAC Mesh Files" /> <!-- Usually you want to look at the external surface, but the volume is there for visualizing the internal fields. --> <OutputPort index="1" visible="0" /> - </Hints> - + </Hints> </SourceProxy> <!-- SLACReader --> <FileSeriesReaderProxy name="SLACParticleReader" @@ -5107,6 +5315,11 @@ Available timestep values. </Documentation> </DoubleVectorProperty> + + <Hints> + <ReaderFactory extensions="ncdf netcdf" + file_description="SLAC Particle Files" /> + </Hints> </FileSeriesReaderProxy> <!-- SLACParticleReader --> <FileSeriesReaderProxy name="CSVReader" @@ -5172,6 +5385,8 @@ <Hints> <!-- View can be used to specify the preferred view for the proxy --> <View type="SpreadSheetView" /> + <ReaderFactory extensions="csv" + file_description="Comma-separated-values" /> </Hints> <!-- End of CSVReader --> </FileSeriesReaderProxy> @@ -5234,6 +5449,11 @@ </ExposedProperties> </SubProxy> + <Hints> + <ReaderFactory extensions="particles" + file_description="VTK Particle Files" /> + </Hints> + <!-- End of CSVReader --> </FileSeriesReaderProxy> @@ -5286,6 +5506,11 @@ <Property name="DataArrayStatus" /> </ExposedProperties> </SubProxy> + + <Hints> + <ReaderFactory extensions="tec TEC Tec tp TP" + file_description="Tecplot Files" /> + </Hints> <!-- End TecplotReader --> </FileSeriesReaderProxy> diff --git a/Servers/ServerManager/Resources/writers.xml b/Servers/ServerManager/Resources/writers.xml index efbf27e439..ac6658b7a5 100644 --- a/Servers/ServerManager/Resources/writers.xml +++ b/Servers/ServerManager/Resources/writers.xml @@ -65,6 +65,7 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="pvd" file_description="ParaView Data Files" /> </Hints> <!-- End of XMLPVDWriter --> </PWriterProxy> @@ -117,6 +118,7 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="vtp" file_description="VTK PolyData Files"/> </Hints> <!-- End of XMLPolyDataWriter --> </WriterProxy> @@ -144,6 +146,7 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="vtu" file_description="VTK UnstructuredGrid Files"/> </Hints> <!-- End of XMLUnstructuredGridWriter --> </WriterProxy> @@ -172,6 +175,8 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="vts" + file_description="VTK StructuredGrid Files"/> </Hints> <!-- End of XMLStructuredGridWriter --> </WriterProxy> @@ -199,6 +204,8 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="vtr" + file_description="VTK RectilinearGrid Files"/> </Hints> <!-- End of XMLRectilinearGridWriter --> </WriterProxy> @@ -226,6 +233,8 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="vti" + file_description="VTK ImageData Files"/> </Hints> <!-- End of XMLImageDataWriter --> </WriterProxy> @@ -266,6 +275,8 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="pvtp" + file_description="PVTK PolyData Files"/> </Hints> <!-- End of XMLPPolyDataWriter --> </WriterProxy> @@ -306,6 +317,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="pvtu" + file_description="PVTK UnstructuredGrid Files"/> </Hints> <!-- End of XMLPUnstructuredGridWriter --> </WriterProxy> @@ -346,6 +360,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="pvts" + file_description="PVTK StructuredGrid Files"/> </Hints> <!-- End of XMLPStructuredGridWriter --> </WriterProxy> @@ -386,6 +403,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="pvtr" + file_description="PVTK RectilinearGrid Files"/> </Hints> <!-- End of XMLPRectilinearGridWriter --> </WriterProxy> @@ -426,6 +446,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="pvti" + file_description="PVTK ImageData Files"/> </Hints> <!-- End of XMLPImageDataWriter --> </WriterProxy> @@ -468,6 +491,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="vtm" + file_description="VTK Multi Block Files"/> </Hints> <!-- End of XMLMultiBlockDataWriter --> @@ -511,6 +537,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="vthb" + file_description="VTK Hierarchical Box Files"/> </Hints> <!-- End of XMLPHierarchicalBoxDataWriter --> @@ -554,6 +583,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="vtk" + file_description="Legacy VTK Files"/> </Hints> <!-- End of DataSetWriter --> </WriterProxy> @@ -618,6 +650,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="vtk" + file_description="Legacy VTK Files"/> </Hints> <!-- End of PDataSetWriter --> </PSWriterProxy> @@ -672,6 +707,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="ply" + file_description="PLY Polygonal File Format"/> </Hints> <!-- End of PLYWriter --> </PSWriterProxy> @@ -726,6 +764,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="stl" + file_description="Stereo Lithography File Format"/> </Hints> <!-- End of PSTLWriter --> </PSWriterProxy> @@ -763,6 +804,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="mhd" + file_description="Meta Image Files"/> </Hints> <!-- End of MetaImageWriter --> </WriterProxy> @@ -798,6 +842,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="png" + file_description="PNG Image Files"/> </Hints> <!-- End of PNGWriter --> </WriterProxy> @@ -830,6 +877,8 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="xmf" + file_description="Xdmf Data File"/> </Hints> <!-- End of XdmfWriter --> </WriterProxy> @@ -905,6 +954,9 @@ <Property name="Input" show="0"/> <Property name="FileName" show="0"/> <Property name="GhostLevel" show="0"/> + <WriterFactory + extensions="g e ex2 ex2v2 exo gen exoII exoii" + file_description="Exodus II File"/> </Hints> <!-- End of ExodusIIWriter --> </PWriterProxy> @@ -935,6 +987,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="case" + file_description="EnSight File"/> </Hints> <!-- End of EnSightWriter --> </PWriterProxy> @@ -1099,6 +1154,9 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory + extensions="csv" + file_description="CSV File"/> </Hints> <!-- End of CSVWriter --> </PSWriterProxy> @@ -1194,6 +1252,8 @@ <Hints> <Property name="Input" show="0"/> <Property name="FileName" show="0"/> + <WriterFactory extensions="csv" + file_description="CSV File"/> </Hints> <!-- End of CSVWriter --> </PSWriterProxy> diff --git a/Servers/ServerManager/Testing/Python/CMakeLists.txt b/Servers/ServerManager/Testing/Python/CMakeLists.txt index 52300a25df..23e613262a 100644 --- a/Servers/ServerManager/Testing/Python/CMakeLists.txt +++ b/Servers/ServerManager/Testing/Python/CMakeLists.txt @@ -39,7 +39,6 @@ ENDIF (PVServerManagerTestData) # Add python script names here. SET (PY_TESTS - SMAnimation ProxyPropertyLinks PythonPVSimpleCone PythonPVSimpleExII diff --git a/Servers/ServerManager/Testing/SMStates/Animation.pvsm b/Servers/ServerManager/Testing/SMStates/Animation.pvsm deleted file mode 100644 index 6c0b0a629c..0000000000 --- a/Servers/ServerManager/Testing/SMStates/Animation.pvsm +++ /dev/null @@ -1,3126 +0,0 @@ -<ServerManagerState version="3.0.2"> - <Proxy group="sources" type="ArrowSource" id="35"> - <Property name="ShaftRadius" id="35.ShaftRadius" number_of_elements="1"> - <Element index="0" value="0.03"/> - <Domain name="range" id="35.ShaftRadius.range"> - <Min index="0" value="0"/> - <Max index="0" value="5"/> - </Domain> - </Property> - <Property name="ShaftResolution" id="35.ShaftResolution" number_of_elements="1"> - <Element index="0" value="6"/> - <Domain name="range" id="35.ShaftResolution.range"> - <Min index="0" value="0"/> - <Max index="0" value="128"/> - </Domain> - </Property> - <Property name="TipLength" id="35.TipLength" number_of_elements="1"> - <Element index="0" value="0.35"/> - <Domain name="range" id="35.TipLength.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="TipRadius" id="35.TipRadius" number_of_elements="1"> - <Element index="0" value="0.1"/> - <Domain name="range" id="35.TipRadius.range"> - <Min index="0" value="0"/> - <Max index="0" value="10"/> - </Domain> - </Property> - <Property name="TipResolution" id="35.TipResolution" number_of_elements="1"> - <Element index="0" value="6"/> - <Domain name="range" id="35.TipResolution.range"> - <Min index="0" value="1"/> - <Max index="0" value="128"/> - </Domain> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="40"> - <Property name="Input" id="40.Input" number_of_elements="1"> - <Proxy value="35"/> - <Domain name="groups" id="40.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="40.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="40.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="40.Representation" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="enum" id="40.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="40.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="40.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="40.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="40.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="40.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="40.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="40.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="40.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="40.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="40.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="40.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="40.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="40.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="40.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="40.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="40.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="40.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="40.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="40.LookupTable" number_of_elements="0"> - <Domain name="groups" id="40.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="40.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="40.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="40.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="40.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="40.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="40.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="40.Orientation.range"/> - </Property> - <Property name="Origin" id="40.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="40.Origin.range"/> - </Property> - <Property name="PointSize" id="40.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="40.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="40.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="40.Position.range"/> - </Property> - <Property name="ScalarMode" id="40.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="40.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="40.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="40.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="40.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="40.Scale.range"/> - </Property> - <Property name="Shading" id="40.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="40.Shading.bool"/> - </Property> - <Property name="UseLookupTableScalarRange" id="40.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="40.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="40.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="40.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="41"/> - <SubProxy name="Distributor" id="44"/> - <SubProxy name="DistributorSuppressor" id="47"/> - <SubProxy name="GeometryFilter" id="50"/> - <SubProxy name="LODCollect" id="53"/> - <SubProxy name="LODDecimator" id="56"/> - <SubProxy name="LODDistributor" id="59"/> - <SubProxy name="LODDistributorSuppressor" id="62"/> - <SubProxy name="LODMapper" id="65"/> - <SubProxy name="LODUpdateSuppressor" id="68"/> - <SubProxy name="Mapper" id="71"/> - <SubProxy name="MaterialLoader" id="74"/> - <SubProxy name="Prop" id="75"/> - <SubProxy name="Property" id="77"/> - <SubProxy name="UpdateSuppressor" id="79"/> - </Proxy> - <Proxy group="sources" type="ConeSource" id="113"> - <Property name="Capping" id="113.Capping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="113.Capping.bool"/> - </Property> - <Property name="Center" id="113.Center" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - </Property> - <Property name="Height" id="113.Height" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="113.Height.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Radius" id="113.Radius" number_of_elements="1"> - <Element index="0" value="0.5"/> - <Domain name="range" id="113.Radius.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Resolution" id="113.Resolution" number_of_elements="1"> - <Element index="0" value="6"/> - <Domain name="range" id="113.Resolution.range"> - <Min index="0" value="0"/> - <Max index="0" value="512"/> - </Domain> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="118"> - <Property name="Input" id="118.Input" number_of_elements="1"> - <Proxy value="113"/> - <Domain name="groups" id="118.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="118.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="118.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="118.Representation" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="enum" id="118.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="118.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="118.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="118.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="118.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="118.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="118.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="118.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="118.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="118.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="118.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="118.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="118.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="118.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="118.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="118.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="118.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="118.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="118.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="118.LookupTable" number_of_elements="0"> - <Domain name="groups" id="118.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="118.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="118.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="118.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="118.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="118.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="118.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="118.Orientation.range"/> - </Property> - <Property name="Origin" id="118.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="118.Origin.range"/> - </Property> - <Property name="PointSize" id="118.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="118.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="118.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="118.Position.range"/> - </Property> - <Property name="ScalarMode" id="118.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="118.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="118.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="118.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="118.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="118.Scale.range"/> - </Property> - <Property name="Shading" id="118.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="118.Shading.bool"/> - </Property> - <Property name="UseLookupTableScalarRange" id="118.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="118.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="118.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="118.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="119"/> - <SubProxy name="Distributor" id="122"/> - <SubProxy name="DistributorSuppressor" id="125"/> - <SubProxy name="GeometryFilter" id="128"/> - <SubProxy name="LODCollect" id="131"/> - <SubProxy name="LODDecimator" id="134"/> - <SubProxy name="LODDistributor" id="137"/> - <SubProxy name="LODDistributorSuppressor" id="140"/> - <SubProxy name="LODMapper" id="143"/> - <SubProxy name="LODUpdateSuppressor" id="146"/> - <SubProxy name="Mapper" id="149"/> - <SubProxy name="MaterialLoader" id="152"/> - <SubProxy name="Prop" id="153"/> - <SubProxy name="Property" id="155"/> - <SubProxy name="UpdateSuppressor" id="157"/> - </Proxy> - <Proxy group="sources" type="CubeSource" id="191"> - <Property name="Center" id="191.Center" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="191.Center.range"/> - </Property> - <Property name="XLength" id="191.XLength" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="191.XLength.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="YLength" id="191.YLength" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="191.YLength.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="ZLength" id="191.ZLength" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="191.ZLength.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="196"> - <Property name="Input" id="196.Input" number_of_elements="1"> - <Proxy value="191"/> - <Domain name="groups" id="196.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="196.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="196.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="196.Representation" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="enum" id="196.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="196.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="196.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="196.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="196.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="196.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="196.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="196.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="196.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="196.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="196.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="196.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="196.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="196.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="196.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="196.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="196.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="196.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="196.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="196.LookupTable" number_of_elements="0"> - <Domain name="groups" id="196.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="196.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="196.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="196.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="196.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="196.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="196.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="196.Orientation.range"/> - </Property> - <Property name="Origin" id="196.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="196.Origin.range"/> - </Property> - <Property name="PointSize" id="196.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="196.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="196.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="196.Position.range"/> - </Property> - <Property name="ScalarMode" id="196.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="196.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="196.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="196.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="196.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="196.Scale.range"/> - </Property> - <Property name="Shading" id="196.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="196.Shading.bool"/> - </Property> - <Property name="UseLookupTableScalarRange" id="196.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="196.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="196.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="196.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="197"/> - <SubProxy name="Distributor" id="200"/> - <SubProxy name="DistributorSuppressor" id="203"/> - <SubProxy name="GeometryFilter" id="206"/> - <SubProxy name="LODCollect" id="209"/> - <SubProxy name="LODDecimator" id="212"/> - <SubProxy name="LODDistributor" id="215"/> - <SubProxy name="LODDistributorSuppressor" id="218"/> - <SubProxy name="LODMapper" id="221"/> - <SubProxy name="LODUpdateSuppressor" id="224"/> - <SubProxy name="Mapper" id="227"/> - <SubProxy name="MaterialLoader" id="230"/> - <SubProxy name="Prop" id="231"/> - <SubProxy name="Property" id="233"/> - <SubProxy name="UpdateSuppressor" id="235"/> - </Proxy> - <Proxy group="sources" type="GlyphSource2D" id="427"> - <Property name="Center" id="427.Center" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="427.Center.range"/> - </Property> - <Property name="Filled" id="427.Filled" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="427.Filled.bool"/> - </Property> - <Property name="GlyphType" id="427.GlyphType" number_of_elements="1"> - <Element index="0" value="9"/> - <Domain name="enum" id="427.GlyphType.enum"> - <Entry value="1" text="Vertex"/> - <Entry value="2" text="Dash"/> - <Entry value="3" text="Cross"/> - <Entry value="4" text="ThickCross"/> - <Entry value="5" text="Triangle"/> - <Entry value="6" text="Square"/> - <Entry value="7" text="Circle"/> - <Entry value="8" text="Diamond"/> - <Entry value="9" text="Arrow"/> - <Entry value="10" text="ThickArrow"/> - </Domain> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="432"> - <Property name="Input" id="432.Input" number_of_elements="1"> - <Proxy value="427"/> - <Domain name="groups" id="432.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="432.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="432.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="432.Representation" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="enum" id="432.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="432.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="432.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="432.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="432.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="432.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="432.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="432.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="432.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="432.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="432.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="432.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="432.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="432.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="432.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="432.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="432.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="432.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="432.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="432.LookupTable" number_of_elements="0"> - <Domain name="groups" id="432.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="432.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="432.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="432.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="432.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="432.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="432.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="432.Orientation.range"/> - </Property> - <Property name="Origin" id="432.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="432.Origin.range"/> - </Property> - <Property name="PointSize" id="432.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="432.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="432.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="432.Position.range"/> - </Property> - <Property name="ScalarMode" id="432.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="432.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="432.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="432.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="432.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="432.Scale.range"/> - </Property> - <Property name="Shading" id="432.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="432.Shading.bool"/> - </Property> - <Property name="UseLookupTableScalarRange" id="432.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="432.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="432.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="432.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="433"/> - <SubProxy name="Distributor" id="436"/> - <SubProxy name="DistributorSuppressor" id="439"/> - <SubProxy name="GeometryFilter" id="442"/> - <SubProxy name="LODCollect" id="445"/> - <SubProxy name="LODDecimator" id="448"/> - <SubProxy name="LODDistributor" id="451"/> - <SubProxy name="LODDistributorSuppressor" id="454"/> - <SubProxy name="LODMapper" id="457"/> - <SubProxy name="LODUpdateSuppressor" id="460"/> - <SubProxy name="Mapper" id="463"/> - <SubProxy name="MaterialLoader" id="466"/> - <SubProxy name="Prop" id="467"/> - <SubProxy name="Property" id="469"/> - <SubProxy name="UpdateSuppressor" id="471"/> - </Proxy> - <Proxy group="sources" type="LineSource" id="269"> - <Property name="Point1" id="269.Point1" number_of_elements="3"> - <ControllerProperty id="272" name="Point1"/> - <Element index="0" value="-0.5"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="269.Point1.range"/> - </Property> - <Property name="Point2" id="269.Point2" number_of_elements="3"> - <ControllerProperty id="272" name="Point2"/> - <Element index="0" value="0.5"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="269.Point2.range"/> - </Property> - <Property name="Resolution" id="269.Resolution" number_of_elements="1"> - <Element index="0" value="6"/> - <Domain name="range" id="269.Resolution.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="276"> - <Property name="Input" id="276.Input" number_of_elements="1"> - <Proxy value="269"/> - <Domain name="groups" id="276.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="276.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="276.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="276.Representation" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="enum" id="276.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="276.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="276.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="276.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="276.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="276.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="276.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="276.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="276.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="276.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="276.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="276.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="276.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="276.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="276.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="276.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="276.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="276.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="276.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="276.LookupTable" number_of_elements="0"> - <Domain name="groups" id="276.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="276.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="276.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="276.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="276.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="276.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="276.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="276.Orientation.range"/> - </Property> - <Property name="Origin" id="276.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="276.Origin.range"/> - </Property> - <Property name="PointSize" id="276.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="276.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="276.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="276.Position.range"/> - </Property> - <Property name="ScalarMode" id="276.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="276.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="276.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="276.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="276.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="276.Scale.range"/> - </Property> - <Property name="Shading" id="276.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="276.Shading.bool"/> - </Property> - <Property name="UseLookupTableScalarRange" id="276.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="276.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="276.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="276.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="277"/> - <SubProxy name="Distributor" id="280"/> - <SubProxy name="DistributorSuppressor" id="283"/> - <SubProxy name="GeometryFilter" id="286"/> - <SubProxy name="LODCollect" id="289"/> - <SubProxy name="LODDecimator" id="292"/> - <SubProxy name="LODDistributor" id="295"/> - <SubProxy name="LODDistributorSuppressor" id="298"/> - <SubProxy name="LODMapper" id="301"/> - <SubProxy name="LODUpdateSuppressor" id="304"/> - <SubProxy name="Mapper" id="307"/> - <SubProxy name="MaterialLoader" id="310"/> - <SubProxy name="Prop" id="311"/> - <SubProxy name="Property" id="313"/> - <SubProxy name="UpdateSuppressor" id="315"/> - </Proxy> - <Proxy group="sources" type="SphereSource" id="349"> - <Property name="Center" id="349.Center" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="349.Center.range"/> - </Property> - <Property name="EndPhi" id="349.EndPhi" number_of_elements="1"> - <Element index="0" value="180"/> - <Domain name="range" id="349.EndPhi.range"> - <Min index="0" value="0"/> - <Max index="0" value="180"/> - </Domain> - </Property> - <Property name="EndTheta" id="349.EndTheta" number_of_elements="1"> - <Element index="0" value="360"/> - <Domain name="range" id="349.EndTheta.range"> - <Min index="0" value="0"/> - <Max index="0" value="360"/> - </Domain> - </Property> - <Property name="PhiResolution" id="349.PhiResolution" number_of_elements="1"> - <Element index="0" value="8"/> - <Domain name="range" id="349.PhiResolution.range"> - <Min index="0" value="3"/> - <Max index="0" value="1024"/> - </Domain> - </Property> - <Property name="Radius" id="349.Radius" number_of_elements="1"> - <Element index="0" value="0.5"/> - <Domain name="range" id="349.Radius.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="StartPhi" id="349.StartPhi" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="range" id="349.StartPhi.range"> - <Min index="0" value="0"/> - <Max index="0" value="180"/> - </Domain> - </Property> - <Property name="StartTheta" id="349.StartTheta" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="range" id="349.StartTheta.range"> - <Min index="0" value="0"/> - <Max index="0" value="360"/> - </Domain> - </Property> - <Property name="ThetaResolution" id="349.ThetaResolution" number_of_elements="1"> - <Element index="0" value="8"/> - <Domain name="range" id="349.ThetaResolution.range"> - <Min index="0" value="3"/> - <Max index="0" value="1024"/> - </Domain> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="354"> - <Property name="Input" id="354.Input" number_of_elements="1"> - <Proxy value="349"/> - <Domain name="groups" id="354.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="354.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="354.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="354.Representation" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="enum" id="354.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="354.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="354.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="354.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="354.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="354.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="354.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="354.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="354.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="354.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="354.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="354.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="354.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="354.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="354.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="354.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="354.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="354.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="354.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="354.LookupTable" number_of_elements="0"> - <Domain name="groups" id="354.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="354.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="354.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="354.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="354.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="354.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="354.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="354.Orientation.range"/> - </Property> - <Property name="Origin" id="354.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="354.Origin.range"/> - </Property> - <Property name="PointSize" id="354.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="354.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="354.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="354.Position.range"/> - </Property> - <Property name="ScalarMode" id="354.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="354.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="354.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="354.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="354.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="354.Scale.range"/> - </Property> - <Property name="Shading" id="354.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="354.Shading.bool"/> - </Property> - <Property name="UseLookupTableScalarRange" id="354.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="354.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="354.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="354.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="355"/> - <SubProxy name="Distributor" id="358"/> - <SubProxy name="DistributorSuppressor" id="361"/> - <SubProxy name="GeometryFilter" id="364"/> - <SubProxy name="LODCollect" id="367"/> - <SubProxy name="LODDecimator" id="370"/> - <SubProxy name="LODDistributor" id="373"/> - <SubProxy name="LODDistributorSuppressor" id="376"/> - <SubProxy name="LODMapper" id="379"/> - <SubProxy name="LODUpdateSuppressor" id="382"/> - <SubProxy name="Mapper" id="385"/> - <SubProxy name="MaterialLoader" id="388"/> - <SubProxy name="Prop" id="389"/> - <SubProxy name="Property" id="391"/> - <SubProxy name="UpdateSuppressor" id="393"/> - </Proxy> - <Proxy group="filters" type="Contour" id="636"> - <Property name="ComputeGradients" id="636.ComputeGradients" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="636.ComputeGradients.bool"/> - </Property> - <Property name="ComputeNormals" id="636.ComputeNormals" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="636.ComputeNormals.bool"/> - </Property> - <Property name="ComputeScalars" id="636.ComputeScalars" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="636.ComputeScalars.bool"/> - </Property> - <Property name="ContourValues" id="636.ContourValues" number_of_elements="1"> - <Element index="0" value="276.829"/> - <Domain name="scalar_range" id="636.ContourValues.scalar_range"> - <Min index="0" value="37.3531"/> - <Max index="0" value="276.829"/> - </Domain> - </Property> - <Property name="Input" id="636.Input" number_of_elements="1"> - <Proxy value="505"/> - <Domain name="groups" id="636.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - </Domain> - <Domain name="input_array" id="636.Input.input_array"> - <InputArray attribute_type="point" number_of_components="1"/> - </Domain> - <Domain name="input_type" id="636.Input.input_type"> - <DataType value="vtkDataSet"/> - </Domain> - </Property> - <Property name="SelectInputScalars" id="636.SelectInputScalars" number_of_elements="5"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Element index="3" value="0"/> - <Element index="4" value="RTData"/> - <Domain name="array_list" id="636.SelectInputScalars.array_list"> - <String text="RTData"/> - </Domain> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="641"> - <Property name="Input" id="641.Input" number_of_elements="1"> - <Proxy value="636"/> - <Domain name="groups" id="641.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="641.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="641.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="641.Representation" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="enum" id="641.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="641.Visibility" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="641.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="641.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="641.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="641.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="641.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="641.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="641.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="641.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="641.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="641.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="641.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="641.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="641.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="641.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="641.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="641.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="641.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="641.LookupTable" number_of_elements="0"> - <Domain name="groups" id="641.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="641.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="641.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="641.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="641.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="641.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="641.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="641.Orientation.range"/> - </Property> - <Property name="Origin" id="641.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="641.Origin.range"/> - </Property> - <Property name="PointSize" id="641.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="641.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="641.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="641.Position.range"/> - </Property> - <Property name="ScalarMode" id="641.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="641.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="641.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="641.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="641.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="641.Scale.range"/> - </Property> - <Property name="Shading" id="641.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="641.Shading.bool"/> - </Property> - - <Property name="UseLookupTableScalarRange" id="641.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="641.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="641.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="641.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="642"/> - <SubProxy name="Distributor" id="645"/> - <SubProxy name="DistributorSuppressor" id="648"/> - <SubProxy name="GeometryFilter" id="651"/> - <SubProxy name="LODCollect" id="654"/> - <SubProxy name="LODDecimator" id="657"/> - <SubProxy name="LODDistributor" id="660"/> - <SubProxy name="LODDistributorSuppressor" id="663"/> - <SubProxy name="LODMapper" id="666"/> - <SubProxy name="LODUpdateSuppressor" id="669"/> - <SubProxy name="Mapper" id="672"/> - <SubProxy name="MaterialLoader" id="675"/> - <SubProxy name="Prop" id="676"/> - <SubProxy name="Property" id="678"/> - <SubProxy name="UpdateSuppressor" id="680"/> - </Proxy> - <Proxy group="sources" type="RTAnalyticSource" id="505"> - <Property name="Center" id="505.Center" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="505.Center.range"/> - </Property> - <Property name="Maximum" id="505.Maximum" number_of_elements="1"> - <Element index="0" value="255"/> - <Domain name="range" id="505.Maximum.range"/> - </Property> - <Property name="StandardDeviation" id="505.StandardDeviation" number_of_elements="1"> - <Element index="0" value="0.5"/> - <Domain name="range" id="505.StandardDeviation.range"/> - </Property> - <Property name="SubsampleRate" id="505.SubsampleRate" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="505.SubsampleRate.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="WholeExtent" id="505.WholeExtent" number_of_elements="6"> - <Element index="0" value="-10"/> - <Element index="1" value="10"/> - <Element index="2" value="-10"/> - <Element index="3" value="10"/> - <Element index="4" value="-10"/> - <Element index="5" value="10"/> - <Domain name="range" id="505.WholeExtent.range"/> - </Property> - <Property name="XFreq" id="505.XFreq" number_of_elements="1"> - <Element index="0" value="60"/> - <Domain name="range" id="505.XFreq.range"/> - </Property> - <Property name="XMag" id="505.XMag" number_of_elements="1"> - <Element index="0" value="10"/> - <Domain name="range" id="505.XMag.range"/> - </Property> - <Property name="YFreq" id="505.YFreq" number_of_elements="1"> - <Element index="0" value="30"/> - <Domain name="range" id="505.YFreq.range"/> - </Property> - <Property name="YMag" id="505.YMag" number_of_elements="1"> - <Element index="0" value="18"/> - <Domain name="range" id="505.YMag.range"/> - </Property> - <Property name="ZFreq" id="505.ZFreq" number_of_elements="1"> - <Element index="0" value="40"/> - <Domain name="range" id="505.ZFreq.range"/> - </Property> - <Property name="ZMag" id="505.ZMag" number_of_elements="1"> - <Element index="0" value="5"/> - <Domain name="range" id="505.ZMag.range"/> - </Property> - </Proxy> - <Proxy group="displays" type="LODDisplay" id="511"> - <Property name="Input" id="511.Input" number_of_elements="1"> - <Proxy value="505"/> - <Domain name="groups" id="511.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="LODResolution" id="511.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="511.LODResolution.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Representation" id="511.Representation" number_of_elements="1"> - <Element index="0" value="3"/> - <Domain name="enum" id="511.Representation.enum"> - <Entry value="0" text="Points"/> - <Entry value="1" text="Wireframe"/> - <Entry value="2" text="Surface"/> - <Entry value="3" text="Outline"/> - <Entry value="4" text="Volume"/> - </Domain> - </Property> - <Property name="Visibility" id="511.Visibility" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="511.Visibility.bool"/> - </Property> - <Property name="ClippingPlanes" id="511.ClippingPlanes" number_of_elements="0"> - <Domain name="groups" id="511.ClippingPlanes.groups"> - <Group value="implicit_functions"/> - </Domain> - </Property> - <Property name="Color" id="511.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="511.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="ColorArray" id="511.ColorArray" number_of_elements="1"> - <Element index="0" value=""/> - <Domain name="array_list" id="511.ColorArray.array_list"/> - </Property> - <Property name="ColorMode" id="511.ColorMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="511.ColorMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="MapScalars"/> - </Domain> - </Property> - <Property name="ImmediateModeRendering" id="511.ImmediateModeRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="511.ImmediateModeRendering.bool"/> - </Property> - <Property name="InterpolateScalarsBeforeMapping" id="511.InterpolateScalarsBeforeMapping" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="511.InterpolateScalarsBeforeMapping.bool"/> - </Property> - <Property name="Interpolation" id="511.Interpolation" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="511.Interpolation.enum"> - <Entry value="0" text="Flat"/> - <Entry value="1" text="Gourand"/> - <Entry value="2" text="Phong"/> - </Domain> - </Property> - <Property name="LineWidth" id="511.LineWidth" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="511.LineWidth.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="LookupTable" id="511.LookupTable" number_of_elements="0"> - <Domain name="groups" id="511.LookupTable.groups"> - <Group value="lookup_tables"/> - </Domain> - </Property> - <Property name="Material" id="511.Material" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="NumberOfSubPieces" id="511.NumberOfSubPieces" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="511.NumberOfSubPieces.range"> - <Min index="0" value="1"/> - </Domain> - </Property> - <Property name="Opacity" id="511.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="511.Opacity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="Orientation" id="511.Orientation" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="511.Orientation.range"/> - </Property> - <Property name="Origin" id="511.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="511.Origin.range"/> - </Property> - <Property name="PointSize" id="511.PointSize" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="511.PointSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Position" id="511.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="511.Position.range"/> - </Property> - <Property name="ScalarMode" id="511.ScalarMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="511.ScalarMode.enum"> - <Entry value="0" text="Default"/> - <Entry value="1" text="UsePointData"/> - <Entry value="2" text="UseCellData"/> - <Entry value="3" text="UsePointFieldData"/> - <Entry value="4" text="UseCellFieldData"/> - </Domain> - </Property> - <Property name="ScalarVisibility" id="511.ScalarVisibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="511.ScalarVisibility.bool"/> - </Property> - <Property name="Scale" id="511.Scale" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="511.Scale.range"/> - </Property> - <Property name="Shading" id="511.Shading" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="511.Shading.bool"/> - </Property> - <Property name="UseLookupTableScalarRange" id="511.UseLookupTableScalarRange" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="511.UseLookupTableScalarRange.bool"/> - </Property> - <Property name="UseStrips" id="511.UseStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="511.UseStrips.bool"/> - </Property> - <SubProxy name="Collect" id="512"/> - <SubProxy name="Distributor" id="515"/> - <SubProxy name="DistributorSuppressor" id="518"/> - <SubProxy name="GeometryFilter" id="521"/> - <SubProxy name="LODCollect" id="524"/> - <SubProxy name="LODDecimator" id="527"/> - <SubProxy name="LODDistributor" id="530"/> - <SubProxy name="LODDistributorSuppressor" id="533"/> - <SubProxy name="LODMapper" id="536"/> - <SubProxy name="LODUpdateSuppressor" id="539"/> - <SubProxy name="Mapper" id="542"/> - <SubProxy name="MaterialLoader" id="545"/> - <SubProxy name="Prop" id="546"/> - <SubProxy name="Property" id="548"/> - <SubProxy name="UpdateSuppressor" id="550"/> - </Proxy> - <Proxy group="animation" type="AnimationCue" id="33"> - <Property name="AnimatedDomainName" id="33.AnimatedDomainName" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="AnimatedElement" id="33.AnimatedElement" number_of_elements="1"> - <Element index="0" value="-1"/> - </Property> - <Property name="AnimatedPropertyName" id="33.AnimatedPropertyName" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="AnimatedProxy" id="33.AnimatedProxy" number_of_elements="1"> - <Proxy value="4"/> - <Domain name="groups" id="33.AnimatedProxy.groups"> - <Group value="sources"/> - <Group value="filters"/> - </Domain> - </Property> - <Property name="EndTime" id="33.EndTime" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Manipulator" id="33.Manipulator" number_of_elements="1"> - <Proxy value="34"/> - <Domain name="groups" id="33.Manipulator.groups"> - <Group value="animation_manipulators"/> - </Domain> - </Property> - <Property name="StartTime" id="33.StartTime" number_of_elements="1"> - <Element index="0" value="0"/> - </Property> - <Property name="TimeMode" id="33.TimeMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="33.TimeMode.enum"> - <Entry value="0" text="Normalized"/> - <Entry value="1" text="Relative"/> - </Domain> - </Property> - </Proxy> - <Proxy group="animation" type="AnimationCue" id="714"> - <Property name="AnimatedDomainName" id="714.AnimatedDomainName" number_of_elements="1"> - <Element index="0" value=""/> - </Property> - <Property name="AnimatedElement" id="714.AnimatedElement" number_of_elements="1"> - <Element index="0" value="-1"/> - </Property> - <Property name="AnimatedPropertyName" id="714.AnimatedPropertyName" number_of_elements="1"> - <Element index="0" value="ContourValues"/> - </Property> - <Property name="AnimatedProxy" id="714.AnimatedProxy" number_of_elements="1"> - <Proxy value="636"/> - <Domain name="groups" id="714.AnimatedProxy.groups"> - <Group value="sources"/> - <Group value="filters"/> - </Domain> - </Property> - <Property name="EndTime" id="714.EndTime" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Manipulator" id="714.Manipulator" number_of_elements="1"> - <Proxy value="715"/> - <Domain name="groups" id="714.Manipulator.groups"> - <Group value="animation_manipulators"/> - </Domain> - </Property> - <Property name="StartTime" id="714.StartTime" number_of_elements="1"> - <Element index="0" value="0"/> - </Property> - <Property name="TimeMode" id="714.TimeMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="714.TimeMode.enum"> - <Entry value="0" text="Normalized"/> - <Entry value="1" text="Relative"/> - </Domain> - </Property> - </Proxy> - <Proxy group="animation_keyframes" type="CameraKeyFrame" id="734"> - <Property name="FocalPoint" id="734.FocalPoint" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - </Property> - <Property name="KeyTime" id="734.KeyTime" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="range" id="734.KeyTime.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="KeyValues" id="734.KeyValues" number_of_elements="1"> - <Element index="0" value="0"/> - </Property> - <Property name="Position" id="734.Position" number_of_elements="3"> - <Element index="0" value="6.04589"/> - <Element index="1" value="19.5669"/> - <Element index="2" value="63.7106"/> - </Property> - <Property name="ViewAngle" id="734.ViewAngle" number_of_elements="1"> - <Element index="0" value="30"/> - </Property> - <Property name="ViewUp" id="734.ViewUp" number_of_elements="3"> - <Element index="0" value="-0.253292"/> - <Element index="1" value="0.931244"/> - <Element index="2" value="-0.261969"/> - </Property> - </Proxy> - <Proxy group="animation_keyframes" type="CameraKeyFrame" id="735"> - <Property name="FocalPoint" id="735.FocalPoint" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - </Property> - <Property name="KeyTime" id="735.KeyTime" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="735.KeyTime.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="KeyValues" id="735.KeyValues" number_of_elements="1"> - <Element index="0" value="0"/> - </Property> - <Property name="Position" id="735.Position" number_of_elements="3"> - <Element index="0" value="50.4634"/> - <Element index="1" value="25.1713"/> - <Element index="2" value="36.0321"/> - </Property> - <Property name="ViewAngle" id="735.ViewAngle" number_of_elements="1"> - <Element index="0" value="30"/> - </Property> - <Property name="ViewUp" id="735.ViewUp" number_of_elements="3"> - <Element index="0" value="-0.388666"/> - <Element index="1" value="0.916381"/> - <Element index="2" value="-0.0958336"/> - </Property> - </Proxy> - <Proxy group="animation_keyframes" type="RampKeyFrame" id="736"> - <Property name="KeyTime" id="736.KeyTime" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="range" id="736.KeyTime.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="KeyValues" id="736.KeyValues" number_of_elements="1"> - <Element index="0" value="37.3531"/> - </Property> - </Proxy> - <Proxy group="animation_keyframes" type="RampKeyFrame" id="737"> - <Property name="KeyTime" id="737.KeyTime" number_of_elements="1"> - <Element index="0" value="0.996564"/> - <Domain name="range" id="737.KeyTime.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="KeyValues" id="737.KeyValues" number_of_elements="1"> - <Element index="0" value="276.829"/> - </Property> - </Proxy> - <Proxy group="animation_manipulators" type="CameraManipulator" id="34"> - <Property name="KeyFrames" id="34.KeyFrames" number_of_elements="2"> - <Proxy value="734"/> - <Proxy value="735"/> - <Domain name="groups" id="34.KeyFrames.groups"> - <Group value="animation_keyframes"/> - </Domain> - </Property> - <Property name="LastAddedKeyFrameIndex" id="34.LastAddedKeyFrameIndex" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - </Proxy> - <Proxy group="animation_manipulators" type="KeyFrameAnimationCueManipulator" id="715"> - <Property name="KeyFrames" id="715.KeyFrames" number_of_elements="2"> - <Proxy value="736"/> - <Proxy value="737"/> - <Domain name="groups" id="715.KeyFrames.groups"> - <Group value="animation_keyframes"/> - </Domain> - </Property> - <Property name="LastAddedKeyFrameIndex" id="715.LastAddedKeyFrameIndex" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - </Proxy> - <Proxy group="animation" type="AnimationScene" id="32"> - <Property name="Caching" id="32.Caching" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="32.Caching.bool"/> - </Property> - <Property name="Cues" id="32.Cues" number_of_elements="2"> - <Proxy value="33"/> - <Proxy value="714"/> - <Domain name="groups" id="32.Cues.groups"> - <Group value="animation"/> - </Domain> - </Property> - <Property name="EndTime" id="32.EndTime" number_of_elements="1"> - <Element index="0" value="99"/> - </Property> - <Property name="FrameRate" id="32.FrameRate" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Loop" id="32.Loop" number_of_elements="1"> - <Element index="0" value="0"/> - </Property> - <Property name="PlayMode" id="32.PlayMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="32.PlayMode.enum"> - <Entry value="0" text="Sequence"/> - <Entry value="1" text="Realtime"/> - </Domain> - </Property> - <Property name="ViewModules" id="32.ViewModules" number_of_elements="1"> - <Proxy value="4"/> - <Domain name="groups" id="32.RenderModule.groups"> - <Group value="rendermodules"/> - </Domain> - </Property> - <Property name="StartTime" id="32.StartTime" number_of_elements="1"> - <Element index="0" value="0"/> - </Property> - <Property name="TimeMode" id="32.TimeMode" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="enum" id="32.TimeMode.enum"> - <Entry value="0" text="Normalized"/> - <Entry value="1" text="Relative"/> - </Domain> - </Property> - </Proxy> - <Proxy group="axes" type="Axes" id="25"> - <Property name="Origin" id="25.Origin" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="25.Origin.range"/> - </Property> - <Property name="Position" id="25.Position" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - <Domain name="range" id="25.Position.range"/> - </Property> - <Property name="Scale" id="25.Scale" number_of_elements="3"> - <Element index="0" value="5"/> - <Element index="1" value="5"/> - <Element index="2" value="5"/> - <Domain name="range" id="25.Scale.range"/> - </Property> - <Property name="Visibility" id="25.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="25.Visibility.bool"/> - </Property> - <SubProxy name="Mapper" id="27"/> - <SubProxy name="Prop" id="30"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="94"> - <Property name="Input" id="94.Input" number_of_elements="1"> - <Proxy value="35"/> - <Domain name="groups" id="94.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="94.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="94.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="95"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="97"> - <Property name="Input" id="97.Input" number_of_elements="1"> - <Proxy value="35"/> - <Domain name="groups" id="97.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="97.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="97.Bold.bool"/> - </Property> - <Property name="Color" id="97.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="97.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="97.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="97.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="97.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="97.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="97.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="97.Italic.bool"/> - </Property> - <Property name="LabelMode" id="97.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="97.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="97.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="97.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="97.Position.range"/> - </Property> - <Property name="Position2" id="97.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="97.Position2.range"/> - </Property> - <Property name="Shadow" id="97.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="97.Shadow.bool"/> - </Property> - <Property name="Visibility" id="97.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="97.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="98"/> - <SubProxy name="Mapper" id="101"/> - <SubProxy name="Prop2D" id="104"/> - <SubProxy name="Property" id="106"/> - <SubProxy name="UpdateSuppressor" id="108"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="172"> - <Property name="Input" id="172.Input" number_of_elements="1"> - <Proxy value="113"/> - <Domain name="groups" id="172.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="172.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="172.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="173"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="175"> - <Property name="Input" id="175.Input" number_of_elements="1"> - <Proxy value="113"/> - <Domain name="groups" id="175.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="175.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="175.Bold.bool"/> - </Property> - <Property name="Color" id="175.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="175.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="175.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="175.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="175.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="175.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="175.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="175.Italic.bool"/> - </Property> - <Property name="LabelMode" id="175.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="175.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="175.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="175.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="175.Position.range"/> - </Property> - <Property name="Position2" id="175.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="175.Position2.range"/> - </Property> - <Property name="Shadow" id="175.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="175.Shadow.bool"/> - </Property> - <Property name="Visibility" id="175.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="175.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="176"/> - <SubProxy name="Mapper" id="179"/> - <SubProxy name="Prop2D" id="182"/> - <SubProxy name="Property" id="184"/> - <SubProxy name="UpdateSuppressor" id="186"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="695"> - <Property name="Input" id="695.Input" number_of_elements="1"> - <Proxy value="636"/> - <Domain name="groups" id="695.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="695.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="695.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="696"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="698"> - <Property name="Input" id="698.Input" number_of_elements="1"> - <Proxy value="636"/> - <Domain name="groups" id="698.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="698.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="698.Bold.bool"/> - </Property> - <Property name="Color" id="698.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="698.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="698.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="698.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="698.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="698.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="698.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="698.Italic.bool"/> - </Property> - <Property name="LabelMode" id="698.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="698.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="698.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="698.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="698.Position.range"/> - </Property> - <Property name="Position2" id="698.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="698.Position2.range"/> - </Property> - <Property name="Shadow" id="698.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="698.Shadow.bool"/> - </Property> - <Property name="Visibility" id="698.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="698.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="699"/> - <SubProxy name="Mapper" id="702"/> - <SubProxy name="Prop2D" id="705"/> - <SubProxy name="Property" id="707"/> - <SubProxy name="UpdateSuppressor" id="709"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="250"> - <Property name="Input" id="250.Input" number_of_elements="1"> - <Proxy value="191"/> - <Domain name="groups" id="250.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="250.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="250.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="251"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="253"> - <Property name="Input" id="253.Input" number_of_elements="1"> - <Proxy value="191"/> - <Domain name="groups" id="253.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="253.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="253.Bold.bool"/> - </Property> - <Property name="Color" id="253.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="253.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="253.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="253.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="253.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="253.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="253.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="253.Italic.bool"/> - </Property> - <Property name="LabelMode" id="253.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="253.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="253.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="253.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="253.Position.range"/> - </Property> - <Property name="Position2" id="253.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="253.Position2.range"/> - </Property> - <Property name="Shadow" id="253.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="253.Shadow.bool"/> - </Property> - <Property name="Visibility" id="253.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="253.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="254"/> - <SubProxy name="Mapper" id="257"/> - <SubProxy name="Prop2D" id="260"/> - <SubProxy name="Property" id="262"/> - <SubProxy name="UpdateSuppressor" id="264"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="486"> - <Property name="Input" id="486.Input" number_of_elements="1"> - <Proxy value="427"/> - <Domain name="groups" id="486.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="486.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="486.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="487"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="489"> - <Property name="Input" id="489.Input" number_of_elements="1"> - <Proxy value="427"/> - <Domain name="groups" id="489.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="489.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="489.Bold.bool"/> - </Property> - <Property name="Color" id="489.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="489.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="489.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="489.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="489.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="489.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="489.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="489.Italic.bool"/> - </Property> - <Property name="LabelMode" id="489.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="489.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="489.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="489.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="489.Position.range"/> - </Property> - <Property name="Position2" id="489.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="489.Position2.range"/> - </Property> - <Property name="Shadow" id="489.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="489.Shadow.bool"/> - </Property> - <Property name="Visibility" id="489.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="489.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="490"/> - <SubProxy name="Mapper" id="493"/> - <SubProxy name="Prop2D" id="496"/> - <SubProxy name="Property" id="498"/> - <SubProxy name="UpdateSuppressor" id="500"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="330"> - <Property name="Input" id="330.Input" number_of_elements="1"> - <Proxy value="269"/> - <Domain name="groups" id="330.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="330.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="330.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="331"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="333"> - <Property name="Input" id="333.Input" number_of_elements="1"> - <Proxy value="269"/> - <Domain name="groups" id="333.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="333.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="333.Bold.bool"/> - </Property> - <Property name="Color" id="333.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="333.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="333.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="333.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="333.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="333.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="333.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="333.Italic.bool"/> - </Property> - <Property name="LabelMode" id="333.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="333.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="333.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="333.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="333.Position.range"/> - </Property> - <Property name="Position2" id="333.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="333.Position2.range"/> - </Property> - <Property name="Shadow" id="333.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="333.Shadow.bool"/> - </Property> - <Property name="Visibility" id="333.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="333.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="334"/> - <SubProxy name="Mapper" id="337"/> - <SubProxy name="Prop2D" id="340"/> - <SubProxy name="Property" id="342"/> - <SubProxy name="UpdateSuppressor" id="344"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="565"> - <Property name="Input" id="565.Input" number_of_elements="1"> - <Proxy value="505"/> - <Domain name="groups" id="565.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="565.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="565.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="566"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="568"> - <Property name="Input" id="568.Input" number_of_elements="1"> - <Proxy value="505"/> - <Domain name="groups" id="568.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="568.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="568.Bold.bool"/> - </Property> - <Property name="Color" id="568.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="568.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="568.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="568.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="568.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="568.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="568.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="568.Italic.bool"/> - </Property> - <Property name="LabelMode" id="568.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="568.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="568.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="568.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="568.Position.range"/> - </Property> - <Property name="Position2" id="568.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="568.Position2.range"/> - </Property> - <Property name="Shadow" id="568.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="568.Shadow.bool"/> - </Property> - <Property name="Visibility" id="568.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="568.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="569"/> - <SubProxy name="Mapper" id="572"/> - <SubProxy name="Prop2D" id="575"/> - <SubProxy name="Property" id="577"/> - <SubProxy name="UpdateSuppressor" id="579"/> - </Proxy> - <Proxy group="displays" type="CubeAxesDisplay" id="408"> - <Property name="Input" id="408.Input" number_of_elements="1"> - <Proxy value="349"/> - <Domain name="groups" id="408.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Visibility" id="408.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="408.Visibility.bool"/> - </Property> - <SubProxy name="Prop2D" id="409"/> - </Proxy> - <Proxy group="displays" type="PointLabelDisplay" id="411"> - <Property name="Input" id="411.Input" number_of_elements="1"> - <Proxy value="349"/> - <Domain name="groups" id="411.Input.groups"> - <Group value="sources"/> - <Group value="filters"/> - <Group value="glyph_sources"/> - </Domain> - </Property> - <Property name="Bold" id="411.Bold" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="411.Bold.bool"/> - </Property> - <Property name="Color" id="411.Color" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="411.Color.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="FontFamily" id="411.FontFamily" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="411.FontFamily.enum"> - <Entry value="0" text="Arial"/> - <Entry value="1" text="Courier"/> - <Entry value="2" text="Times"/> - </Domain> - </Property> - <Property name="FontSize" id="411.FontSize" number_of_elements="1"> - <Element index="0" value="24"/> - <Domain name="range" id="411.FontSize.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="Italic" id="411.Italic" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="411.Italic.bool"/> - </Property> - <Property name="LabelMode" id="411.LabelMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="enum" id="411.LabelMode.enum"> - <Entry value="0" text="IDs"/> - <Entry value="1" text="Scalars"/> - <Entry value="2" text="Vectors"/> - <Entry value="3" text="Normals"/> - <Entry value="4" text="TCoords"/> - <Entry value="5" text="Tensors"/> - <Entry value="6" text="FieldData"/> - </Domain> - </Property> - <Property name="Opacity" id="411.Opacity" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="Position" id="411.Position" number_of_elements="2"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Domain name="range" id="411.Position.range"/> - </Property> - <Property name="Position2" id="411.Position2" number_of_elements="2"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Domain name="range" id="411.Position2.range"/> - </Property> - <Property name="Shadow" id="411.Shadow" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="411.Shadow.bool"/> - </Property> - <Property name="Visibility" id="411.Visibility" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="411.Visibility.bool"/> - </Property> - <SubProxy name="Collect" id="412"/> - <SubProxy name="Mapper" id="415"/> - <SubProxy name="Prop2D" id="418"/> - <SubProxy name="Property" id="420"/> - <SubProxy name="UpdateSuppressor" id="422"/> - </Proxy> - <Proxy group="rendermodules" type="LODRenderModule" id="4"> - <Property name="Displays" id="4.Displays" number_of_elements="26"> - <Proxy value="25"/> - <Proxy value="40"/> - <Proxy value="94"/> - <Proxy value="97"/> - <Proxy value="118"/> - <Proxy value="172"/> - <Proxy value="175"/> - <Proxy value="196"/> - <Proxy value="250"/> - <Proxy value="253"/> - <Proxy value="272"/> - <Proxy value="276"/> - <Proxy value="330"/> - <Proxy value="333"/> - <Proxy value="354"/> - <Proxy value="408"/> - <Proxy value="411"/> - <Proxy value="432"/> - <Proxy value="486"/> - <Proxy value="489"/> - <Proxy value="511"/> - <Proxy value="565"/> - <Proxy value="568"/> - <Proxy value="641"/> - <Proxy value="695"/> - <Proxy value="698"/> - <Domain name="groups" id="4.Displays.groups"> - <Group value="displays"/> - <Group value="axes"/> - <Group value="3d_widgets"/> - </Domain> - </Property> - <Property name="LODResolution" id="4.LODResolution" number_of_elements="1"> - <Element index="0" value="100"/> - <Domain name="range" id="4.LODResolution.range"/> - </Property> - <Property name="LODThreshold" id="4.LODThreshold" number_of_elements="1"> - <Element index="0" value="5"/> - <Domain name="range" id="4.LODThreshold.range"/> - </Property> - <Property name="RenderInterruptsEnabled" id="4.RenderInterruptsEnabled" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="4.RenderInterruptsEnabled.bool"/> - </Property> - <Property name="UseImmediateMode" id="4.UseImmediateMode" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="4.UseImmediateMode.bool"/> - </Property> - <Property name="UseLight" id="4.UseLight" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="4.UseLight.bool"/> - </Property> - <Property name="UseTriangleStrips" id="4.UseTriangleStrips" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="4.UseTriangleStrips.bool"/> - </Property> - <Property name="BackLightAzimuth" id="4.BackLightAzimuth" number_of_elements="1"> - <Element index="0" value="110"/> - <Domain name="range" id="4.BackLightAzimuth.range"> - <Min index="0" value="60"/> - <Max index="0" value="170"/> - <Resolution index="0" value="1"/> - </Domain> - </Property> - <Property name="BackLightElevation" id="4.BackLightElevation" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="range" id="4.BackLightElevation.range"> - <Min index="0" value="-45"/> - <Max index="0" value="45"/> - <Resolution index="0" value="1"/> - </Domain> - </Property> - <Property name="BackLightK:B Ratio" id="4.BackLightK:B Ratio" number_of_elements="1"> - <Element index="0" value="3.5"/> - <Domain name="range" id="4.BackLightK:B Ratio.range"> - <Min index="0" value="1"/> - <Max index="0" value="15"/> - <Resolution index="0" value="0.1"/> - </Domain> - </Property> - <Property name="BackLightWarmth" id="4.BackLightWarmth" number_of_elements="1"> - <Element index="0" value="0.5"/> - <Domain name="range" id="4.BackLightWarmth.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - <Resolution index="0" value="0.01"/> - </Domain> - </Property> - <Property name="Background" id="4.Background" number_of_elements="3"> - <Element index="0" value="0.33"/> - <Element index="1" value="0.35"/> - <Element index="2" value="0.43"/> - <Domain name="range" id="4.Background.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="CameraClippingRange" id="4.CameraClippingRange" number_of_elements="2"> - <Element index="0" value="33.0464"/> - <Element index="1" value="109.724"/> - </Property> - <Property name="CameraClippingRangeInfo" id="4.CameraClippingRangeInfo" number_of_elements="2"> - <Element index="0" value="33.0464"/> - <Element index="1" value="109.724"/> - </Property> - <Property name="CameraFocalPoint" id="4.CameraFocalPoint" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - </Property> - <Property name="CameraFocalPointInfo" id="4.CameraFocalPointInfo" number_of_elements="3"> - <Element index="0" value="0"/> - <Element index="1" value="0"/> - <Element index="2" value="0"/> - </Property> - <Property name="CameraParallelProjection" id="4.CameraParallelProjection" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="4.CameraParallelProjection.bool"/> - </Property> - <Property name="CameraParallelScale" id="4.CameraParallelScale" number_of_elements="1"> - <Element index="0" value="1"/> - </Property> - <Property name="CameraPosition" id="4.CameraPosition" number_of_elements="3"> - <Element index="0" value="50.4634"/> - <Element index="1" value="25.1713"/> - <Element index="2" value="36.0321"/> - </Property> - <Property name="CameraPositionInfo" id="4.CameraPositionInfo" number_of_elements="3"> - <Element index="0" value="50.4634"/> - <Element index="1" value="25.1713"/> - <Element index="2" value="36.0321"/> - </Property> - <Property name="CameraViewAngle" id="4.CameraViewAngle" number_of_elements="1"> - <Element index="0" value="30"/> - </Property> - <Property name="CameraViewUp" id="4.CameraViewUp" number_of_elements="3"> - <Element index="0" value="-0.388666"/> - <Element index="1" value="0.916381"/> - <Element index="2" value="-0.0958336"/> - </Property> - <Property name="CameraViewUpInfo" id="4.CameraViewUpInfo" number_of_elements="3"> - <Element index="0" value="-0.388666"/> - <Element index="1" value="0.916381"/> - <Element index="2" value="-0.0958336"/> - </Property> - <Property name="EyeAngle" id="4.EyeAngle" number_of_elements="1"> - <Element index="0" value="2"/> - <Domain name="range" id="4.EyeAngle.range"> - <Min index="0" value="0"/> - </Domain> - </Property> - <Property name="FillLightAzimuth" id="4.FillLightAzimuth" number_of_elements="1"> - <Element index="0" value="-10"/> - <Domain name="range" id="4.FillLightAzimuth.range"> - <Min index="0" value="-90"/> - <Max index="0" value="90"/> - <Resolution index="0" value="1"/> - </Domain> - </Property> - <Property name="FillLightElevation" id="4.FillLightElevation" number_of_elements="1"> - <Element index="0" value="-75"/> - <Domain name="range" id="4.FillLightElevation.range"> - <Min index="0" value="-90"/> - <Max index="0" value="10"/> - <Resolution index="0" value="1"/> - </Domain> - </Property> - <Property name="FillLightK:F Ratio" id="4.FillLightK:F Ratio" number_of_elements="1"> - <Element index="0" value="3"/> - <Domain name="range" id="4.FillLightK:F Ratio.range"> - <Min index="0" value="1"/> - <Max index="0" value="15"/> - <Resolution index="0" value="0.1"/> - </Domain> - </Property> - <Property name="FillLightWarmth" id="4.FillLightWarmth" number_of_elements="1"> - <Element index="0" value="0.4"/> - <Domain name="range" id="4.FillLightWarmth.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - <Resolution index="0" value="0.01"/> - </Domain> - </Property> - <Property name="FullScreen" id="4.FullScreen" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="4.FullScreen.bool"/> - </Property> - <Property name="HeadLightK:H Ratio" id="4.HeadLightK:H Ratio" number_of_elements="1"> - <Element index="0" value="3"/> - <Domain name="range" id="4.HeadLightK:H Ratio.range"> - <Min index="0" value="1"/> - <Max index="0" value="15"/> - <Resolution index="0" value="0.1"/> - </Domain> - </Property> - <Property name="HeadLightWarmth" id="4.HeadLightWarmth" number_of_elements="1"> - <Element index="0" value="0.5"/> - <Domain name="range" id="4.HeadLightWarmth.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - <Resolution index="0" value="0.01"/> - </Domain> - </Property> - <Property name="KeyLightAzimuth" id="4.KeyLightAzimuth" number_of_elements="1"> - <Element index="0" value="10"/> - <Domain name="range" id="4.KeyLightAzimuth.range"> - <Min index="0" value="-90"/> - <Max index="0" value="90"/> - <Resolution index="0" value="1"/> - </Domain> - </Property> - <Property name="KeyLightElevation" id="4.KeyLightElevation" number_of_elements="1"> - <Element index="0" value="50"/> - <Domain name="range" id="4.KeyLightElevation.range"> - <Min index="0" value="0"/> - <Max index="0" value="90"/> - <Resolution index="0" value="1"/> - </Domain> - </Property> - <Property name="KeyLightIntensity" id="4.KeyLightIntensity" number_of_elements="1"> - <Element index="0" value="0.75"/> - <Domain name="range" id="4.KeyLightIntensity.range"> - <Min index="0" value="0"/> - <Max index="0" value="2"/> - <Resolution index="0" value="0.05"/> - </Domain> - </Property> - <Property name="KeyLightWarmth" id="4.KeyLightWarmth" number_of_elements="1"> - <Element index="0" value="0.6"/> - <Domain name="range" id="4.KeyLightWarmth.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - <Resolution index="0" value="0.01"/> - </Domain> - </Property> - <Property name="LightAmbientColor" id="4.LightAmbientColor" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="4.LightAmbientColor.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="LightDiffuseColor" id="4.LightDiffuseColor" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="4.LightDiffuseColor.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="LightIntensity" id="4.LightIntensity" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="range" id="4.LightIntensity.range"> - <Min index="0" value="0"/> - <Max index="0" value="1"/> - </Domain> - </Property> - <Property name="LightSpecularColor" id="4.LightSpecularColor" number_of_elements="3"> - <Element index="0" value="1"/> - <Element index="1" value="1"/> - <Element index="2" value="1"/> - <Domain name="range" id="4.LightSpecularColor.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - <Min index="2" value="0"/> - <Max index="0" value="1"/> - <Max index="1" value="1"/> - <Max index="2" value="1"/> - </Domain> - </Property> - <Property name="LightSwitch" id="4.LightSwitch" number_of_elements="1"> - <Element index="0" value="1"/> - <Domain name="bool" id="4.LightSwitch.bool"/> - </Property> - <Property name="MaintainLuminance" id="4.MaintainLuminance" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="4.MaintainLuminance.bool"/> - </Property> - <Property name="OffScreenRendering" id="4.OffScreenRendering" number_of_elements="1"> - <Element index="0" value="0"/> - <Domain name="bool" id="4.OffScreenRendering.bool"/> - </Property> - <Property name="RenderWindowSize" id="4.RenderWindowSize" number_of_elements="2"> - <Element index="0" value="400"/> - <Element index="1" value="400"/> - <Domain name="range" id="4.RenderWindowSize.range"> - <Min index="0" value="0"/> - <Min index="1" value="0"/> - </Domain> - </Property> - <Property name="RenderWindowSizeInfo" id="4.RenderWindowSizeInfo" number_of_elements="2"> - <Element index="0" value="727"/> - <Element index="1" value="478"/> - </Property> - <SubProxy name="ActiveCamera" id="5"/> - <SubProxy name="CompositeManager" id="7"/> - <SubProxy name="Compositer" id="23"/> - <SubProxy name="Helper" id="9"/> - <SubProxy name="Interactor" id="11"/> - <SubProxy name="Light" id="13"/> - <SubProxy name="LightKit" id="15"/> - <SubProxy name="RenderWindow" id="17"/> - <SubProxy name="Renderer" id="19"/> - <SubProxy name="Renderer2D" id="21"/> - </Proxy> - <ProxyCollection name="animateable"> - <Item id="35" name="GlyphSources.Arrow0"/> - <Item id="40" name="GlyphSources.Arrow0.Display"/> - <Item id="113" name="GlyphSources.Cone0"/> - <Item id="118" name="GlyphSources.Cone0.Display"/> - <Item id="191" name="GlyphSources.Cube0"/> - <Item id="196" name="GlyphSources.Cube0.Display"/> - <Item id="427" name="GlyphSources.Glyph2D0"/> - <Item id="432" name="GlyphSources.Glyph2D0.Display"/> - <Item id="269" name="GlyphSources.Line0"/> - <Item id="276" name="GlyphSources.Line0.Display"/> - <Item id="349" name="GlyphSources.Sphere0"/> - <Item id="354" name="GlyphSources.Sphere0.Display"/> - <Item id="636" name="Sources.Contour0"/> - <Item id="641" name="Sources.Contour0.Display"/> - <Item id="505" name="Sources.RTSource0"/> - <Item id="511" name="Sources.RTSource0.Display"/> - </ProxyCollection> - <ProxyCollection name="animation"> - <Item id="33" name="AnimationCue0"/> - <Item id="714" name="AnimationCue27"/> - </ProxyCollection> - <ProxyCollection name="animation_keyframes"> - <Item id="734" name="vtkPVKeyFrame_CameraKeyFrame2"/> - <Item id="735" name="vtkPVKeyFrame_CameraKeyFrame3"/> - <Item id="736" name="vtkPVKeyFrame_RampKeyFrame4"/> - <Item id="737" name="vtkPVKeyFrame_RampKeyFrame5"/> - </ProxyCollection> - <ProxyCollection name="animation_manipulators"> - <Item id="34" name="KeyFrameAnimationCueManipulator0"/> - <Item id="715" name="KeyFrameAnimationCueManipulator27"/> - </ProxyCollection> - <ProxyCollection name="animation_scene"> - <Item id="32" name="vtkPVAnimationScene_AnimationScene0"/> - </ProxyCollection> - <ProxyCollection name="axes"> - <Item id="25" name="CenterAxes"/> - </ProxyCollection> - <ProxyCollection name="displays"> - <Item id="94" name="Arrow0.CubeAxesDisplay"/> - <Item id="40" name="Arrow0.Display"/> - <Item id="97" name="Arrow0.PointLabelDisplay"/> - <Item id="172" name="Cone0.CubeAxesDisplay"/> - <Item id="118" name="Cone0.Display"/> - <Item id="175" name="Cone0.PointLabelDisplay"/> - <Item id="695" name="Contour0.CubeAxesDisplay"/> - <Item id="641" name="Contour0.Display"/> - <Item id="698" name="Contour0.PointLabelDisplay"/> - <Item id="250" name="Cube0.CubeAxesDisplay"/> - <Item id="196" name="Cube0.Display"/> - <Item id="253" name="Cube0.PointLabelDisplay"/> - <Item id="486" name="Glyph2D0.CubeAxesDisplay"/> - <Item id="432" name="Glyph2D0.Display"/> - <Item id="489" name="Glyph2D0.PointLabelDisplay"/> - <Item id="330" name="Line0.CubeAxesDisplay"/> - <Item id="276" name="Line0.Display"/> - <Item id="333" name="Line0.PointLabelDisplay"/> - <Item id="565" name="RTSource0.CubeAxesDisplay"/> - <Item id="511" name="RTSource0.Display"/> - <Item id="568" name="RTSource0.PointLabelDisplay"/> - <Item id="408" name="Sphere0.CubeAxesDisplay"/> - <Item id="354" name="Sphere0.Display"/> - <Item id="411" name="Sphere0.PointLabelDisplay"/> - </ProxyCollection> - <ProxyCollection name="filters"> - <Item id="636" name="Contour0"/> - </ProxyCollection> - <ProxyCollection name="glyph_sources"> - <Item id="35" name="Arrow0"/> - <Item id="113" name="Cone0"/> - <Item id="191" name="Cube0"/> - <Item id="427" name="Glyph2D0"/> - <Item id="269" name="Line0"/> - <Item id="349" name="Sphere0"/> - </ProxyCollection> - <ProxyCollection name="rendermodules"> - <Item id="4" name="RenderModule0"/> - </ProxyCollection> - <ProxyCollection name="sources"> - <Item id="505" name="RTSource0"/> - </ProxyCollection> - <CompoundProxyDefinitions/> - <Links/> -</ServerManagerState> diff --git a/Servers/ServerManager/vtkInitializationHelper.cxx b/Servers/ServerManager/vtkInitializationHelper.cxx index 028e7c5c4a..89f781ef2e 100644 --- a/Servers/ServerManager/vtkInitializationHelper.cxx +++ b/Servers/ServerManager/vtkInitializationHelper.cxx @@ -47,7 +47,7 @@ PURPOSE. See the above copyright notice for more information. #include <vtkstd/string> -vtkCxxRevisionMacro(vtkInitializationHelper, "1.7"); +vtkCxxRevisionMacro(vtkInitializationHelper, "1.8"); static void vtkInitializationHelperInit(vtkProcessModule* pm); @@ -70,7 +70,7 @@ extern "C" void vtkPVServerCommonCS_Initialize(vtkClientServerInterpreter*); extern "C" void vtkPVFiltersCS_Initialize(vtkClientServerInterpreter*); extern "C" void vtkXdmfCS_Initialize(vtkClientServerInterpreter *); -vtkDummyProcessModuleHelper* vtkInitializationHelper::Helper = 0; +vtkProcessModuleGUIHelper* vtkInitializationHelper::Helper = 0; vtkPVMain* vtkInitializationHelper::PVMain = 0; vtkPVOptions* vtkInitializationHelper::Options = 0; vtkSMApplication* vtkInitializationHelper::Application = 0; @@ -83,29 +83,55 @@ void vtkInitializationHelper::Initialize(const char* executable) vtkGenericWarningMacro("Executable name has to be defined."); return; } - if (PVMain) + + // Pass the program name to make option parser happier + char* argv = new char[strlen(executable)+1]; + strcpy(argv, executable); + vtkPVOptions* options = vtkPVOptions::New(); + vtkInitializationHelper::Initialize(1, &argv, options); + options->Delete(); + delete[] argv; +} + +//---------------------------------------------------------------------------- +void vtkInitializationHelper::Initialize(int argc, char**argv, vtkPVOptions* options) +{ + if (vtkInitializationHelper::PVMain) { vtkGenericWarningMacro("Python module already initialize. Skipping."); return; } + + if (!options) + { + vtkGenericWarningMacro("vtkPVOptions must be specified."); + return; + } + vtkPVMain::SetUseMPI(0); // don't use MPI even when available. - PVMain = vtkPVMain::New(); - Options = vtkPVOptions::New(); - Options->SetProcessType(vtkPVOptions::PVCLIENT); - // This process module does nothing - Helper = vtkDummyProcessModuleHelper::New(); - // Pass the program name to make option parser happier - char* argv = new char[strlen(executable)+1]; - strcpy(argv, executable); + vtkInitializationHelper::PVMain = vtkPVMain::New(); + vtkInitializationHelper::Options = options; + vtkInitializationHelper::Options->Register(0); // keep reference. + + vtkInitializationHelper::Options->SetProcessType(vtkPVOptions::PVCLIENT); + + // This process module helper does nothing. ProcessModuleHelpers are to be + // deprecated, then don't serve much anymore. + vtkInitializationHelper::Helper = vtkDummyProcessModuleHelper::New(); + // First initialization - PVMain->Initialize(Options, Helper, vtkInitializationHelperInit, 1, &argv); - Application = vtkSMApplication::New(); - Application->Initialize(); + PVMain->Initialize( + vtkInitializationHelper::Options, + vtkInitializationHelper::Helper, + vtkInitializationHelperInit, + argc, argv); + + vtkInitializationHelper::Application = vtkSMApplication::New(); + vtkInitializationHelper::Application->Initialize(); vtkSMProperty::SetCheckDomains(0); vtkProcessModule::GetProcessModule()->SupportMultipleConnectionsOn(); // Initialize everything else - PVMain->Run(Options); - delete[] argv; + vtkInitializationHelper::PVMain->Run(Options); } //---------------------------------------------------------------------------- diff --git a/Servers/ServerManager/vtkInitializationHelper.h b/Servers/ServerManager/vtkInitializationHelper.h index 67adefc9c4..0ae6049b04 100644 --- a/Servers/ServerManager/vtkInitializationHelper.h +++ b/Servers/ServerManager/vtkInitializationHelper.h @@ -24,7 +24,7 @@ #include "vtkObject.h" -class vtkDummyProcessModuleHelper; +class vtkProcessModuleGUIHelper; class vtkPVMain; class vtkPVOptions; class vtkSMApplication; @@ -40,6 +40,12 @@ public: // before calling this. static void Initialize(const char* executable); + // Description: + // Alternative API to initialize the server manager. This takes in the + // command line arguments and the vtkPVOptions instance to use to process the + // command line options. + static void Initialize(int argc, char**argv, vtkPVOptions* options); + // Description: // Finalizes the server manager. Do not use the server manager // after calling this. @@ -56,7 +62,7 @@ protected: static vtkPVMain* PVMain; static vtkSMApplication* Application; static vtkPVOptions* Options; - static vtkDummyProcessModuleHelper* Helper; + static vtkProcessModuleGUIHelper* Helper; private: diff --git a/Servers/ServerManager/vtkSMExtractDocumentation.cxx b/Servers/ServerManager/vtkSMExtractDocumentation.cxx index b898a683d5..7d03cc6c8b 100644 --- a/Servers/ServerManager/vtkSMExtractDocumentation.cxx +++ b/Servers/ServerManager/vtkSMExtractDocumentation.cxx @@ -654,6 +654,10 @@ void ExtractProxyNames(vtkPVXMLElement *elem, vtkStringPairList *proxyNameList) { groupName << "sources" << ends; } + else if (strcmp(elemName, "proxy") == 0) + { + groupName << elem->GetAttribute("group"); + } else { groupName << elemName << "s" << ends; diff --git a/Servers/ServerManager/vtkSMOutputPort.h b/Servers/ServerManager/vtkSMOutputPort.h index 90f0d59ec5..decf918994 100644 --- a/Servers/ServerManager/vtkSMOutputPort.h +++ b/Servers/ServerManager/vtkSMOutputPort.h @@ -43,12 +43,6 @@ public: // vtkCommand::UpdateInformationEvent event. virtual vtkPVDataInformation* GetDataInformation(); - // Description: - // Simply returns the data information as available on the client, without any - // gathers from the server side or any pipeline updates. - virtual vtkPVDataInformation* GetCachedDataInformation() - { return this->DataInformation; } - // Description: // Returns the classname of the data object on this output port. virtual const char* GetDataClassName(); diff --git a/Servers/ServerManager/vtkSMPQStateLoader.h b/Servers/ServerManager/vtkSMPQStateLoader.h index 6609035f1e..d09bd44202 100644 --- a/Servers/ServerManager/vtkSMPQStateLoader.h +++ b/Servers/ServerManager/vtkSMPQStateLoader.h @@ -17,7 +17,7 @@ // .SECTION Description // vtkSMPQStateLoader is a state loader with added functionality to reuse // views. The views to be reused can be set by using AddPreferredView(). - +// OBSOLETE. To be removed when the pqLookmarkStateLoader is removed. #ifndef __vtkSMPQStateLoader_h #define __vtkSMPQStateLoader_h diff --git a/Servers/ServerManager/vtkSMProxyManager.cxx b/Servers/ServerManager/vtkSMProxyManager.cxx index b90e93e119..809191608c 100644 --- a/Servers/ServerManager/vtkSMProxyManager.cxx +++ b/Servers/ServerManager/vtkSMProxyManager.cxx @@ -33,8 +33,10 @@ #include "vtkSMProxyIterator.h" #include "vtkSMProxyLocator.h" #include "vtkSMProxyProperty.h" +#include "vtkSMReaderFactory.h" #include "vtkSMStateLoader.h" #include "vtkSMUndoStack.h" +#include "vtkSMWriterFactory.h" #include "vtkSMXMLParser.h" #include "vtkStdString.h" #include "vtkStringList.h" @@ -100,7 +102,7 @@ protected: //***************************************************************************** vtkStandardNewMacro(vtkSMProxyManager); -vtkCxxRevisionMacro(vtkSMProxyManager, "1.84"); +vtkCxxRevisionMacro(vtkSMProxyManager, "1.85"); //--------------------------------------------------------------------------- vtkSMProxyManager::vtkSMProxyManager() { @@ -113,6 +115,9 @@ vtkSMProxyManager::vtkSMProxyManager() this->AddObserver(vtkCommand::RegisterEvent, obs); this->AddObserver(vtkCommand::UnRegisterEvent, obs); #endif + + this->ReaderFactory = vtkSMReaderFactory::New(); + this->WriterFactory = vtkSMWriterFactory::New(); } //--------------------------------------------------------------------------- @@ -123,6 +128,12 @@ vtkSMProxyManager::~vtkSMProxyManager() this->Observer->SetTarget(0); this->Observer->Delete(); + + this->ReaderFactory->Delete(); + this->ReaderFactory = 0; + + this->WriterFactory->Delete(); + this->WriterFactory = 0; } //---------------------------------------------------------------------------- @@ -1148,7 +1159,13 @@ void vtkSMProxyManager::LoadState(vtkPVXMLElement* rootElement, vtkIdType id, spLoader = loader; } spLoader->GetProxyLocator()->SetConnectionID(id); - spLoader->LoadState(rootElement); + if (spLoader->LoadState(rootElement)) + { + LoadStateInformation info; + info.RootElement = rootElement; + info.ProxyLocator = spLoader->GetProxyLocator(); + this->InvokeEvent(vtkCommand::LoadStateEvent, &info); + } } //--------------------------------------------------------------------------- @@ -1178,18 +1195,39 @@ void vtkSMProxyManager::SaveState(const char* filename) rootElement->Delete(); } - //--------------------------------------------------------------------------- vtkPVXMLElement* vtkSMProxyManager::SaveState() { - return this->SaveStateInternal( + vtkPVXMLElement* smstate = this->SaveStateInternal( vtkProcessModuleConnectionManager::GetNullConnectionID(), 0, 0); + + vtkPVXMLElement* root = vtkPVXMLElement::New(); + root->SetName("GenericParaViewApplication"); + root->AddNestedElement(smstate); + smstate->FastDelete(); + + LoadStateInformation info; + info.RootElement = root; + info.ProxyLocator = NULL; + this->InvokeEvent(vtkCommand::SaveStateEvent, &info); + return root; } //--------------------------------------------------------------------------- vtkPVXMLElement* vtkSMProxyManager::SaveState(vtkIdType connectionID) { - return this->SaveStateInternal(connectionID, 0, 0); + vtkPVXMLElement* smstate = this->SaveStateInternal(connectionID, 0, 0); + + vtkPVXMLElement* root = vtkPVXMLElement::New(); + root->SetName("GenericParaViewApplication"); + root->AddNestedElement(smstate); + smstate->FastDelete(); + + LoadStateInformation info; + info.RootElement = root; + info.ProxyLocator = NULL; + this->InvokeEvent(vtkCommand::SaveStateEvent, &info); + return root; } //--------------------------------------------------------------------------- diff --git a/Servers/ServerManager/vtkSMProxyManager.h b/Servers/ServerManager/vtkSMProxyManager.h index 01d5ecb3bc..86e31f0f4f 100644 --- a/Servers/ServerManager/vtkSMProxyManager.h +++ b/Servers/ServerManager/vtkSMProxyManager.h @@ -40,10 +40,13 @@ class vtkSMGlobalPropertiesManager; class vtkSMLink; class vtkSMProperty; class vtkSMProxy; +class vtkSMProxyLocator; class vtkSMProxyManagerObserver; class vtkSMProxyManagerProxySet; class vtkSMProxySelectionModel; +class vtkSMReaderFactory; class vtkSMStateLoader; +class vtkSMWriterFactory; class vtkStringList; //BTX @@ -380,6 +383,12 @@ public: vtkSMProxy* Proxy; const char* PropertyName; }; + + struct LoadStateInformation + { + vtkPVXMLElement* RootElement; + vtkSMProxyLocator* ProxyLocator; + }; //ETX // Description: @@ -456,6 +465,16 @@ public: vtkSMGlobalPropertiesManager* GetGlobalPropertiesManager(const char* name); const char* GetGlobalPropertiesManagerName(vtkSMGlobalPropertiesManager*); + // Description: + // Provides access to the reader factory. Before using the reader factory, it + // is essential that it's configured correctly. + vtkGetObjectMacro(ReaderFactory, vtkSMReaderFactory); + + // Description: + // Provides access to the writer factory. Before using the reader factory, it + // is essential that it's configured correctly. + vtkGetObjectMacro(WriterFactory, vtkSMWriterFactory); + // Description: // Loads server-manager configuration xml. bool LoadConfigurationXML(const char* xmlcontents); @@ -520,6 +539,9 @@ protected: int UpdateInputProxies; + vtkSMReaderFactory* ReaderFactory; + vtkSMWriterFactory* WriterFactory; + private: vtkSMProxyManagerInternals* Internals; vtkSMProxyManagerObserver* Observer; diff --git a/Servers/ServerManager/vtkSMReaderFactory.cxx b/Servers/ServerManager/vtkSMReaderFactory.cxx new file mode 100644 index 0000000000..11369588fb --- /dev/null +++ b/Servers/ServerManager/vtkSMReaderFactory.cxx @@ -0,0 +1,517 @@ +/*========================================================================= + + Program: ParaView + Module: vtkSMReaderFactory.cxx + + Copyright (c) Kitware, Inc. + All rights reserved. + See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +#include "vtkSMReaderFactory.h" + +#include "vtkClientServerStream.h" +#include "vtkObjectFactory.h" +#include "vtkProcessModule.h" +#include "vtkPVXMLElement.h" +#include "vtkPVXMLParser.h" +#include "vtkSmartPointer.h" +#include "vtkSMPropertyHelper.h" +#include "vtkSMProxy.h" +#include "vtkSMProxyManager.h" +#include "vtkStringList.h" + +#include <vtkstd/list> +#include <vtkstd/set> +#include <vtkstd/string> +#include <vtkstd/vector> +#include <vtksys/ios/sstream> +#include <vtksys/SystemTools.hxx> + +class vtkSMReaderFactory::vtkInternals +{ +public: + struct vtkValue + { + vtkstd::string Group; + vtkstd::string Name; + vtkstd::vector<vtkstd::string> Extensions; + vtkstd::string Description; + + void FillInformation() + { + vtkSMProxy* prototype = + vtkSMProxyManager::GetProxyManager()->GetPrototypeProxy( + this->Group.c_str(), this->Name.c_str()); + if (!prototype || !prototype->GetHints()) + { + return; + } + vtkPVXMLElement* rfHint = + prototype->GetHints()->FindNestedElementByName("ReaderFactory"); + if (!rfHint) + { + return; + } + + this->Extensions.clear(); + const char* exts = rfHint->GetAttribute("extensions"); + if (exts) + { + vtksys::SystemTools::Split(exts, this->Extensions,' '); + } + this->Description = rfHint->GetAttribute("file_description"); + } + + // Returns true is a prototype proxy can be created on the given connection. + // For now, the connection is totally ignored since ServerManager doesn't + // support that. + bool CanCreatePrototype(vtkIdType vtkNotUsed(cid)) + { + return (vtkSMProxyManager::GetProxyManager()->GetPrototypeProxy( + this->Group.c_str(), this->Name.c_str()) != NULL); + } + + // Returns true if the reader can read the file. More correctly, it returns + // false is the reader reports that it cannot read the file. + bool CanReadFile(const char* filename, + const vtkstd::vector<vtkstd::string>& extensions, vtkIdType cid); + + // Tests if 'any' of the strings in extensions is contained in + // this->Extensions. + bool ExtensionTest(const vtkstd::vector<vtkstd::string>& extensions); + }; + + void BuildExtensions( + const char* filename, vtkstd::vector<vtkstd::string>& extensions) + { + // basically we are filling up extensions with all possible extension + // combintations eg. myfilename.tar.gz.vtk.000 results in + // 000, vtk.000, gz.vtk.000, tar.gz.vtk.000, + // vtk, gz.vtk, tar.gz.vtk + // gz, tar.gz + // tar, tar.gz + // gz + // in that order. + vtkstd::string extension = + vtksys::SystemTools::GetFilenameExtension(filename); + if (extension.size() > 0) + { + extension.erase(extension.begin()); // remove the first "." + } + vtkstd::vector<vtkstd::string> parts; + vtksys::SystemTools::Split(extension.c_str(), parts, '.'); + int num_parts = static_cast<int>(parts.size()); + for (int cc=num_parts-1; cc >= 0; cc--) + { + for (int kk=cc; kk >=0; kk--) + { + vtkstd::string cur_string; + for (int ii=kk; ii <=cc; ii++) + { + if (parts[ii].size() == 0) + { + continue;//skip empty parts. + } + if (ii != kk) + { + cur_string += "."; + } + cur_string += parts[ii]; + } + extensions.push_back(cur_string); + } + } + } + + typedef vtkstd::list<vtkValue> PrototypesType; + PrototypesType Prototypes; + vtkstd::string SupportedFileTypes; +}; + +//---------------------------------------------------------------------------- +bool vtkSMReaderFactory::vtkInternals::vtkValue::ExtensionTest( + const vtkstd::vector<vtkstd::string>& extensions) +{ + if (this->Extensions.size() == 0 || extensions.size() == 0) + { + return true; + } + + vtkstd::vector<vtkstd::string>::const_iterator iter1; + for (iter1 = extensions.begin(); iter1 != extensions.end(); ++iter1) + { + vtkstd::vector<vtkstd::string>::const_iterator iter2; + for (iter2 = this->Extensions.begin(); iter2 != this->Extensions.end(); + ++iter2) + { + if (*iter1 == *iter2) + { + return true; + } + } + } + return false; +} + +//---------------------------------------------------------------------------- +bool vtkSMReaderFactory::vtkInternals::vtkValue::CanReadFile( + const char* filename, + const vtkstd::vector<vtkstd::string>& extensions, vtkIdType cid) +{ + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + vtkSMProxy* prototype = pxm->GetPrototypeProxy( + this->Group.c_str(), this->Name.c_str()); + if (!prototype) + { + return false; + } + + if (!this->ExtensionTest(extensions)) + { + return false; + } + + if (strcmp(prototype->GetXMLName(), "ImageReader") == 0) + { + // ImageReader always returns 0 so don't test it + return true; + } + + // Assume that it can read the file (based on extension match) + // if CanReadFile does not exist. + int canRead = 1; + + vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); + + vtkSMProxy* proxy = pxm->NewProxy(this->Group.c_str(), this->Name.c_str()); + proxy->SetConnectionID(cid); + proxy->SetServers(vtkProcessModule::DATA_SERVER_ROOT); + proxy->UpdateVTKObjects(); + + vtkClientServerStream stream; + stream << vtkClientServerStream::Invoke + << pm->GetProcessModuleID() + << "SetReportInterpreterErrors" << 0 + << vtkClientServerStream::End; + stream << vtkClientServerStream::Invoke + << proxy->GetID() << "CanReadFile" << filename + << vtkClientServerStream::End; + pm->SendStream(cid, vtkProcessModule::DATA_SERVER_ROOT, stream); + pm->GetLastResult(cid, + vtkProcessModule::DATA_SERVER_ROOT).GetArgument(0, 0, &canRead); + stream << vtkClientServerStream::Invoke + << pm->GetProcessModuleID() + << "SetReportInterpreterErrors" << 1 + << vtkClientServerStream::End; + pm->SendStream(cid, vtkProcessModule::DATA_SERVER_ROOT, stream); + proxy->Delete(); + return (canRead != 0); +} + +vtkStandardNewMacro(vtkSMReaderFactory); +vtkCxxRevisionMacro(vtkSMReaderFactory, "1.1"); +//---------------------------------------------------------------------------- +vtkSMReaderFactory::vtkSMReaderFactory() +{ + this->Internals = new vtkInternals(); + this->Readers = vtkStringList::New(); + this->ReaderName = 0; + this->ReaderGroup = 0; +} + +//---------------------------------------------------------------------------- +vtkSMReaderFactory::~vtkSMReaderFactory() +{ + delete this->Internals; + this->SetReaderName(0); + this->SetReaderGroup(0); + this->Readers->Delete(); + this->Readers = 0; +} + +//---------------------------------------------------------------------------- +void vtkSMReaderFactory::Initialize() +{ + this->Internals->Prototypes.clear(); +} + +//---------------------------------------------------------------------------- +void vtkSMReaderFactory::RegisterPrototype(const char* xmlgroup, const char* xmlname) +{ + // If already present, we remove old one and append again so that the priority + // rule still works. + this->UnRegisterPrototype(xmlgroup, xmlname); + vtkInternals::vtkValue value; + value.Group = xmlgroup; + value.Name = xmlname; + + // fills extension information etc. from the prototype. + value.FillInformation(); + + this->Internals->Prototypes.push_front(value); +} + +//---------------------------------------------------------------------------- +void vtkSMReaderFactory::RegisterPrototype( + const char* xmlgroup, const char* xmlname, + const char* extensions, const char* description) + +{ + // If already present, we remove old one and append again so that the priority + // rule still works. + this->UnRegisterPrototype(xmlgroup, xmlname); + vtkInternals::vtkValue value; + value.Group = xmlgroup; + value.Name = xmlname; + + // fills extension information etc. from the prototype. + value.FillInformation(); + if (description) + { + value.Description = description; + } + if (extensions) + { + vtksys::SystemTools::Split(extensions, value.Extensions, ' '); + } + this->Internals->Prototypes.push_front(value); +} + +//---------------------------------------------------------------------------- +void vtkSMReaderFactory::UnRegisterPrototype( + const char* xmlgroup, const char* xmlname) +{ + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->Group == xmlgroup && iter->Name == xmlname) + { + this->Internals->Prototypes.erase(iter); + break; + } + } +} + +//---------------------------------------------------------------------------- +bool vtkSMReaderFactory::LoadConfigurationFile(const char* filename) +{ + vtkSmartPointer<vtkPVXMLParser> parser = + vtkSmartPointer<vtkPVXMLParser>::New(); + parser->SetFileName(filename); + if (!parser->Parse()) + { + vtkErrorMacro("Failed to parse file: " << filename); + return false; + } + + return this->LoadConfiguration(parser->GetRootElement()); +} + +//---------------------------------------------------------------------------- +bool vtkSMReaderFactory::LoadConfiguration(const char* xmlcontents) +{ + vtkSmartPointer<vtkPVXMLParser> parser = + vtkSmartPointer<vtkPVXMLParser>::New(); + + if (!parser->Parse(xmlcontents)) + { + vtkErrorMacro("Failed to parse xml. Not a valid XML."); + return false; + } + + vtkPVXMLElement* rootElement = parser->GetRootElement(); + return this->LoadConfiguration(rootElement); +} + +//---------------------------------------------------------------------------- +bool vtkSMReaderFactory::LoadConfiguration(vtkPVXMLElement* elem) +{ + if (!elem) + { + return false; + } + + if (elem->GetName() && + strcmp(elem->GetName(), "ParaViewReaders") != 0) + { + return this->LoadConfiguration( + elem->FindNestedElementByName("ParaViewReaders")); + } + + unsigned int num = elem->GetNumberOfNestedElements(); + for(unsigned int i=0; i<num; i++) + { + vtkPVXMLElement* reader = elem->GetNestedElement(i); + if (reader->GetName() && + (strcmp(reader->GetName(),"Reader") == 0 || + strcmp(reader->GetName(), "Proxy") == 0)) + { + const char* name = reader->GetAttribute("name"); + const char* group = reader->GetAttribute("group"); + group = group ? group : "sources"; + if (name && group) + { + // NOTE this is N^2. We may want to use a separate set or something to + // test of existence if this becomes an issue. + this->RegisterPrototype(group, name, + reader->GetAttribute("extensions"), + reader->GetAttribute("file_description")); + } + } + } + return true; +} + +//---------------------------------------------------------------------------- +vtkStringList* vtkSMReaderFactory::GetReaders(vtkIdType cid) +{ + return this->GetPossibleReaders(NULL, cid); +} + +//---------------------------------------------------------------------------- +vtkStringList* vtkSMReaderFactory::GetPossibleReaders(const char* filename, + vtkIdType cid) +{ + this->Readers->RemoveAllItems(); + + if (!filename || filename[0] == 0) + { + return this->Readers; + } + + vtkstd::vector<vtkstd::string> extensions; + // purposefully set the extensions to empty, since we don't want the extension + // test to be used for this case. + // this->Internals->BuildExtensions(filename, extensions); + + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->CanCreatePrototype(cid) && + (!filename || iter->CanReadFile(filename, extensions, cid))) + { + this->Readers->AddString(iter->Group.c_str()); + this->Readers->AddString(iter->Name.c_str()); + this->Readers->AddString(iter->Description.c_str()); + } + } + + return this->Readers; +} + +//---------------------------------------------------------------------------- +bool vtkSMReaderFactory::CanReadFile(const char* filename, vtkIdType cid) +{ + this->SetReaderGroup(0); + this->SetReaderName(0); + + if (!filename || filename[0] == 0) + { + return false; + } + + vtkstd::vector<vtkstd::string> extensions; + this->Internals->BuildExtensions(filename, extensions); + + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->CanCreatePrototype(cid) && iter->CanReadFile(filename, extensions, cid)) + { + this->SetReaderGroup(iter->Group.c_str()); + this->SetReaderName(iter->Name.c_str()); + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +static vtkstd::string vtkJoin( + const vtkstd::vector<vtkstd::string> exts, const char* prefix, + const char* suffix) +{ + vtksys_ios::ostringstream stream; + vtkstd::vector<vtkstd::string>::const_iterator iter; + for (iter = exts.begin(); iter != exts.end(); ++iter) + { + stream << prefix << *iter << suffix; + } + return stream.str(); +} + +//---------------------------------------------------------------------------- +const char* vtkSMReaderFactory::GetSupportedFileTypes(vtkIdType cid) +{ + vtksys_ios::ostringstream all_types; + all_types << "Supported Files ("; + + vtkstd::set<vtkstd::string> sorted_types; + + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->CanCreatePrototype(cid)) + { + if (iter->Extensions.size() > 0) + { + vtkstd::string ext_join = ::vtkJoin(iter->Extensions, "*.", " "); + vtksys_ios::ostringstream stream; + stream << iter->Description << "(" << ext_join << ")"; + sorted_types.insert(stream.str()); + all_types << ext_join << " "; + } + } + } + all_types << ")"; + + vtkstd::set<vtkstd::string>::iterator iter2; + for (iter2 = sorted_types.begin(); iter2 != sorted_types.end(); ++iter2) + { + all_types << ";;" << (*iter2); + } + this->Internals->SupportedFileTypes = all_types.str(); + return this->Internals->SupportedFileTypes.c_str(); +} + +//---------------------------------------------------------------------------- +bool vtkSMReaderFactory::TestFileReadability(const char* filename, vtkIdType cid) +{ + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + vtkSmartPointer<vtkSMProxy> proxy; + proxy.TakeReference(pxm->NewProxy("file_listing", "ServerFileListing")); + if (!proxy) + { + vtkGenericWarningMacro("Failed to create ServerFileListing proxy."); + return false; + } + + proxy->SetConnectionID(cid); + proxy->SetServers(vtkProcessModule::DATA_SERVER_ROOT); + vtkSMPropertyHelper(proxy, "ActiveFileName").Set(filename); + proxy->UpdateVTKObjects(); + proxy->UpdatePropertyInformation(); + + if (vtkSMPropertyHelper(proxy, "ActiveFileIsReadable").GetAsInt() != 0) + { + return true; + } + + return false; +} + +//---------------------------------------------------------------------------- +void vtkSMReaderFactory::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os, indent); +} + diff --git a/Servers/ServerManager/vtkSMReaderFactory.h b/Servers/ServerManager/vtkSMReaderFactory.h new file mode 100644 index 0000000000..eedaa4615a --- /dev/null +++ b/Servers/ServerManager/vtkSMReaderFactory.h @@ -0,0 +1,146 @@ +/*========================================================================= + + Program: ParaView + Module: vtkSMReaderFactory.h + + Copyright (c) Kitware, Inc. + All rights reserved. + See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +// .NAME vtkSMReaderFactory - is a factory for creating a reader +// proxy based on the filename/extension. +// .SECTION Description +// vtkSMReaderFactory is a factory for creating a reader that reads a particular +// file. The reader factory needs to be configured to register the reader +// prototypes supported by the application. This can be done using an XML with +// the following format: +// \verbatim +// <ParaViewReaders> +// <Proxy name="[xmlname for the reader proxy]" +// group="[optional: xmlgroup for the reader proxy, sources by default]" +// /> +// ... +// </ParaViewReaders> +// \endverbatim +// Alternatively, one can register prototypes using \c RegisterPrototype API. +// +// Once the factory has been configured, the API to create readers, get +// available readers etc. can be used. + +#ifndef __vtkSMReaderFactory_h +#define __vtkSMReaderFactory_h + +#include "vtkSMObject.h" + +class vtkStringList; +class vtkPVXMLElement; + +class VTK_EXPORT vtkSMReaderFactory : public vtkSMObject +{ +public: + static vtkSMReaderFactory* New(); + vtkTypeRevisionMacro(vtkSMReaderFactory, vtkSMObject); + void PrintSelf(ostream& os, vtkIndent indent); + + // Description: + // Cleanup all registered prototypes. + void Initialize(); + + // Description: + // Register a prototype. + void RegisterPrototype(const char* xmlgroup, const char* xmlname); + void UnRegisterPrototype(const char* xmlgroup, const char* xmlname); + + // Description: + // Load configuration XML. This adds the prototypes specified in the + // configuration XML to those already present in the factory. Use Initialize() + // is start with an empty factory before calling this method if needed. If two + // readers support reading the same file, the reader added more recently is + // given priority. + bool LoadConfigurationFile(const char* filename); + bool LoadConfiguration(const char* xmlcontents); + bool LoadConfiguration(vtkPVXMLElement* root); + + // Description: + // Returns true if a reader can be determined that can read the file. + // When this returns true, one can use GetReaderGroup() and GetReaderName() to + // obtain the xmlgroup and xmlname for the reader that can read the file. + // When this returns false, use GetPossibleReaders() to get the list of + // readers that can possibly read the file. + bool CanReadFile(const char* filename, vtkIdType cid); + + // Description: + // Returns the xml-name for the reader that can read the file queried by the + // most recent CanReadFile() call. This is valid only if CanReadFile() + // returned true. + vtkGetStringMacro(ReaderName); + + // Description: + // Returns the xml-group for the reader that can read the file queried by the + // most recent CanReadFile() call. This is valid only if CanReadFile() + // returned true. + vtkGetStringMacro(ReaderGroup); + + // Description: + // Get the list of readers that can possibly read the file. This is used when + // the factory cannot determine which reader to use for reading the file. The + // user can then choose from the provided options. + // Returns a list of 3-tuples where the 1st string is the group, the 2nd + // string is the reader name and the 3rd string is the reader description + // Note that the extension test is skipped in this case. + vtkStringList* GetPossibleReaders(const char* filename, vtkIdType cid); + + // Description: + // Returns a list of 3-tuples where the 1st string is the group, the 2nd + // string is the reader name and the 3rd string is the reader description + vtkStringList* GetReaders(vtkIdType cid); + + // Description: + // Helper method to test is a file is readable on the server side. This has + // nothing to do with the whether the file is readable by a reader, just test + // the file permissions etc. Internally uses the ServerFileListing proxy. + static bool TestFileReadability(const char* filename, vtkIdType cid); + + // Description: + // Returns a formatted string with all supported file types. + // \c cid is not used currently. + // An example returned string would look like: + // \verbatim + // "Supported Files (*.vtk *.pvd);;PVD Files (*.pvd);;VTK Files (*.vtk)" + // \endverbatim + const char* GetSupportedFileTypes(vtkIdType cid); + +//BTX +protected: + vtkSMReaderFactory(); + ~vtkSMReaderFactory(); + + // To support legacy configuration files. + void RegisterPrototype( + const char* xmlgroup, const char* xmlname, + const char* extensions, + const char* description); + + vtkSetStringMacro(ReaderName); + vtkSetStringMacro(ReaderGroup); + + char* ReaderName; + char* ReaderGroup; + vtkStringList* Readers; + +private: + vtkSMReaderFactory(const vtkSMReaderFactory&); // Not implemented + void operator=(const vtkSMReaderFactory&); // Not implemented + + class vtkInternals; + vtkInternals* Internals; +//ETX +}; + +#endif + diff --git a/Servers/ServerManager/vtkSMStateLoader.cxx b/Servers/ServerManager/vtkSMStateLoader.cxx index 7abf80fda7..05bb969e37 100644 --- a/Servers/ServerManager/vtkSMStateLoader.cxx +++ b/Servers/ServerManager/vtkSMStateLoader.cxx @@ -21,6 +21,7 @@ #include "vtkSMCameraLink.h" #include "vtkSMGlobalPropertiesManager.h" #include "vtkSMPropertyLink.h" +#include "vtkSMProxyIterator.h" #include "vtkSMProxyLink.h" #include "vtkSMProxyLocator.h" #include "vtkSMProxyManager.h" @@ -33,7 +34,7 @@ #include <vtkstd/vector> vtkStandardNewMacro(vtkSMStateLoader); -vtkCxxRevisionMacro(vtkSMStateLoader, "1.35"); +vtkCxxRevisionMacro(vtkSMStateLoader, "1.36"); vtkCxxSetObjectMacro(vtkSMStateLoader, ProxyLocator, vtkSMProxyLocator); //--------------------------------------------------------------------------- struct vtkSMStateLoaderRegistrationInfo @@ -98,6 +99,49 @@ vtkSMProxy* vtkSMStateLoader::CreateProxy( this->GetViewXMLName(cid, xml_name), cid); } + //************************************************************************** + // This is temporary code until we clean up time-keeper and animation scene + // interactions. There needs to be some rework with the management of + // time-keeper, making it a SM-behavior perhaps. Until that happens, I am + // letting this piece of code be which ensures that there's only open + // time-keeper and animation scene in the application. + if (xml_group && xml_name && strcmp(xml_group, "animation")==0 + && strcmp(xml_name, "AnimationScene")==0) + { + // If an animation scene already exists, we use that. + vtkSMProxyIterator* iter = vtkSMProxyIterator::New(); + vtkSMProxy* scene = 0; + for (iter->Begin("animation"); !iter->IsAtEnd(); iter->Next()) + { + if (strcmp(iter->GetProxy()->GetXMLGroup(), xml_group) == 0 && + strcmp(iter->GetProxy()->GetXMLName(), xml_name) == 0) + { + scene = iter->GetProxy(); + break; + } + } + iter->Delete(); + if (scene) + { + scene->Register(this); + return scene; + } + } + else if (xml_group && xml_name && strcmp(xml_group, "misc") == 0 + && strcmp(xml_name, "TimeKeeper") == 0) + { + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + // There is only one time keeper per connection, simply + // load the state on the timekeeper. + vtkSMProxy* timekeeper = pxm->GetProxy("timekeeper", "TimeKeeper"); + if (timekeeper) + { + timekeeper->Register(this); + return timekeeper; + } + } + //************************************************************************** + // If all else fails, let the superclass handle it: return this->Superclass::CreateProxy(xml_group, xml_name, cid); } @@ -118,6 +162,7 @@ void vtkSMStateLoader::CreatedNewProxy(int id, vtkSMProxy* proxy) //--------------------------------------------------------------------------- void vtkSMStateLoader::RegisterProxy(int id, vtkSMProxy* proxy) { + vtkSMStateLoaderInternals::RegInfoMapType::iterator iter = this->Internal->RegistrationInformation.find(id); if (iter == this->Internal->RegistrationInformation.end()) @@ -137,7 +182,11 @@ void vtkSMStateLoader::RegisterProxyInternal(const char* group, const char* name, vtkSMProxy* proxy) { vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); - + if (pxm->GetProxyName(group, proxy)) + { + // Don't re-register a proxy in the same group. + return; + } pxm->RegisterProxy(group, name, proxy); } diff --git a/Servers/ServerManager/vtkSMWriterFactory.cxx b/Servers/ServerManager/vtkSMWriterFactory.cxx new file mode 100644 index 0000000000..56fc1a10d2 --- /dev/null +++ b/Servers/ServerManager/vtkSMWriterFactory.cxx @@ -0,0 +1,419 @@ +/*========================================================================= + + Program: ParaView + Module: vtkSMWriterFactory.cxx + + Copyright (c) Kitware, Inc. + All rights reserved. + See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +#include "vtkSMWriterFactory.h" + +#include "vtkObjectFactory.h" +#include "vtkProcessModule.h" +#include "vtkPVXMLElement.h" +#include "vtkPVXMLParser.h" +#include "vtkSmartPointer.h" +#include "vtkSMInputProperty.h" +#include "vtkSMPropertyHelper.h" +#include "vtkSMProxyManager.h" +#include "vtkSMSourceProxy.h" +#include "vtkSMWriterProxy.h" + +#include <vtkstd/list> +#include <vtkstd/set> +#include <vtkstd/string> +#include <vtkstd/vector> +#include <vtksys/ios/sstream> +#include <vtksys/SystemTools.hxx> + +class vtkSMWriterFactory::vtkInternals +{ +public: + struct vtkValue + { + vtkstd::string Group; + vtkstd::string Name; + vtkstd::set<vtkstd::string> Extensions; + vtkstd::string Description; + + void FillInformation() + { + vtkSMProxy* prototype = + vtkSMProxyManager::GetProxyManager()->GetPrototypeProxy( + this->Group.c_str(), this->Name.c_str()); + if (!prototype || !prototype->GetHints()) + { + return; + } + vtkPVXMLElement* rfHint = + prototype->GetHints()->FindNestedElementByName("WriterFactory"); + if (!rfHint) + { + return; + } + + this->Extensions.clear(); + const char* exts = rfHint->GetAttribute("extensions"); + if (exts) + { + vtkstd::vector<vtkstd::string> exts_v; + vtksys::SystemTools::Split(exts, exts_v,' '); + this->Extensions.insert(exts_v.begin(), exts_v.end()); + } + this->Description = rfHint->GetAttribute("file_description"); + } + + // Returns true is a prototype proxy can be created on the given connection. + // For now, the connection is totally ignored since ServerManager doesn't + // support that. + bool CanCreatePrototype(vtkIdType vtkNotUsed(cid)) + { + return (vtkSMProxyManager::GetProxyManager()->GetPrototypeProxy( + this->Group.c_str(), this->Name.c_str()) != NULL); + } + + // Returns true if the data from the given output port can be written. + bool CanWrite(vtkSMSourceProxy* source, unsigned int port) + { + vtkSMProxyManager* pxm = vtkSMProxyManager::GetProxyManager(); + vtkSMProxy* prototype = pxm->GetPrototypeProxy( + this->Group.c_str(), this->Name.c_str()); + if (!prototype || !source) + { + return false; + } + vtkSMWriterProxy* writer = vtkSMWriterProxy::SafeDownCast(prototype); + // If it's not a vtkSMWriterProxy, then we assume that it can + // always work in parallel. + if (writer) + { + if (vtkProcessModule::GetProcessModule()->GetNumberOfPartitions( + source->GetConnectionID()) > 1) + { + if (!writer->GetSupportsParallel()) + { + return false; + } + } + else + { + if (writer->GetParallelOnly()) + { + return false; + } + } + } + vtkSMInputProperty* pp = vtkSMInputProperty::SafeDownCast( + prototype->GetProperty("Input")); + if (!pp) + { + vtkGenericWarningMacro(<< prototype->GetXMLGroup() + << " : " << prototype->GetXMLName() + << " has no input property."); + return false; + } + pp->RemoveAllUncheckedProxies(); + pp->AddUncheckedInputConnection(source, port); + bool status = pp->IsInDomains(); + pp->RemoveAllUncheckedProxies(); + return status; + } + + // Returns true if a file with the given extension can be written by this + // writer. \c extension should not include the starting ".". + bool ExtensionTest(const char* extension) + { + if (!extension || extension[0] == 0) + { + return false; + } + return (this->Extensions.find(extension) != this->Extensions.end()); + } + }; + + typedef vtkstd::list<vtkValue> PrototypesType; + PrototypesType Prototypes; + vtkstd::string SupportedFileTypes; +}; + +vtkStandardNewMacro(vtkSMWriterFactory); +vtkCxxRevisionMacro(vtkSMWriterFactory, "1.1"); +//---------------------------------------------------------------------------- +vtkSMWriterFactory::vtkSMWriterFactory() +{ + this->Internals = new vtkInternals(); +} + +//---------------------------------------------------------------------------- +vtkSMWriterFactory::~vtkSMWriterFactory() +{ + delete this->Internals; +} + +//---------------------------------------------------------------------------- +void vtkSMWriterFactory::Initialize() +{ + this->Internals->Prototypes.clear(); +} + +//---------------------------------------------------------------------------- +void vtkSMWriterFactory::RegisterPrototype(const char* xmlgroup, const char* xmlname) +{ + // If already present, we remove old one and append again so that the priority + // rule still works. + this->UnRegisterPrototype(xmlgroup, xmlname); + + vtkInternals::vtkValue value; + value.Group = xmlgroup; + value.Name = xmlname; + + // fills extension information etc. from the prototype. + value.FillInformation(); + + this->Internals->Prototypes.push_front(value); +} + +//---------------------------------------------------------------------------- +void vtkSMWriterFactory::RegisterPrototype( + const char* xmlgroup, const char* xmlname, + const char* extensions, const char* description) + +{ + // If already present, we remove old one and append again so that the priority + // rule still works. + this->UnRegisterPrototype(xmlgroup, xmlname); + vtkInternals::vtkValue value; + value.Group = xmlgroup; + value.Name = xmlname; + + // fills extension information etc. from the prototype. + value.FillInformation(); + if (description) + { + value.Description = description; + } + if (extensions) + { + vtkstd::vector<vtkstd::string> exts_v; + vtksys::SystemTools::Split(extensions, exts_v , ' '); + value.Extensions.clear(); + value.Extensions.insert(exts_v.begin(), exts_v.end()); + } + this->Internals->Prototypes.push_front(value); +} + +//---------------------------------------------------------------------------- +void vtkSMWriterFactory::UnRegisterPrototype( + const char* xmlgroup, const char* xmlname) +{ + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->Group == xmlgroup && iter->Name == xmlname) + { + this->Internals->Prototypes.erase(iter); + break; + } + } +} + +//---------------------------------------------------------------------------- +bool vtkSMWriterFactory::LoadConfigurationFile(const char* filename) +{ + vtkSmartPointer<vtkPVXMLParser> parser = + vtkSmartPointer<vtkPVXMLParser>::New(); + parser->SetFileName(filename); + if (!parser->Parse()) + { + vtkErrorMacro("Failed to parse file: " << filename); + return false; + } + + return this->LoadConfiguration(parser->GetRootElement()); +} + +//---------------------------------------------------------------------------- +bool vtkSMWriterFactory::LoadConfiguration(const char* xmlcontents) +{ + vtkSmartPointer<vtkPVXMLParser> parser = + vtkSmartPointer<vtkPVXMLParser>::New(); + + if (!parser->Parse(xmlcontents)) + { + vtkErrorMacro("Failed to parse xml. Not a valid XML."); + return false; + } + + vtkPVXMLElement* rootElement = parser->GetRootElement(); + return this->LoadConfiguration(rootElement); +} + +//---------------------------------------------------------------------------- +bool vtkSMWriterFactory::LoadConfiguration(vtkPVXMLElement* elem) +{ + if (!elem) + { + return false; + } + + if (elem->GetName() && + strcmp(elem->GetName(), "ParaViewWriters") != 0) + { + return this->LoadConfiguration( + elem->FindNestedElementByName("ParaViewWriters")); + } + + unsigned int num = elem->GetNumberOfNestedElements(); + for(unsigned int i=0; i<num; i++) + { + vtkPVXMLElement* reader = elem->GetNestedElement(i); + if (reader->GetName() && + (strcmp(reader->GetName(),"Writer") == 0 || + strcmp(reader->GetName(), "Proxy") == 0)) + { + const char* name = reader->GetAttribute("name"); + const char* group = reader->GetAttribute("group"); + group = group ? group : "writers"; + if (name && group) + { + // NOTE this is N^2. We may want to use a separate set or something to + // test of existence if this becomes an issue. + this->RegisterPrototype(group, name, + reader->GetAttribute("extensions"), + reader->GetAttribute("file_description")); + } + } + } + return true; +} + + +//---------------------------------------------------------------------------- +vtkSMProxy* vtkSMWriterFactory::CreateWriter( + const char* filename, vtkSMSourceProxy* source, unsigned int outputport) +{ + if (!filename || filename[0] == 0) + { + vtkErrorMacro("No filename. Cannot create any writer."); + return NULL; + } + + vtkstd::string extension = + vtksys::SystemTools::GetFilenameExtension(filename); + if (extension.size() > 0) + { + extension.erase(extension.begin()); // remove the first "." + } + else + { + vtkErrorMacro("No extension. Cannot determine writer to create."); + return NULL; + } + + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->CanCreatePrototype(source->GetConnectionID()) && + iter->ExtensionTest(extension.c_str()) && + iter->CanWrite(source, outputport)) + { + vtkSMProxy* proxy = vtkSMProxyManager::GetProxyManager()->NewProxy( + iter->Group.c_str(), + iter->Name.c_str()); + proxy->SetConnectionID(source->GetConnectionID()); + vtkSMPropertyHelper(proxy, "FileName").Set(filename); + vtkSMPropertyHelper(proxy, "Input").Set(source, outputport); + return proxy; + } + } + + vtkErrorMacro("No matching writer found."); + return NULL; +} + +//---------------------------------------------------------------------------- +static vtkstd::string vtkJoin( + const vtkstd::set<vtkstd::string> exts, const char* prefix, + const char* suffix) +{ + vtksys_ios::ostringstream stream; + vtkstd::set<vtkstd::string>::const_iterator iter; + for (iter = exts.begin(); iter != exts.end(); ++iter) + { + stream << prefix << *iter << suffix; + } + return stream.str(); +} + +//---------------------------------------------------------------------------- +const char* vtkSMWriterFactory::GetSupportedFileTypes( + vtkSMSourceProxy* source, unsigned int outputport) +{ + vtkstd::set<vtkstd::string> sorted_types; + + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->CanCreatePrototype(source->GetConnectionID()) && + iter->CanWrite(source, outputport)) + { + if (iter->Extensions.size() > 0) + { + vtkstd::string ext_join = ::vtkJoin(iter->Extensions, "*.", " "); + vtksys_ios::ostringstream stream; + stream << iter->Description << "(" << ext_join << ")"; + sorted_types.insert(stream.str()); + } + } + } + + vtksys_ios::ostringstream all_types; + vtkstd::set<vtkstd::string>::iterator iter2; + for (iter2 = sorted_types.begin(); iter2 != sorted_types.end(); ++iter2) + { + if (iter2 != sorted_types.begin()) + { + all_types << ";;"; + } + all_types << (*iter2); + } + this->Internals->SupportedFileTypes = all_types.str(); + return this->Internals->SupportedFileTypes.c_str(); +} + +//---------------------------------------------------------------------------- +bool vtkSMWriterFactory::CanWrite(vtkSMSourceProxy* source, unsigned int outputport) +{ + if (!source) + { + return false; + } + vtkInternals::PrototypesType::iterator iter; + for (iter = this->Internals->Prototypes.begin(); + iter != this->Internals->Prototypes.end(); ++iter) + { + if (iter->CanCreatePrototype(source->GetConnectionID()) && + iter->CanWrite(source, outputport)) + { + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +void vtkSMWriterFactory::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os, indent); +} + + diff --git a/Servers/ServerManager/vtkSMWriterFactory.h b/Servers/ServerManager/vtkSMWriterFactory.h new file mode 100644 index 0000000000..a003aff392 --- /dev/null +++ b/Servers/ServerManager/vtkSMWriterFactory.h @@ -0,0 +1,118 @@ +/*========================================================================= + + Program: ParaView + Module: vtkSMWriterFactory.h + + Copyright (c) Kitware, Inc. + All rights reserved. + See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +// .NAME vtkSMWriterFactory - is a factory or creating a writer based on the +// data type information from the output port. +// .SECTION Description +// vtkSMWriterFactory is a factory for creating a writer to write the data +// provided at an output port. The writer factory needs to be configured to +// register the writer prototypes supported by the application. This can be done +// using an XML with the following format: +// \verbatim +// <ParaViewWriters> +// <Proxy name="[xmlname for the writer proxy]" +// group="[optional: xmlgroup for the writer proxy, 'writers' by default]" +// /> +// ... +// </ParaViewWriters> +// \endverbatim +// +// Alternatively, one can register prototypes using \c RegisterPrototype API. +// The proxy definitions for the writer proxies must provide hints that +// indicate the file extension and description for the writer. +// +// Once the factory has been configured, the API to create writers, get +// available writers etc. can be used. + +#ifndef __vtkSMWriterFactory_h +#define __vtkSMWriterFactory_h + +#include "vtkSMObject.h" + +class vtkPVXMLElement; +class vtkSMProxy; +class vtkSMSourceProxy; + +class VTK_EXPORT vtkSMWriterFactory : public vtkSMObject +{ +public: + static vtkSMWriterFactory* New(); + vtkTypeRevisionMacro(vtkSMWriterFactory, vtkSMObject); + void PrintSelf(ostream& os, vtkIndent indent); + + // Description: + // Cleanup all registered prototypes. + void Initialize(); + + // Description: + // Register a prototype. + void RegisterPrototype(const char* xmlgroup, const char* xmlname); + void UnRegisterPrototype(const char* xmlgroup, const char* xmlname); + + // Description: + // Load configuration XML. This adds the prototypes specified in the + // configuration XML to those already present in the factory. Use Initialize() + // is start with an empty factory before calling this method if needed. If two + // readers support reading the same file, the reader added more recently is + // given priority. + bool LoadConfigurationFile(const char* filename); + bool LoadConfiguration(const char* xmlcontents); + bool LoadConfiguration(vtkPVXMLElement* root); + + // Description: + // Retruns true if the data from the output port can be written at all. + bool CanWrite(vtkSMSourceProxy*, unsigned int outputport); + + // Description: + // Create a new writer proxy to write the data from the specified output port + // to the file specified, if possible. + vtkSMProxy* CreateWriter(const char* filename, vtkSMSourceProxy*, + unsigned int outputport); + vtkSMProxy* CreateWriter(const char* filename, vtkSMSourceProxy* pxy) + { return this->CreateWriter(filename, pxy, 0); } + + // Description: + // Returns a formatted string with all supported file types. + // An example returned string would look like: + // \verbatim + // "PVD Files (*.pvd);;VTK Files (*.vtk)" + // \endverbatim + const char* GetSupportedFileTypes(vtkSMSourceProxy* source, + unsigned int outputport); + const char* GetSupportedFileTypes(vtkSMSourceProxy* source) + { return this->GetSupportedFileTypes(source, 0); } + +//BTX +protected: + vtkSMWriterFactory(); + ~vtkSMWriterFactory(); + + // To support legacy configuration files. + void RegisterPrototype( + const char* xmlgroup, const char* xmlname, + const char* extensions, + const char* description); + + +private: + vtkSMWriterFactory(const vtkSMWriterFactory&); // Not implemented + void operator=(const vtkSMWriterFactory&); // Not implemented + + class vtkInternals; + vtkInternals* Internals; +//ETX +}; + +#endif + diff --git a/Utilities/Doxygen/CMakeLists.txt b/Utilities/Doxygen/CMakeLists.txt index 182c384f3d..ea3a6aebed 100644 --- a/Utilities/Doxygen/CMakeLists.txt +++ b/Utilities/Doxygen/CMakeLists.txt @@ -33,10 +33,11 @@ IF (BUILD_DOCUMENTATION) \"${ParaView_SOURCE_DIR}/Utilities/VTKClientServer\" \\ \"${ParaView_SOURCE_DIR}/Qt/Components\" \\ \"${ParaView_SOURCE_DIR}/Qt/Core\" \\ + \"${ParaView_SOURCE_DIR}/Qt/ApplicationComponents\" \\ \"${ParaView_SOURCE_DIR}/Qt/Python\" \\ \"${ParaView_SOURCE_DIR}/Qt/Widgets\" \\ \"${ParaView_SOURCE_DIR}/Qt/Testing\" \\ - \"${ParaView_SOURCE_DIR}/Applications/Client\" \\ + \"${ParaView_SOURCE_DIR}/Applications/ParaView\" \\ \"${ParaView_SOURCE_DIR}/Applications/OverView\" \\ \"${ParaView_SOURCE_DIR}/Applications/OverView/Core\" \\ \"${ParaView_SOURCE_DIR}/Common/KWCommon\" \\ @@ -52,10 +53,11 @@ IF (BUILD_DOCUMENTATION) \"${ParaView_SOURCE_DIR}/Utilities/VTKClientServer\" \\ \"${ParaView_SOURCE_DIR}/Qt/Components\" \\ \"${ParaView_SOURCE_DIR}/Qt/Core\" \\ + \"${ParaView_SOURCE_DIR}/Qt/ApplicationComponents\" \\ \"${ParaView_SOURCE_DIR}/Qt/Python\" \\ \"${ParaView_SOURCE_DIR}/Qt/Widgets\" \\ \"${ParaView_SOURCE_DIR}/Qt/Testing\" \\ - \"${ParaView_SOURCE_DIR}/Applications/Client\" \\ + \"${ParaView_SOURCE_DIR}/Applications/ParaView\" \\ \"${ParaView_SOURCE_DIR}/Applications/OverView\" \\ \"${ParaView_SOURCE_DIR}/Applications/OverView/Core\" \\ \"${CMAKE_CURRENT_BINARY_DIR}/dox/Qt/Core\" \\ @@ -76,7 +78,7 @@ IF (BUILD_DOCUMENTATION) SET(TAGFILES "\"${CMAKE_CURRENT_BINARY_DIR}/vtkNightlyDoc.tag=http://www.vtk.org/doc/nightly/html\"") IF(INCLUDE_QT_DOCUMENTATION) - SET (TAGFILES "${TAGFILES} \"${QT_TAG_FILE}=http://doc.trolltech.com/4.2\"") + SET (TAGFILES "${TAGFILES} \"${QT_TAG_FILE}=http://doc.trolltech.com/4.5\"") ENDIF(INCLUDE_QT_DOCUMENTATION) CONFIGURE_FILE( diff --git a/VTK b/VTK index 6d079483ce..5200c629ea 160000 --- a/VTK +++ b/VTK @@ -1 +1 @@ -Subproject commit 6d079483ce8d816ee36d9492f6928c14ca9ed6aa +Subproject commit 5200c629ea427b3d639cae0df1343462bb1a1699 -- GitLab