From 45730a713833b123768d9e895d06ffd86bca71d0 Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 24 Feb 2010 09:39:05 +0000 Subject: [PATCH] Merge from BR_PARAVIS_LOT1_2 24/02/2010 --- CMakeLists.txt | 224 + Makefile.am | 47 - .../{unix/Makefile.am => CMakeLists.txt} | 27 +- adm_local/cmake_files/CMakeLists.txt | 115 + .../cmake_files/FindPARAVIEW.cmake | 18 +- .../{Makefile.am => unix/CMakeLists.txt} | 26 +- adm_local/unix/config_files/CMakeLists.txt | 113 + adm_local/unix/config_files/Makefile.am | 27 - adm_local/unix/config_files/check_ParaView.m4 | 2 +- adm_local/unix/make_common_starter.am | 69 - bin/CMakeLists.txt | 192 + bin/Makefile.am | 30 - build_configure | 114 - clean_configure | 15 - configure.ac | 404 -- .../gui/Makefile.am => CMakeLists.txt} | 38 +- doc/GeneralArchitecture.html | 940 ++++ doc/GeneralArchitecture.odt | Bin 36089 -> 0 bytes doc/GeneralArchitecture_html_m4ed0a034.gif | Bin 0 -> 26756 bytes doc/UserDocumentation.html | 177 + doc/UserDocumentation.odt | Bin 27984 -> 0 bytes doc/salome/{Makefile.am => CMakeLists.txt} | 36 +- doc/salome/gui/CMakeLists.txt | 79 + getwrapclasses.py | 106 +- idl/CMakeLists.txt | 665 +++ idl/Makefile.am | 104 - idl/create_header.sh | 9 + idl/create_hints.sh | 6 + idl/wrap.cmake | 57 + resources/CMakeLists.txt | 219 + resources/Makefile.am | 34 - resources/ParaViewFilters.xml | 163 + resources/ParaViewReaders.xml | 59 + resources/ParaViewSources.xml | 27 + resources/ParaViewWriters.xml | 26 + resources/{SalomeApp.xml => SalomeApp.xml.in} | 4 +- src/{Makefile.am => CMakeLists.txt} | 41 +- src/ENGINE/CMakeLists.txt | 398 ++ src/ENGINE/Makefile.am | 41 - src/ENGINE/PARAVIS_Engine_i.cc | 1 + src/PVGUI/CMakeLists.txt | 723 +++ src/PVGUI/Makefile.am | 143 - src/PVGUI/PARAVIS_Gen_i.cc | 164 +- src/PVGUI/PVGUI_Module.cxx | 723 ++- src/PVGUI/PVGUI_Module.h | 124 +- src/PVGUI/PVGUI_Module_actions.cxx | 921 ++-- src/PVGUI/PVGUI_Module_impl.h | 31 +- src/PVGUI/PVGUI_Module_widgets.cxx | 157 +- src/PVGUI/PVGUI_ProcessModuleHelper.cxx | 150 - src/PVGUI/PVGUI_ProcessModuleHelper.h | 75 - src/PVGUI/PVGUI_Tools.cxx | 2 - src/PVGUI/PVGUI_Trace.cxx | 857 ---- src/PVGUI/PVGUI_Trace.h | 188 - src/PVGUI/PVGUI_ViewManager.cxx | 9 +- src/PVGUI/PVGUI_ViewWindow.cxx | 29 +- src/PVGUI/PVGUI_ViewWindow.h | 2 +- src/PVGUI/PV_Events.h | 4 +- src/PVGUI/PV_Tools.cxx | 24 + src/PVGUI/PV_Tools.h | 6 + src/PVGUI/create_class.sh | 17 + src/PVGUI/resources/PARAVIS_msg_en.ts | 48 +- src/PVGUI/wrap.cmake | 54 + src/PV_SWIG/CMakeLists.txt | 123 + src/PV_SWIG/Makefile.am | 30 - src/PV_SWIG/paravisSM.py | 101 +- src/PV_SWIG/pvsimple.py | 57 +- src/PV_SWIG/servermanager.diff | 126 +- src/PV_SWIG/simple.diff | 16 +- src/ParaView/lex.yy.c | 3016 +++++++++++++ src/ParaView/readme.txt | 3 + src/ParaView/vtkParse.h | 167 + src/ParaView/vtkParse.tab.c | 4000 +++++++++++++++++ src/Plugins/Filter/CMakeLists.txt | 2 +- src/Plugins/ToolBar/CMakeLists.txt | 2 +- src/Plugins/View/CMakeLists.txt | 2 +- wrapfiles.cmake | 5 + 76 files changed, 12833 insertions(+), 3921 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 Makefile.am rename adm_local/{unix/Makefile.am => CMakeLists.txt} (54%) create mode 100644 adm_local/cmake_files/CMakeLists.txt rename doc/Makefile.am => adm_local/cmake_files/FindPARAVIEW.cmake (71%) rename adm_local/{Makefile.am => unix/CMakeLists.txt} (54%) create mode 100644 adm_local/unix/config_files/CMakeLists.txt delete mode 100644 adm_local/unix/config_files/Makefile.am delete mode 100644 adm_local/unix/make_common_starter.am create mode 100644 bin/CMakeLists.txt delete mode 100644 bin/Makefile.am delete mode 100755 build_configure delete mode 100755 clean_configure delete mode 100644 configure.ac rename doc/{salome/gui/Makefile.am => CMakeLists.txt} (59%) create mode 100644 doc/GeneralArchitecture.html delete mode 100644 doc/GeneralArchitecture.odt create mode 100644 doc/GeneralArchitecture_html_m4ed0a034.gif create mode 100644 doc/UserDocumentation.html delete mode 100644 doc/UserDocumentation.odt rename doc/salome/{Makefile.am => CMakeLists.txt} (57%) create mode 100644 doc/salome/gui/CMakeLists.txt create mode 100644 idl/CMakeLists.txt delete mode 100644 idl/Makefile.am create mode 100755 idl/create_header.sh create mode 100755 idl/create_hints.sh create mode 100755 idl/wrap.cmake create mode 100644 resources/CMakeLists.txt delete mode 100644 resources/Makefile.am create mode 100755 resources/ParaViewFilters.xml create mode 100755 resources/ParaViewReaders.xml create mode 100755 resources/ParaViewSources.xml create mode 100755 resources/ParaViewWriters.xml rename resources/{SalomeApp.xml => SalomeApp.xml.in} (81%) rename src/{Makefile.am => CMakeLists.txt} (53%) mode change 100755 => 100644 create mode 100644 src/ENGINE/CMakeLists.txt delete mode 100644 src/ENGINE/Makefile.am create mode 100644 src/PVGUI/CMakeLists.txt delete mode 100644 src/PVGUI/Makefile.am delete mode 100644 src/PVGUI/PVGUI_ProcessModuleHelper.cxx delete mode 100644 src/PVGUI/PVGUI_ProcessModuleHelper.h delete mode 100644 src/PVGUI/PVGUI_Trace.cxx delete mode 100644 src/PVGUI/PVGUI_Trace.h create mode 100755 src/PVGUI/create_class.sh create mode 100755 src/PVGUI/wrap.cmake create mode 100644 src/PV_SWIG/CMakeLists.txt delete mode 100644 src/PV_SWIG/Makefile.am create mode 100644 src/ParaView/lex.yy.c create mode 100644 src/ParaView/readme.txt create mode 100644 src/ParaView/vtkParse.h create mode 100644 src/ParaView/vtkParse.tab.c create mode 100644 wrapfiles.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..4da369f1 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,224 @@ + + CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR) + IF(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) + ENDIF(COMMAND cmake_policy) + + + SET(WITH_BOOST $ENV{BOOSTDIR}) + SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR}) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPLATFORM.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPYTHON.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindOMNIORB.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPTHREADS.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindHDF5.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindBOOST.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindLIBXML2.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSWIG.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindDOXYGEN.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindKERNEL.cmake) + + + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindPARAVIEW.cmake) + IF(EXISTS ${PARAVIEW_VTK_DIR}/VTKConfig.cmake) + SET(VTK_DIR ${PARAVIEW_VTK_DIR}) + ENDIF(EXISTS ${PARAVIEW_VTK_DIR}/VTKConfig.cmake) + SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR}) + INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindCAS.cmake) + INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindQT4.cmake) + INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindOPENGL.cmake) + INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindVTK.cmake) + INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindQWT.cmake) + INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindSIPPYQT.cmake) + INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindGUI.cmake) + + + SET(BUILD_PLUGINS 1) + SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR}) + SET(VISU_ROOT_DIR $ENV{VISU_ROOT_DIR}) + INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake) + IF(EXISTS ${VISU_ROOT_DIR}/adm_local/cmake_files/FindVISU.cmake) + INCLUDE(${VISU_ROOT_DIR}/adm_local/cmake_files/FindVISU.cmake) + SET(WITH_VISU 1) + ENDIF(EXISTS ${VISU_ROOT_DIR}/adm_local/cmake_files/FindVISU.cmake) + EXECUTE_PROCESS(COMMAND pvpython ${CMAKE_SOURCE_DIR}/getwrapclasses.py ${PARAVIEW_INCLUDE_DIRS}) + + + SET(DOXYGEN_IS_OK 0) + + + IF(WINDOWS) + SET(CPPUNIT_IS_OK 0) + ENDIF(WINDOWS) + + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : +# Modified by : Alexander BORODIN (OCN) - autotools usage +# + +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(ACLOCAL_AMFLAGS + -I + adm_local/unix/config_files + -I + ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files + -I + ${GUI_ROOT_DIR}/adm_local/unix/config_files +) + +SET(SUBDIRS + idl + adm_local + resources + src + doc + bin +) + +SET(DISTCLEANFILES + a.out + aclocal.m4 + configure + wrapfiles.txt +) + +SET(salomeinclude_DATA + PARAVIS_version.h +) + +SET(EXTRA_DIST + ${EXTRA_DIST} + build_configure + clean_configure +) + +# include $(top_srcdir)/wrapfiles.am +INCLUDE(wrapfiles.cmake) + +# dist-hook: +# rm -rf `find $(distdir) -name CVS` + +# dev_docs: +# (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs) + +# docs: dev_docs + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/PARAVIS_version.h.in) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/PARAVIS_version.h) + + + MESSAGE(STATUS "Creation of ${output}") + CONFIGURE_FILE(${input} ${output}) + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + +FOREACH(f ${salomeinclude_DATA}) + + SET(DEST include/salome) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${salomeinclude_DATA}) diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 6fe44732..00000000 --- a/Makefile.am +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# -* Makefile *- -# -# Author : -# Modified by : Alexander BORODIN (OCN) - autotools usage -# - -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -ACLOCAL_AMFLAGS = -I adm_local/unix/config_files \ - -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ - -I ${GUI_ROOT_DIR}/adm_local/unix/config_files - -SUBDIRS = idl adm_local resources src doc bin - -DISTCLEANFILES = a.out aclocal.m4 configure - -salomeinclude_DATA = PARAVIS_version.h - -EXTRA_DIST += \ - build_configure \ - clean_configure - -dist-hook: - rm -rf `find $(distdir) -name CVS` - -dev_docs: - (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs) - -docs: dev_docs diff --git a/adm_local/unix/Makefile.am b/adm_local/CMakeLists.txt similarity index 54% rename from adm_local/unix/Makefile.am rename to adm_local/CMakeLists.txt index facd4e6f..8c289eaa 100644 --- a/adm_local/unix/Makefile.am +++ b/adm_local/CMakeLists.txt @@ -1,3 +1,15 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + # Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG # PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT # This library is free software; you can redistribute it and/or @@ -17,6 +29,17 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -include $(top_srcdir)/adm_local/unix/make_common_starter.am +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(SUBDIRS + unix + cmake_files +) + -SUBDIRS = config_files + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + diff --git a/adm_local/cmake_files/CMakeLists.txt b/adm_local/cmake_files/CMakeLists.txt new file mode 100644 index 00000000..60fb019e --- /dev/null +++ b/adm_local/cmake_files/CMakeLists.txt @@ -0,0 +1,115 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(dist_admlocal_cmake_DATA + FindPARAVIEW.cmake +) + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + +FOREACH(f ${dist_admlocal_cmake_DATA}) + + SET(DEST adm_local/cmake_files) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${dist_admlocal_cmake_DATA}) diff --git a/doc/Makefile.am b/adm_local/cmake_files/FindPARAVIEW.cmake similarity index 71% rename from doc/Makefile.am rename to adm_local/cmake_files/FindPARAVIEW.cmake index 79c2a3ef..52f73d7f 100644 --- a/doc/Makefile.am +++ b/adm_local/cmake_files/FindPARAVIEW.cmake @@ -1,5 +1,3 @@ -# PARAVIS : ParaView wrapper SALOME module -# # Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE # # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, @@ -21,17 +19,13 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# -* Makefile *- -# -# Author : Margarita KARPUNINA (OCN) -# Date : 05/12/2008 -# $Header$ -# -SUBDIRS = salome +FIND_PACKAGE(ParaView REQUIRED) -dev_docs: - (cd salome && $(MAKE) $(AM_MAKEFLAGS) dev_docs) +SET(PARAVIS_ROOT_DIR $ENV{PARAVIS_ROOT_DIR}) -docs: dev_docs +SET(PARAVIEW_INCLUDES -I${PARAVIEW_INCLUDE_DIRS}) +SET(PARAVIEW_LIBS -L${PARAVIEW_LIBRARY_DIRS} -lvtkPVServerManager -lpqApplicationComponents) +FIND_LIBRARY(vtkPVServerManager vtkPVServerManager ${PARAVIEW_LIBRARY_DIRS}) +FIND_LIBRARY(pqApplicationComponents pqApplicationComponents ${PARAVIEW_LIBRARY_DIRS}) diff --git a/adm_local/Makefile.am b/adm_local/unix/CMakeLists.txt similarity index 54% rename from adm_local/Makefile.am rename to adm_local/unix/CMakeLists.txt index b2d96e98..1694914d 100644 --- a/adm_local/Makefile.am +++ b/adm_local/unix/CMakeLists.txt @@ -1,3 +1,15 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + # Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG # PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT # This library is free software; you can redistribute it and/or @@ -17,6 +29,16 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -include $(top_srcdir)/adm_local/unix/make_common_starter.am +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(SUBDIRS + config_files +) + -SUBDIRS = unix + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + diff --git a/adm_local/unix/config_files/CMakeLists.txt b/adm_local/unix/config_files/CMakeLists.txt new file mode 100644 index 00000000..cca26ccd --- /dev/null +++ b/adm_local/unix/config_files/CMakeLists.txt @@ -0,0 +1,113 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(dist_admlocalm4_DATA + check_ParaView.m4 +) + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + +FOREACH(f ${dist_admlocalm4_DATA}) + + SET(DEST adm_local/unix/config_files) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${dist_admlocalm4_DATA}) diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am deleted file mode 100644 index 1cc3949b..00000000 --- a/adm_local/unix/config_files/Makefile.am +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG -# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -dist_admlocalm4_DATA = \ - check_ParaView.m4 \ - check_VISU.m4 \ - check_Med.m4 \ - check_Med2.m4 \ - med_check_sizeof_medint.m4 diff --git a/adm_local/unix/config_files/check_ParaView.m4 b/adm_local/unix/config_files/check_ParaView.m4 index 7ac9828d..51907bbe 100644 --- a/adm_local/unix/config_files/check_ParaView.m4 +++ b/adm_local/unix/config_files/check_ParaView.m4 @@ -93,7 +93,7 @@ then fi LOCAL_INCLUDES="$OGL_INCLUDES" -LOCAL_LIBS="-lvtksys -lvtkzlib -lvtkpng -lvtkjpeg -lvtktiff -lvtkexpat -lvtksqlite -lvtkmetaio -lvtkverdict -lvtkNetCDF -lvtkDICOMParser -lvtkfreetype -lvtkftgl -lvtkexoIIc -lvtklibxml2 -lvtkCommon -lvtkGraphics -lvtkImaging -lvtkFiltering -lvtkIO -lvtkRendering -lvtkHybrid -lvtkParallel -lvtkWidgets -lvtkClientServer -lvtkCommonCS -lvtkFilteringCS -lvtkIOCS -lvtkImagingCS -lvtkGraphicsCS -lvtkGenericFiltering -lvtkGenericFilteringCS -lvtkRenderingCS -lvtkHybridCS -lvtkParallelCS -lvtkPVCommandOptions -lKWCommon -lvtkInfovis -lvtkInfovisCS -lvtkPVServerCommon -lvtkPVServerCommonCS -lvtkCommonPythonD -lvtkFilteringPythonD -lvtkIOPythonD -lXdmf -lvtkXdmf -lvtkXdmfCS -lvtkWidgetsCS -lvtkVolumeRendering -lvtkVolumeRenderingCS -lvtkPVFilters -lvtkPVFiltersCS -lvtkViews -lvtkPVServerManagerPythonD -lvtkPVServerCommonPythonD -lvtkPVPythonInterpretor -lvtkPVServerManager -lQVTK -lpqWidgets -lQtTesting -lvtkQtChart -lpqCore -lQtPython -lpqComponents -lvtkPVPython -lvtkalglib $LXLIB -lX11 -lXt" +LOCAL_LIBS="-lvtksys -lvtkzlib -lvtkpng -lvtkjpeg -lvtktiff -lvtkexpat -lvtksqlite -lvtkmetaio -lvtkverdict -lvtkNetCDF -lvtkDICOMParser -lvtkfreetype -lvtkftgl -lvtkexoIIc -lvtklibxml2 -lvtkCommon -lvtkGraphics -lvtkImaging -lvtkFiltering -lvtkIO -lvtkRendering -lvtkHybrid -lvtkParallel -lvtkWidgets -lvtkClientServer -lvtkCommonCS -lvtkFilteringCS -lvtkIOCS -lvtkImagingCS -lvtkGraphicsCS -lvtkGenericFiltering -lvtkGenericFilteringCS -lvtkRenderingCS -lvtkHybridCS -lvtkParallelCS -lvtkPVCommandOptions -lKWCommon -lvtkInfovis -lvtkInfovisCS -lvtkPVServerCommon -lvtkPVServerCommonCS -lvtkCommonPythonD -lvtkFilteringPythonD -lvtkIOPythonD -lXdmf -lvtkXdmf -lvtkXdmfCS -lvtkWidgetsCS -lvtkVolumeRendering -lvtkVolumeRenderingCS -lvtkPVFilters -lvtkPVFiltersCS -lvtkViews -lvtkPVServerManagerPythonD -lvtkPVServerCommonPythonD -lvtkPVPythonInterpretor -lvtkPVServerManager -lQVTK -lpqWidgets -lQtTesting -lvtkQtChart -lpqCore -lQtPython -lpqApplicationComponents -lpqComponents -lvtkalglib $LXLIB -lX11 -lXt" dnl VTK install dir if test -z $with_paraview ; then diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am deleted file mode 100644 index acf58dee..00000000 --- a/adm_local/unix/make_common_starter.am +++ /dev/null @@ -1,69 +0,0 @@ -# -# ============================================================ -# This file defines the common definitions used in several -# Makefile. This file must be included, if needed, by the file -# Makefile.am. -# ============================================================ -# - -# Standard directory for installation -salomeincludedir = $(includedir)/salome -libdir = $(prefix)/lib@LIB_LOCATION_SUFFIX@/salome -bindir = $(prefix)/bin/salome -salomescriptdir = $(bindir) -salomepythondir = $(pythondir)/salome -salomepyexecdir = $(pyexecdir)/salome - -# Directory for installing idl files -salomeidldir = $(prefix)/idl/salome - -# Directory for installing resource files -salomeresdir = $(prefix)/share/salome/resources/@MODULE_NAME@ - -# Directories for installing admin files -admlocaldir = $(prefix)/adm_local -admlocalunixdir = $(admlocaldir)/unix -admlocalm4dir = $(admlocaldir)/unix/config_files - -# Shared modules installation directory -sharedpkgpythondir = $(salomepythondir)/shared_modules - -# Documentation directory -docdir = $(datadir)/doc/salome - -# common rules - -# meta object implementation files generation (moc) -%_moc.cxx: %.h - $(MOC) $< -o $@ - -# translation (*.qm) files generation (lrelease) -%.qm: resources/%.ts - $(LRELEASE) $< -qm $@ - -# resource files generation (qrcc) -qrc_%.cxx: %.qrc - $(QRCC) $< -o $@ -name $(*F) - -# qt forms files generation (uic) -ui_%.h: %.ui - $(UIC) -o $@ $< - -# extra distributed files -EXTRA_DIST = $(MOC_FILES:%_moc.cxx=%.h) $(QRC_FILES:qrc_%.cxx=%.qrc) \ - $(UIC_FILES:ui_%.h=%.ui) $(nodist_salomeres_DATA:%.qm=resources/%.ts) - -# customize clean operation -mostlyclean-local: - rm -f @builddir@/*_moc.cxx - rm -f @builddir@/*.qm - rm -f @builddir@/ui_*.h - rm -f @builddir@/qrc_*.cxx - -# tests -tests: unittest - -unittest: $(UNIT_TEST_PROG) - @if test "x$(UNIT_TEST_PROG)" != "x"; then \ - $(UNIT_TEST_PROG); \ - fi; diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt new file mode 100644 index 00000000..aebb6e4e --- /dev/null +++ b/bin/CMakeLists.txt @@ -0,0 +1,192 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# -* Makefile *- +# +# Author : +# Module : PARAVIS +# + +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# non-distributed files +SET(nodist_salomescript_DATA + VERSION +) + +# distributed files +SET(dist_salomescript_SCRIPTS +) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/VERSION.in) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/VERSION) + + + MESSAGE(STATUS "Creation of ${output}") + CONFIGURE_FILE(${input} ${output}) + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + +FOREACH(f ${nodist_salomescript_DATA}) + + SET(DEST bin/salome) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${nodist_salomescript_DATA}) +FOREACH(f ${dist_salomescript_SCRIPTS}) + + SET(DEST bin/salome) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${dist_salomescript_SCRIPTS}) diff --git a/bin/Makefile.am b/bin/Makefile.am deleted file mode 100644 index 94e250cf..00000000 --- a/bin/Makefile.am +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG -# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -* Makefile *- -# -# Author : -# Module : PARAVIS -# - -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -# non-distributed files -nodist_salomescript_DATA = VERSION - -# distributed files -dist_salomescript_SCRIPTS = diff --git a/build_configure b/build_configure deleted file mode 100755 index f6d1eca7..00000000 --- a/build_configure +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/bash - -# -# Tool for updating list of .in file for the SALOME project -# and regenerating configure script -# -# Author : -# Modified by : Alexander BORODIN (OCN) - autotools usage -# Date : 10/10/2002 - - -ORIG_DIR=`pwd` -CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` - -######################################################################## -# Test if the KERNEL_ROOT_DIR is set correctly - -if test ! -d "${KERNEL_ROOT_DIR}"; then - echo "failed : KERNEL_ROOT_DIR variable is not correct !" - exit -fi - - -######################################################################## -# Test if the GUI_ROOT_DIR is set correctly - -if test ! -d "${GUI_ROOT_DIR}"; then - echo "failed : GUI_ROOT_DIR variable is not correct !" - exit -fi - -cd ${CONF_DIR} -ABS_CONF_DIR=`pwd` - -mkdir -p salome_adm/unix/config_files -#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files/* salome_adm/unix/config_files -#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/pythonbe.py salome_adm/unix - -cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/SALOMEconfig.h.in salome_adm/unix - -#cp -f ${GUI_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files - -# remove KERNEL deprecated configure files -#for deprecated in ac_cc_warnings.m4 ac_cxx_partial_specialization.m4 \ -# check_mico.m4 config.guess ltmain.sh ac_cxx_bool.m4 ltconfig ac_cxx_typename.m4 \ -# check_pthreads.m4 config.sub libtool.m4 ac_cxx_mutable.m4 missing -# do -# rm -f salome_adm/unix/config_files/${deprecated} -# done - -if test ! -f "${PVHOME}/include/paraview-${PVVERSION}/vtkSMProxyManager.h"; then - echo "failed : PVHOME variable is not correct !" - exit -fi - -`pvpython getwrapclasses.py` - -#file hints contain the size of returned arrays -cp -f ${PVHOME}/lib/paraview-${PVVERSION}/hints idl/hints -if [ -f idl/hints_paravis ]; then - cat idl/hints_paravis >> idl/hints -fi - -# ____________________________________________________________________ -# aclocal creates the aclocal.m4 file from the standard macro and the -# custom macro embedded in the directory salome_adm/unix/config_files -# and KERNEL config_files directory. -# output: -# aclocal.m4 -# autom4te.cache (directory) -echo "====================================================== aclocal" - -aclocal -I adm_local/unix/config_files \ - -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ - -I ${GUI_ROOT_DIR}/adm_local/unix/config_files || exit 1 - -# ____________________________________________________________________ -# libtoolize creates some configuration files (ltmain.sh, -# config.guess and config.sub). It only depends on the libtool -# version. The files are created in the directory specified with the -# AC_CONFIG_AUX_DIR() tag (see configure.ac). -# output: -# salome_adm/unix/config_files/config.guess -# salome_adm/unix/config_files/config.sub -# salome_adm/unix/config_files/ltmain.sh -#echo "====================================================== libtoolize" - -libtoolize --force --copy --automake || exit 1 - -# ____________________________________________________________________ -# autoconf creates the configure script from the file configure.ac (or -# configure.in if configure.ac doesn't exist) -# output: -# configure -echo "====================================================== autoconf" - -autoconf - -# ____________________________________________________________________ -# automake creates some scripts used in building process -# (install-sh, missing, ...). It only depends on the automake -# version. The files are created in the directory specified with the -# AC_CONFIG_AUX_DIR() tag (see configure.ac). This step also -# creates the Makefile.in files from the Makefile.am files. -# output: -# salome_adm/unix/config_files/compile -# salome_adm/unix/config_files/depcomp -# salome_adm/unix/config_files/install-sh -# salome_adm/unix/config_files/missing -# salome_adm/unix/config_files/py-compile -# Makefile.in (from Makefile.am) -echo "====================================================== automake" - -automake --copy --gnu --add-missing diff --git a/clean_configure b/clean_configure deleted file mode 100755 index be0b5427..00000000 --- a/clean_configure +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -rm -rf autom4te.cache aclocal.m4 configure make_config -find . -name "*~" -print -exec rm {} \; -find . -name "*.pyc" -print -exec rm {} \; -#exit -# ==================== ON SORT AVANT - -find bin -name Makefile.in | xargs rm -f -find doc -name Makefile.in | xargs rm -f -find idl -name Makefile.in | xargs rm -f -find resources -name Makefile.in | xargs rm -f -find salome_adm -name Makefile.in | xargs rm -f -find src -name Makefile.in | xargs rm -f -rm -f Makefile.in diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 1c053a30..00000000 --- a/configure.ac +++ /dev/null @@ -1,404 +0,0 @@ -# -# PLEASE DO NOT MODIFY configure.in FILE -# -# ALL CHANGES WILL BE DISCARDED BY THE NEXT -# build_configure COMMAND -# -# CHANGES MUST BE MADE IN configure.in.base FILE -# -# -# Author : Marc Tajchman (CEA) -# Date : 28/06/2001 -# Modified by : Patrick GOLDBRONN (CEA) -# Modified by : Marc Tajchman (CEA) -# -# Created from configure.in.base -# - -AC_INIT([PARAVIS - SALOME GUI for ParaView], [0.1.0], [webmaster.salome@opencascade.com], [PARAVIS]) -AC_CONFIG_AUX_DIR(salome_adm/unix/config_files) -AC_CANONICAL_HOST -AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE([-Wno-portability]) - -XVERSION=`echo $VERSION | awk -F. '{printf("0x%02x%02x%02x",$1,$2,$3)}'` -AC_SUBST(XVERSION) - -# set up MODULE_NAME variable for dynamic construction of directories (resources, etc.) -MODULE_NAME=paravis -AC_SUBST(MODULE_NAME) - -dnl -dnl Initialize source and build root directories -dnl - -ROOT_BUILDDIR=`pwd` -ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` -cd $ROOT_SRCDIR -ROOT_SRCDIR=`pwd` -cd $ROOT_BUILDDIR - -AC_SUBST(ROOT_SRCDIR) -AC_SUBST(ROOT_BUILDDIR) - -echo -echo Source root directory : $ROOT_SRCDIR -echo Build root directory : $ROOT_BUILDDIR -echo -echo - -AC_CHECK_PROG(SHELL,sh) -AC_SUBST(SHELL) - -if test -z "$AR"; then - AC_CHECK_PROGS(AR,ar xar,:,$PATH) -fi -AC_SUBST(AR) - -dnl Export the AR macro so that it will be placed in the libtool file -dnl correctly. -export AR - -echo -echo --------------------------------------------- -echo testing make -echo --------------------------------------------- -echo - -AC_PROG_MAKE_SET -AC_PROG_INSTALL -dnl -dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques ! - -AC_ENABLE_DEBUG(yes) -AC_DISABLE_PRODUCTION - -echo --------------------------------------------- -echo testing libtool -echo --------------------------------------------- - -dnl first, we set static to no! -dnl if we want it, use --enable-static -AC_ENABLE_STATIC(no) - -AC_LIBTOOL_DLOPEN -AC_PROG_LIBTOOL - -dnl Fix up the INSTALL macro if it s a relative path. We want the -dnl full-path to the binary instead. -case "$INSTALL" in - *install-sh*) - INSTALL="\${KERNEL_ROOT_DIR}/salome_adm/unix/config_files/install-sh -c" - ;; -esac - -echo -echo --------------------------------------------- -echo Testing CMake -echo --------------------------------------------- -echo - -AC_CHECK_PROG(HAS_CMAKE,cmake,"yes") -AM_CONDITIONAL(BUILD_PLUGINS, test "$HAS_CMAKE" = "yes") -if test "$HAS_CMAKE" != "yes"; then - AC_MSG_WARN(CMake not found so ParaView plugins will not be built) -fi - -echo -echo --------------------------------------------- -echo testing C/C++ -echo --------------------------------------------- -echo - -cc_ok=no -dnl inutil car libtool -dnl AC_PROG_CC -AC_PROG_CXX -AC_CXX_WARNINGS -AC_CXX_TEMPLATE_OPTIONS -AC_DEPEND_FLAG -# AC_CC_WARNINGS([ansi]) -cc_ok=yes - -dnl Library libdl : -AC_CHECK_LIB(dl,dlopen) - -dnl add library libm : -AC_CHECK_LIB(m,ceil) - -dnl Library librt : for alpha/osf -AC_CHECK_LIB(rt,nanosleep) - -dnl -dnl Check if we use std iostream by default or if we must add -dnl a compiler directive for that -dnl - -AC_CXX_USE_STD_IOSTREAM - -dnl -dnl Well we use sstream which is not in gcc pre-2.95.3 -dnl We must test if it exists. If not, add it in include ! -dnl - -AC_CXX_HAVE_SSTREAM - -dnl -dnl --------------------------------------------- -dnl testing linker -dnl --------------------------------------------- -dnl - -AC_LINKER_OPTIONS - -dnl -dnl --------------------------------------------- -dnl testing MPICH -dnl --------------------------------------------- -dnl - -CHECK_MPI -CHECK_MPICH - -dnl -dnl --------------------------------------------- -dnl testing WITHIHM -dnl --------------------------------------------- -dnl - -CHECK_WITHIHM - -echo -echo --------------------------------------------- -echo testing LEX \& YACC -echo --------------------------------------------- -echo - -lex_yacc_ok=no -AC_PROG_YACC -AC_PROG_LEX -lex_yacc_ok=yes - -echo -echo --------------------------------------------- -echo testing python -echo --------------------------------------------- -echo - -CHECK_PYTHON - -AM_PATH_PYTHON(2.3) - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing java -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_JAVA - -echo -echo --------------------------------------------- -echo testing swig -echo --------------------------------------------- -echo - -CHECK_SWIG - -echo -echo --------------------------------------------- -echo testing threads -echo --------------------------------------------- -echo - -ENABLE_PTHREADS - -echo -echo --------------------------------------------- -echo testing omniORB -echo --------------------------------------------- -echo - -CHECK_OMNIORB - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing mico -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_MICO - -echo -echo --------------------------------------------- -echo default ORB : omniORB -echo --------------------------------------------- -echo - -DEFAULT_ORB=omniORB -CHECK_CORBA - -AC_SUBST_FILE(CORBA) -corba=make_$ORB -CORBA=adm_local/unix/$corba - -echo -echo --------------------------------------------- -echo testing openGL -echo --------------------------------------------- -echo - -CHECK_OPENGL - -echo -echo --------------------------------------------- -echo testing QT -echo --------------------------------------------- -echo - -CHECK_QT - -echo -echo --------------------------------------------- -echo testing HDF5 -echo --------------------------------------------- -echo - -CHECK_HDF5 - -echo -echo --------------------------------------------- -echo testing ParaView -echo --------------------------------------------- -echo - -CHECK_PARAVIEW - -echo -echo --------------------------------------------- -echo Testing OpenCascade -echo --------------------------------------------- -echo - -CHECK_CAS - -echo -echo --------------------------------------------- -echo Testing html generators -echo --------------------------------------------- -echo - -CHECK_HTML_GENERATORS - -echo -echo --------------------------------------------- -echo Testing Kernel -echo --------------------------------------------- -echo - -CHECK_KERNEL - -echo -echo --------------------------------------------- -echo Testing GUI -echo --------------------------------------------- -echo - -CHECK_SALOME_GUI - -echo -echo --------------------------------------------- -echo testing VISU -echo --------------------------------------------- -echo - -CHECK_VISU - -echo -echo --------------------------------------------- -echo testing MED -echo --------------------------------------------- -echo - -CHECK_MED - -AM_CONDITIONAL(MED_ENABLE_MULTIPR, [test "$ENABLE_MULTIPR" = yes]) - -echo -echo --------------------------------------------- -echo Summary -echo --------------------------------------------- -echo - -echo Configure -variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok hdf5_ok paraview_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok SalomeGUI_ok Visu_ok Med_ok" - -for var in $variables -do - printf " %10s : " `echo \$var | sed -e "s,_ok,,"` - eval echo \$$var -done - -# Generating makefiles for ParaView plugins using CMake -# cmake executable must be available in PATH -if test "$HAS_CMAKE" = "yes"; then - - echo - echo --------------------------------------------- - echo Invoking CMake to generate Makefiles for ParaView plugins - echo --------------------------------------------- - echo - - curdir=`pwd` - if ! test -d ${ROOT_BUILDDIR}/src/Plugins; then - mkdir -p ${ROOT_BUILDDIR}/src/Plugins - fi - cd ${ROOT_BUILDDIR}/src/Plugins - cmake -D ParaView_DIR=${PVHOME}/lib/paraview-${PVVERSION} -D CMAKE_BUILD_TYPE=Debug -D CMAKE_INSTALL_PREFIX=${prefix}/lib/paraview ${ROOT_SRCDIR}/src/Plugins - cd $curdir -fi - - -dnl We don t need to say when we re entering directories if we re using -dnl GNU make becuase make does it for us. -if test "X$GMAKE" = "Xyes"; then - AC_SUBST(SETX) SETX=":" -else - AC_SUBST(SETX) SETX="set -x" -fi -echo -echo --------------------------------------------- -echo generating Makefiles and configure files -echo --------------------------------------------- -echo - -AC_OUTPUT_COMMANDS([ \ - chmod +x ./bin/*; \ -]) - -# This list is initiated using autoscan and must be updated manually -# when adding a new file .in to manage. When you execute -# autoscan, the Makefile list is generated in the output file configure.scan. -# This could be helpfull to update de configuration. -AC_OUTPUT([ \ - ./salome_adm/unix/SALOMEconfig.h \ - ./adm_local/Makefile \ - ./adm_local/unix/Makefile \ - ./adm_local/unix/config_files/Makefile \ - ./bin/VERSION \ - ./bin/Makefile \ - ./doc/Makefile \ - ./doc/salome/Makefile \ - ./doc/salome/gui/Makefile \ - ./doc/salome/gui/doxyfile \ - ./idl/Makefile \ - ./src/Makefile \ - ./src/PVGUI/Makefile \ - ./src/PV_SWIG/Makefile \ - ./src/ENGINE/Makefile \ - ./resources/Makefile \ - ./resources/PARAVISCatalog.xml \ - ./PARAVIS_version.h \ - Makefile \ -]) - diff --git a/doc/salome/gui/Makefile.am b/doc/CMakeLists.txt similarity index 59% rename from doc/salome/gui/Makefile.am rename to doc/CMakeLists.txt index 700ec952..fb443b9c 100644 --- a/doc/salome/gui/Makefile.am +++ b/doc/CMakeLists.txt @@ -1,3 +1,15 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + # PARAVIS : ParaView wrapper SALOME module # # Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE @@ -28,22 +40,20 @@ # $Header$ # -include $(top_srcdir)/adm_local/unix/make_common_starter.am +SET(SUBDIRS + salome +) -EXTRA_DIST += images static +# dev_docs: +# (cd salome && $(MAKE) $(AM_MAKEFLAGS) dev_docs) -dev_docs: doxyfile - echo "Running doxygen in directory: "`pwd`; \ - $(DOXYGEN) $<; +# docs: dev_docs -clean-local: - -rm -fr PARAVIS doxygen.bak -install-data-local: - if test -d PARAVIS; then \ - $(INSTALL) -d $(DESTDIR)$(docdir)/gui ; \ - cp -rp PARAVIS $(DESTDIR)$(docdir)/gui ; \ - fi; -uninstall-local: - rm -rf $(DESTDIR)$(docdir)/gui/PARAVIS + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + diff --git a/doc/GeneralArchitecture.html b/doc/GeneralArchitecture.html new file mode 100644 index 00000000..f5547ddb --- /dev/null +++ b/doc/GeneralArchitecture.html @@ -0,0 +1,940 @@ + + + + + + + + + + + +

PARAVIS development

+

General architecture of PARAVIEW +extractor

+

+1.Introduction

+

2.General +architecture

+

3.Automatic +generation of container classes

+

+3.1. +Source files related to PARAVIS server definition

+

3.2. +Process of generation

+

3.3. +Definition of IDL interfaces

+

3.4. +Base interface and its implementation

+

3.5. +GUI events queue

+

3.6. +Overloaded methods definition

+

3.7. +Creation of objects in Python

+

3.8. +servermanager.py and simple.py

+

4.Trace +functionality

+



+

+



+

+

Introduction

+

This document describes development of ParaView server manager API +for PARAVIS module. The new API must provide following features:

+
    +
  1. Define interaction between two different processes: Python + console and PARAVIS GUI defined in SALOME desktop.

    +
  2. Make possible to manage PARAVIS GUI and ParaView server data + from Python scripts in synchronized mode.

    +
  3. The new API must be similar as much as possible to the API + provided by servermanager.py module from ParaView in order to make + possible launching the same scripts as in ParaView as in PARAVIS + without modifications.

    +
+

General architecture and development features of this task are +described below.

+

General architecture

+

Main components of PARAVIS architecture and their relations can be +represented as on the following picture:

+




+

+

The usual way to implement SALOME module is to develop a +Data/Algorithms engine unit as a CORBA server and module GUI as a +CORBA client. But in case if we need to use GUI and Algorithms from +Python console (what usually is an external process) in synchronized +mode then we have to implement them together as a CORBA server within +a one process.

+

On the diagram above following component are shown: +

+
    +
  • PARAVIS module GUI which is responsible for creation of + necessary widgets within SALOME Desktop, initialization of ParaView + client objects, connection of ParaView GUI objects to created + widgets.

    +
  • ParaView client code is a set of ParaView objects what + provides ParaView GUI.

    +
  • ParaView server for PARAVIS module can be used as built-in + (by default) as remote. For connection to remote server it is + necessary to use corresponded menu commands connect/disconnect as it + is used in standard ParaView GUI client.

    +
  • ParaView server manager API is a set of classes provided by + ParaView for definition of API for Python interpreter.

    +
  • Container objects - implementation of CORBA servants for + wrapping server manager object instances and redirection of CORBA + interface calls to corresponded server manager object.

    +
+

+Automatic generation of container classes

+

Source files related to PARAVIS server definition

+

In PARAVIS_SRC/idl/ directory:

+
    +
  1. PARAVIS_Gen.idl – defines main interfaces to PARAVIS + module.

    +
  2. PARAVIS_Gen_Types.idl – defines data collection + types.

    +
  3. hints_paravis – defines sizes of arrays missed in + standard VTK hints file. If some functions of VTK classes which + return array data are not extracted then it is necessary to edit + this file in order to describe missed functions.

    +
  4. pythonIDL.py – command file which is used for + extraction of IDL interfaces to Python files. This is modification + of similar file from omniidl product what takes into account + overloading of methods in class.

    +
  5. vtkWrapIDL.c – source file for building extraction + executables: vtkWrapIDL, + vtkWrapIDL_CC, vtkWrapIDL_HH.

    +
+

In PARAVIS_SRC/src/PVGUI directory:

+
    +
  1. PARAVIS_Gen_i.cc and + PARAVIS_Gen_i.hh – implementation + of PARAVIS_Gen interface.

    +
  2. PV_Events.h – defines + events for synchronization of CORBA client calls with main GUI + events queue.

    +
  3. Other files are related to GUI + definition and auxiliary tools.

    +
+

In PARAVIS_SRC/src/PV_SWIG +directory:

+
    +
  1. paravis.py – general + Python module for PARAVIS. It installs connection to PARAVIS CORBA + server, defines a variable myParavis in + order to provide acces to PARAVIS_Gen functions, + creates a set of empty constructors for all extracted ParaView + classes.

    +
  2. paravisSM.py – modified + copy of servermanager.py module from ParaView. Modification done + according to conventions defined by paravis.py module and features + of working with CORBA server.

    +
  3. pvsimple.py – modified + copy of simple.py module from ParaView. Modifications done because + of the same reasons.

    +
+

Process of generation

+

CORBA servant classes for wrapping of server manager API classes +is generated automatically. The process of building PARAVIS module +with generation of wrappers is performed in the following way:

+
    +
  1. Call build_configure script. During performing of this + script it performs some standard steps of SALOME module building and + calls a Python command file getwrapclasses.py is called. This + procedure creates a list of ParaView and VTK class names what has to + be extracted. This list includes all vtkSM* classes and vtk* + classes what are referred by previous group of classes. Results + of build_configure step are:

    +
      +
    1. idl/wrap.am – defines variables what lists all interfaces + (*.idl and *.cc files) what will be generated.

      +
    2. idl/vtkWrapIDL.h – defines a list of extracted classes in + form of char* array.

      +
    3. src/PVGUI/wrap.am - defines variables what lists all servant + classes (*.hh and *.cc files) what will be generated.

      +
    4. src/PVGUI/PARAVIS_CreateClass.cxx is a C++ file what + contains a one function CreateInstance. This function creates a + servant class which corresponds to a given name of original + ParaView/VTK class.

      +
    +
  2. Launch configure script from a build directory. This + step is similar to the same steps in other SALOME modules and does + not have any special related to automatic generation of CORBA + interfaces.

    +
  3. Call make command in build directory. This command + does following steps related to automatic generation:

    +
      +
    1. Builds vtkWrapIDL executable in idl directory + what is responsible for generation of IDL files using names of + classes to wrap. This executable analyzes related header files for + classes from vtkWrapIDL.h and defines corresponded IDL file.

      +
    2. Defines all IDL files with help of this executable and + launches standard SALOME compilation for idl directory.

      +
    3. Compiles vtkWrapIDL_CC and + vtkWrapIDL_HH executables + in src/PVGUI directory what are responsible for generation of + header files (*.hh) and implementation files (*.cc) for servants + classes.

      +
    4. Generation of servant classes + with help of these executables and building the library.

      +
    +
  4. Call make install + command in build directory. This + will finalize building of libraries and generate Python files for + IDL interfaces.

    +
+

Note:

+

make +command can not be used with -j key because extraction of parent +classes should be done before extraction of child classes.

+

Definition of IDL interfaces

+

Process of IDL interfaces generation has to respect following +restrictions of IDL format:

+
    +
  1. IDL does not support several functions with the same name + within a one interface definition. Even they have different + parameters (overloading of methods as in C++). Also this is not + supported between parent and its ancestors.

    +
  2. In context of PARAVIS it is difficult to extract methods what + accept or return “void*” data type. In IDL it can be described + as “ANY” data type, but in context of ParaView it is not clear + to what type it has to be casted.

    +
+

IDL interfaces extracted following to the next principals:

+
    +
  1. All interfaces are inherited from a common parent interface + Base. +

    +
  2. Each interface includes all extracted methods of its + prototype class including all its parents.

    +
  3. If the prototype class contains overloaded methods (methods + with the same name) then each appearance of this method name is + supplied with index.

    +
  4. If prototype class contains methods which return or accept + void* then these methods are ignored.

    +
  5. If prototype class contains methods which return array (int*, + double*, ...) which size is not defined in “hints” or + “hints_paravis” files then these methods are ignored.

    +
  6. If prototype class + contains methods which get a pointer to function then these methods + are ignored.

    +
  7. If a method of prototype class returns/accepts a pointer on + ParaView/VTK class instance then interface will return/accept Base + interface.

    +
+

Base interface and its implementation

+

Base interface is defined in order to satisfy following points:

+
    +
  1. Sometimes we need to have a possibility to use a servant as a + pointer on a common interface.

    +
  2. We need to have possibility to define a common auxiliary + methods for all generated interfaces which out of ParaView/VTK + definitions.

    +
  3. We need to have a base implementation for all servant + classes.

    +
+

Currently Base class implements smart pointer on a vtkObjectBase +instance and several methods to Get/Set this pointer. By default each +ancestor class initializes this pointer with help of New() method. +This useful for classes what contain static methods. But after this +pointer can be reinitialized from outside what is used when we need +to have access to certain instance.

+

Also Base interface introduces a method IsSame(Base theOther). We +need this method when it is necessary to compare two ParaView objects +in Python process. In fact if we will apply standard operation “==” +then we will compare two wrapper instances instead of ParaView +objects instances. So, method IsSame(Base theOther) checks if two +wrappers refer to the same ParaView instance or not.

+

GUI events queue

+

Some calls of server manager API functions cause a modification of +GUI state: creation of new widgets, update of widgets state, +visualization of presentable objects in viewers. In our case we have +two different processes: Python console and PARAVIS GUI. At the same +moment the Python console “manages” PARAVIS GUI with help of +server manager API functions calls. So, for correct performance of +Python scripts the calls of Python commands have to be synchronized +with PARAVIS GUI events queue.

+

For this purposes all calls to server manager API from servant are +additionally wrapped by event classes. Therefore implementation of +servants methods accords to following general template:

+
    +
  1. Get an encapsulated pointer on VTK object instance.

    +
  2. Create a special event instance for target function call.

    +
  3. Launch event and wait while it returns.

    +
  4. Get result from event (if result is supposed).

    +
  5. Return this result as result of servant method.

    +
+

For example:

+

Class vtkSMProxyManager has a method GetProxy. This method +implemented in corresponded servant class as following:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

#

+
+

Code

+
+

Remarks

+
+

1

+
+

//C++: + vtkSMProxy *GetProxy (const char *groupname, const char *name);

+
+


+

+
+

2

+
+

struct + CreateEventName(GetProxy_0): public SALOME_Event

+
+

Generation + of unique event class name with help of a special macros

+
+

3

+
+

{

+
+


+

+
+

4

+
+

typedef + ::vtkSMProxy* TResult;

+
+


+

+
+

5

+
+

TResult + myResult;

+
+

Definition + of the return type

+
+

6

+
+

typedef + ::vtkSMProxyManager* TObj;

+
+


+

+
+

7

+
+

TObj + myObj;

+
+

Definition + of parameters

+
+

8

+
+

typedef + char* TParam0;

+
+


+

+
+

9

+
+

TParam0 + myParam0;

+
+


+

+
+

10

+
+

typedef + char* TParam1;

+
+


+

+
+

11

+
+

TParam1 + myParam1;

+
+


+

+
+

12

+
+


+

+
+


+

+
+

13

+
+

CreateEventName(GetProxy_0)(TObj + theObj, TParam0 theParam0, TParam1 theParam1):

+
+

Constructor + of event. Defines object instance and necessary parameters

+
+

14

+
+

myObj(theObj), + myParam0(theParam0), myParam1(theParam1)

+
+


+

+
+

15

+
+

{ + }

+
+


+

+
+

16

+
+


+

+
+


+

+
+

17

+
+

virtual + void Execute()

+
+

Execution + method.

+
+

18

+
+

{

+
+


+

+
+

19

+
+

myResult + = myObj->GetProxy(myParam0, myParam1);

+
+

Call + of target method

+
+

20

+
+

}

+
+


+

+
+

21

+
+

};

+
+


+

+
+

22

+
+

//

+
+


+

+
+

23

+
+

PARAVIS_Base_ptr + vtkSMProxyManager_i::GetProxy_0 (const char *temp0, const char + *temp1) {

+
+

Implementation + of servant method

+
+

24

+
+

try + {

+
+


+

+
+

25

+
+

char + *c_temp0 = CORBA::string_dup(temp0);

+
+

Getting + parameters

+
+

26

+
+

char + *c_temp1 = CORBA::string_dup(temp1);

+
+


+

+
+

27

+
+

::vtkSMProxy* + avtkSMProxy = (getVTKObject() != NULL) ? ProcessEvent(new + CreateEventName(GetProxy_0)((::vtkSMProxyManager*)getVTKObject(), + c_temp0 , c_temp1)):NULL;

+
+

If + wrapped object is defined then create event and launch it. Finally + it will return result.

+
+

28

+
+


+

+
+


+

+
+

29

+
+

if(avtkSMProxy + == NULL) {

+
+


+

+
+

30

+
+

return + PARAVIS::vtkSMProxy::_nil();

+
+


+

+
+

31

+
+

}

+
+


+

+
+

32

+
+

PARAVIS_Base_i* + aPtr = ::CreateInstance(avtkSMProxy, + avtkSMProxy->GetClassName());

+
+

Create + a wrapper (servant) class according to class name of result object

+
+

33

+
+

aPtr->Init(avtkSMProxy);

+
+

Initialize + the internal pointer of wrapper class by result

+
+

34

+
+

return + aPtr->_this();

+
+

Return + wrapper instance as result

+
+

35

+
+

} + catch(...) {

+
+


+

+
+

36

+
+

MESSAGE("GetProxy + - Unknown exception was occurred!!!");

+
+


+

+
+

37

+
+

return + PARAVIS::vtkSMProxy::_nil();

+
+


+

+
+

38

+
+

}

+
+


+

+
+

39

+
+

}

+
+


+

+
+


+

+

Overloaded methods definition

+

Classes of ParaView server manager API have overloaded methods. As +it is mentioned above description of IDL interface prohibits using of +the same name for various methods even they have different +parameters. To avoid this limitation we have to add index to name in +each appearance of overloaded method. But at Python script level it +is necessary to avoid using of function names with indexes. It is +necessary to provide possibility to use methods as they was defined +in API of corresponded class.

+

For tis purposes we redefined standard IDL to Python wrapping in +order to add a function which has a name of overloaded method and +accepts any parameters. This function analyzes input parameters and +selects what function (with which index) it has to be called.

+

For example:

+

vtkObject class contains definition of overloaded functions:

+

void RemoveObservers +(unsigned long event);

+

void RemoveObservers +(const char *event);

+


+

+

In IDL interface these function will be +defined as:

+

void _RemoveObservers_0 +(in long temp0);

+

void _RemoveObservers_1 +(in string temp0);

+


+

+

These functions +will be wrapped by standard IDL to Python wrapper as it is (with +indexes). But we need to call this function in Python as they were +defined in vtkObject definition – by name “RemoveObservers”. +For this purposes we modify IDL to Python wrapper in order to add the +following function:

+

def +RemoveObservers(self, *args):

+

if len(args) == 1 and +(type(args[0]) in [IntType, LongType]):

+

return +self.RemoveObservers_0(*args)

+

if len(args) == 1 and +(type(args[0]) in [StringType]):

+

return +self.RemoveObservers_1(*args)

+

print 'Warning: The +corresponding method of RemoveObservers group is not found for ' + +str(args)

+


+

+

After this we can use function +RemoveObserves in Python as it was defined without indexes.

+

Creation of objects in Python

+

Creation of CORBA object on client side is not so trivial as +usually. When client requests a creation of object then it has to be +created: +

+
    +
  • CORBA client object instance on client side, +

    +
  • CORBA servant instance on server side +

    +
  • and both of them are connected to each other across CORBA + interface. +

    +
+

More simplest way is to request an +object from PARAVIS server interface PARAVIS_Gen. For this +purposes a method CreateClass function in PARAVIS_Gen +interface is defined. Also there is a function GetClassesList +which returns list of names of extracted classes. Both these methods +let to define a set of functions which looks like an object +constructor for all extracted classes. +

+

These definitions done in paravis.py +module with help of createConstructors function. Result of this +function is a set of functions which looks like vtkClassName(). These +functions return an object instance which wraps a pointer on +requested class vtkClassName instance with corresponded API.

+

For example call in Python console

+

> a = +vtkSMProxyManager()

+

returns an instance of +PARAVIS_Gen_vtkSMProxyManager object on client side which implements +all methods of vtkSMProxyManager class readdressing them to +incapsulated vtkSMProxyManager instance on server side.

+

servermanager.py and simple.py

+

In ParaView Python API is defined +with help of two modules servermanager.py and simple.py. PARAVIS has +corresponded modules paravisSM.py and pvsimple.py. Because of actions +described above we got a set of Python interfaces which is very close +to original Python API of ParaView. So, PARAVIS Python modules have +fiew modifications in comparison to original ones. These +modifications mainly related to:

+
    +
  1. Already mentioned problem with + “==” operation to wrapper classes.

    +
  2. Impossibility to use observers.

    +
  3. Reimplementation of hidden code + existing in ParaView which is called in Python console on its + creation.

    +
  4. Providing access to Trace + functionality.

    +
+

Trace functionality

+

Trace functionality in PARAVIS module is defined in GUI of module +using already existing Python functions in ParaView.

+

Because this trace functionality is used for “Dump Study” +functionality defined in SALOME then tracing is started automatically +on loading of PARAVIS module and registers all actions during whole +session. In case if there are no necessity tracing can be switched +off in preferences dialog box. But it is necessary to take into +account that dumping of study can't be done for PARAVIS module in +this case.

+

To check the trace content there are two functions defined in +pvsimple.py module and accessible in SALOME Python console:

+
    +
  • PrintTrace() - this function prints trace directly to Python + console

    +
  • SaveTrace(fileName) – this function outputs trace into disk + file according to given name.

    +
+

Connection with other SALOME modules

+

According to SALOME general architecture each module independs +from other modules by default. In general case adding of module to +module dependency can be caused by necessity to transfer some data +from one module to another. In this case a module consumer has to +“know” about API of module supplier what is going to be used. If +this API is not defined on a general module level then we have to use +direct connection to module object instance what implements a +necessary API.

+

In general algorithm of connected to a module-supplier API on a +module-consumer side looks like following:

+
    +
  1. Find and load a module-supplier component CORBA object from + active study.

    +
  2. Get a module-supplier engine from the component.

    +
  3. Using of the engine to get necessary data.

    +
+ + \ No newline at end of file diff --git a/doc/GeneralArchitecture.odt b/doc/GeneralArchitecture.odt deleted file mode 100644 index 3224fb6bec632185181f2cdb7c3646351f5ccb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36089 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 diff --git a/doc/GeneralArchitecture_html_m4ed0a034.gif b/doc/GeneralArchitecture_html_m4ed0a034.gif new file mode 100644 index 0000000000000000000000000000000000000000..7bc987da6c33610b2b28af1e65a458f5bf8bd5d6 GIT binary patch literal 26756 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

LsO2)3r$VQqeOPD+9#$ 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 literal 0 HcmV?d00001 diff --git a/doc/UserDocumentation.html b/doc/UserDocumentation.html new file mode 100644 index 00000000..18b08d89 --- /dev/null +++ b/doc/UserDocumentation.html @@ -0,0 +1,177 @@ + + + + + + + + + + +

PARAVIS development

+

PARAVIS user documentation

+

1.Introduction

+

2.Building +environment

+

3.VTK +library

+

4.Building +of PARAVIS

+

5.Starting +SALOME with PARAVIS

+

6.Commands +accessible in Python console

+

7.Trace +management

+

8.PARAVIS +GUI specific

+

Introduction

+

This document describes features of +ParaView Python extractor using in PARAVIS module of SALOME platform. +In general building of PARAVIEW module is not too much differ from +usual process of any other SALOME module building, and result Python +API extracted for using in SALOME Python console is similar to the +server manager API of ParaView. But there are some features what is +desirable to understand for effective using of extractor.

+

Building environment

+

In addition to +standard SALOME environment following environment variables has to be +defined for PARAVIS building and testing:

+
    +
  1. PVHOME – + points to installation directory of ParaView.

    +
  2. PVVERSION + – defines a number of installed ParaView version.

    +
  3. PATH="${PVHOME}/bin:${PATH}"

    +
  4. LD_LIBRARY_PATH=”${PVHOME}/bin:${PVHOME}/lib/paraview-${PVVERSION}:${LD_LIBRARY_PATH}"

    +
  5. PYTHONPATH="${PVHOME}/bin:${PVHOME}/lib/paraview-${PVVERSION}:${PYTHONPATH}"

    +
  6. TESTDIR – + points to a directory which contains test script files. Usually it + is PARAVIS_SRC/test.

    +
  7. PVDATA – + points to ParaViewData directory.

    +
+

Also it is +necessary to check that PARAVIS_SRC directory contains following +files and they are up-to-date:

+
    +
  1. src/Paraview/lex.yy.c

    +
  2. src/Paraview/vtkParse.tab.c

    +
  3. src/Paraview/vtkParse.h

    +
+

VTK library

+

SALOME already +uses VTK library for visualization and post-processing purposes. +PARAVIS also uses VTK library supplied with ParaView. In order to +avoid problem with using of different versions of VTK library in +different components of SALOME platform it is necessary to use the +same version supplied with ParaView for all components and modules of +SALOME. +

+

For this +purposes a new option “--with-paraview” has been defined for +configure script. This option configures building procedure to use +VTK from ParaView. It means that GUI package and all modules has to +be configured with this option.

+

Building of PARAVIS

+


+

+
    +
  1. + Call build_configure + script in sources directory: +

    +

    + > + build configure

    +
  2. Launch configure script from a build directory. +

    +

    > ../PARAVIS_SRC/configure --prefix=$PARAVIS_ROOT_DIR

    +
  3. Call make command in build directory. +

    +

    > make

    +
  4. + Call + make install command + in build directory. +

    +

    + > make + install

    +
+

+Starting +SALOME with PARAVIS

+

> runSalome –modules="PARAVIS"

+

If it is necessary then other SALOME modules can be added to +“modules” list separated by comma.

+

Commands +accessible in Python console

+

Loading ParaView Python API for PARAVIS can be done with help of +command:

+

> from pvsimple import *

+

This command makes accessible the same Python API what provided by +simple.py module in ParaView (see ParaView documentation). +

+

Trace management

+

Last version of ParaView is supplied with trace functionality. +PARAVIS also supports this feature. But in contrary to ParaView, +which can start/stop trace in any moment, in PARAVIS trace is +activating or deactivating for whole session.

+

Trace functionality can be switched on/off in SALOME preferences +dialog box in PARAVIS tab (main menu | Preferences...). It contains +check box “Deactivate Trace”. By default the trace is activated. +Change of check box state makes effect only for next session.

+

User can get the trace with help of two commands (after pvsimple +import):

+
    +
  1. PrintTrace() - prints the trace content directly into Python + console window.

    +
  2. SaveTrace(fileName) - saves the trace into a given disk file.

    +
+

Also trace is using for “Dump Study” functionality. But if the +tracing is switched off then “Dump Study” doesn't saves PARAVIS +module state.

+

SALOME study save

+

On SALOME study saving PARAVIS module data is also saved in the +study. This data is saved in form of ParaView state file. ParaView +state file could have references on external files imported during +PARAVIS working session. These referenced files can be saved with the +current study depending on preference “Paraview state saving type” +defined in PARAVIS preferences dialog box. This preference can have +three possible state:

+
    +
  1. “Save referenced files only for built-in server”. In case + if this option is active then referenced files will be saved in + study together with ParaView state only if in PARAVIS was used + built-in ParaView server. In case of remote ParaView server the + state will be saved as it is without referenced files.

    +
  2. “Always save referenced files if they are accessible”. In + this case referenced files will be saved with ParaView state for any + type of ParaView server but only in case if they are accessible + across local file system.

    +
  3. “Never save referenced files”. In this case referenced + files will be never saved with ParaView state.

    +
+

It is necessary to be aware that if referenced files are not saved +in study then there is no guarantee that the saved study will be +opened correctly on other station or if the referenced files will be +moved or deleted.

+

PARAVIS GUI specific

+

In fact +PARAVIS is a ParaView GUI integrated into SALOME environment. General +architecture of ParaView is very different from general architecture +of SALOME. If SALOME is an application which is able to open several +documents (studies) within one application session because it has +multi-document architecture, then ParaView has a single document +architecture what means that it can have only one document (data +structure) opened within one session.

+

This leads to +the fact that PARAVIS module can be opened only once within SALOME +application session. It can be opened only in a first desktop +appeared after SALOME launch. Other desktops, even they opened with +study containing PARAVIS data, can not load PARAVIS module.

+



+

+ + \ No newline at end of file diff --git a/doc/UserDocumentation.odt b/doc/UserDocumentation.odt deleted file mode 100644 index 46743f7197b16a4575b42cb20566079a1849a05f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27984 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 b>|X{0MH!fv8iasAfB6JKLqIfI{5twyuHrt1 diff --git a/doc/salome/Makefile.am b/doc/salome/CMakeLists.txt similarity index 57% rename from doc/salome/Makefile.am rename to doc/salome/CMakeLists.txt index 8e1c99a6..d361b5b7 100644 --- a/doc/salome/Makefile.am +++ b/doc/salome/CMakeLists.txt @@ -1,3 +1,15 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + # PARAVIS : ParaView wrapper SALOME module # # Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE @@ -28,12 +40,22 @@ # $Header$ # -SUBDIRS = gui -SUBDIRSGUI = gui +SET(SUBDIRS + gui +) +SET(SUBDIRSGUI + gui +) + +# dev_docs: +# @@SETX@; for d in $(SUBDIRSGUI); do (cd $$d && $(MAKE) $@) || exit 1; done; + +# docs: dev_docs -dev_docs: - @@SETX@; for d in $(SUBDIRSGUI); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done; -docs: dev_docs + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + diff --git a/doc/salome/gui/CMakeLists.txt b/doc/salome/gui/CMakeLists.txt new file mode 100644 index 00000000..4926eb87 --- /dev/null +++ b/doc/salome/gui/CMakeLists.txt @@ -0,0 +1,79 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# PARAVIS : ParaView wrapper SALOME module +# +# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Margarita KARPUNINA (OCN) +# Date : 05/12/2008 +# $Header$ +# + +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(EXTRA_DIST + ${EXTRA_DIST} + images + static +) + +# dev_docs: doxyfile +# echo "Running doxygen in directory: "`pwd`; $(DOXYGEN) $<; + +# clean-local: +# -rm -fr PARAVIS doxygen.bak + +# install-data-local: +# if test -d PARAVIS; then $(INSTALL) -d $(DESTDIR)$(docdir)/gui ; cp -rp PARAVIS $(DESTDIR)$(docdir)/gui ; fi; + +# uninstall-local: +# rm -rf $(DESTDIR)$(docdir)/gui/PARAVIS + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/doxyfile.in) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/doxyfile) + + + MESSAGE(STATUS "Creation of ${output}") + CONFIGURE_FILE(${input} ${output}) + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + diff --git a/getwrapclasses.py b/getwrapclasses.py index db2969d9..41934659 100644 --- a/getwrapclasses.py +++ b/getwrapclasses.py @@ -1,4 +1,4 @@ -import paraview, os +import paraview, os, sys import string import re @@ -24,17 +24,13 @@ for a in l2: if (a not in l1) and a.startswith("vtk"): classeslistvtk.append(a) -pvhome = os.environ.get('PVHOME') -pvversion = os.environ.get('PVVERSION') -wrap_dir="include/paraview-"+pvversion - dic=dict(); pv_classes_new=classeslistsm while len(pv_classes_new): pv_classes_cur=pv_classes_new pv_classes_new=[] for c in pv_classes_cur: - filename=pvhome+"/"+wrap_dir+"/"+c+".h" + filename=sys.argv[1]+"/"+c+".h" if os.path.isfile(filename): c_new=[] f=open(filename) @@ -89,90 +85,22 @@ def collect_dic(cc): pv_classes_sort=collect_dic(dic.keys()) -awidl='WRAP_IDL = ' -awsk='WRAP_SK_FILES = ' -awhh='WRAP_IDL_I_HH = ' -awcc='WRAP_IDL_I_CC = ' - -fprefix='PARAVIS_Gen_' -fidl='.idl' -fsk='SK.cc' -fhh='_i.hh' -fcc='_i.cc' - -idl_am=open('idl/wrap.am','w') -idl_i_am=open('src/PVGUI/wrap.am','w') - -wrap_h=open('idl/vtkWrapIDL.h','w') -wrap_h.write('const char* wrapped_classes[] = {\n') - -wrap_cxx=open('src/PVGUI/PARAVIS_CreateClass.cxx','w') -wrap_cxx.write('#include \n') -wrap_cxx.write('#include \n') -wrap_cxx.write('#include "PARAVIS_Gen_i.hh"\n') +wf_str="" +if(os.path.exists('wrapfiles.txt')): + wf_txt=open('wrapfiles.txt','r') + strs=wf_txt.readlines() + wf_txt.close() + for s in strs: + wf_str+=s +str="" for c in pv_classes_sort: - widl=fprefix+c+fidl - wsk=fprefix+c+fsk - whh=fprefix+c+fhh - wcc=fprefix+c+fcc - awidl+=' ' + widl - awsk+=' ' + wsk - awhh+=' ' + whh - awcc+=' ' + wcc - - idl_am.write(widl+': vtkWrapIDL') - for cc in dic[c][1]: - idl_am.write(' '+fprefix+cc+fidl) - idl_am.write('\n') - idl_am.write('\t@./vtkWrapIDL '+pvhome+'/'+wrap_dir+'/'+c+'.h $(top_srcdir)/idl/hints 0 $@\n') - idl_am.write('\n') - - - idl_i_am.write(whh+': vtkWrapIDL_HH') + str+=c for cc in dic[c][1]: - idl_i_am.write(' '+fprefix+cc+fhh) - idl_i_am.write('\n') - idl_i_am.write('\t@./vtkWrapIDL_HH '+pvhome+'/'+wrap_dir+'/'+c+'.h $(top_srcdir)/idl/hints 0 $@\n') - idl_i_am.write('\n') - - idl_i_am.write(wcc+': vtkWrapIDL_CC $(WRAP_IDL_I_HH)') - for cc in dic[c][1]: - idl_i_am.write(' '+fprefix+cc+fcc) - idl_i_am.write('\n') - idl_i_am.write('\t@./vtkWrapIDL_CC '+pvhome+'/'+wrap_dir+'/'+c+'.h $(top_srcdir)/idl/hints 0 $@\n') - idl_i_am.write('\n') - - wrap_h.write('"'+c+'",\n') - - wrap_cxx.write('#include "'+fprefix+c+fhh+'"\n') - -idl_am.write(awidl+'\n') -idl_am.write('\n') -idl_am.write(awsk+'\n') - -idl_i_am.write(awhh+'\n') -idl_i_am.write('\n') -idl_i_am.write(awcc+'\n') -idl_i_am.write('\n') -idl_i_am.write('BUILT_SOURCES = $(WRAP_IDL_I_HH) $(WRAP_IDL_I_CC)\n') - -wrap_h.write('""\n};\n') - -wrap_cxx.write('\n') -wrap_cxx.write('PARAVIS::PARAVIS_Base_i* CreateInstance(::vtkObjectBase* Inst, const QString& theClassName)\n') -wrap_cxx.write('{\n') -for i in range(len(pv_classes_sort)-1,-1,-1): - c=pv_classes_sort[i] - wrap_cxx.write(' if(theClassName == "'+c+'" || (Inst != NULL && Inst->IsA("'+c+'")))\n') - wrap_cxx.write(' return new PARAVIS::'+c+'_i();\n') -wrap_cxx.write('\n') -wrap_cxx.write(' cerr << "The class " << theClassName.toStdString() << " is not created!" << endl;\n') -wrap_cxx.write(' return new PARAVIS::PARAVIS_Base_i();\n') -wrap_cxx.write('}\n') - -idl_am.close() -idl_i_am.close() -wrap_h.close() -wrap_cxx.close() + str+=' '+cc + str+='\n' +if(str!=wf_str): + wf_txt=open('wrapfiles.txt','w') + wf_txt.write(str) + wf_txt.close() diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt new file mode 100644 index 00000000..c0535dd4 --- /dev/null +++ b/idl/CMakeLists.txt @@ -0,0 +1,665 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# This Makefile is responsible of generating the client and server +# implementation of IDL interfaces for both C++ and python usage. +# The building process of the C++ files is in charge of each source +# package and then is not manage here. +# +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +#Executable +SET(bin_PROGRAMS + vtkWrapIDL +) + +# vtkWrapIDL.h: +# @$(srcdir)/create_header.sh $(top_srcdir) + +# $(srcdir)/vtkWrapIDL.c: vtkWrapIDL.h; + +SET(dist_vtkWrapIDL_SOURCES + ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParse.tab.c + ${CMAKE_CURRENT_SOURCE_DIR}/vtkWrapIDL.c +) + +SET(vtkWrapIDL_CPPFLAGS + -I${CMAKE_SOURCE_DIR}/src/ParaView + -I${CMAKE_BINARY_DIR}/idl + ${PARAVIEW_INCLUDES} + ${VTK_INCLUDES} +) + +# hints: $(PVHOME)/lib/paraview-$(PVVERSION)/hints $(srcdir)/hints_paravis +# @$(srcdir)/create_hints.sh $(PVHOME)/lib/paraview-$(PVVERSION) + +# $(srcdir)/wrap.am: $(top_srcdir)/wrapfiles.txt +# @cd $(srcdir) && $(srcdir)/create_wrap.sh + +# include $(srcdir)/wrap.am +INCLUDE(wrap.cmake) + +SET(BASEIDL_FILES + PARAVIS_Gen_Types.idl + PARAVIS_Gen.idl +) +SET(BASEIDL_SK_FILES + PARAVIS_Gen_TypesSK.cc + PARAVIS_GenSK.cc +) + +SET(IDL_FILES + ${BASEIDL_FILES} + ${WRAP_IDL} +) + +# This variable defines the files to be installed +SET(dist_salomeidl_DATA + ${IDL_FILES} +) + +# PARAVIS idl common library +SET(lib_LTLIBRARIES + libSalomeIDLPARAVIS.la +) + +# Sources built from idl files +SET(nodist_libSalomeIDLPARAVIS_la_SOURCES + ${BASEIDL_SK_FILES} + ${WRAP_SK_FILES} +) + +# header files must be exported: other modules have to use this library +SET(nodist_salomeinclude_HEADERS +# ${BASEIDL_FILES:%.idl=%.hh} +# ${WRAP_IDL:%.idl=%.hh} +) + +SET(libSalomeIDLPARAVIS_la_CPPFLAGS + -I${CMAKE_BINARY_DIR}/salome_adm/unix + -I${CMAKE_BINARY_DIR}/idl + ${CORBA_CXXFLAGS} + ${CORBA_INCLUDES} + ${KERNEL_CXXFLAGS} +) +SET(VERSION_INFO 0.0.0) +SET(SOVERSION_INFO 0) +SET(libSalomeIDLPARAVIS_la_LDFLAGS + -no-undefined +) +SET(libSalomeIDLPARAVIS_la_LIBADD + ${CORBA_LIBS} +) + +# These variables defines the building process of CORBA files +SET(OMNIORB_IDL + ${OMNIORB_IDL} +) +SET(OMNIORB_IDLCXXFLAGS + ${OMNIORB_IDLCXXFLAGS} +) +SET(OMNIORB_IDLPYFLAGS + ${OMNIORB_IDLPYFLAGS} + -I${KERNEL_ROOT_DIR}/idl/salome +) +SET(IDLCXXFLAGS + -bcxx + ${IDLCXXFLAGS} + -I${CMAKE_CURRENT_SOURCE_DIR} + -I${KERNEL_ROOT_DIR}/idl/salome + -I${CMAKE_BINARY_DIR}/salome_adm/unix +) +SET(IDLPYFLAGS + -bpythonIDL + -nf + -p${CMAKE_CURRENT_SOURCE_DIR} + -I${CMAKE_CURRENT_SOURCE_DIR} + -I${KERNEL_ROOT_DIR}/idl/salome +) + +# potential problem on parallel make on the following - multiple outputs +SET(SUFFIXES + .idl + .hh + SK.cc +) +# .idlSK.cc: +# $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< +# .idl.hh: +# $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< + +# install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%) $(WRAP_IDL) +# $(INSTALL) -d $(DESTDIR)$(salomepythondir) +# ls $^ | while read file; do $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(DESTDIR)$(salomepythondir) $$file ; done + +# uninstall-local removes too much, but it works in distcheck +# uninstall-local: +# rm -rf $(DESTDIR)$(salomepythondir)/* + +# mostlyclean-local: clean-idls + +# clean-idls: +# @find . \( -name "*.hh" -or -name "*.cc" -or -name ".depidl" -or -name "*.idl" \) -exec rm -f {} \; +# -rm -f hints vtkWrapIDL.h + +# we use cpp to generate dependencies between idl files. +# option x c tells the preprocessor to consider idl as a c file. +# if an idl is modified, all idl dependencies are rebuilt + +# .depidl: $(BASEIDL_FILES) +# @echo "" > $@ +# @for dep in $^ dummy; do if [ $$dep != "dummy" ]; then echo Building dependencies for $$dep; $(CPP) $(C_DEPEND_FLAG) $(C_WRAP_IDL_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome $$dep 2>/dev/null | sed 's/\.o/\SK.cc/' >>$@; fi; done ; + +# -include .depidl + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + + + FOREACH(amname ${lib_LTLIBRARIES}) + + + STRING(REPLACE .la _la amname ${amname}) + + + STRING(LENGTH ${amname} len) + MATH(EXPR newlen "${len}-3") + STRING(SUBSTRING ${amname} 0 ${newlen} name) + + + STRING(REGEX MATCH "^lib" BEGIN_WITH_lib ${name}) + IF(BEGIN_WITH_lib) + STRING(LENGTH ${name} len) + MATH(EXPR newlen "${len}-3") + STRING(SUBSTRING ${name} 3 ${newlen} name) + ENDIF(BEGIN_WITH_lib) + + + STRING(REGEX MATCH "IDL" ISIDL ${name}) + + + IF(ISIDL) + IF(WINDOWS) + SET(type STATIC) + ELSE(WINDOWS) + SET(type SHARED) + ENDIF(WINDOWS) + ELSE(ISIDL) + SET(type SHARED) + ENDIF(ISIDL) + + + SET(srcs) + FOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + GET_FILENAME_COMPONENT(ext ${src} EXT) + IF(ext STREQUAL .f) + IF(src STREQUAL trte.f) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src}) + STRING(REPLACE ".f" ".c" src ${src}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src}) + SET(output ${src}) + ADD_CUSTOM_COMMAND( + OUTPUT ${output} + COMMAND f2c ${input} + MAIN_DEPENDENCY ${input} + ) + ELSE(src STREQUAL trte.f) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src}) + STRING(REPLACE ".f" ".o" src ${src}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src}) + SET(output ${src}) + IF(WINDOWS) + SET(F77 g77) + ELSE(WINDOWS) + SET(F77 gfortran) + ENDIF(WINDOWS) + ADD_CUSTOM_COMMAND( + OUTPUT ${output} + COMMAND ${F77} -c -o ${output} ${input} + MAIN_DEPENDENCY ${input} + ) + ENDIF(src STREQUAL trte.f) + ENDIF(ext STREQUAL .f) + SET(srcs ${srcs} ${src}) + ENDFOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + + + SET(l ${nodist_${amname}_SOURCES} ${UIC_FILES}) + FOREACH(f ${l}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f}) + SET(srcs ${srcs} ${src}) + ENDFOREACH(f ${l}) + + + SET(build_srcs) + SET(l ${nodist_${amname}_SOURCES} ${BUILT_SOURCES}) + FOREACH(f ${l}) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + ELSE(ext STREQUAL .py) + SET(build_srcs ${build_srcs} ${CMAKE_CURRENT_BINARY_DIR}/${f}) + ENDIF(ext STREQUAL .py) + ENDFOREACH(f ${l}) + + + ADD_LIBRARY(${name} ${type} ${srcs}) + + + SET(var) + IF(WINDOWS) + SET(targets) + SET(targets ${targets} SalomeIDLKernel) + SET(targets ${targets} SalomeDS) + SET(targets ${targets} SALOMEDSTest) + SET(targets ${targets} SALOMEDS_Client_exe) + SET(targets ${targets} SalomeIDLGEOM) + SET(targets ${targets} GEOMEngine) + SET(targets ${targets} MEDEngine) + SET(targets ${targets} SMESHEngine) + SET(targets ${targets} SMESH) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(var ${var} -DNOGDI) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(var ${var} -I${dir}) + SET(var ${var} -DF2C_BUILD) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(var ${var} ${AM_CPPFLAGS}) + SET(var ${var} ${AM_CXXFLAGS}) + + + SET(var ${var} ${PLATFORM_CPPFLAGS}) + SET(var ${var} ${PTHREAD_CFLAGS}) + SET(var ${var} ${${amname}_CPPFLAGS}) + SET(var ${var} ${${amname}_CXXFLAGS}) + SET(var ${var} ${${amname}_CFLAGS}) + SET(vars) + IF(WINDOWS) + SET(vars ${vars} -include SALOMEconfig.h) + SET(vars ${vars} -ftemplate-depth-32) + SET(vars ${vars} -fPIC) + SET(vars ${vars} -g) + ENDIF(WINDOWS) + SET(flags) + FOREACH(f ${var}) + FOREACH(v ${vars}) + IF(f STREQUAL v) + SET(f) + ENDIF(f STREQUAL v) + ENDFOREACH(v ${vars}) + SET(flags "${flags} ${f}") + ENDFOREACH(f ${var}) + SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}") + + + SET_TARGET_PROPERTIES(${name} PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO}) + + + SET(libadd) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(libadd ${libadd} ${dir}/LIBF77.lib) + SET(libadd ${libadd} ${dir}/LIBI77.lib) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS}) + FOREACH(lib SALOMEBasics SalomeBatch) + IF(name STREQUAL lib) + SET(libs ${libs} ${PTHREAD_LIBS}) + ENDIF(name STREQUAL lib) + ENDFOREACH(lib SALOMEBasics SalomeBatch) + + + FOREACH(lib ${libs}) + GET_FILENAME_COMPONENT(ext ${lib} EXT) + IF(ext STREQUAL .la) + GET_FILENAME_COMPONENT(lib ${lib} NAME_WE) + STRING(REGEX REPLACE "^lib" "" lib ${lib}) + ENDIF(ext STREQUAL .la) + SET(vars) + SET(vars ${vars} -no-undefined) + SET(vars ${vars} -lvtkWidgets) + IF(WINDOWS) + SET(vars ${vars} -module) + SET(vars ${vars} -Wl,-E) + SET(vars ${vars} -Xlinker) + SET(vars ${vars} -export-dynamic) + SET(vars ${vars} -lm) + SET(vars ${vars} -lboost_thread) + SET(vars ${vars} -lboost_signals) + SET(vars ${vars} -pthread -lpthread -ldl) + ENDIF(WINDOWS) + FOREACH(v ${vars}) + IF(lib STREQUAL v) + SET(lib) + ENDIF(lib STREQUAL v) + ENDFOREACH(v ${vars}) + SET(libadd ${libadd} ${lib}) + ENDFOREACH(lib ${libs}) + TARGET_LINK_LIBRARIES(${name} ${libadd}) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + IF(CMAKE_BUILD_TYPE STREQUAL Debug) + SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT") + ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(DEST lib/salome) + + + IF(BEGIN_WITH_lib) + INSTALL(TARGETS ${name} DESTINATION ${DEST}) + + + ELSE(BEGIN_WITH_lib) + + + IF(WINDOWS) + INSTALL(TARGETS ${name} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.pyd) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}_d.pyd) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(WINDOWS) + GET_TARGET_PROPERTY(version ${name} VERSION) + GET_TARGET_PROPERTY(soversion ${name} SOVERSION) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${version}) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${soversion}) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so) + ENDIF(WINDOWS) + + + ENDIF(BEGIN_WITH_lib) + + + ENDFOREACH(amname ${lib_LTLIBRARIES}) + + + FOREACH(amname ${bin_PROGRAMS} ${check_PROGRAMS}) + + + SET(name "${amname}_exe") + SET(srcs ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + SET(l ${nodist_${amname}_SOURCES}) + FOREACH(f ${l}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f}) + SET(srcs ${srcs} ${src}) + ENDFOREACH(f ${l}) + LIST(LENGTH srcs nb) + IF(nb) + ADD_EXECUTABLE(${name} ${srcs}) + + + SET(var) + IF(WINDOWS) + SET(targets) + SET(targets ${targets} SalomeIDLKernel) + SET(targets ${targets} SalomeDS) + SET(targets ${targets} SALOMEDSTest) + SET(targets ${targets} SALOMEDS_Client_exe) + SET(targets ${targets} SalomeIDLGEOM) + SET(targets ${targets} GEOMEngine) + SET(targets ${targets} MEDEngine) + SET(targets ${targets} SMESHEngine) + SET(targets ${targets} SMESH) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(var ${var} -DNOGDI) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(var ${var} -I${dir}) + SET(var ${var} -DF2C_BUILD) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(var ${var} ${AM_CPPFLAGS}) + SET(var ${var} ${AM_CXXFLAGS}) + + + SET(var ${var} ${PLATFORM_CPPFLAGS}) + SET(var ${var} ${PTHREAD_CFLAGS}) + SET(var ${var} ${${amname}_CPPFLAGS}) + SET(var ${var} ${${amname}_CXXFLAGS}) + SET(var ${var} ${${amname}_CFLAGS}) + SET(vars) + IF(WINDOWS) + SET(vars ${vars} -include SALOMEconfig.h) + SET(vars ${vars} -ftemplate-depth-32) + SET(vars ${vars} -fPIC) + SET(vars ${vars} -g) + ENDIF(WINDOWS) + SET(flags) + FOREACH(f ${var}) + FOREACH(v ${vars}) + IF(f STREQUAL v) + SET(f) + ENDIF(f STREQUAL v) + ENDFOREACH(v ${vars}) + SET(flags "${flags} ${f}") + ENDFOREACH(f ${var}) + SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}") + + + SET(libadd) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(libadd ${libadd} ${dir}/LIBF77.lib) + SET(libadd ${libadd} ${dir}/LIBI77.lib) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS}) + FOREACH(lib SALOMEBasics SalomeBatch) + IF(name STREQUAL lib) + SET(libs ${libs} ${PTHREAD_LIBS}) + ENDIF(name STREQUAL lib) + ENDFOREACH(lib SALOMEBasics SalomeBatch) + + + SET(libs ${libs} ${LDADD}) + + + FOREACH(lib ${libs}) + GET_FILENAME_COMPONENT(ext ${lib} EXT) + IF(ext STREQUAL .la) + GET_FILENAME_COMPONENT(lib ${lib} NAME_WE) + STRING(REGEX REPLACE "^lib" "" lib ${lib}) + ENDIF(ext STREQUAL .la) + SET(vars) + SET(vars ${vars} -no-undefined) + SET(vars ${vars} -lvtkWidgets) + IF(WINDOWS) + SET(vars ${vars} -module) + SET(vars ${vars} -Wl,-E) + SET(vars ${vars} -Xlinker) + SET(vars ${vars} -export-dynamic) + SET(vars ${vars} -lm) + SET(vars ${vars} -lboost_thread) + SET(vars ${vars} -lboost_signals) + SET(vars ${vars} -pthread -lpthread -ldl) + ENDIF(WINDOWS) + FOREACH(v ${vars}) + IF(lib STREQUAL v) + SET(lib) + ENDIF(lib STREQUAL v) + ENDFOREACH(v ${vars}) + SET(libadd ${libadd} ${lib}) + ENDFOREACH(lib ${libs}) + TARGET_LINK_LIBRARIES(${name} ${libadd}) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + IF(CMAKE_BUILD_TYPE STREQUAL Debug) + SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT") + ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(DEST bin/salome) + + + IF(WINDOWS) + INSTALL(TARGETS ${name} DESTINATION ${DEST}) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe DESTINATION ${DEST} RENAME ${amname}.exe) + INSTALL(CODE "FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe)") + ELSE(WINDOWS) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name} DESTINATION ${DEST} PERMISSIONS ${PERMS} RENAME ${amname}) + ENDIF(WINDOWS) + + + ENDIF(nb) + + + ENDFOREACH(amname ${bin_PROGRAMS} ${check_PROGRAMS}) + + + FOREACH(input ${IDL_FILES}) + STRING(REGEX REPLACE ".idl" "" base ${input}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${base}SK.cc) + SET(outputs ${src}) + SET(dynsrc ${CMAKE_CURRENT_BINARY_DIR}/${base}DynSK.cc) + SET(outputs ${outputs} ${dynsrc}) + SET(inc ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh) + SET(outputs ${outputs} ${inc}) + IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${input}) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input}) + ELSE(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${input}) + SET(input ${CMAKE_CURRENT_BINARY_DIR}/${input}) + ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${input}) + SET(flags ${IDLCXXFLAGS} ${OMNIORB_IDLCXXFLAGS}) + STRING(REGEX MATCH "-bcxx" ISBCXX ${flags}) + IF(NOT ISBCXX) + SET(flags -bcxx ${flags}) + ENDIF(NOT ISBCXX) + ADD_CUSTOM_COMMAND( + OUTPUT ${outputs} + COMMAND ${OMNIORB_IDL} ${flags} ${input} + MAIN_DEPENDENCY ${input} + ) + install(FILES ${input} DESTINATION idl/salome) + SET(IDL_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh) + install(FILES ${IDL_HEADER} DESTINATION include/salome) + INSTALL(CODE "SET(IDL_FILE ${input})") + INSTALL(CODE "SET(DIR lib/python${PYTHON_VERSION}/site-packages/salome)") + INSTALL(CODE "SET(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})") + INSTALL(CODE "SET(OMNIORB_IDL_PYTHON ${OMNIORB_IDL_PYTHON})") + # -- + SET(flags) + FOREACH(f ${IDLPYFLAGS}) + SET(flags "${flags} ${f}") + ENDFOREACH(f ${IDLPYFLAGS}) + STRING(REGEX MATCH "-bpython" ISBPYTHON ${flags}) + IF(NOT ISBPYTHON) + SET(flags "-bpython ${flags}") + ENDIF(NOT ISBPYTHON) + SET(IDLPYFLAGS ${flags}) + STRING(REPLACE "\\" "/" IDLPYFLAGS ${IDLPYFLAGS}) + INSTALL(CODE "SET(IDLPYFLAGS ${IDLPYFLAGS})") + # -- + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_python_from_idl.cmake) + + + ENDFOREACH(input ${IDL_FILES}) + diff --git a/idl/Makefile.am b/idl/Makefile.am deleted file mode 100644 index 875b9370..00000000 --- a/idl/Makefile.am +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# This Makefile is responsible of generating the client and server -# implementation of IDL interfaces for both C++ and python usage. -# The building process of the C++ files is in charge of each source -# package and then is not manage here. -# -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -#Executable -bin_PROGRAMS = vtkWrapIDL - -dist_vtkWrapIDL_SOURCES = ${PVHOME}/src/vtkParse.tab.c vtkWrapIDL.c - -vtkWrapIDL_CPPFLAGS = \ - ${PARAVIEW_INCLUDES} - -include $(srcdir)/wrap.am - -BASEIDL_FILES = PARAVIS_Gen_Types.idl PARAVIS_Gen.idl -BASEIDL_SK_FILES= PARAVIS_Gen_TypesSK.cc PARAVIS_GenSK.cc - -# This variable defines the files to be installed -dist_salomeidl_DATA = $(BASEIDL_FILES) $(WRAP_IDL) - -# PARAVIS idl common library -lib_LTLIBRARIES = libSalomeIDLPARAVIS.la - -# Sources built from idl files -nodist_libSalomeIDLPARAVIS_la_SOURCES = $(BASEIDL_SK_FILES) $(WRAP_SK_FILES) - -# header files must be exported: other modules have to use this library -nodist_salomeinclude_HEADERS = $(BASEIDL_FILES:%.idl=%.hh) $(WRAP_IDL:%.idl=%.hh) - -libSalomeIDLPARAVIS_la_CPPFLAGS = \ - -I$(top_builddir)/salome_adm/unix \ - -I$(top_builddir)/idl \ - @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @KERNEL_CXXFLAGS@ -libSalomeIDLPARAVIS_la_LDFLAGS = -no-undefined -version-info=0:0:0 -libSalomeIDLPARAVIS_la_LIBADD = @CORBA_LIBS@ - -# These variables defines the building process of CORBA files -OMNIORB_IDL = @OMNIORB_IDL@ -OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@ -OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(KERNEL_ROOT_DIR)/idl/salome -IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome -I$(top_builddir)/salome_adm/unix -IDLPYFLAGS = -bpythonIDL -p$(srcdir) -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome - -# potential problem on parallel make on the following - multiple outputs -SUFFIXES = .idl .hh SK.cc -.idlSK.cc: - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -.idl.hh: - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< - -install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%) $(WRAP_IDL) - $(INSTALL) -d $(DESTDIR)$(salomepythondir) - ls $^ | while read file; do \ - $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(DESTDIR)$(salomepythondir) $$file ; \ - done - -# uninstall-local removes too much, but it works in distcheck -uninstall-local: - rm -rf $(DESTDIR)$(salomepythondir)/* - -mostlyclean-local: clean-idls - -clean-idls: - @find . \( -name "*.hh" -or -name "*.cc" -or -name ".depidl" -or -name "*.idl" \) -exec rm -f {} \; - -# we use cpp to generate dependencies between idl files. -# option x c tells the preprocessor to consider idl as a c file. -# if an idl is modified, all idl dependencies are rebuilt - -.depidl: $(BASEIDL_FILES) - @echo "" > $@ - @for dep in $^ dummy; do \ - if [ $$dep != "dummy" ]; then \ - echo Building dependencies for $$dep; \ - $(CPP) $(C_DEPEND_FLAG) $(C_WRAP_IDL_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome $$dep 2>/dev/null | \ - sed 's/\.o/\SK.cc/' >>$@; \ - fi; \ - done ; - --include .depidl diff --git a/idl/create_header.sh b/idl/create_header.sh new file mode 100755 index 00000000..27e74c2d --- /dev/null +++ b/idl/create_header.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +file=vtkWrapIDL.h +wfile=$1/wrapfiles.txt + +echo 'const char* wrapped_classes[] = {' > $file +awk '{print "\""$1"\",";}' $wfile >> $file +echo '""' >> $file +echo '};' >> $file diff --git a/idl/create_hints.sh b/idl/create_hints.sh new file mode 100755 index 00000000..c9e65b05 --- /dev/null +++ b/idl/create_hints.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` + +cp $1/hints hints +cat ${CONF_DIR}/hints_paravis >> hints diff --git a/idl/wrap.cmake b/idl/wrap.cmake new file mode 100755 index 00000000..b21aab7f --- /dev/null +++ b/idl/wrap.cmake @@ -0,0 +1,57 @@ +ADD_CUSTOM_COMMAND( + OUTPUT vtkWrapIDL.h + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create_header.sh ${CMAKE_BINARY_DIR} + DEPENDS ${CMAKE_BINARY_DIR}/wrapfiles.txt +) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/vtkWrapIDL.c + DEPENDS vtkWrapIDL.h +) + +ADD_CUSTOM_COMMAND( + OUTPUT hints + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create_hints.sh ${PARAVIEW_LIBRARY_DIRS} + DEPENDS ${PARAVIEW_LIBRARY_DIRS}/hints ${CMAKE_CURRENT_SOURCE_DIR}/hints_paravis +) + +SET(WRAP_IDL) +SET(WRAP_SK_FILES) + +IF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt) + EXECUTE_PROCESS( + COMMAND cat ${CMAKE_BINARY_DIR}/wrapfiles.txt + OUTPUT_VARIABLE WRAP_LIST_FULL + ) + + STRING(REGEX MATCHALL "[^\n]+" WRAP_LIST_REG ${WRAP_LIST_FULL}) + FOREACH(STR ${WRAP_LIST_REG}) + + SEPARATE_ARGUMENTS(STR) + LIST(LENGTH STR WRAP_LEN) + SET(DEP) + + LIST(GET STR 0 VAL) + + IF(WRAP_LEN GREATER 1) + MATH(EXPR WRAP_LEN1 "${WRAP_LEN} - 1" ) + + FOREACH(IND RANGE 1 ${WRAP_LEN1}) + LIST(GET STR ${IND} DEP_VAL) + SET(DEP ${DEP} PARAVIS_Gen_${DEP_VAL}.idl) + ENDFOREACH(IND RANGE 1 ${WRAP_LEN1}) + + ENDIF(WRAP_LEN GREATER 1) + + SET(WRAP_IDL ${WRAP_IDL} PARAVIS_Gen_${VAL}.idl) + SET(WRAP_SK_FILES ${WRAP_SK_FILES} PARAVIS_Gen_${VAL}SK.cc) + ADD_CUSTOM_COMMAND( + OUTPUT PARAVIS_Gen_${VAL}.idl + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_exe ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h hints 0 PARAVIS_Gen_${VAL}.idl + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_exe ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h hints ${DEP} + ) + + ENDFOREACH(STR ${WRAP_LIST_REG}) +ENDIF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt) + +ADD_CUSTOM_TARGET(generate_idl ALL DEPENDS ${CMAKE_BINARY_DIR}/wrapfiles.txt vtkWrapIDL.h ${CMAKE_CURRENT_SOURCE_DIR}/vtkWrapIDL.c hints ${WRAP_IDL}) diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt new file mode 100644 index 00000000..aebb8c10 --- /dev/null +++ b/resources/CMakeLists.txt @@ -0,0 +1,219 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Patrick GOLDBRONN (CEA) +# Date : 28/06/2001 +# Modified by : Alexander BORODIN (OCN) - autotools usage + +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(dist_salomeres_DATA + LightApp.xml + SalomeApp.xml + pqAppIcon22.png + pqAppIcon16.png + ParaViewFilters.xml + ParaViewReaders.xml + ParaViewSources.xml + ParaViewWriters.xml +) + +SET(nodist_salomeres_SCRIPTS + PARAVISCatalog.xml +) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/PARAVISCatalog.xml.in) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/PARAVISCatalog.xml) + + + MESSAGE(STATUS "Creation of ${output}") + CONFIGURE_FILE(${input} ${output}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/SalomeApp.xml.in) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/SalomeApp.xml) + + + MESSAGE(STATUS "Creation of ${output}") + CONFIGURE_FILE(${input} ${output}) + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + +FOREACH(f ${nodist_salomeres_SCRIPTS}) + + SET(DEST share/salome/resources/paravis) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${nodist_salomeres_SCRIPTS}) +FOREACH(f ${dist_salomeres_DATA}) + + SET(DEST share/salome/resources/paravis) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${dist_salomeres_DATA}) diff --git a/resources/Makefile.am b/resources/Makefile.am deleted file mode 100644 index 8c062814..00000000 --- a/resources/Makefile.am +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 28/06/2001 -# Modified by : Alexander BORODIN (OCN) - autotools usage - -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -dist_salomeres_DATA = \ - LightApp.xml \ - SalomeApp.xml \ - pqAppIcon22.png \ - pqAppIcon16.png - -nodist_salomeres_SCRIPTS = PARAVISCatalog.xml diff --git a/resources/ParaViewFilters.xml b/resources/ParaViewFilters.xml new file mode 100755 index 00000000..c3d44b7f --- /dev/null +++ b/resources/ParaViewFilters.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/ParaViewReaders.xml b/resources/ParaViewReaders.xml new file mode 100755 index 00000000..7bbb906e --- /dev/null +++ b/resources/ParaViewReaders.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/ParaViewSources.xml b/resources/ParaViewSources.xml new file mode 100755 index 00000000..a2796a11 --- /dev/null +++ b/resources/ParaViewSources.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/ParaViewWriters.xml b/resources/ParaViewWriters.xml new file mode 100755 index 00000000..7e02ed21 --- /dev/null +++ b/resources/ParaViewWriters.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml.in similarity index 81% rename from resources/SalomeApp.xml rename to resources/SalomeApp.xml.in index c44ed959..415a47bc 100644 --- a/resources/SalomeApp.xml +++ b/resources/SalomeApp.xml.in @@ -11,11 +11,11 @@ - +
- +
diff --git a/src/Makefile.am b/src/CMakeLists.txt old mode 100755 new mode 100644 similarity index 53% rename from src/Makefile.am rename to src/CMakeLists.txt index c551160b..f41d7c4b --- a/src/Makefile.am +++ b/src/CMakeLists.txt @@ -1,3 +1,15 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + # Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS # @@ -23,11 +35,28 @@ # Author : (CEA) # Modified by : Alexander BORODIN (OCN) - autotools usage -include $(top_srcdir)/adm_local/unix/make_common_starter.am +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +IF(BUILD_PLUGINS) + SET(SUBDIRS + ENGINE + PVGUI + PV_SWIG + Plugins + ) +ELSE(BUILD_PLUGINS) + SET(SUBDIRS + ENGINE + PVGUI + PV_SWIG + ) +ENDIF(BUILD_PLUGINS) + -if BUILD_PLUGINS - SUBDIRS = ENGINE PVGUI PV_SWIG Plugins -else - SUBDIRS = ENGINE PVGUI PV_SWIG -endif + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + diff --git a/src/ENGINE/CMakeLists.txt b/src/ENGINE/CMakeLists.txt new file mode 100644 index 00000000..07e1e5fd --- /dev/null +++ b/src/ENGINE/CMakeLists.txt @@ -0,0 +1,398 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vitaly Smetannikov +# Module : PARAVIS +# $Header: +# +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(lib_LTLIBRARIES + libPARAVISEngine.la +) + +SET(salomeinclude_HEADERS + PARAVIS_Engine_i.hh +) + +SET(dist_libPARAVISEngine_la_SOURCES + PARAVIS_Engine_i.cc +) + +SET(libPARAVISEngine_la_CPPFLAGS + ${KERNEL_CXXFLAGS} + ${CORBA_CXXFLAGS} + ${CORBA_INCLUDES} + -I${CMAKE_BINARY_DIR}/salome_adm/unix + -I${CMAKE_BINARY_DIR}/idl +) + +SET(libPARAVISEngine_la_LDFLAGS + ${KERNEL_LDFLAGS} + ${SalomeIDLKernel} + ${SalomeNS} + ${SalomeContainer} + ${CORBA_LIBS} + ${CMAKE_BINARY_DIR}/idl/libSalomeIDLPARAVIS.la +) + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + + + FOREACH(amname ${lib_LTLIBRARIES}) + + + STRING(REPLACE .la _la amname ${amname}) + + + STRING(LENGTH ${amname} len) + MATH(EXPR newlen "${len}-3") + STRING(SUBSTRING ${amname} 0 ${newlen} name) + + + STRING(REGEX MATCH "^lib" BEGIN_WITH_lib ${name}) + IF(BEGIN_WITH_lib) + STRING(LENGTH ${name} len) + MATH(EXPR newlen "${len}-3") + STRING(SUBSTRING ${name} 3 ${newlen} name) + ENDIF(BEGIN_WITH_lib) + + + STRING(REGEX MATCH "IDL" ISIDL ${name}) + + + IF(ISIDL) + IF(WINDOWS) + SET(type STATIC) + ELSE(WINDOWS) + SET(type SHARED) + ENDIF(WINDOWS) + ELSE(ISIDL) + SET(type SHARED) + ENDIF(ISIDL) + + + SET(srcs) + FOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + GET_FILENAME_COMPONENT(ext ${src} EXT) + IF(ext STREQUAL .f) + IF(src STREQUAL trte.f) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src}) + STRING(REPLACE ".f" ".c" src ${src}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src}) + SET(output ${src}) + ADD_CUSTOM_COMMAND( + OUTPUT ${output} + COMMAND f2c ${input} + MAIN_DEPENDENCY ${input} + ) + ELSE(src STREQUAL trte.f) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src}) + STRING(REPLACE ".f" ".o" src ${src}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src}) + SET(output ${src}) + IF(WINDOWS) + SET(F77 g77) + ELSE(WINDOWS) + SET(F77 gfortran) + ENDIF(WINDOWS) + ADD_CUSTOM_COMMAND( + OUTPUT ${output} + COMMAND ${F77} -c -o ${output} ${input} + MAIN_DEPENDENCY ${input} + ) + ENDIF(src STREQUAL trte.f) + ENDIF(ext STREQUAL .f) + SET(srcs ${srcs} ${src}) + ENDFOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + + + SET(l ${nodist_${amname}_SOURCES} ${UIC_FILES}) + FOREACH(f ${l}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f}) + SET(srcs ${srcs} ${src}) + ENDFOREACH(f ${l}) + + + SET(build_srcs) + SET(l ${nodist_${amname}_SOURCES} ${BUILT_SOURCES}) + FOREACH(f ${l}) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + ELSE(ext STREQUAL .py) + SET(build_srcs ${build_srcs} ${CMAKE_CURRENT_BINARY_DIR}/${f}) + ENDIF(ext STREQUAL .py) + ENDFOREACH(f ${l}) + + + ADD_LIBRARY(${name} ${type} ${srcs}) + + + SET(var) + IF(WINDOWS) + SET(targets) + SET(targets ${targets} SalomeIDLKernel) + SET(targets ${targets} SalomeDS) + SET(targets ${targets} SALOMEDSTest) + SET(targets ${targets} SALOMEDS_Client_exe) + SET(targets ${targets} SalomeIDLGEOM) + SET(targets ${targets} GEOMEngine) + SET(targets ${targets} MEDEngine) + SET(targets ${targets} SMESHEngine) + SET(targets ${targets} SMESH) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(var ${var} -DNOGDI) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(var ${var} -I${dir}) + SET(var ${var} -DF2C_BUILD) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(var ${var} ${AM_CPPFLAGS}) + SET(var ${var} ${AM_CXXFLAGS}) + + + SET(var ${var} ${PLATFORM_CPPFLAGS}) + SET(var ${var} ${PTHREAD_CFLAGS}) + SET(var ${var} ${${amname}_CPPFLAGS}) + SET(var ${var} ${${amname}_CXXFLAGS}) + SET(var ${var} ${${amname}_CFLAGS}) + SET(vars) + IF(WINDOWS) + SET(vars ${vars} -include SALOMEconfig.h) + SET(vars ${vars} -ftemplate-depth-32) + SET(vars ${vars} -fPIC) + SET(vars ${vars} -g) + ENDIF(WINDOWS) + SET(flags) + FOREACH(f ${var}) + FOREACH(v ${vars}) + IF(f STREQUAL v) + SET(f) + ENDIF(f STREQUAL v) + ENDFOREACH(v ${vars}) + SET(flags "${flags} ${f}") + ENDFOREACH(f ${var}) + SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}") + + + SET_TARGET_PROPERTIES(${name} PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO}) + + + SET(libadd) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(libadd ${libadd} ${dir}/LIBF77.lib) + SET(libadd ${libadd} ${dir}/LIBI77.lib) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS}) + FOREACH(lib SALOMEBasics SalomeBatch) + IF(name STREQUAL lib) + SET(libs ${libs} ${PTHREAD_LIBS}) + ENDIF(name STREQUAL lib) + ENDFOREACH(lib SALOMEBasics SalomeBatch) + + + FOREACH(lib ${libs}) + GET_FILENAME_COMPONENT(ext ${lib} EXT) + IF(ext STREQUAL .la) + GET_FILENAME_COMPONENT(lib ${lib} NAME_WE) + STRING(REGEX REPLACE "^lib" "" lib ${lib}) + ENDIF(ext STREQUAL .la) + SET(vars) + SET(vars ${vars} -no-undefined) + SET(vars ${vars} -lvtkWidgets) + IF(WINDOWS) + SET(vars ${vars} -module) + SET(vars ${vars} -Wl,-E) + SET(vars ${vars} -Xlinker) + SET(vars ${vars} -export-dynamic) + SET(vars ${vars} -lm) + SET(vars ${vars} -lboost_thread) + SET(vars ${vars} -lboost_signals) + SET(vars ${vars} -pthread -lpthread -ldl) + ENDIF(WINDOWS) + FOREACH(v ${vars}) + IF(lib STREQUAL v) + SET(lib) + ENDIF(lib STREQUAL v) + ENDFOREACH(v ${vars}) + SET(libadd ${libadd} ${lib}) + ENDFOREACH(lib ${libs}) + TARGET_LINK_LIBRARIES(${name} ${libadd}) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + IF(CMAKE_BUILD_TYPE STREQUAL Debug) + SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT") + ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(DEST lib/salome) + + + IF(BEGIN_WITH_lib) + INSTALL(TARGETS ${name} DESTINATION ${DEST}) + + + ELSE(BEGIN_WITH_lib) + + + IF(WINDOWS) + INSTALL(TARGETS ${name} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.pyd) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}_d.pyd) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(WINDOWS) + GET_TARGET_PROPERTY(version ${name} VERSION) + GET_TARGET_PROPERTY(soversion ${name} SOVERSION) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${version}) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${soversion}) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so) + ENDIF(WINDOWS) + + + ENDIF(BEGIN_WITH_lib) + + + ENDFOREACH(amname ${lib_LTLIBRARIES}) + +FOREACH(f ${salomeinclude_HEADERS}) + + SET(DEST include/salome) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${salomeinclude_HEADERS}) diff --git a/src/ENGINE/Makefile.am b/src/ENGINE/Makefile.am deleted file mode 100644 index a174425d..00000000 --- a/src/ENGINE/Makefile.am +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vitaly Smetannikov -# Module : PARAVIS -# $Header: -# -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -lib_LTLIBRARIES= libPARAVISEngine.la - -salomeinclude_HEADERS= PARAVIS_Engine_i.hh - -dist_libPARAVISEngine_la_SOURCES= PARAVIS_Engine_i.cc - -libPARAVISEngine_la_CPPFLAGS= \ - $(KERNEL_CXXFLAGS) $(CORBA_CXXFLAGS) $(CORBA_INCLUDES) \ - -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl - -libPARAVISEngine_la_LDFLAGS= \ - $(KERNEL_LDFLAGS) -lSalomeIDLKernel -lSalomeNS -lSalomeContainer $(CORBA_LIBS) \ - $(top_builddir)/idl/libSalomeIDLPARAVIS.la diff --git a/src/ENGINE/PARAVIS_Engine_i.cc b/src/ENGINE/PARAVIS_Engine_i.cc index ee16c936..3b050c31 100644 --- a/src/ENGINE/PARAVIS_Engine_i.cc +++ b/src/ENGINE/PARAVIS_Engine_i.cc @@ -22,6 +22,7 @@ #include "PARAVIS_Engine_i.hh" #include "utilities.h" + #include CORBA_SERVER_HEADER(SALOME_ModuleCatalog) #include "SALOME_NamingService.hxx" diff --git a/src/PVGUI/CMakeLists.txt b/src/PVGUI/CMakeLists.txt new file mode 100644 index 00000000..67914b45 --- /dev/null +++ b/src/PVGUI/CMakeLists.txt @@ -0,0 +1,723 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# PARAVIS : ParaView wrapper SALOME module +# +# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author : Julia DOROVSKIKH +# Date : 01/06/2005 +# Modified by : Alexander BORODIN (OCN) - autotools usage + +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +IF(WITH_VISU) + SET(VISU_PARAVIS_LIBS + -lSalomeIDLVISU + ) + SET(VISU_PARAVIS_DEFINES + -DWITH_VISU + ) +ENDIF(WITH_VISU) + +#Executable +SET(bin_PROGRAMS + vtkWrapIDL_HH + vtkWrapIDL_CC +) + +SET(dist_vtkWrapIDL_HH_SOURCES + ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParse.tab.c + ${CMAKE_SOURCE_DIR}/idl/vtkWrapIDL.c +) +SET(dist_vtkWrapIDL_CC_SOURCES + ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParse.tab.c + ${CMAKE_SOURCE_DIR}/idl/vtkWrapIDL.c +) + +SET(vtkWrapIDL_HH_CPPFLAGS + -DIDL_I_HH + -I${CMAKE_CURRENT_SOURCE_DIR}/../ParaView + -I${CMAKE_BINARY_DIR}/idl + ${PARAVIEW_INCLUDES} + ${VTK_INCLUDES} +) + +SET(vtkWrapIDL_CC_CPPFLAGS + -DIDL_I_CC + -I${CMAKE_CURRENT_SOURCE_DIR}/../ParaView + -I${CMAKE_BINARY_DIR}/idl + ${PARAVIEW_INCLUDES} + ${VTK_INCLUDES} +) + +# $(srcdir)/wrap.am: $(top_srcdir)/wrapfiles.txt +# @cd $(srcdir) && $(srcdir)/create_wrap.sh + +# include $(srcdir)/wrap.am +INCLUDE(wrap.cmake) + +# PARAVIS_CreateClass.cxx: $(top_srcdir)/wrapfiles.txt $(WRAP_IDL_I_HH) +# @$(srcdir)/create_class.sh $(top_srcdir) + +# Library target +SET(lib_LTLIBRARIES + libPARAVIS.la +) + +# Library sources +SET(dist_libPARAVIS_la_SOURCES + PVGUI_Module.h + PVGUI_Module_impl.h + PVGUI_Module.cxx + PVGUI_Module_actions.cxx + PVGUI_Module_widgets.cxx + PVGUI_ViewManager.h + PVGUI_ViewManager.cxx + PVGUI_ViewModel.h + PVGUI_ViewModel.cxx + PVGUI_ViewWindow.h + PVGUI_ViewWindow.cxx + PVGUI_OutputWindowAdapter.h + PVGUI_OutputWindowAdapter.cxx + PVGUI_Tools.h + PVGUI_Tools.cxx + PV_I.h + PARAVIS_Gen_i.hh + PV_Events.h + PV_Tools.h + PARAVIS_Gen_i.cc + PV_Tools.cxx + ${WRAP_IDL_I_HH} + ${WRAP_IDL_I_CC} + PARAVIS_CreateClass.cxx +) + +# MOC pre-processing +SET(MOC_FILES + PVGUI_Module_moc.cxx + PVGUI_ViewManager_moc.cxx + PVGUI_ViewModel_moc.cxx + PVGUI_ViewWindow_moc.cxx +) + +SET(nodist_libPARAVIS_la_SOURCES + ${MOC_FILES} +) + +# additionnal compilation flags +# Note that ParaView uses HDF5 +SET(libPARAVIS_la_CPPFLAGS + -ftemplate-depth-32 + ${HDF5_INCLUDES} + ${QT_INCLUDES} + ${QT_ASSISTANT_INCLUDES} + ${PARAVIEW_INCLUDES} + ${VTK_INCLUDES} + ${CAS_CPPFLAGS} + ${PYTHON_INCLUDES} + ${CAS_CPPFLAGS} + ${CAS_CXXFLAGS} + ${KERNEL_CXXFLAGS} + ${CORBA_CXXFLAGS} + ${CORBA_INCLUDES} + ${GUI_CXXFLAGS} + ${VISU_CXXFLAGS} + ${MED_CXXFLAGS} + -I${CMAKE_CURRENT_SOURCE_DIR} + -I${CMAKE_BINARY_DIR}/idl + -I${CMAKE_CURRENT_SOURCE_DIR}/../../idl + -I${CMAKE_BINARY_DIR}/salome_adm/unix + ${VISU_PARAVIS_DEFINES} +) + +# additionnal linkage flags +# Note that ParaView uses HDF5 +SET(libPARAVIS_la_LDFLAGS + ${PYTHON_LIBS} + ${QT_MT_LIBS} + ${HDF5_LIBS} + ${QT_ASSISTANT_LIBS} + ${PARAVIEW_LIBS} + ${CMAKE_BINARY_DIR}/idl/libSalomeIDLPARAVIS.la + ${KERNEL_LDFLAGS} + ${SalomeNS} + ${SalomeDSClient} + ${SalomeContainer} + ${SalomeLifeCycleCORBA} + ${GUI_LDFLAGS} + ${SalomeApp} + ${LightApp} + ${VISU_LDFLAGS} + ${VISU_PARAVIS_LIBS} +) + +SET(libPARAVIS_la_LIBADD + ${SalomeIDLKernel} + ${SalomeHDFPersist} + ${SalomeGenericObj} + ${SalomeContainer} + ${SalomeCommunication} + ${SalomeNS} + ${TOOLSDS} + ${OpUtil} + ${SalomeLifeCycleCORBA} + ${Event} + ${SalomeApp} + ${SalomeSession} + ${qtx} + ${LightApp} +) + +# +# resources files +SET(nodist_salomeres_DATA + PARAVIS_images.qm + PARAVIS_msg_en.qm +) + +# mostlyclean-local: clean-wrap + +# clean-wrap: +# -rm -f *.hh *.cc PARAVIS_CreateClass.cxx + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + + + FOREACH(amname ${lib_LTLIBRARIES}) + + + STRING(REPLACE .la _la amname ${amname}) + + + STRING(LENGTH ${amname} len) + MATH(EXPR newlen "${len}-3") + STRING(SUBSTRING ${amname} 0 ${newlen} name) + + + STRING(REGEX MATCH "^lib" BEGIN_WITH_lib ${name}) + IF(BEGIN_WITH_lib) + STRING(LENGTH ${name} len) + MATH(EXPR newlen "${len}-3") + STRING(SUBSTRING ${name} 3 ${newlen} name) + ENDIF(BEGIN_WITH_lib) + + + STRING(REGEX MATCH "IDL" ISIDL ${name}) + + + IF(ISIDL) + IF(WINDOWS) + SET(type STATIC) + ELSE(WINDOWS) + SET(type SHARED) + ENDIF(WINDOWS) + ELSE(ISIDL) + SET(type SHARED) + ENDIF(ISIDL) + + + SET(srcs) + FOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + GET_FILENAME_COMPONENT(ext ${src} EXT) + IF(ext STREQUAL .f) + IF(src STREQUAL trte.f) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src}) + STRING(REPLACE ".f" ".c" src ${src}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src}) + SET(output ${src}) + ADD_CUSTOM_COMMAND( + OUTPUT ${output} + COMMAND f2c ${input} + MAIN_DEPENDENCY ${input} + ) + ELSE(src STREQUAL trte.f) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src}) + STRING(REPLACE ".f" ".o" src ${src}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src}) + SET(output ${src}) + IF(WINDOWS) + SET(F77 g77) + ELSE(WINDOWS) + SET(F77 gfortran) + ENDIF(WINDOWS) + ADD_CUSTOM_COMMAND( + OUTPUT ${output} + COMMAND ${F77} -c -o ${output} ${input} + MAIN_DEPENDENCY ${input} + ) + ENDIF(src STREQUAL trte.f) + ENDIF(ext STREQUAL .f) + SET(srcs ${srcs} ${src}) + ENDFOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + + + SET(l ${nodist_${amname}_SOURCES} ${UIC_FILES}) + FOREACH(f ${l}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f}) + SET(srcs ${srcs} ${src}) + ENDFOREACH(f ${l}) + + + SET(build_srcs) + SET(l ${nodist_${amname}_SOURCES} ${BUILT_SOURCES}) + FOREACH(f ${l}) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + ELSE(ext STREQUAL .py) + SET(build_srcs ${build_srcs} ${CMAKE_CURRENT_BINARY_DIR}/${f}) + ENDIF(ext STREQUAL .py) + ENDFOREACH(f ${l}) + + + ADD_LIBRARY(${name} ${type} ${srcs}) + + + SET(var) + IF(WINDOWS) + SET(targets) + SET(targets ${targets} SalomeIDLKernel) + SET(targets ${targets} SalomeDS) + SET(targets ${targets} SALOMEDSTest) + SET(targets ${targets} SALOMEDS_Client_exe) + SET(targets ${targets} SalomeIDLGEOM) + SET(targets ${targets} GEOMEngine) + SET(targets ${targets} MEDEngine) + SET(targets ${targets} SMESHEngine) + SET(targets ${targets} SMESH) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(var ${var} -DNOGDI) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(var ${var} -I${dir}) + SET(var ${var} -DF2C_BUILD) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(var ${var} ${AM_CPPFLAGS}) + SET(var ${var} ${AM_CXXFLAGS}) + + + SET(var ${var} ${PLATFORM_CPPFLAGS}) + SET(var ${var} ${PTHREAD_CFLAGS}) + SET(var ${var} ${${amname}_CPPFLAGS}) + SET(var ${var} ${${amname}_CXXFLAGS}) + SET(var ${var} ${${amname}_CFLAGS}) + SET(vars) + IF(WINDOWS) + SET(vars ${vars} -include SALOMEconfig.h) + SET(vars ${vars} -ftemplate-depth-32) + SET(vars ${vars} -fPIC) + SET(vars ${vars} -g) + ENDIF(WINDOWS) + SET(flags) + FOREACH(f ${var}) + FOREACH(v ${vars}) + IF(f STREQUAL v) + SET(f) + ENDIF(f STREQUAL v) + ENDFOREACH(v ${vars}) + SET(flags "${flags} ${f}") + ENDFOREACH(f ${var}) + SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}") + + + SET_TARGET_PROPERTIES(${name} PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO}) + + + SET(libadd) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(libadd ${libadd} ${dir}/LIBF77.lib) + SET(libadd ${libadd} ${dir}/LIBI77.lib) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS}) + FOREACH(lib SALOMEBasics SalomeBatch) + IF(name STREQUAL lib) + SET(libs ${libs} ${PTHREAD_LIBS}) + ENDIF(name STREQUAL lib) + ENDFOREACH(lib SALOMEBasics SalomeBatch) + + + FOREACH(lib ${libs}) + GET_FILENAME_COMPONENT(ext ${lib} EXT) + IF(ext STREQUAL .la) + GET_FILENAME_COMPONENT(lib ${lib} NAME_WE) + STRING(REGEX REPLACE "^lib" "" lib ${lib}) + ENDIF(ext STREQUAL .la) + SET(vars) + SET(vars ${vars} -no-undefined) + SET(vars ${vars} -lvtkWidgets) + IF(WINDOWS) + SET(vars ${vars} -module) + SET(vars ${vars} -Wl,-E) + SET(vars ${vars} -Xlinker) + SET(vars ${vars} -export-dynamic) + SET(vars ${vars} -lm) + SET(vars ${vars} -lboost_thread) + SET(vars ${vars} -lboost_signals) + SET(vars ${vars} -pthread -lpthread -ldl) + ENDIF(WINDOWS) + FOREACH(v ${vars}) + IF(lib STREQUAL v) + SET(lib) + ENDIF(lib STREQUAL v) + ENDFOREACH(v ${vars}) + SET(libadd ${libadd} ${lib}) + ENDFOREACH(lib ${libs}) + TARGET_LINK_LIBRARIES(${name} ${libadd}) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + IF(CMAKE_BUILD_TYPE STREQUAL Debug) + SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT") + ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(DEST lib/salome) + + + IF(BEGIN_WITH_lib) + INSTALL(TARGETS ${name} DESTINATION ${DEST}) + + + ELSE(BEGIN_WITH_lib) + + + IF(WINDOWS) + INSTALL(TARGETS ${name} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.pyd) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}_d.pyd) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(WINDOWS) + GET_TARGET_PROPERTY(version ${name} VERSION) + GET_TARGET_PROPERTY(soversion ${name} SOVERSION) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${version}) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${soversion}) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so) + ENDIF(WINDOWS) + + + ENDIF(BEGIN_WITH_lib) + + + ENDFOREACH(amname ${lib_LTLIBRARIES}) + + + FOREACH(amname ${bin_PROGRAMS} ${check_PROGRAMS}) + + + SET(name "${amname}_exe") + SET(srcs ${${amname}_SOURCES} ${dist_${amname}_SOURCES}) + SET(l ${nodist_${amname}_SOURCES}) + FOREACH(f ${l}) + SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f}) + SET(srcs ${srcs} ${src}) + ENDFOREACH(f ${l}) + LIST(LENGTH srcs nb) + IF(nb) + ADD_EXECUTABLE(${name} ${srcs}) + + + SET(var) + IF(WINDOWS) + SET(targets) + SET(targets ${targets} SalomeIDLKernel) + SET(targets ${targets} SalomeDS) + SET(targets ${targets} SALOMEDSTest) + SET(targets ${targets} SALOMEDS_Client_exe) + SET(targets ${targets} SalomeIDLGEOM) + SET(targets ${targets} GEOMEngine) + SET(targets ${targets} MEDEngine) + SET(targets ${targets} SMESHEngine) + SET(targets ${targets} SMESH) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(var ${var} -DNOGDI) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(var ${var} -I${dir}) + SET(var ${var} -DF2C_BUILD) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(var ${var} ${AM_CPPFLAGS}) + SET(var ${var} ${AM_CXXFLAGS}) + + + SET(var ${var} ${PLATFORM_CPPFLAGS}) + SET(var ${var} ${PTHREAD_CFLAGS}) + SET(var ${var} ${${amname}_CPPFLAGS}) + SET(var ${var} ${${amname}_CXXFLAGS}) + SET(var ${var} ${${amname}_CFLAGS}) + SET(vars) + IF(WINDOWS) + SET(vars ${vars} -include SALOMEconfig.h) + SET(vars ${vars} -ftemplate-depth-32) + SET(vars ${vars} -fPIC) + SET(vars ${vars} -g) + ENDIF(WINDOWS) + SET(flags) + FOREACH(f ${var}) + FOREACH(v ${vars}) + IF(f STREQUAL v) + SET(f) + ENDIF(f STREQUAL v) + ENDFOREACH(v ${vars}) + SET(flags "${flags} ${f}") + ENDFOREACH(f ${var}) + SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}") + + + SET(libadd) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + SET(dir $ENV{F2CHOME}) + STRING(REPLACE "\\\\" "/" dir ${dir}) + SET(libadd ${libadd} ${dir}/LIBF77.lib) + SET(libadd ${libadd} ${dir}/LIBI77.lib) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS}) + FOREACH(lib SALOMEBasics SalomeBatch) + IF(name STREQUAL lib) + SET(libs ${libs} ${PTHREAD_LIBS}) + ENDIF(name STREQUAL lib) + ENDFOREACH(lib SALOMEBasics SalomeBatch) + + + SET(libs ${libs} ${LDADD}) + + + FOREACH(lib ${libs}) + GET_FILENAME_COMPONENT(ext ${lib} EXT) + IF(ext STREQUAL .la) + GET_FILENAME_COMPONENT(lib ${lib} NAME_WE) + STRING(REGEX REPLACE "^lib" "" lib ${lib}) + ENDIF(ext STREQUAL .la) + SET(vars) + SET(vars ${vars} -no-undefined) + SET(vars ${vars} -lvtkWidgets) + IF(WINDOWS) + SET(vars ${vars} -module) + SET(vars ${vars} -Wl,-E) + SET(vars ${vars} -Xlinker) + SET(vars ${vars} -export-dynamic) + SET(vars ${vars} -lm) + SET(vars ${vars} -lboost_thread) + SET(vars ${vars} -lboost_signals) + SET(vars ${vars} -pthread -lpthread -ldl) + ENDIF(WINDOWS) + FOREACH(v ${vars}) + IF(lib STREQUAL v) + SET(lib) + ENDIF(lib STREQUAL v) + ENDFOREACH(v ${vars}) + SET(libadd ${libadd} ${lib}) + ENDFOREACH(lib ${libs}) + TARGET_LINK_LIBRARIES(${name} ${libadd}) + + + IF(WINDOWS) + SET(targets) + SET(targets ${targets} MEFISTO2D) + FOREACH(target ${targets}) + IF(name STREQUAL ${target}) + IF(CMAKE_BUILD_TYPE STREQUAL Debug) + SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT") + ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug) + ENDIF(name STREQUAL ${target}) + ENDFOREACH(target ${targets}) + ENDIF(WINDOWS) + + + SET(DEST bin/salome) + + + IF(WINDOWS) + INSTALL(TARGETS ${name} DESTINATION ${DEST}) + INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe DESTINATION ${DEST} RENAME ${amname}.exe) + INSTALL(CODE "FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe)") + ELSE(WINDOWS) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name} DESTINATION ${DEST} PERMISSIONS ${PERMS} RENAME ${amname}) + ENDIF(WINDOWS) + + + ENDIF(nb) + + + ENDFOREACH(amname ${bin_PROGRAMS} ${check_PROGRAMS}) + + + FOREACH(output ${MOC_FILES}) + + + STRING(REGEX REPLACE _moc.cxx .h input ${output}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input}) + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output}) + ADD_CUSTOM_COMMAND( + OUTPUT ${output} + COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input} -o ${output} + MAIN_DEPENDENCY ${input} + ) + ENDFOREACH(output ${MOC_FILES}) + +FOREACH(f ${nodist_salomeres_DATA}) + + SET(DEST share/salome/resources/paravis) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${nodist_salomeres_DATA}) diff --git a/src/PVGUI/Makefile.am b/src/PVGUI/Makefile.am deleted file mode 100644 index 87cd33a9..00000000 --- a/src/PVGUI/Makefile.am +++ /dev/null @@ -1,143 +0,0 @@ -# PARAVIS : ParaView wrapper SALOME module -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# Author : Julia DOROVSKIKH -# Date : 01/06/2005 -# Modified by : Alexander BORODIN (OCN) - autotools usage - -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -#Executable -bin_PROGRAMS = vtkWrapIDL_HH vtkWrapIDL_CC - -dist_vtkWrapIDL_HH_SOURCES = ${PVHOME}/src/vtkParse.tab.c $(top_srcdir)/idl/vtkWrapIDL.c -dist_vtkWrapIDL_CC_SOURCES = ${PVHOME}/src/vtkParse.tab.c $(top_srcdir)/idl/vtkWrapIDL.c - -vtkWrapIDL_HH_CPPFLAGS = -DIDL_I_HH ${PARAVIEW_INCLUDES} - - -vtkWrapIDL_CC_CPPFLAGS = -DIDL_I_CC ${PARAVIEW_INCLUDES} - -include $(srcdir)/wrap.am - -# Library target -lib_LTLIBRARIES = libPARAVIS.la - -# Library sources -dist_libPARAVIS_la_SOURCES = \ - PVGUI_Module.h \ - PVGUI_Module_impl.h \ - PVGUI_Module.cxx \ - PVGUI_Module_actions.cxx \ - PVGUI_Module_widgets.cxx \ - PVGUI_ProcessModuleHelper.h \ - PVGUI_ProcessModuleHelper.cxx \ - PVGUI_ViewManager.h \ - PVGUI_ViewManager.cxx \ - PVGUI_ViewModel.h \ - PVGUI_ViewModel.cxx \ - PVGUI_ViewWindow.h \ - PVGUI_ViewWindow.cxx \ - PVGUI_OutputWindowAdapter.h \ - PVGUI_OutputWindowAdapter.cxx \ - PVGUI_Tools.h \ - PVGUI_Tools.cxx \ - PVGUI_Trace.h \ - PVGUI_Trace.cxx \ - PV_I.h \ - PARAVIS_Gen_i.hh \ - PV_Events.h \ - PV_Tools.h \ - PARAVIS_Gen_i.cc \ - PV_Tools.cxx \ - $(WRAP_IDL_I_HH) \ - $(WRAP_IDL_I_CC) \ - PARAVIS_CreateClass.cxx - -# MOC pre-processing -MOC_FILES = \ - PVGUI_Module_moc.cxx \ - PVGUI_ViewManager_moc.cxx \ - PVGUI_ViewModel_moc.cxx \ - PVGUI_ViewWindow_moc.cxx \ - PVGUI_Trace_moc.cxx - -nodist_libPARAVIS_la_SOURCES = $(MOC_FILES) - -# additionnal compilation flags -# Note that ParaView uses HDF5 -libPARAVIS_la_CPPFLAGS = \ - -ftemplate-depth-32 \ - $(HDF5_INCLUDES) \ - $(QT_INCLUDES) \ - $(QT_ASSISTANT_INCLUDES) \ - $(PARAVIEW_INCLUDES) \ - $(CAS_CPPFLAGS) \ - $(PYTHON_INCLUDES) \ - @CAS_CPPFLAGS@ @CAS_CXXFLAGS@ \ - $(KERNEL_CXXFLAGS) \ - $(CORBA_CXXFLAGS) $(CORBA_INCLUDES) \ - $(GUI_CXXFLAGS) \ - $(VISU_CXXFLAGS) \ - $(MED_CXXFLAGS) \ - -I$(top_builddir)/idl \ - -I$(srcdir)/../../idl \ - -I$(top_builddir)/salome_adm/unix - -# additionnal linkage flags -# Note that ParaView uses HDF5 -libPARAVIS_la_LDFLAGS = \ - $(PYTHON_LIBS) \ - $(QT_MT_LIBS) \ - $(HDF5_LIBS) \ - $(QT_ASSISTANT_LIBS) \ - $(PARAVIEW_LIBS) \ - ../../idl/libSalomeIDLPARAVIS.la \ - $(KERNEL_LDFLAGS) -lSalomeNS -lSalomeDSClient -lSalomeContainer -lSalomeLifeCycleCORBA \ - $(GUI_LDFLAGS) -lSalomeApp -lLightApp \ - $(VISU_LDFLAGS) -lSalomeIDLVISU - -libPARAVIS_la_LIBADD= \ - -lSalomeIDLKernel \ - -lSalomeHDFPersist \ - -lSalomeGenericObj \ - -lSalomeContainer \ - -lSalomeCommunication \ - -lSalomeNS \ - -lTOOLSDS \ - -lOpUtil \ - -lSalomeLifeCycleCORBA \ - -lEvent \ - -lSalomeApp \ - -lSalomeSession \ - -lqtx \ - -lLightApp - -# -# resources files -nodist_salomeres_DATA = \ - PARAVIS_images.qm \ - PARAVIS_msg_en.qm - -mostlyclean-local: clean-wrap - -clean-wrap: - -rm -f *.hh *.cc diff --git a/src/PVGUI/PARAVIS_Gen_i.cc b/src/PVGUI/PARAVIS_Gen_i.cc index eadc681c..70ac58e1 100644 --- a/src/PVGUI/PARAVIS_Gen_i.cc +++ b/src/PVGUI/PARAVIS_Gen_i.cc @@ -36,6 +36,7 @@ #include #include "PVGUI_Module.h" #include +#include #include #include @@ -47,6 +48,7 @@ #include "QDomNode" #include "QDomElement" #include "QFile" +#include "QDir" #include "QTextStream" #include "vtkWrapIDL.h" @@ -181,7 +183,7 @@ namespace PARAVIS char* PARAVIS_Gen_i::GetTrace() { if(MYDEBUG) MESSAGE("PARAVIS_Gen_i::PrintTrace: "); - return CORBA::string_dup(ProcessEvent(new TGetTrace(mySalomeApp))); + return CORBA::string_dup(ProcessEvent(new TGetTrace(mySalomeApp)).c_str()); } //---------------------------------------------------------------------------- @@ -192,7 +194,7 @@ namespace PARAVIS } //---------------------------------------------------------------------------- - void processElements(QDomNode& thePropertyNode, QStringList& theFileNames, const char* theNewPath) + void processElements(QDomNode& thePropertyNode, QStringList& theFileNames, const char* theNewPath, bool theRestore) { QDomNode aElementNode = thePropertyNode.firstChild(); while (aElementNode.isElement()) { @@ -202,13 +204,16 @@ namespace PARAVIS if (aIndex == "0") { QString aValue = aElement.attribute("value"); if (!aValue.isNull()) { - if (theNewPath == 0) { + if (!theNewPath) { QFileInfo aFInfo(aValue); - theFileNames<Multi-view manager @@ -262,16 +207,11 @@ PVGUI_Module* ParavisModule = 0;

ParaView plugins

ParaView server and client plugins are managed by %pqMainWindowCore slots that has full access to PARAVIS menus and toolbars. As a result they appears automatically in PARAVIS menus and toolbars if loaded successfully. - -

Limitations of 2008 year prototype

- \li SALOME persistence (possibility to save the module data into a tsudy file) is not implemented for PARAVIS module. - \li As a light module, PARAVIS does not have a CORBA engine that follows SALOME rules, however PARAVIS can use load a CORBA engine - on its own if needed. */ /*! \class PVGUI_Module - \brief Implementation of light (no-CORBA-engine) + \brief Implementation SALOME module wrapping ParaView GUI. */ @@ -284,7 +224,10 @@ PVGUI_Module::PVGUI_Module() Implementation( 0 ), mySelectionControlsTb( -1 ), mySourcesMenuId( -1 ), - myFiltersMenuId( -1 ) + myFiltersMenuId( -1 ), + myMacrosMenuId(-1), + myToolbarsMenuId(-1), + myOldMsgHandler(0) { ParavisModule = this; } @@ -296,6 +239,8 @@ PVGUI_Module::~PVGUI_Module() { } + + /*! \brief Initialize module. Creates menus, prepares context menu, etc. \param app SALOME GUI application instance @@ -326,32 +271,101 @@ void PVGUI_Module::initialize( CAM_Application* app ) setupDockWidgets(); pvCreateActions(); - pvCreateMenus(); pvCreateToolBars(); + pvCreateMenus(); + + // new pqParaViewBehaviors(anApp->desktop(), this); + // Has to be replaced in order to exclude using of pqQtMessageHandlerBehaviour + // Start pqParaViewBehaviors + // Register ParaView interfaces. + pqPluginManager* pgm = pqApplicationCore::instance()->getPluginManager(); + + // * adds support for standard paraview views. + pgm->addInterface(new pqStandardViewModules(pgm)); + + // Load plugins distributed with application. + pqApplicationCore::instance()->loadDistributedPlugins(); + + // Define application behaviors. + //new pqQtMessageHandlerBehavior(this); + new pqDataTimeStepBehavior(this); + new pqViewFrameActionsBehavior(this); + new pqSpreadSheetVisibilityBehavior(this); + new pqDefaultViewBehavior(this); + new pqAlwaysConnectedBehavior(this); + new pqPVNewSourceBehavior(this); + new pqDeleteBehavior(this); + new pqUndoRedoBehavior(this); + new pqCrashRecoveryBehavior(this); + new pqAutoLoadPluginXMLBehavior(this); + new pqPluginDockWidgetsBehavior(getApp()->desktop()); + new pqPluginActionGroupBehavior(getApp()->desktop()); + new pqCommandLineOptionsBehavior(this); + new pqPersistentMainWindowStateBehavior(getApp()->desktop()); + + // Setup quick-launch shortcuts. + QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, + getApp()->desktop()); + QObject::connect(ctrlSpace, SIGNAL(activated()), + pqApplicationCore::instance(), SLOT(quickLaunch())); + QShortcut *altSpace = new QShortcut(Qt::ALT + Qt::Key_Space, + getApp()->desktop()); + QObject::connect(altSpace, SIGNAL(activated()), + pqApplicationCore::instance(), SLOT(quickLaunch())); + // End pqParaViewBehaviors - setupDockWidgetsContextMenu(); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + QString aPath = resMgr->stringValue("resources", "PARAVIS", QString()); + if (!aPath.isNull()) { + pqImplementation::Core->loadConfiguration(aPath + QDir::separator() + "ParaViewFilters.xml"); + pqImplementation::Core->loadConfiguration(aPath + QDir::separator() + "ParaViewReaders.xml"); + pqImplementation::Core->loadConfiguration(aPath + QDir::separator() + "ParaViewSources.xml"); + pqImplementation::Core->loadConfiguration(aPath + QDir::separator() + "ParaViewWriters.xml"); + } // Now that we're ready, initialize everything ... - Implementation->Core.initializeStates(); + // Force creation of engine PARAVIS::GetParavisGen(this); updateObjBrowser(); } + // Initialize list of toolbars QCoreApplication::processEvents(); + QList aBars = getParaViewToolbars(); + foreach (QToolBar* aBar, aBars) { + myToolbarState[aBar] = true; + } SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); bool isStop = aResourceMgr->booleanValue( "PARAVIS", "stop_trace", false ); - if(!isStop) - QTimer::singleShot(500, this, SLOT(activateTrace())); - // start_trace(); + if(!isStop) + QTimer::singleShot(50, this, SLOT(activateTrace())); } void PVGUI_Module::activateTrace() { - start_trace(); + PyInterp_Dispatcher* aDispatcher = PyInterp_Dispatcher::Get(); + if (aDispatcher->IsBusy()) { + QTimer::singleShot(50, this, SLOT(activateTrace())); + return; + } + + pqPythonDialog* pyDiag = 0; + pqPythonManager* manager = qobject_cast( + pqApplicationCore::instance()->manager("PYTHON_MANAGER")); + if (manager) { + pyDiag = manager->pythonShellDialog(); + } + if (pyDiag) { + pyDiag->runString("try:\n" + " from paraview import smtrace\n" + " smtrace.start_trace()\n" + " print 'Trace started.'\n" + "except: raise RuntimeError('could not import paraview.smtrace')\n"); + } } @@ -374,65 +388,70 @@ void PVGUI_Module::windows( QMap& m ) const */ bool PVGUI_Module::pvInit() { - if ( !pqImplementation::myPVMain ){ + if ( !pqImplementation::Core ){ // Obtain command-line arguments int argc = 0; QStringList args = QApplication::arguments(); char** argv = new char*[args.size()]; - for ( QStringList::const_iterator it = args.begin(); argc < 1 && it != args.end(); it++, argc++ ) + for ( QStringList::const_iterator it = args.begin(); argc < 1 && it != args.end(); it++, argc++ ) { argv[argc] = strdup( (*it).toLatin1().constData() ); - - vtkPVMain::SetUseMPI(0); // pvClient never runs with MPI. - vtkPVMain::Initialize(&argc, &argv); // Perform any initializations. - - // TODO: Set plugin dir from preferences - //QApplication::setLibraryPaths(QStringList(dir.absolutePath())); - - pqImplementation::myPVMain = vtkPVMain::New(); - if ( !pqImplementation::myPVOptions ) - pqImplementation::myPVOptions = pqOptions::New(); - if ( !pqImplementation::myPVHelper ) - pqImplementation::myPVHelper = PVGUI_ProcessModuleHelper::New(); - - pqImplementation::myPVOptions->SetProcessType(vtkPVOptions::PVCLIENT); - - // This creates the Process Module and initializes it. - int ret = pqImplementation::myPVMain->Initialize(pqImplementation::myPVOptions, - pqImplementation::myPVHelper, - ParaViewInitializeInterpreter, - argc, argv); - if (!ret){ - // Tell process module that we support Multiple connections. - // This must be set before starting the event loop. - vtkProcessModule::GetProcessModule()->SupportMultipleConnectionsOn(); - ret = pqImplementation::myPVHelper->Run(pqImplementation::myPVOptions); } + pqImplementation::Core = new pqPVApplicationCore (argc, argv); + if (pqImplementation::Core->getOptions()->GetHelpSelected() || + pqImplementation::Core->getOptions()->GetUnknownArgument() || + pqImplementation::Core->getOptions()->GetErrorMessage() || + pqImplementation::Core->getOptions()->GetTellVersion()) { + return false; + } + // VSV: Code from Initializer - it seems that it does nothing + + // 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()); + // Load required application plugins. + QString plugin_string = ""; + QStringList plugin_list = plugin_string.split(';',QString::SkipEmptyParts); + pqBrandPluginsLoader loader; + if (loader.loadPlugins(plugin_list) == false) { + printf("Failed to load required plugins for this application\n"); + return false; + } + + // Load optional plugins. + plugin_string = ""; + plugin_list = plugin_string.split(';',QString::SkipEmptyParts); + loader.loadPlugins(plugin_list, true); //quietly skip not-found plugins. + + // End of Initializer code + + //qInstallMsgHandler(0); // switch off standard Paraview message handler + pqImplementation::OutputWindowAdapter = PVGUI_OutputWindowAdapter::New(); + vtkOutputWindow::SetInstance(pqImplementation::OutputWindowAdapter); + //pqPluginManager* pgm = pqApplicationCore::instance()->getPluginManager(); + //pgm->loadExtensions(NULL); + + new pqViewManager(); // it registers as "MULTIVIEW_MANAGER on creation + if (argc == 1) free(argv[0]); // because in creation argc < 1 delete[] argv; - return !ret; } return true; } -/*! - \brief Static method, cleans up ParaView session at application exit. -*/ -void PVGUI_Module::pvShutdown() -{ - if ( pqImplementation::myPVHelper ) - pqImplementation::myPVHelper->finalize(); -} - /*! \brief Shows (toShow = true) or hides ParaView view window */ void PVGUI_Module::showView( bool toShow ) { SalomeApp_Application* anApp = getApp(); - PVGUI_ViewManager* viewMgr = dynamic_cast( anApp->getViewManager( PVGUI_Viewer::Type(), false ) ); + PVGUI_ViewManager* viewMgr = + dynamic_cast( anApp->getViewManager( PVGUI_Viewer::Type(), false ) ); if ( !viewMgr ) { viewMgr = new PVGUI_ViewManager( anApp->activeStudy(), anApp->desktop() ); anApp->addViewManager( viewMgr ); @@ -443,240 +462,70 @@ void PVGUI_Module::showView( bool toShow ) PVGUI_ViewWindow* pvWnd = dynamic_cast( viewMgr->getActiveView() ); if ( !pvWnd ) { pvWnd = dynamic_cast( viewMgr->createViewWindow() ); - pvWnd->setMultiViewManager( &Implementation->Core.multiViewManager() ); } pvWnd->setShown( toShow ); } -/*! - \brief Manage the label of Undo operation. -*/ -void PVGUI_Module::onUndoLabel( const QString& label ) -{ - action(UndoId)->setText( - label.isEmpty() ? tr("MEN_CANTUNDO") : QString(tr("MEN_UNDO_ACTION")).arg(label)); - action(UndoId)->setStatusTip( - label.isEmpty() ? tr("MEN_CANTUNDO") : QString(tr("MEN_UNDO_ACTION_TIP")).arg(label)); -} -/*! - \brief Manage the label of Redo operation. -*/ -void PVGUI_Module::onRedoLabel( const QString& label ) -{ - action(RedoId)->setText( - label.isEmpty() ? tr("MEN_CANTREDO") : QString(tr("MEN_REDO_ACTION")).arg(label)); - action(RedoId)->setStatusTip( - label.isEmpty() ? tr("MEN_CANTREDO") : QString(tr("MEN_REDO_ACTION_TIP")).arg(label)); -} +// void PVGUI_Module::connectToPlay() +// { +// connect( action(PlayId), SIGNAL( triggered() ), &Implementation->Core.VCRController(), SLOT( onPlay() ) ); +// } -/*! - \brief Manage the label of Undo Camera operation. -*/ -void PVGUI_Module::onCameraUndoLabel( const QString& label ) -{ - action(CameraUndoId)->setText( - label.isEmpty() ? tr("MEN_CANT_CAMERA_UNDO") : QString(tr("MEN_CAMERA_UNDO_ACTION")).arg(label)); - action(CameraUndoId)->setStatusTip( - label.isEmpty() ? tr("MEN_CANT_CAMERA_UNDO") : QString(tr("MEN_CAMERA_UNDO_ACTION_TIP")).arg(label)); -} /*! - \brief Manage the label of Redo Camera operation. + \brief Slot to show help for proxy. */ -void PVGUI_Module::onCameraRedoLabel( const QString& label ) +void PVGUI_Module::showHelpForProxy( const QString& proxy ) { - action(CameraRedoId)->setText( - label.isEmpty() ? tr("MEN_CANT_CAMERA_REDO") : QString(tr("MEN_CAMERA_REDO_ACTION")).arg(label)); - action(CameraRedoId)->setStatusTip( - label.isEmpty() ? tr("MEN_CANT_CAMERA_REDO") : QString(tr("MEN_CAMERA_REDO_ACTION_TIP")).arg(label)); + //pqHelpReaction::showHelp(QString("qthelp://paraview.org/paraview/%1.html").arg(proxy)); + showHelp(QString("qthelp://paraview.org/paraview/%1.html").arg(proxy)); } -/*! - \brief Slot to delete all objects. -*/ -void PVGUI_Module::onDeleteAll() +void PVGUI_Module::showParaViewHelp() { - pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder(); - Implementation->Core.getApplicationUndoStack()->beginUndoSet("Delete All"); - builder->destroyPipelineProxies(); - Implementation->Core.getApplicationUndoStack()->endUndoSet(); + showHelp(QString()); } -/*! - \brief Slot to check/uncheck the action for corresponding selection mode. -*/ -void PVGUI_Module::onSelectionModeChanged( int mode ) +void PVGUI_Module::showHelp(const QString& url) { - if( toolMgr()->toolBar( mySelectionControlsTb )->isEnabled() ) { - if(mode == pqRubberBandHelper::SELECT) //surface selection - action(SelectCellsOnId)->setChecked(true); - else if(mode == pqRubberBandHelper::SELECT_POINTS) //surface selection - action(SelectPointsOnId)->setChecked(true); - else if(mode == pqRubberBandHelper::FRUSTUM) - action(SelectCellsThroughId)->setChecked(true); - else if(mode == pqRubberBandHelper::FRUSTUM_POINTS) - action(SelectPointsThroughId)->setChecked(true); - else if (mode == pqRubberBandHelper::BLOCKS) - action(SelectBlockId)->setChecked(true); - else // INTERACT - action(InteractId)->setChecked(true); + if (pqImplementation::helpWindow) { + // raise assistant window; + pqImplementation::helpWindow->show(); + pqImplementation::helpWindow->raise(); + if (!url.isEmpty()) { + pqImplementation::helpWindow->showPage(url); + } + return; } -} - -/*! - \brief Slot to manage the change of axis center. -*/ -void PVGUI_Module::onShowCenterAxisChanged( bool enabled ) -{ - action(ShowCenterId)->setEnabled(enabled); - action(ShowCenterId)->blockSignals(true); - pqRenderView* renView = qobject_cast( - pqActiveView::instance().current()); - action(ShowCenterId)->setChecked( renView ? renView->getCenterAxesVisibility() : false); - action(ShowCenterId)->blockSignals(false); -} -/*! - \brief Slot to set tooltips for the first anf the last frames, i.e. a time range of animation. -*/ -void PVGUI_Module::setTimeRanges( double start, double end ) -{ - action(FirstFrameId)->setToolTip(QString("First Frame (%1)").arg(start, 0, 'g')); - action(LastFrameId)->setToolTip(QString("Last Frame (%1)").arg(end, 0, 'g')); -} - - -void PVGUI_Module::connectToPlay() -{ - connect( action(PlayId), SIGNAL( triggered() ), &Implementation->Core.VCRController(), SLOT( onPlay() ) ); -} - - -/*! - \brief Slot to manage the plaing process of animation. -*/ -void PVGUI_Module::onPlaying( bool playing ) -{ - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - if(playing) { - disconnect( action(PlayId), SIGNAL( triggered() ),&Implementation->Core.VCRController(), SLOT( onPlay() ) ); - connect( action(PlayId), SIGNAL( triggered() ), &Implementation->Core.VCRController(), SLOT( onPause() ) ); - action(PlayId)->setIcon(QIcon(resMgr->loadPixmap("ParaView",tr("ICON_PAUSE"),false))); - action(PlayId)->setText("Pa&use"); - } - else { - // Immediate connecting toPlay doubles event - QTimer::singleShot(10, this, SLOT(connectToPlay())); - //connect( action(PlayId), SIGNAL( triggered() ), &Implementation->Core.VCRController(), SLOT( onPlay() ) ); - disconnect( action(PlayId), SIGNAL( triggered() ), &Implementation->Core.VCRController(), SLOT( onPause() ) ); - action(PlayId)->setIcon(QIcon(resMgr->loadPixmap("ParaView",tr("ICON_PLAY"),false))); - action(PlayId)->setText("&Play"); + // * Discover help project files from the resources. + QString aPVHome(getenv("PVHOME")); + if (aPVHome.isNull()) { + qWarning("Wariable PVHOME is not defined"); + return; } + QChar aSep = QDir::separator(); + QString aFile = aPVHome + aSep + "doc" + aSep + "paraview.qch"; - Implementation->Core.setSelectiveEnabledState(!playing); -} - -/*! - \brief Slot to add camera link. -*/ -void PVGUI_Module::onAddCameraLink() -{ - pqView* vm = pqActiveView::instance().current(); - pqRenderView* rm = qobject_cast(vm); - if(rm) rm->linkToOtherView(); - else SUIT_MessageBox::warning(getApp()->desktop(), - tr("WARNING"), tr("WRN_ADD_CAMERA_LINK")); -} - -/*! - \brief Slot to show information about ParaView. -*/ -void PVGUI_Module::onHelpAbout() -{ - pqClientAboutDialog* const dialog = new pqClientAboutDialog(getApp()->desktop()); - dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->show(); -} - -/*! - \brief Slot to show native ParaView user documentation. -*/ -void PVGUI_Module::onParaViewHelp() -{ - showHelpForProxy("index"); -} - -/*! - \brief Slot to show help for proxy. -*/ -void PVGUI_Module::showHelpForProxy( const QString& proxy ) -{ - // make sure assistant is ready - this->makeAssistant(); - - if(this->Implementation->myHelpWindow) { - this->Implementation->myHelpWindow->show(); - this->Implementation->myHelpWindow->raise(); + if (!QFile::exists(aFile)) { + qWarning("Help file do not found"); + return; } - /* if(this->Implementation->AssistantClient) { - this->Implementation->AssistantClient->openAssistant(); - QString page("%1/Documentation/%2.html"); - page = page.arg(this->Implementation->DocumentationDir); - page = page.arg(proxy); - this->Implementation->AssistantClient->showPage(page); - }*/ -} - -QString Locate( const QString& appName ) -{ - QString app_dir = QCoreApplication::applicationDirPath(); - const char* inst_dirs[] = { - "/./", - "/../bin/", - "/../../bin/", - 0 - }; - for (const char** dir = inst_dirs; *dir; ++dir) { - QString path = app_dir; - path += *dir; - path += appName; - //cout << "Checking : " << path.toAscii().data() << " ... "; - //cout.flush(); - QFileInfo finfo (path); - if (finfo.exists()) { - //cout << " Success!" << endl; - return path; - } - //cout << " Failed" << endl; + + pqImplementation::helpWindow = new pqHelpWindow(QString("ParaView Online Help"), getApp()->desktop()); + QString namespace_name = pqImplementation::helpWindow->registerDocumentation(aFile); + + pqImplementation::helpWindow->showHomePage(namespace_name); + pqImplementation::helpWindow->show(); + pqImplementation::helpWindow->raise(); + if (!url.isEmpty()) { + pqImplementation::helpWindow->showPage(url); } - return app_dir + QDir::separator() + appName; } -/*! - \brief Initialized an assistant client. -*/ -void PVGUI_Module::makeAssistant() -{ - if (this->Implementation->myHelpWindow) - return; - pqHelpWindow* helpWindow = new pqHelpWindow("ParaView Online Help", getApp()->desktop()); - QObject::connect(helpWindow, SIGNAL(helpWarnings(const QString&)), - this, SLOT(assistantError(const QString&))); - helpWindow->registerDocumentation(":/ParaViewResources/pqClient.qch"); - this->Implementation->myHelpWindow = helpWindow; - this->Implementation->myHelpWindow->showPage("qthelp://paraview.org/paraview/Documentation/index.html"); -} - -/*! - \brief Slot to call the message handler with the critical message. -*/ -void PVGUI_Module::assistantError( const QString& error ) -{ - qCritical(error.toAscii().data()); -} /*! \brief Slot to show the waiting state. @@ -709,50 +558,30 @@ void PVGUI_Module::endWaitCursor() */ pqViewManager* PVGUI_Module::getMultiViewManager() const { - pqViewManager* aMVM = 0; - if ( Implementation ) - aMVM = &Implementation->Core.multiViewManager(); - return aMVM; + return qobject_cast(pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); } -/*! - \brief Processes QEvent::ActionAdded and QEvent::ActionRemoved from Lookmarks toolbar - in order to register/unregister this action in/from QtxActionToolMgr. -*/ -bool PVGUI_Module::eventFilter( QObject* theObject, QEvent* theEvent ) + +static void ParavisMessageOutput(QtMsgType type, const char *msg) { - QToolBar* aTB = toolMgr()->toolBar(tr("TOOL_LOOKMARKS")); - if ( theObject == aTB ) { - - if ( theEvent->type() == QEvent::ActionAdded ) { - QList anActns = aTB->actions(); - for (int i = 0; i < anActns.size(); ++i) - if ( toolMgr()->actionId(anActns.at(i)) == -1 ) { - toolMgr()->setUpdatesEnabled(false); - createTool( anActns.at(i), tr("TOOL_LOOKMARKS") ); - toolMgr()->setUpdatesEnabled(true); - } + 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; } +} - if ( theEvent->type() == QEvent::ActionRemoved ) { - QList anActns = aTB->actions(); - QIntList aIDL = toolMgr()->idList(); - for (int i = 0; i < aIDL.size(); ++i) { - if ( toolMgr()->action(aIDL.at(i))->parent() == aTB - && - !anActns.contains( toolMgr()->action(aIDL.at(i)) ) ) { - toolMgr()->setUpdatesEnabled(false); - toolMgr()->unRegisterAction( aIDL.at(i) ); - toolMgr()->remove( aIDL.at(i), tr("TOOL_LOOKMARKS") ); - toolMgr()->setUpdatesEnabled(true); - } - } - } - - } - return QObject::eventFilter( theObject, theEvent ); -} /*! \brief Activate module. @@ -762,21 +591,27 @@ bool PVGUI_Module::eventFilter( QObject* theObject, QEvent* theEvent ) */ bool PVGUI_Module::activateModule( SUIT_Study* study ) { + myOldMsgHandler = qInstallMsgHandler(ParavisMessageOutput); + bool isDone = SalomeApp_Module::activateModule( study ); if ( !isDone ) return false; showView( true ); - if ( mySourcesMenuId != -1 ) menuMgr()->show(mySourcesMenuId); if ( myFiltersMenuId != -1 ) menuMgr()->show(myFiltersMenuId); + if ( myFiltersMenuId != -1 ) menuMgr()->show(myMacrosMenuId); + if ( myFiltersMenuId != -1 ) menuMgr()->show(myToolbarsMenuId); setMenuShown( true ); setToolShown( true ); - toolMgr()->toolBar(tr("TOOL_LOOKMARKS"))->installEventFilter(this); - - // Make default server connection - if ( Implementation ) - Implementation->Core.makeDefaultConnectionIfNoneExists(); + if (myToolbarState.size() > 0) { + SUIT_Desktop* desk = application()->desktop(); + QList aToolbars = myToolbarState.keys(); + foreach(QToolBar* aBar, aToolbars) { + aBar->setParent(desk); + aBar->setVisible(myToolbarState[aBar]); + } + } restoreDockWidgetsState(); @@ -792,21 +627,35 @@ bool PVGUI_Module::activateModule( SUIT_Study* study ) */ bool PVGUI_Module::deactivateModule( SUIT_Study* study ) { - toolMgr()->toolBar(tr("TOOL_LOOKMARKS"))->removeEventFilter(this); - + if (pqImplementation::helpWindow) { + pqImplementation::helpWindow->hide(); + } showView( false ); // hide menus menuMgr()->hide(mySourcesMenuId); menuMgr()->hide(myFiltersMenuId); + menuMgr()->hide(myMacrosMenuId); + menuMgr()->hide(myToolbarsMenuId); setMenuShown( false ); setToolShown( false ); saveDockWidgetsState(); + // hide toolbars + QList aToolbars = myToolbarState.keys(); + foreach(QToolBar* aBar, aToolbars) { + myToolbarState[aBar] = aBar->isVisible(); + aBar->hide(); + aBar->setParent(0); + } + + if (myOldMsgHandler) + qInstallMsgHandler(myOldMsgHandler); return SalomeApp_Module::deactivateModule( study ); } + /*! \brief Called when application is closed. @@ -817,10 +666,11 @@ bool PVGUI_Module::deactivateModule( SUIT_Study* study ) */ void PVGUI_Module::onApplicationClosed( SUIT_Application* theApp ) { + pqApplicationCore::instance()->settings()->sync(); int aAppsNb = SUIT_Session::session()->applications().size(); if (aAppsNb == 1) { deleteTemporaryFiles(); - pvShutdown(); + //pvShutdown(); } CAM_Module::onApplicationClosed(theApp); } @@ -829,6 +679,7 @@ void PVGUI_Module::onApplicationClosed( SUIT_Application* theApp ) \brief Compares the contents of the window with the given reference image, returns true if they "match" within some tolerance. */ +/*VSV it seems that this method is obsolete bool PVGUI_Module::compareView( const QString& ReferenceImage, double Threshold, std::ostream& Output, const QString& TempDirectory ) { @@ -836,18 +687,13 @@ bool PVGUI_Module::compareView( const QString& ReferenceImage, double Threshold, return Implementation->Core.compareView( ReferenceImage, Threshold, Output, TempDirectory ); return false; } - +*/ QString PVGUI_Module::engineIOR() const { CORBA::String_var anIOR = PARAVIS::GetParavisGen(this)->GetIOR(); return QString(anIOR.in()); } -void PVGUI_Module::onOpenFile() -{ - // This avoids an immediate exception on wrong MED file opening - Implementation->Core.onFileOpen(); -} /*! \brief Open file of format supported by ParaView @@ -856,15 +702,40 @@ void PVGUI_Module::openFile(const char* theName) { QStringList aFiles; aFiles<Core.createReaderOnActiveServer(aFiles); + pqLoadDataReaction::loadData(aFiles); } /*! \brief Returns trace string */ -QString PVGUI_Module::printTrace() +QString PVGUI_Module::getTraceString() { - return get_trace_string(); + pqPythonDialog* pyDiag = 0; + pqPythonManager* manager = qobject_cast( + pqApplicationCore::instance()->manager("PYTHON_MANAGER")); + if (manager) { + pyDiag = manager->pythonShellDialog(); + } + + QString traceString; + if (pyDiag) { + pyDiag->runString("try:\n" + " from paraview import smtrace\n" + " __smtraceString = smtrace.get_trace_string()\n" + "except:\n" + " __smtraceString = str()\n" + " raise RuntimeError('could not import paraview.smtrace')\n"); + pyDiag->shell()->makeCurrent(); + PyObject* main_module = PyImport_AddModule((char*)"__main__"); + PyObject* global_dict = PyModule_GetDict(main_module); + PyObject* string_object = PyDict_GetItemString(global_dict, "__smtraceString"); + char* string_ptr = PyString_AsString(string_object); + if (string_ptr) { + traceString = string_ptr; + } + pyDiag->shell()->releaseControl(); + } + return traceString; } /*! @@ -872,7 +743,15 @@ QString PVGUI_Module::printTrace() */ void PVGUI_Module::saveTrace(const char* theName) { - save_trace(theName); + //save_trace(theName); + QFile file(theName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + MESSAGE( "Could not open file:" << theName ); + return; + } + QTextStream out(&file); + out << getTraceString(); + file.close(); } /*! @@ -880,9 +759,7 @@ void PVGUI_Module::saveTrace(const char* theName) */ void PVGUI_Module::saveParaviewState(const char* theFileName) { - QStringList aFiles; - aFiles<Core.onFileSaveServerState(aFiles); + Implementation->Core->saveState(theFileName); } /*! @@ -890,9 +767,7 @@ void PVGUI_Module::saveParaviewState(const char* theFileName) */ void PVGUI_Module::loadParaviewState(const char* theFileName) { - QStringList aFiles; - aFiles<Core.onFileLoadServerState(aFiles); + Implementation->Core->loadState(theFileName, getActiveServer()); } /*! @@ -900,6 +775,7 @@ void PVGUI_Module::loadParaviewState(const char* theFileName) */ void PVGUI_Module::onImportFromVisu(QString theEntry) { +#ifdef WITH_VISU SUIT_OverrideCursor aWaitCursor; // get active study @@ -951,6 +827,9 @@ void PVGUI_Module::onImportFromVisu(QString theEntry) openFile(aFilePath.c_str()); myTemporaryFiles.append(QString(aFilePath.c_str())); } +#else + MESSAGE("Visu module is not found."); +#endif } /*! @@ -971,7 +850,7 @@ void PVGUI_Module::deleteTemporaryFiles() */ pqServer* PVGUI_Module::getActiveServer() { - return Implementation->Core.getActiveServer(); + return Implementation->Core->getActiveServer(); } @@ -982,6 +861,18 @@ void PVGUI_Module::createPreferences() { int TraceTab = addPreference( tr( "TIT_TRACE" ) ); addPreference( tr( "PREF_STOP_TRACE" ), TraceTab, LightApp_Preferences::Bool, "PARAVIS", "stop_trace"); + + int aSaveType = addPreference(tr( "PREF_SAVE_TYPE_LBL" ), TraceTab, + LightApp_Preferences::Selector, + "PARAVIS", "savestate_type"); + QList aIndices; + QStringList aStrings; + aIndices<<0<<1<<2; + aStrings< getParaViewToolbars(); - void onPlaying( bool ); - - void onAddCameraLink(); - - void onHelpAbout(); - - void onParaViewHelp(); +private slots: void showHelpForProxy( const QString& proxy ); - void makeAssistant(); - void assistantError( const QString& err ); void onPreAccept(); void onPostAccept(); void endWaitCursor(); - void connectToPlay(); + void activateTrace(); - void onOpenFile(); + void buildToolbarsMenu(); - void activateTrace(); + void showParaViewHelp(); + void showHelp(const QString& url); public slots: virtual bool activateModule( SUIT_Study* ); @@ -264,10 +236,16 @@ private: int mySelectionControlsTb; int mySourcesMenuId; int myFiltersMenuId; + int myToolbarsMenuId; + int myMacrosMenuId; QList myDockWidgets; QStringList myTemporaryFiles; + + QMap myToolbarState; + + QtMsgHandler myOldMsgHandler; }; #endif // PVGUI_Module_H diff --git a/src/PVGUI/PVGUI_Module_actions.cxx b/src/PVGUI/PVGUI_Module_actions.cxx index 78a3aea1..bb8913b8 100644 --- a/src/PVGUI/PVGUI_Module_actions.cxx +++ b/src/PVGUI/PVGUI_Module_actions.cxx @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -39,15 +40,45 @@ #include #include -#include -#include -#include #include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "PVGUI_Tools.h" @@ -58,491 +89,279 @@ */ void PVGUI_Module::pvCreateActions() { - SUIT_Desktop* desk = application()->desktop(); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); QPixmap aPixmap; QAction* anAction; - QtxAction* aQtxAction; + //QtxAction* aQtxAction; // --- Menu "File" // Open File aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_OPEN_FILE"), false ); - createAction( OpenFileId, tr("TOP_OPEN_FILE"), QIcon(aPixmap), - tr("MEN_OPEN"), tr("STB_OPEN_FILE"), - //0, desk, false, &Implementation->Core, SLOT( onFileOpen() ) ); - // This avoids an immediate exception on wrong MED file opening - 0, desk, false, this, SLOT( onOpenFile() ) ); - + anAction = new QAction(QIcon(aPixmap), tr("MEN_OPEN"), this); + anAction->setToolTip(tr("TOP_OPEN_FILE")); + anAction->setStatusTip(tr("STB_OPEN_FILE")); + registerAction(OpenFileId, anAction); + new pqLoadDataReaction(anAction); + // Load State - anAction = createAction( LoadStateId, tr("TOP_LOAD_STATE"), QIcon(), - tr("MEN_LOAD_STATE"), tr("STB_LOAD_STATE"), - 0, desk, false, &Implementation->Core, SLOT( onFileLoadServerState() ) ); - connect( &Implementation->Core, SIGNAL( enableFileLoadServerState(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - + anAction = new QAction(tr("MEN_LOAD_STATE"), this); + anAction->setToolTip(tr("TOP_LOAD_STATE")); + anAction->setStatusTip(tr("STB_LOAD_STATE")); + registerAction(LoadStateId, anAction); + new pqLoadStateReaction(anAction); + // Save State - anAction = createAction( SaveStateId, tr("TOP_SAVE_STATE"), QIcon(), - tr("MEN_SAVE_STATE"), tr("STB_SAVE_STATE"), - 0, desk, false, &Implementation->Core, SLOT( onFileSaveServerState() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveServerState(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(tr("MEN_SAVE_STATE"), this); + anAction->setToolTip(tr("TOP_SAVE_STATE")); + anAction->setStatusTip(tr("STB_SAVE_STATE")); + registerAction(SaveStateId, anAction); + new pqSaveStateReaction(anAction); // Save Data aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SAVE_DATA"), false ); - anAction = createAction( SaveDataId, tr("TOP_SAVE_DATA"), QIcon(aPixmap), - tr("MEN_SAVE_DATA"), tr("STB_SAVE_DATA"), - 0, desk, false, &Implementation->Core, SLOT( onFileSaveData() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveData(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_SAVE_DATA"), this); + anAction->setToolTip(tr("TOP_SAVE_DATA")); + anAction->setStatusTip(tr("STB_SAVE_DATA")); + registerAction(SaveDataId, anAction); + new pqSaveDataReaction(anAction); // Save Screenshot aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SAVE_SCREENSHOT"), false ); - anAction = createAction( SaveScreenshotId, tr("TOP_SAVE_SCREENSHOT"), QIcon(aPixmap), - tr("MEN_SAVE_SCREENSHOT"), tr("STB_SAVE_SCREENSHOT"), - 0, desk, false, &Implementation->Core, SLOT( onFileSaveScreenshot() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_SAVE_SCREENSHOT"), this); + anAction->setToolTip(tr("TOP_SAVE_SCREENSHOT")); + anAction->setStatusTip(tr("STB_SAVE_SCREENSHOT")); + registerAction(SaveScreenshotId, anAction); + new pqSaveScreenshotReaction(anAction); // Export - anAction = createAction( ExportId, tr("TOP_EXPORT"), QIcon(), - tr("MEN_EXPORT"), tr("STB_EXPORT"), - 0, desk, false, &Implementation->Core, SLOT( onFileExport() ) ); - connect( &Implementation->Core, SIGNAL( enableExport(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(tr("MEN_EXPORT"), this); + anAction->setToolTip(tr("TOP_EXPORT")); + anAction->setStatusTip(tr("STB_EXPORT")); + registerAction(ExportId, anAction); + new pqExportReaction(anAction); // Save Animation aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SAVE_ANIMATION"), false ); - anAction = createAction( SaveAnimationId, tr("TOP_SAVE_ANIMATION"), QIcon(aPixmap), - tr("MEN_SAVE_ANIMATION"), tr("STB_SAVE_ANIMATION"), - 0, desk, false, &Implementation->Core, SLOT( onFileSaveAnimation() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveAnimation(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_SAVE_ANIMATION"), this); + anAction->setToolTip(tr("TOP_SAVE_ANIMATION")); + anAction->setStatusTip(tr("STB_SAVE_ANIMATION")); + registerAction(SaveAnimationId, anAction); + new pqSaveAnimationReaction(anAction); // Save Geometry aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SAVE_GEOMETRY"), false ); - anAction = createAction( SaveGeometryId, tr("TOP_SAVE_GEOMETRY"), QIcon(aPixmap), - tr("MEN_SAVE_GEOMETRY"), tr("STB_SAVE_GEOMETRY"), - 0, desk, false, &Implementation->Core, SLOT( onSaveGeometry() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveGeometry(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_SAVE_GEOMETRY"), this); + anAction->setToolTip(tr("TOP_SAVE_GEOMETRY")); + anAction->setStatusTip(tr("STB_SAVE_GEOMETRY")); + registerAction(SaveGeometryId, anAction); + new pqSaveAnimationGeometryReaction(anAction); // Connect aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_CONNECT"), false ); - anAction = createAction( ConnectId, tr("TOP_CONNECT"), QIcon(aPixmap), - tr("MEN_CONNECT"), tr("STB_CONNECT"), - 0, desk, false, &Implementation->Core, SLOT( onServerConnect() ) ); - connect( &Implementation->Core, SIGNAL( enableServerConnect(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_CONNECT"), this); + anAction->setToolTip(tr("TOP_CONNECT")); + anAction->setStatusTip(tr("STB_CONNECT")); + registerAction(ConnectId, anAction); + new pqServerConnectReaction(anAction); // Disconnect aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_DISCONNECT"), false ); - anAction = createAction( DisconnectId, tr("TOP_DISCONNECT"), QIcon(aPixmap), - tr("MEN_DISCONNECT"), tr("STB_DISCONNECT"), - 0, desk, false, &Implementation->Core, SLOT( onServerDisconnect() ) ); - connect( &Implementation->Core, SIGNAL( enableServerDisconnect(bool) ), - anAction, SLOT( setEnabled(bool) ) ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_DISCONNECT"), this); + anAction->setToolTip(tr("TOP_DISCONNECT")); + anAction->setStatusTip(tr("STB_DISCONNECT")); + registerAction(DisconnectId, anAction); + new pqServerDisconnectReaction(anAction); // --- Menu "Edit" - pqUndoStack* undoStack = Implementation->Core.getApplicationUndoStack(); - // Undo aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_UNDO"), false ); - anAction = createAction( UndoId, tr("TOP_UNDO"), QIcon(aPixmap), - tr("MEN_UNDO"), tr("STB_UNDO"), Qt::CTRL+Qt::Key_Z, - desk, false, undoStack, SLOT( undo() ) ); - connect( undoStack, SIGNAL( canUndoChanged(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - connect( undoStack, SIGNAL( undoLabelChanged(const QString&) ), - this, SLOT( onUndoLabel(const QString&) ) ); - anAction->setEnabled( undoStack->canUndo() ); - onUndoLabel(undoStack->undoLabel()); + anAction = new QAction(QIcon(aPixmap), tr("MEN_UNDO"), this); + anAction->setToolTip(tr("TOP_UNDO")); + anAction->setStatusTip(tr("STB_UNDO")); + registerAction(UndoId, anAction); + new pqUndoRedoReaction(anAction, true); // Redo aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_REDO"), false ); - anAction = createAction( RedoId, tr("TOP_REDO"), QIcon(aPixmap), - tr("MEN_REDO"), tr("STB_REDO"), Qt::CTRL+Qt::Key_Y, - desk, false, undoStack, SLOT( redo() ) ); - connect( undoStack, SIGNAL( canRedoChanged(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - connect( undoStack, SIGNAL( redoLabelChanged(const QString&) ), - this, SLOT( onRedoLabel(const QString&) ) ); - anAction->setEnabled( undoStack->canRedo() ); - onRedoLabel(undoStack->redoLabel()); + anAction = new QAction(QIcon(aPixmap), tr("MEN_REDO"), this); + anAction->setToolTip(tr("TOP_REDO")); + anAction->setStatusTip(tr("STB_REDO")); + registerAction(RedoId, anAction); + new pqUndoRedoReaction(anAction, false); // Camera Undo aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_CAMERA_UNDO"), false ); - anAction = createAction( CameraUndoId, tr("TOP_CAMERA_UNDO"), QIcon(aPixmap), - tr("MEN_CAMERA_UNDO"), tr("STB_CAMERA_UNDO"), Qt::CTRL+Qt::Key_C+Qt::Key_B, - desk, false, &Implementation->Core, SLOT( onEditCameraUndo() ) ); - connect( &Implementation->Core, SIGNAL( enableCameraUndo(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - connect( &Implementation->Core, SIGNAL( cameraUndoLabel(const QString&) ), - this, SLOT( onCameraUndoLabel(const QString&) ) ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_CAMERA_UNDO"), this); + anAction->setToolTip(tr("TOP_CAMERA_UNDO")); + anAction->setStatusTip(tr("STB_CAMERA_UNDO")); + registerAction(CameraUndoId, anAction); + new pqCameraUndoRedoReaction(anAction, true); // Camera Redo aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_CAMERA_REDO"), false ); - anAction = createAction( CameraRedoId, tr("TOP_CAMERA_REDO"), QIcon(aPixmap), - tr("MEN_CAMERA_REDO"), tr("STB_CAMERA_REDO"), Qt::CTRL+Qt::Key_C+Qt::Key_F, - desk, false, &Implementation->Core, SLOT( onEditCameraRedo() ) ); - connect( &Implementation->Core, SIGNAL( enableCameraRedo(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - connect( &Implementation->Core, SIGNAL( cameraRedoLabel(const QString&) ), - this, SLOT( onCameraRedoLabel(const QString&) ) ); - - pqPipelineBrowser* browser = Implementation->Core.pipelineBrowser(); + anAction = new QAction(QIcon(aPixmap), tr("MEN_CAMERA_REDO"), this); + anAction->setToolTip(tr("TOP_CAMERA_REDO")); + anAction->setStatusTip(tr("STB_CAMERA_REDO")); + registerAction(CameraRedoId, anAction); + new pqCameraUndoRedoReaction(anAction, false); // Change Input - createAction( ChangeInputId, tr("TOP_CHANGE_INPUT"), QIcon(), - tr("MEN_CHANGE_INPUT"), tr("STB_CHANGE_INPUT"), - 0, desk, false, browser, SLOT( changeInput() ) ); + anAction = new QAction(tr("MEN_CHANGE_INPUT"), this); + anAction->setToolTip(tr("TOP_CHANGE_INPUT")); + anAction->setStatusTip(tr("STB_CHANGE_INPUT")); + registerAction(ChangeInputId, anAction); + new pqChangePipelineInputReaction(anAction); + + // Ignore source time + anAction = new QAction(tr("MEN_IGNORE_TIME"), this); + anAction->setToolTip(tr("TOP_IGNORE_TIME")); + anAction->setStatusTip(tr("STB_IGNORE_TIME")); + anAction->setCheckable(true); + registerAction(IgnoreTimeId, anAction); + new pqIgnoreSourceTimeReaction(anAction); // Delete - createAction( DeleteId, tr("TOP_DELETE"), QIcon(), - tr("MEN_DELETE"), tr("STB_DELETE"), - 0, desk, false, browser, SLOT( deleteSelected() ) ); - - // Delet All - createAction( DeleteAllId, tr("TOP_DELETE_ALL"), QIcon(), - tr("MEN_DELETE_ALL"), tr("STB_DELETE_ALL"), - 0, desk, false, this, SLOT( onDeleteAll() ) ); - - // Interact - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_INTERACT"), false ); - anAction = createAction( InteractId, tr("TOP_INTERACT"), QIcon(aPixmap), - tr("MEN_INTERACT"), tr("STB_INTERACT"), 0, desk, true, - Implementation->Core.renderViewSelectionHelper(), SLOT( endSelection() ) ); - anAction->setChecked( true ); ///!!! - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( interactionModeChanged(bool) ), - anAction, SLOT( setChecked(bool) ) ); - - // Select Cells On - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SELECT_CELLS_ON"), false ); - anAction = createAction( SelectCellsOnId, tr("TOP_SELECT_CELLS_ON"), QIcon(aPixmap), - tr("MEN_SELECT_CELLS_ON"), tr("STB_SELECT_CELLS_ON"), Qt::Key_S, desk, true, - Implementation->Core.renderViewSelectionHelper(), SLOT( beginSurfaceSelection() ) ); - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( enableSurfaceSelection(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Select Points On - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SELECT_POINTS_ON"), false ); - anAction = createAction( SelectPointsOnId, tr("TOP_SELECT_POINTS_ON"), QIcon(aPixmap), - tr("MEN_SELECT_POINTS_ON"), tr("STB_SELECT_POINTS_ON"), 0, desk, true, - Implementation->Core.renderViewSelectionHelper(), SLOT( beginSurfacePointsSelection() ) ); - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( enableSurfacePointsSelection(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Select Cells Through - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SELECT_CELLS_THROUGH"), false ); - anAction = createAction( SelectCellsThroughId, tr("TOP_SELECT_CELLS_THROUGH"), QIcon(aPixmap), - tr("MEN_SELECT_CELLS_THROUGH"), tr("STB_SELECT_CELLS_THROUGH"), 0, desk, true, - Implementation->Core.renderViewSelectionHelper(), SLOT( beginFrustumSelection() ) ); - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( enableFrustumSelection(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Select Points Through - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SELECT_POINTS_THROUGH"), false ); - anAction = createAction( SelectPointsThroughId, tr("TOP_SELECT_POINTS_THROUGH"), QIcon(aPixmap), - tr("MEN_SELECT_POINTS_THROUGH"), tr("STB_SELECT_POINTS_THROUGH"), 0, desk, true, - Implementation->Core.renderViewSelectionHelper(), SLOT( beginFrustumPointsSelection() ) ); - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( enableFrustumPointSelection(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Select Block - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SELECT_BLOCK"), false ); - anAction = createAction( SelectBlockId, tr("TOP_SELECT_BLOCK"), QIcon(aPixmap), - tr("MEN_SELECT_BLOCK"), tr("STB_SELECT_BLOCK"), Qt::Key_B, desk, true, - Implementation->Core.renderViewSelectionHelper(), SLOT( beginBlockSelection() ) ); - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( enableBlockSelection(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Create action group for exclusively selected modes - QActionGroup* aModeGroup = new QActionGroup( desk ); - aModeGroup->addAction( action(InteractId) ); - aModeGroup->addAction( action(SelectCellsOnId) ); - aModeGroup->addAction( action(SelectPointsOnId) ); - aModeGroup->addAction( action(SelectCellsThroughId) ); - aModeGroup->addAction( action(SelectPointsThroughId) ); - aModeGroup->addAction( action(SelectBlockId) ); - - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( selectionModeChanged(int) ), - this, SLOT( onSelectionModeChanged(int) ) ); - // When a selection is marked, we revert to interaction mode. - connect( Implementation->Core.renderViewSelectionHelper(), SIGNAL( selectionFinished(int, int, int, int) ), - Implementation->Core.renderViewSelectionHelper(), SLOT( endSelection() ) ); + anAction = new QAction(tr("MEN_DELETE"), this); + anAction->setToolTip(tr("TOP_DELETE")); + anAction->setStatusTip(tr("STB_DELETE")); + registerAction(DeleteId, anAction); + new pqDeleteReaction(anAction); + + // Delete All + anAction = new QAction(tr("MEN_DELETE_ALL"), this); + anAction->setToolTip(tr("TOP_DELETE_ALL")); + anAction->setStatusTip(tr("STB_DELETE_ALL")); + registerAction(DeleteAllId, anAction); + new pqDeleteReaction(anAction, true); + // Setting - createAction( SettingsId, tr("TOP_SETTINGS"), QIcon(), - tr("MEN_SETTINGS"), tr("STB_SETTINGS"), - 0, desk, false, &Implementation->Core, SLOT( onEditSettings() ) ); + anAction = new QAction(tr("MEN_SETTINGS"), this); + anAction->setToolTip(tr("TOP_SETTINGS")); + anAction->setStatusTip(tr("STB_SETTINGS")); + registerAction(SettingsId, anAction); + new pqApplicationSettingsReaction(anAction); // View Settings - createAction( ViewSettingsId, tr("TOP_VIEW_SETTINGS"), QIcon(), - tr("MEN_VIEW_SETTINGS"), tr("STB_VIEW_SETTINGS"), - 0, desk, false, &Implementation->Core, SLOT( onEditViewSettings() ) ); + anAction = new QAction(tr("MEN_VIEW_SETTINGS"), this); + anAction->setToolTip(tr("TOP_VIEW_SETTINGS")); + anAction->setStatusTip(tr("STB_VIEW_SETTINGS")); + registerAction(ViewSettingsId, anAction); + new pqViewSettingsReaction(anAction); // --- Menu "View" - - // Camera submenu -> Reset - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_RESET_CAMERA"), false ); - anAction = createAction( ResetCameraId, tr("TOP_RESET_CAMERA"), QIcon(aPixmap), - tr("MEN_RESET_CAMERA"), tr("STB_RESET_CAMERA"), - 0, desk, false, &Implementation->Core, SLOT( resetCamera() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Camera submenu -> +X - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_+X"), false ); - anAction = createAction( PositiveXId, tr("TOP_+X"), QIcon(aPixmap), - tr("MEN_+X"), tr("STB_+X"), - 0, desk, false, &Implementation->Core, SLOT( resetViewDirectionPosX() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Camera submenu -> -X - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_-X"), false ); - anAction = createAction( NegativeXId, tr("TOP_-X"), QIcon(aPixmap), - tr("MEN_-X"), tr("STB_-X"), - 0, desk, false, &Implementation->Core, SLOT( resetViewDirectionNegX() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Camera submenu -> +Y - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_+Y"), false ); - anAction = createAction( PositiveYId, tr("TOP_+Y"), QIcon(aPixmap), - tr("MEN_+Y"), tr("STB_+Y"), - 0, desk, false, &Implementation->Core, SLOT( resetViewDirectionPosY() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Camera submenu -> -Y - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_-Y"), false ); - anAction = createAction( NegativeYId, tr("TOP_-Y"), QIcon(aPixmap), - tr("MEN_-Y"), tr("STB_-Y"), - 0, desk, false, &Implementation->Core, SLOT( resetViewDirectionNegY() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Camera submenu -> +Z - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_+Z"), false ); - anAction = createAction( PositiveZId, tr("TOP_+Z"), QIcon(aPixmap), - tr("MEN_+Z"), tr("STB_+Z"), - 0, desk, false, &Implementation->Core, SLOT( resetViewDirectionPosZ() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Camera submenu -> -Z - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_-Z"), false ); - anAction = createAction( NegativeZId, tr("TOP_-Z"), QIcon(aPixmap), - tr("MEN_-Z"), tr("STB_-Z"), - 0, desk, false, &Implementation->Core, SLOT( resetViewDirectionNegZ() ) ); - connect( &Implementation->Core, SIGNAL( enableFileSaveScreenshot(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Show Center - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SHOW_CENTER"), false ); - aQtxAction = new QtxAction( tr("TOP_SHOW_CENTER"), QIcon(aPixmap), - tr("MEN_SHOW_CENTER"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_SHOW_CENTER" ) ); - aQtxAction->setCheckable( true ); - registerAction( ShowCenterId, aQtxAction ); - connect( aQtxAction, SIGNAL( toggled(bool) ), - &Implementation->Core, SLOT( setCenterAxesVisibility(bool) ) ); - connect( &Implementation->Core, SIGNAL( enableShowCenterAxis(bool) ), - this, SLOT( onShowCenterAxisChanged(bool) ), Qt::QueuedConnection ); - - // Reset Center - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_RESET_CENTER"), false ); - anAction = createAction( ResetCenterId, tr("TOP_RESET_CENTER"), QIcon(aPixmap), - tr("MEN_RESET_CENTER"), tr("STB_RESET_CENTER"), 0, desk, false, - &Implementation->Core, SLOT( resetCenterOfRotationToCenterOfCurrentData() ) ); - connect( &Implementation->Core, SIGNAL( enableResetCenter(bool) ), - anAction, SLOT( setEnabled(bool) ) ); - - // Pick Center - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_PICK_CENTER"), false ); - aQtxAction = new QtxAction( tr("TOP_PICK_CENTER"), QIcon(aPixmap), - tr("MEN_PICK_CENTER"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_PICK_CENTER" ) ); - aQtxAction->setCheckable( true ); - registerAction( PickCenterId, aQtxAction ); - connect( aQtxAction, SIGNAL( toggled(bool) ), - &Implementation->Core, SLOT( pickCenterOfRotation(bool) ) ); - connect( &Implementation->Core, SIGNAL( enablePickCenter(bool) ), - aQtxAction, SLOT( setEnabled(bool) ) ); - connect( &Implementation->Core, SIGNAL( pickingCenter(bool) ), - aQtxAction, SLOT( setChecked(bool) ) ); - - // Show Color Legend - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_SHOW_COLOR_LEGEND"), false ); - aQtxAction = new QtxAction( tr("TOP_SHOW_COLOR_LEGEND"), QIcon(aPixmap), - tr("MEN_SHOW_COLOR_LEGEND"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_SHOW_COLOR_LEGEND" ) ); - aQtxAction->setCheckable( true ); - aQtxAction->setEnabled(false); - registerAction( ShowColorLegendId, aQtxAction ); - pqScalarBarVisibilityAdaptor* sbva = new pqScalarBarVisibilityAdaptor( aQtxAction ); - connect( Implementation->Core.getObjectInspectorDriver(), - SIGNAL( representationChanged(pqDataRepresentation*, pqView*) ), - sbva, - SLOT( setActiveRepresentation(pqDataRepresentation*) ) ); - - // --- Menu "Sources" and "Filters" - // As ParaView is responsible for updating "Sources" and "Filters" menus, - // actions for these menus are created inside the pqMainWindowCore. - // So, the creation of corresponding QMenu object is in the PVGUI_Module::pvCreateMenus(). - - // --- Menu "Animation" - - pqVCRController* vcrcontroller = &Implementation->Core.VCRController(); - - // First Frame - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_FIRST_FRAME"), false ); - anAction = createAction( FirstFrameId, tr("TOP_FIRST_FRAME"), QIcon(aPixmap), - tr("MEN_FIRST_FRAME"), tr("STB_FIRST_FRAME"), - 0, desk, false, vcrcontroller, SLOT( onFirstFrame() ) ); - connect( vcrcontroller, SIGNAL( enabled(bool) ), anAction, SLOT( setEnabled(bool) ) ); - - // Previous Frame - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_PREVIOUS_FRAME"), false ); - anAction = createAction( PreviousFrameId, tr("TOP_PREVIOUS_FRAME"), QIcon(aPixmap), - tr("MEN_PREVIOUS_FRAME"), tr("STB_PREVIOUS_FRAME"), - 0, desk, false, vcrcontroller, SLOT( onPreviousFrame() ) ); - connect( vcrcontroller, SIGNAL( enabled(bool) ), anAction, SLOT( setEnabled(bool) ) ); - - // Play - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_PLAY"), false ); - anAction = createAction( PlayId, tr("TOP_PLAY"), QIcon(aPixmap), - tr("MEN_PLAY"), tr("STB_PLAY"), - 0, desk, false, vcrcontroller, SLOT( onPlay() ) ); - connect( vcrcontroller, SIGNAL( enabled(bool) ), anAction, SLOT( setEnabled(bool) ) ); - - // Next Frame - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_NEXT_FRAME"), false ); - anAction = createAction( NextFrameId, tr("TOP_NEXT_FRAME"), QIcon(aPixmap), - tr("MEN_NEXT_FRAME"), tr("STB_NEXT_FRAME"), - 0, desk, false, vcrcontroller, SLOT( onNextFrame() ) ); - connect( vcrcontroller, SIGNAL( enabled(bool) ), anAction, SLOT( setEnabled(bool) ) ); - - // Last Frame - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_LAST_FRAME"), false ); - anAction = createAction( LastFrameId, tr("TOP_LAST_FRAME"), QIcon(aPixmap), - tr("MEN_LAST_FRAME"), tr("STB_LAST_FRAME"), - 0, desk, false, vcrcontroller, SLOT( onLastFrame() ) ); - connect( vcrcontroller, SIGNAL( enabled(bool) ), anAction, SLOT( setEnabled(bool) ) ); - - // Loop - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_LOOP"), false ); - aQtxAction = new QtxAction( tr("TOP_LOOP"), QIcon(aPixmap), - tr("MEN_LOOP"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_LOOP" ) ); - aQtxAction->setCheckable(true); - registerAction( LoopId, aQtxAction ); - connect( aQtxAction, SIGNAL( toggled(bool) ), vcrcontroller, SLOT( onLoop(bool) ) ); - connect( vcrcontroller, SIGNAL( enabled(bool) ), aQtxAction, SLOT( setEnabled(bool) ) ); - connect( vcrcontroller, SIGNAL( loop(bool) ), aQtxAction, SLOT( setChecked(bool) ) ); - - connect( vcrcontroller, SIGNAL( playing(bool) ), this, SLOT( onPlaying(bool) ) ); - connect( vcrcontroller, SIGNAL( timeRanges(double, double) ), - this, SLOT( setTimeRanges(double, double) ) ); + pqViewManager* viewManager = qobject_cast( + pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + if (viewManager) { + anAction = new QAction("Full Screen", this); + anAction->setObjectName("actionFullScreen"); + anAction->setShortcut(QKeySequence("F11")); + connect(anAction, SIGNAL(triggered()), viewManager, SLOT(toggleFullScreen())); + registerAction(FullScreenId, anAction); + } // --- Menu "Tools" - // Create Custom Filter - createAction( CreateCustomFilterId, tr("TOP_CREATE_CUSTOM_FILTER"), QIcon(), - tr("MEN_CREATE_CUSTOM_FILTER"), tr("STB_CREATE_CUSTOM_FILTER"), - 0, desk, false, &Implementation->Core, SLOT( onToolsCreateCustomFilter() ) ); - - // Manage Custom Filters - createAction( ManageCustomFiltersId, tr("TOP_MANAGE_CUSTOM_FILTERS"), QIcon(), - tr("MEN_MANAGE_CUSTOM_FILTERS"), tr("STB_MANAGE_CUSTOM_FILTERS"), - 0, desk, false, &Implementation->Core, SLOT( onToolsManageCustomFilters() ) ); + anAction = new QAction(tr("MEN_CREATE_CUSTOM_FILTER"), this); + anAction->setToolTip(tr("TOP_CREATE_CUSTOM_FILTER")); + anAction->setStatusTip(tr("STB_CREATE_CUSTOM_FILTER")); + registerAction(CreateCustomFilterId, anAction); + new pqCreateCustomFilterReaction(anAction << pqSetName("actionToolsCreateCustomFilter")); - // Create Lookmark - createAction( CreateLookmarkId, tr("TOP_CREATE_LOOKMARK"), QIcon(), - tr("MEN_CREATE_LOOKMARK"), tr("STB_CREATE_LOOKMARK"), - 0, desk, false, &Implementation->Core, SLOT( onToolsCreateLookmark() ) ); + // Manage Custom Filters + anAction = new QAction(tr("MEN_MANAGE_CUSTOM_FILTERS"), this); + anAction->setToolTip(tr("TOP_MANAGE_CUSTOM_FILTERS")); + anAction->setStatusTip(tr("STB_MANAGE_CUSTOM_FILTERS")); + registerAction(ManageCustomFiltersId, anAction); + new pqManageCustomFiltersReaction(anAction << pqSetName("actionToolsManageCustomFilters")); // Manage Links - createAction( ManageLinksId, tr("TOP_MANAGE_LINKS"), QIcon(), - tr("MEN_MANAGE_LINKS"), tr("STB_MANAGE_LINKS"), - 0, desk, false, &Implementation->Core, SLOT( onToolsManageLinks() ) ); + anAction = new QAction(tr("MEN_MANAGE_LINKS"), this); + anAction->setToolTip(tr("TOP_MANAGE_LINKS")); + anAction->setStatusTip(tr("STB_MANAGE_LINKS")); + registerAction(ManageLinksId, anAction); + new pqManageLinksReaction(anAction << pqSetName("actionToolsManageLinks")); // Add Camera Link - createAction( AddCameraLinkId, tr("TOP_ADD_CAMERA_LINK"), QIcon(), - tr("MEN_ADD_CAMERA_LINK"), tr("STB_ADD_CAMERA_LINK"), - 0, desk, false, this, SLOT( onAddCameraLink() ) ); + anAction = new QAction(tr("MEN_ADD_CAMERA_LINK"), this); + anAction->setToolTip(tr("TOP_ADD_CAMERA_LINK")); + anAction->setStatusTip(tr("STB_ADD_CAMERA_LINK")); + registerAction(AddCameraLinkId, anAction); + new pqCameraLinkReaction(anAction << pqSetName("actionToolsAddCameraLink")); // Manage Plugins/Extensions - createAction( ManagePluginsExtensionsId, tr( "TOP_MANAGE_PLUGINS" ), QIcon(), - tr( "MEN_MANAGE_PLUGINS" ), tr( "STB_MANAGE_PLUGINS" ), - 0, desk, false, &Implementation->Core, SLOT( onManagePlugins() ) ); - - // Dump Widget Names - createAction( DumpWidgetNamesId, tr( "TOP_DUMP_WIDGET_NAMES" ), QIcon(), - tr( "MEN_DUMP_WIDGET_NAMES" ), tr( "STB_DUMP_WIDGET_NAMES" ), - 0, desk, false, &Implementation->Core, SLOT( onToolsDumpWidgetNames() ) ); + anAction = new QAction(tr("MEN_MANAGE_PLUGINS"), this); + anAction->setToolTip(tr("TOP_MANAGE_PLUGINS")); + anAction->setStatusTip(tr("STB_MANAGE_PLUGINS")); + registerAction(ManagePluginsExtensionsId, anAction); + new pqManagePluginsReaction(anAction << pqSetName("actionManage_Plugins")); // Record Test - createAction( RecordTestId, tr( "TOP_RECORD_TEST" ), QIcon(), - tr( "MEN_RECORD_TEST" ), tr( "STB_RECORD_TEST" ), - 0, desk, false, &Implementation->Core, SLOT( onToolsRecordTest() ) ); - - // Record Test Screenshot - createAction( RecordTestScreenshotId, tr( "TOP_RECORD_TEST_SCREENSHOT" ), QIcon(), - tr( "MEN_RECORD_TEST_SCREENSHOT" ), tr( "STB_RECORD_TEST_SCREENSHOT" ), - 0, desk, false, &Implementation->Core, SLOT( onToolsRecordTestScreenshot() ) ); - + anAction = new QAction(tr("MEN_RECORD_TEST"), this); + anAction->setToolTip(tr("TOP_RECORD_TEST")); + anAction->setStatusTip(tr("STB_RECORD_TEST")); + registerAction(RecordTestId, anAction); + new pqTestingReaction(anAction << pqSetName("actionToolsRecordTest"), pqTestingReaction::RECORD); + // Play Test - createAction( PlayTestId, tr( "TOP_PLAY_TEST" ), QIcon(), - tr( "MEN_PLAY_TEST" ), tr( "STB_PLAY_TEST" ), - 0, desk, false, &Implementation->Core, SLOT( onToolsPlayTest() ) ); + anAction = new QAction(tr("MEN_PLAY_TEST"), this); + anAction->setToolTip(tr("TOP_PLAY_TEST")); + anAction->setStatusTip(tr("STB_PLAY_TEST")); + registerAction(PlayTestId, anAction); + new pqTestingReaction(anAction << pqSetName("actionToolsPlayTest"), pqTestingReaction::PLAYBACK); // Max Window Size - aQtxAction = new QtxAction( tr("TOP_MAX_WINDOW_SIZE"), QIcon(), - tr("MEN_MAX_WINDOW_SIZE"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_MAX_WINDOW_SIZE" ) ); - aQtxAction->setCheckable(true); - registerAction( MaxWindowSizeId, aQtxAction ); - connect( aQtxAction, SIGNAL( toggled(bool) ), &Implementation->Core, SLOT( enableTestingRenderWindowSize(bool) ) ); + anAction = new QAction(tr("MEN_MAX_WINDOW_SIZE"), this); + anAction->setToolTip(tr("TOP_MAX_WINDOW_SIZE")); + anAction->setStatusTip(tr("PRP_APP_MAX_WINDOW_SIZE")); + anAction->setCheckable(true); + registerAction(MaxWindowSizeId, anAction); + new pqTestingReaction(anAction << pqSetName("actionTesting_Window_Size"), + pqTestingReaction::LOCK_VIEW_SIZE); // Timer Log - createAction( TimerLogId, tr( "TOP_TIMER_LOG" ), QIcon(), - tr( "MEN_TIMER_LOG" ), tr( "STB_TIMER_LOG" ), - 0, desk, false, &Implementation->Core, SLOT( onToolsTimerLog() ) ); + anAction = new QAction(tr("MEN_TIMER_LOG"), this); + anAction->setToolTip(tr("TOP_TIMER_LOG")); + anAction->setStatusTip(tr("STB_TIMER_LOG")); + registerAction(TimerLogId, anAction); + new pqTimerLogReaction(anAction << pqSetName("actionToolsTimerLog")); // Output Window - createAction( OutputWindowId, tr( "TOP_OUTPUT_WINDOW" ), QIcon(), - tr( "MEN_OUTPUT_WINDOW" ), tr( "STB_OUTPUT_WINDOW" ), - 0, desk, false, &Implementation->Core, SLOT( onToolsOutputWindow() ) ); + anAction = new QAction(tr("MEN_OUTPUT_WINDOW"), this); + anAction->setToolTip(tr("TOP_OUTPUT_WINDOW")); + anAction->setStatusTip(tr("STB_OUTPUT_WINDOW")); + registerAction(OutputWindowId, anAction); + anAction << pqSetName("actionToolsOutputWindow"); + connect(anAction, SIGNAL(triggered()), pqApplicationCore::instance(), SLOT(showOutputWindow())); - // Python Shell - createAction( PythonShellId, tr( "TOP_PYTHON_SHELL" ), QIcon(), - tr( "MEN_PYTHON_SHELL" ), tr( "STB_PYTHON_SHELL" ), - 0, desk, false, &Implementation->Core, SLOT( onToolsPythonShell() ) ); + // Python Shell + anAction = new QAction(tr("MEN_PYTHON_SHELL"), this); + anAction->setToolTip(tr("TOP_PYTHON_SHELL")); + anAction->setStatusTip(tr("STB_PYTHON_SHELL")); + registerAction(PythonShellId, anAction); + new pqPythonShellReaction(anAction << pqSetName("actionToolsPythonShell")); // --- Menu "Help" // About - createAction( AboutParaViewId, tr( "TOP_ABOUT" ), QIcon(), - tr( "MEN_ABOUT" ), tr( "STB_ABOUT" ), - 0, desk, false, this, SLOT( onHelpAbout() ) ); + anAction = new QAction(tr("MEN_ABOUT"), this); + anAction->setToolTip(tr("TOP_ABOUT")); + anAction->setStatusTip(tr("STB_ABOUT")); + registerAction(AboutParaViewId, anAction); + new pqAboutDialogReaction(anAction << pqSetName("actionAbout")); // Native ParaView user documentation aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_PARAVIEW_HELP"), false ); - createAction( ParaViewHelpId, tr( "TOP_PARAVIEW_HELP" ), QIcon(aPixmap), - tr( "MEN_PARAVIEW_HELP" ), tr( "STB_PARAVIEW_HELP" ), - 0, desk, false, this, SLOT( onParaViewHelp() ) ); - - // Enable Tooltips - aQtxAction = new QtxAction( tr("TOP_ENABLE_TOOLTIPS"), QIcon(), - tr("MEN_ENABLE_TOOLTIPS"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_ENABLE_TOOLTIPS" ) ); - aQtxAction->setCheckable(true); - aQtxAction->setChecked(true); - registerAction( EnableTooltipsId, aQtxAction ); + anAction = new QAction(QIcon(aPixmap), tr("MEN_PARAVIEW_HELP"), this); + anAction->setToolTip(tr("TOP_PARAVIEW_HELP")); + anAction->setStatusTip(tr("STB_PARAVIEW_HELP")); + anAction->setShortcut(QKeySequence::HelpContents); + connect(anAction, SIGNAL(triggered()), this, SLOT(showParaViewHelp())); + registerAction(ParaViewHelpId, anAction); + //new pqHelpReaction(anAction << pqSetName("actionHelp")); } /*! @@ -555,20 +374,20 @@ void PVGUI_Module::pvCreateActions() */ void PVGUI_Module::pvCreateMenus() { + SUIT_Desktop* desk = application()->desktop(); + // --- Menu "File" int aPVMnu = createMenu( tr( "MEN_DESK_FILE" ), -1, -1 ); createMenu( OpenFileId, aPVMnu, 5 ); // Recent Files - int aMenuId = createMenu( tr( "MEN_RECENT_FILES" ), aPVMnu, -1, 5 ); - QMenu* aMenu = menuMgr()->findMenu( aMenuId ); - Implementation->RecentFilesMenu = new pqRecentFilesMenu( *aMenu, getApp()->desktop() ); - connect( Implementation->RecentFilesMenu, SIGNAL( serverConnectFailed() ), - &Implementation->Core, SLOT( makeDefaultConnectionIfNoneExists() ) ); - QList anActns = aMenu->actions(); - for (int i = 0; i < anActns.size(); ++i) - createMenu( anActns.at(i), aMenuId ); + int aMenuId = createMenu( tr( "MEN_RECENT_FILES" ), aPVMnu, -1, 5 ); + QMenu* aMenu = menuMgr()->findMenu( aMenuId ); + Implementation->RecentFilesMenu = new pqRecentFilesMenu( *aMenu, getApp()->desktop() ); + QList anActns = aMenu->actions(); + for (int i = 0; i < anActns.size(); ++i) + createMenu( anActns.at(i), aMenuId ); createMenu( separator(), aPVMnu, -1, 5 ); @@ -602,50 +421,33 @@ void PVGUI_Module::pvCreateMenus() createMenu( separator(), aPVMnu ); createMenu( ChangeInputId, aPVMnu ); + createMenu( IgnoreTimeId, aPVMnu ); createMenu( DeleteId, aPVMnu ); createMenu( DeleteAllId, aPVMnu ); createMenu( separator(), aPVMnu ); - createMenu( InteractId, aPVMnu ); - createMenu( SelectCellsOnId, aPVMnu ); - createMenu( SelectPointsOnId, aPVMnu ); - createMenu( SelectCellsThroughId, aPVMnu ); - createMenu( SelectPointsThroughId, aPVMnu ); - createMenu( SelectBlockId, aPVMnu ); - createMenu( separator(), aPVMnu ); - createMenu( SettingsId, aPVMnu ); createMenu( ViewSettingsId, aPVMnu ); createMenu( separator(), aPVMnu ); // --- Menu "View" aPVMnu = createMenu( tr( "MEN_DESK_VIEW" ), -1, -1 ); - - int aCameraMnu = createMenu( tr( "MEN_CAMERA" ), aPVMnu ); - createMenu( ResetCameraId, aCameraMnu ); - createMenu( PositiveXId, aCameraMnu ); - createMenu( NegativeXId, aCameraMnu ); - createMenu( PositiveYId, aCameraMnu ); - createMenu( NegativeYId, aCameraMnu ); - createMenu( PositiveZId, aCameraMnu ); - createMenu( NegativeZId, aCameraMnu ); - createMenu( separator(), aPVMnu ); - - createMenu( ShowCenterId, aPVMnu ); - createMenu( ResetCenterId, aPVMnu ); - createMenu( PickCenterId, aPVMnu ); - createMenu( ShowColorLegendId, aPVMnu ); + myToolbarsMenuId = createMenu( "Toolbars", aPVMnu ); + aMenu = getMenu( myToolbarsMenuId ); + if (aMenu) { + buildToolbarsMenu(); + connect(aMenu, SIGNAL(aboutToShow()), this, SLOT(buildToolbarsMenu())); + } createMenu( separator(), aPVMnu ); - + createMenu( FullScreenId, aPVMnu ); + // --- Menu "Sources" // Install ParaView managers for "Sources" menu QMenu* aRes = 0; - mySourcesMenuId = createMenu( tr( "MEN_DESK_SOURCES" ), -1, -1, 60 ); + mySourcesMenuId = createMenu( tr( "MEN_DESK_SOURCES" ), -1, -1, 60); if ( (aRes = getMenu( mySourcesMenuId )) ) { - Implementation->Core.setSourceMenu( aRes ); - connect( &Implementation->Core, SIGNAL( enableSourceCreate(bool) ), - aRes, SLOT( setEnabled(bool) ) ); + pqParaViewMenuBuilders::buildSourcesMenu(*aRes, desk); } // --- Menu "Filters" @@ -653,36 +455,28 @@ void PVGUI_Module::pvCreateMenus() // Install ParaView managers for "Filters" menu myFiltersMenuId = createMenu( tr( "MEN_DESK_FILTERS" ), -1, -1, 70 ); if ( (aRes = getMenu( myFiltersMenuId )) ) { - Implementation->Core.setFilterMenu( aRes ); - connect( &Implementation->Core, SIGNAL( enableFilterCreate(bool) ), - aRes, SLOT( setEnabled(bool) ) ); + pqParaViewMenuBuilders::buildFiltersMenu(*aRes, desk); } - - // --- Menu "Animation" - int anAnimationMnu = createMenu( tr( "MEN_DESK_ANIMATION" ), -1, -1, 80 ); - - createMenu( FirstFrameId, anAnimationMnu ); - createMenu( PreviousFrameId, anAnimationMnu ); - createMenu( PlayId, anAnimationMnu ); - createMenu( NextFrameId, anAnimationMnu ); - createMenu( LastFrameId, anAnimationMnu ); - createMenu( LoopId, anAnimationMnu ); + // --- Menu "Macros" + myMacrosMenuId = createMenu( tr( "MEN_MACROS" ), -1, -1, 80 ); + if ( (aRes = getMenu( myMacrosMenuId )) ) { + pqParaViewMenuBuilders::buildMacrosMenu(*aRes); + } + // --- Menu "Tools" int aToolsMnu = createMenu( tr( "MEN_DESK_TOOLS" ), -1, -1, 90 ); createMenu( CreateCustomFilterId, aToolsMnu ); + createMenu( AddCameraLinkId, aToolsMnu ); + createMenu( separator(), aToolsMnu ); createMenu( ManageCustomFiltersId, aToolsMnu ); - createMenu( CreateLookmarkId, aToolsMnu ); createMenu( ManageLinksId, aToolsMnu ); - createMenu( AddCameraLinkId, aToolsMnu ); createMenu( ManagePluginsExtensionsId, aToolsMnu ); createMenu( separator(), aToolsMnu ); - createMenu( DumpWidgetNamesId, aToolsMnu ); createMenu( RecordTestId, aToolsMnu ); - createMenu( RecordTestScreenshotId, aToolsMnu ); createMenu( PlayTestId, aToolsMnu ); createMenu( MaxWindowSizeId, aToolsMnu ); createMenu( separator(), aToolsMnu ); @@ -690,18 +484,16 @@ void PVGUI_Module::pvCreateMenus() createMenu( TimerLogId, aToolsMnu ); createMenu( OutputWindowId, aToolsMnu ); createMenu( separator(), aToolsMnu ); - + createMenu( PythonShellId, aToolsMnu ); // --- Menu "Help" int aHelpMnu = createMenu( tr( "MEN_DESK_HELP" ), -1, -1 ); - createMenu( AboutParaViewId, aHelpMnu ); - createMenu( ParaViewHelpId, aHelpMnu ); - createMenu( separator(), aHelpMnu ); - createMenu( EnableTooltipsId, aHelpMnu ); + int aHelpModule = createMenu( LightApp_Application::tr( "MEN_DESK_MODULE_HELP" ), aHelpMnu, -1 ); + createMenu( ParaViewHelpId, aHelpModule ); } /*! @@ -711,149 +503,7 @@ void PVGUI_Module::pvCreateMenus() void PVGUI_Module::pvCreateToolBars() { SUIT_Desktop* desk = application()->desktop(); - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - - QPixmap aPixmap; - QtxAction* aQtxAction; - - // --- Toolbar "Main Controls" - - int aToolId = createTool( tr("TOOL_MAIN_CONTROLS") ); - - createTool( OpenFileId, aToolId ); - createTool( SaveDataId, aToolId ); - createTool( separator(), aToolId ); - createTool( ConnectId, aToolId ); - createTool( DisconnectId, aToolId ); - createTool( separator(), aToolId ); - createTool( ParaViewHelpId, aToolId ); - - // --- Toolbar "Selection Controls" - - mySelectionControlsTb = createTool( tr("TOOL_SELECTION_CONTROLS") ); - - createTool( InteractId, mySelectionControlsTb ); - createTool( SelectCellsOnId, mySelectionControlsTb ); - createTool( SelectPointsOnId, mySelectionControlsTb ); - createTool( SelectCellsThroughId, mySelectionControlsTb ); - createTool( SelectPointsThroughId, mySelectionControlsTb ); - createTool( SelectBlockId, mySelectionControlsTb ); - - // --- Toolbar "Undo/Redo Controls" - - aToolId = createTool( tr("TOOL_UNDOREDO_CONTROLS") ); - - createTool( UndoId, aToolId ); - createTool( RedoId, aToolId ); - - // --- Toolbar "VCR Controls" - - aToolId = createTool( tr("TOOL_VCR_CONTROLS") ); - - createTool( FirstFrameId, aToolId ); - createTool( PreviousFrameId, aToolId ); - createTool( PlayId, aToolId ); - createTool( NextFrameId, aToolId ); - createTool( LastFrameId, aToolId ); - createTool( LoopId, aToolId ); - - pqProgressManager* progress_manager = pqApplicationCore::instance()->getProgressManager(); - progress_manager->addNonBlockableObject( toolMgr()->toolBar( aToolId ) ); - - // --- Toolbar "Active Variable Controls" - - aToolId = createTool( tr("TOOL_ACTIVE_VARIABLE_CONTROLS") ); - QToolBar* aTB = toolMgr()->toolBar( aToolId ); - - createTool( ShowColorLegendId, aToolId ); - - // To set up the color map tool buttons. - pqColorScaleToolbar* colorScale = Implementation->Core.getColorScaleEditorManager(); - - // Edit Color Map - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_EDIT_COLOR_MAP"), false ); - aQtxAction = new QtxAction( tr("TOP_EDIT_COLOR_MAP"), QIcon(aPixmap), - tr("MEN_EDIT_COLOR_MAP"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_EDIT_COLOR_MAP" ) ); - registerAction( EditColorMapId, aQtxAction ); - connect( &Implementation->Core, SIGNAL( enableVariableToolbar(bool) ), - aQtxAction, SLOT( setEnabled(bool) ) ); - colorScale->setColorAction( aQtxAction ); /// !!! - createTool( EditColorMapId, aToolId ); - - // Reset Range - aPixmap = resMgr->loadPixmap( "ParaView", tr("ICON_RESET_RANGE"), false ); - aQtxAction = new QtxAction( tr("TOP_RESET_RANGE"), QIcon(aPixmap), - tr("MEN_RESET_RANGE"), 0, desk ); - aQtxAction->setStatusTip( tr( "PRP_APP_RESET_RANGE" ) ); - registerAction( ResetRangeId, aQtxAction ); - connect( &Implementation->Core, SIGNAL( enableVariableToolbar(bool) ), - aQtxAction, SLOT( setEnabled(bool) ) ); - colorScale->setRescaleAction( aQtxAction ); /// !!! - createTool( ResetRangeId, aToolId ); - - Implementation->Core.setupVariableToolbar(aTB); - QList anActns = aTB->actions(); - for (int i = 0; i < anActns.size(); ++i) - if ( anActns.at(i) != action(ShowColorLegendId) ) { - createTool( anActns.at(i), aToolId ); - connect( &Implementation->Core, SIGNAL( enableVariableToolbar(bool) ), - anActns.at(i), SLOT( setEnabled(bool) ) ); - } - - // --- Toolbar "Representation" - - aToolId = createTool( tr("TOOL_REPRESENTATION") ); - aTB = toolMgr()->toolBar( aToolId ); - - Implementation->Core.setupRepresentationToolbar(aTB); - anActns = aTB->actions(); - for (int i = 0; i < anActns.size(); ++i) { - createTool( anActns.at(i), aToolId ); - connect( &Implementation->Core, SIGNAL( enableVariableToolbar(bool) ), - anActns.at(i), SLOT( setEnabled(bool) ) ); - } - - // --- Toolbar "Camera Controls" - - aToolId = createTool( tr("TOOL_CAMERA_CONTROLS") ); - - createTool( ResetCameraId, aToolId ); - createTool( PositiveXId, aToolId ); - createTool( NegativeXId, aToolId ); - createTool( PositiveYId, aToolId ); - createTool( NegativeYId, aToolId ); - createTool( PositiveZId, aToolId ); - createTool( NegativeZId, aToolId ); - - // --- Toolbar "Center Axes Controls" - - aToolId = createTool( tr("TOOL_CENTER_AXES_CONTROLS") ); - - createTool( ShowCenterId, aToolId ); - createTool( ResetCenterId, aToolId ); - createTool( PickCenterId, aToolId ); - - // --- Toolbar "Common Filters" - - aToolId = createTool( tr("TOOL_COMMON_FILTERS") ); - aTB = toolMgr()->toolBar( aToolId ); - - Implementation->Core.setupCommonFiltersToolbar(aTB); - anActns = aTB->actions(); - for (int i = 0; i < anActns.size(); ++i) - createTool( anActns.at(i), aToolId ); - - // --- Toolbar "Lookmarks" - - aToolId = createTool( tr("TOOL_LOOKMARKS") ); - aTB = toolMgr()->toolBar(aToolId); - - aTB->setContextMenuPolicy(Qt::CustomContextMenu); - aTB->setOrientation(Qt::Vertical); - aTB->setAllowedAreas(Qt::RightToolBarArea); - toolMgr()->mainWindow()->addToolBar(Qt::RightToolBarArea,aTB); - Implementation->Core.setupLookmarkToolbar(aTB); + pqParaViewMenuBuilders::buildToolbars(*desk); } /*! @@ -870,3 +520,60 @@ QMenu* PVGUI_Module::getMenu( const int id ) } return res; } + +/*! + \brief Returns list of ParaView toolbars +*/ +QList PVGUI_Module::getParaViewToolbars() +{ + QList all_toolbars = application()->desktop()->findChildren(); + // First two toolbars has to be ignored because they are not from ParaView + if (all_toolbars.size() > 2) { + all_toolbars.removeFirst(); + all_toolbars.removeFirst(); + } + return all_toolbars; +} + + + +/*! + \brief Builds a menu which referred to toolbars +*/ +void PVGUI_Module::buildToolbarsMenu() +{ + SUIT_Desktop* desk = application()->desktop(); + QMenu* aMenu = menuMgr()->findMenu( myToolbarsMenuId ); + if (aMenu) { + aMenu->clear(); + QList child_menus = aMenu->findChildren(); + foreach (QMenu* menu, child_menus) { + delete menu; + } + QList all_toolbars = getParaViewToolbars(); + + // 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(aMenu) << 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 = aMenu->addMenu(sub_menu); + menu_action->setText(toolbar->windowTitle()); + } else { + delete sub_menu; + } + } + disconnect(aMenu, SIGNAL(aboutToShow()), this, SLOT(buildToolbarsMenu())); + } +} + diff --git a/src/PVGUI/PVGUI_Module_impl.h b/src/PVGUI/PVGUI_Module_impl.h index 054f6f2f..9f94d02a 100644 --- a/src/PVGUI/PVGUI_Module_impl.h +++ b/src/PVGUI/PVGUI_Module_impl.h @@ -27,13 +27,17 @@ #define PVGUI_Module_impl_H #include "PVGUI_Module.h" +#include "PVGUI_OutputWindowAdapter.h" //#include #include #include -#include #include +#include +#include +#include + ////////////////////////////////////////////////////////////////////////////// // PVGUI_Module::pqImplementation @@ -41,30 +45,17 @@ class PVGUI_Module::pqImplementation { public: - pqImplementation(QWidget* parent) : - //AssistantClient(0), - myHelpWindow(0), - Core(parent), + pqImplementation(QWidget* parent): RecentFilesMenu(0) - { - } + { } ~pqImplementation() - { - if (myHelpWindow) - delete myHelpWindow; - } + { } - //QPointer AssistantClient; - pqMainWindowCore Core; pqRecentFilesMenu* RecentFilesMenu; - //QPointer ActiveServer; - QString DocumentationDir; - QPointer myHelpWindow; - - static vtkPVMain* myPVMain; - static pqOptions* myPVOptions; - static PVGUI_ProcessModuleHelper* myPVHelper; + static pqApplicationCore* Core; + static PVGUI_OutputWindowAdapter* OutputWindowAdapter; + static QPointer helpWindow; }; #endif // PVGUI_Module_impl_H diff --git a/src/PVGUI/PVGUI_Module_widgets.cxx b/src/PVGUI/PVGUI_Module_widgets.cxx index edcf1bb6..56d02037 100644 --- a/src/PVGUI/PVGUI_Module_widgets.cxx +++ b/src/PVGUI/PVGUI_Module_widgets.cxx @@ -32,19 +32,40 @@ #include #include #include +#include +#include -//VSV #include #include //VSV #include #include -#include #include -#include -#include -#include +#include #include #include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /*! \brief Create dock widgets for ParaView widgets such as object inspector, pipeline browser, etc. @@ -54,128 +75,86 @@ void PVGUI_Module::setupDockWidgets() { SUIT_Desktop* desk = application()->desktop(); - // See ParaView src/Applications/Client/MainWindow.cxx + // Pipeline QDockWidget* pipelineBrowserDock = new QDockWidget( tr( "TTL_PIPELINE_BROWSER" ), desk ); pipelineBrowserDock->setObjectName("pipelineBrowserDock"); pipelineBrowserDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::LeftDockWidgetArea, pipelineBrowserDock ); - Implementation->Core.setupPipelineBrowser( pipelineBrowserDock ); - pqPipelineBrowser *browser = Implementation->Core.pipelineBrowser(); - Implementation->Core.pipelineMenu().setModels(browser->getModel(), browser->getSelectionModel()); + pqPipelineBrowserWidget* browser = new pqPipelineBrowserWidget(pipelineBrowserDock); + pqParaViewMenuBuilders::buildPipelineBrowserContextMenu(*browser); + pipelineBrowserDock->setWidget(browser); myDockWidgets.append(pipelineBrowserDock); + //Object inspector QDockWidget* objectInspectorDock = new QDockWidget( tr( "TTL_OBJECT_INSPECTOR" ), desk ); objectInspectorDock->setObjectName("objectInspectorDock"); objectInspectorDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::LeftDockWidgetArea, objectInspectorDock ); - pqProxyTabWidget* const proxyTab = Implementation->Core.setupProxyTabWidget( objectInspectorDock ); + pqProxyTabWidget* proxyTab = new pqProxyTabWidget(objectInspectorDock); + proxyTab->setShowOnAccept(true); + objectInspectorDock->setWidget(proxyTab); connect( proxyTab->getObjectInspector(), SIGNAL( helpRequested(QString) ), - this, SLOT( showHelpForProxy(QString) ) ); - connect( proxyTab->getObjectInspector(), SIGNAL( preaccept() ), - this, SLOT( onPreAccept() ) ); - connect( proxyTab->getObjectInspector(), SIGNAL( postaccept() ), - this, SLOT( onPostAccept() ) ); + this, SLOT( showHelpForProxy(QString) ) ); + //connect( proxyTab->getObjectInspector(), SIGNAL( preaccept() ), this, SLOT( onPreAccept() ) ); + //connect( proxyTab->getObjectInspector(), SIGNAL( postaccept() ), this, SLOT( onPostAccept() ) ); myDockWidgets.append(objectInspectorDock); - + + // Statistic View QDockWidget* statisticsViewDock = new QDockWidget( tr( "TTL_STATISTICS_VIEW" ), desk ); statisticsViewDock->setObjectName("statisticsViewDock"); - statisticsViewDock->setAllowedAreas( Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); + statisticsViewDock->setAllowedAreas(Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea| + Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::BottomDockWidgetArea, statisticsViewDock ); - Implementation->Core.setupStatisticsView( statisticsViewDock ); + pqDataInformationWidget* aStatWidget = new pqDataInformationWidget(statisticsViewDock); + statisticsViewDock->setWidget(aStatWidget); myDockWidgets.append(statisticsViewDock); - QDockWidget* animationPanelDock = new QDockWidget( tr( "TTL_ANIMATION_INSPECTOR" ), desk ); - animationPanelDock->setObjectName("animationPanelDock"); - desk->addDockWidget( Qt::LeftDockWidgetArea, animationPanelDock ); - //pqAnimationPanel* animation_panel = Implementation->Core.setupAnimationPanel( animationPanelDock ); - pqAnimationViewWidget* animation_panel = Implementation->Core.setupAnimationView( animationPanelDock ); - - int aToolId = createTool( tr("TOOL_CURRENT_TIME_CONTROLS") ); - QToolBar* aTB = toolMgr()->toolBar( aToolId ); - //animation_panel->setCurrentTimeToolbar( aTB ); - QList anActns = aTB->actions(); - for (int i = 0; i < anActns.size(); ++i) - createTool( anActns.at(i), aToolId ); - - myDockWidgets.append(animationPanelDock); - - QDockWidget* lookmarkBrowserDock = new QDockWidget( tr( "TTL_LOOKMARK_BROWSER" ), desk ); - lookmarkBrowserDock->setObjectName("lookmarkBrowserDock"); - QSizePolicy sp( QSizePolicy::Preferred, QSizePolicy::Preferred ); - sp.setHorizontalStretch( 0 ); - sp.setVerticalStretch( 0 ); - lookmarkBrowserDock->setSizePolicy( sp ); - lookmarkBrowserDock->setFloating( false ); - desk->addDockWidget( Qt::RightDockWidgetArea, lookmarkBrowserDock ); - Implementation->Core.setupLookmarkBrowser( lookmarkBrowserDock ); - myDockWidgets.append(lookmarkBrowserDock); - - QDockWidget* lookmarkInspectorDock = new QDockWidget( tr( "TTL_LOOKMARK_INSPECTOR" ), desk ); - lookmarkInspectorDock->setObjectName("lookmarkInspectorDock"); - lookmarkInspectorDock->setAllowedAreas( Qt::RightDockWidgetArea ); - desk->addDockWidget( Qt::RightDockWidgetArea, lookmarkInspectorDock ); - Implementation->Core.setupLookmarkInspector( lookmarkInspectorDock ); - myDockWidgets.append(lookmarkInspectorDock); - - QDockWidget* comparativePanelDock = new QDockWidget( tr( "TTL_COMPARATIVE_VIEW_INSPECTOR" ), desk ); - comparativePanelDock->setObjectName("comparativePanelDock"); - desk->addDockWidget( Qt::LeftDockWidgetArea, comparativePanelDock ); - pqComparativeVisPanel* cv_panel = new pqComparativeVisPanel( comparativePanelDock ); - comparativePanelDock->setWidget(cv_panel); - myDockWidgets.append(comparativePanelDock); - + //Animation view QDockWidget* animationViewDock = new QDockWidget( tr( "TTL_ANIMATION_VIEW" ), desk ); animationViewDock->setObjectName("animationViewDock"); desk->addDockWidget( Qt::BottomDockWidgetArea, animationViewDock ); - Implementation->Core.setupAnimationView( animationViewDock ); + pqPVAnimationWidget* animation_panel = new pqPVAnimationWidget(animationViewDock); + animationViewDock->setWidget(animation_panel); myDockWidgets.append(animationViewDock); + // Selection view QDockWidget* selectionInspectorDock = new QDockWidget( tr( "TTL_SELECTION_INSPECTOR" ), desk ); selectionInspectorDock->setObjectName("selectionInspectorDock"); selectionInspectorDock->setAllowedAreas( Qt::AllDockWidgetAreas ); desk->addDockWidget( Qt::LeftDockWidgetArea, selectionInspectorDock ); - Implementation->Core.setupSelectionInspector( selectionInspectorDock ); + pqSelectionInspectorPanel* aSelInspector = new pqSelectionInspectorPanel(selectionInspectorDock); + selectionInspectorDock->setWidget(aSelInspector); myDockWidgets.append(selectionInspectorDock); - // Setup the statusbar ... - Implementation->Core.setupProgressBar( desk->statusBar() ); + // Comparative View + QDockWidget* comparativePanelDock = new QDockWidget( tr( "TTL_COMPARATIVE_VIEW_INSPECTOR" ), desk ); + comparativePanelDock->setObjectName("comparativePanelDock"); + desk->addDockWidget( Qt::LeftDockWidgetArea, comparativePanelDock ); + pqComparativeVisPanel* cv_panel = new pqComparativeVisPanel( comparativePanelDock ); + comparativePanelDock->setWidget(cv_panel); + myDockWidgets.append(comparativePanelDock); + // Setup the statusbar ... + pqProgressWidget* aProgress = new pqProgressWidget(desk->statusBar()); + desk->statusBar()->addPermanentWidget(aProgress); + // Set up the dock window corners to give the vertical docks more room. desk->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); desk->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); - + // Setup the default dock configuration ... - lookmarkBrowserDock->hide(); - lookmarkInspectorDock->hide(); statisticsViewDock->hide(); - animationPanelDock->hide(); comparativePanelDock->hide(); animationViewDock->hide(); selectionInspectorDock->hide(); -} -/*! - \brief Create dock widgets context menus. -*/ -void PVGUI_Module::setupDockWidgetsContextMenu() -{ - // Pipeline menu - Implementation->Core.pipelineMenu().setMenuAction( pqPipelineMenu::ChangeInputAction, - action(ChangeInputId) ); - Implementation->Core.pipelineMenu().setMenuAction( pqPipelineMenu::DeleteAction, - action(DeleteId) ); - - // Pipeline Browser menu - pqPipelineBrowser *browser = Implementation->Core.pipelineBrowser(); - pqPipelineBrowserContextMenu *browserMenu = new pqPipelineBrowserContextMenu(browser); - - browserMenu->setMenuAction(pqPipelineBrowserContextMenu::OPEN, action(OpenFileId)); - if ( action(OpenFileId)->text().compare(tr("MEN_OPEN")) == 0 ) - action(OpenFileId)->setText(tr("MEN_OPEN_FILE")); - - browserMenu->setMenuAction(pqPipelineBrowserContextMenu::CHANGE_INPUT, action(ChangeInputId)); - browserMenu->setMenuAction(pqPipelineBrowserContextMenu::DELETE, action(DeleteId)); - browserMenu->setMenuAction(pqPipelineBrowserContextMenu::CREATE_CUSTOM_FILTER, action(CreateCustomFilterId)); + + // Setup quick-launch shortcuts. + QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, desk); + QObject::connect(ctrlSpace, SIGNAL(activated()), pqApplicationCore::instance(), SLOT(quickLaunch())); + QShortcut *altSpace = new QShortcut(Qt::ALT + Qt::Key_Space, desk); + QObject::connect(altSpace, SIGNAL(activated()), pqApplicationCore::instance(), SLOT(quickLaunch())); + } /*! diff --git a/src/PVGUI/PVGUI_ProcessModuleHelper.cxx b/src/PVGUI/PVGUI_ProcessModuleHelper.cxx deleted file mode 100644 index deb210cf..00000000 --- a/src/PVGUI/PVGUI_ProcessModuleHelper.cxx +++ /dev/null @@ -1,150 +0,0 @@ -// File: PVGUI_ProcessModuleHelper.cxx -// Created: Tue Nov 11 13:03:19 2008 -// Author: Sergey ANIKIN -// - - -#include "PVGUI_Module.h" -#include "PVGUI_ProcessModuleHelper.h" -#include "PVGUI_OutputWindowAdapter.h" - -#include -#include -#include - -#include -#include -#include - -vtkStandardNewMacro(PVGUI_ProcessModuleHelper); -vtkCxxRevisionMacro(PVGUI_ProcessModuleHelper, "$Revision$"); - -class PVGUI_ProcessModuleHelper::pqImplementation -{ -public: - pqImplementation() : - OutputWindowAdapter(vtkSmartPointer::New()) - {} - - ~pqImplementation() - {} - - //! Displays VTK debug output in SALOME log window - vtkSmartPointer OutputWindowAdapter; -}; - -//----------------------------------------------------------------------------- -PVGUI_ProcessModuleHelper::PVGUI_ProcessModuleHelper() - : Implementation(new pqImplementation()) -{ -} - -//----------------------------------------------------------------------------- -PVGUI_ProcessModuleHelper::~PVGUI_ProcessModuleHelper() -{ -} - -//----------------------------------------------------------------------------- -void PVGUI_ProcessModuleHelper::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os, indent); -} - -//----------------------------------------------------------------------------- -/*! - \brief Used by ParaView testing capabilities, not usable in SALOME. - */ -bool PVGUI_ProcessModuleHelper::compareView(const QString& ReferenceImage, - double Threshold, ostream& Output, const QString& TempDirectory) -{ - if ( CAM_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ) ) - if ( PVGUI_Module* aPVM = dynamic_cast( anApp->module("ParaVis") ) ) - return aPVM->compareView( ReferenceImage, Threshold, Output, TempDirectory ); - - return false; -} - -//----------------------------------------------------------------------------- -/*! - \brief Reimplemented to suppress default ParaView client behavior. Does nothing. -*/ -void PVGUI_ProcessModuleHelper::showOutputWindow() -{ - // Do nothing here -} - -//----------------------------------------------------------------------------- -/*! - \brief Reimplemented to suppress default ParaView client behavior. Does nothing. -*/ -void PVGUI_ProcessModuleHelper::showWindow() -{ -} - -//----------------------------------------------------------------------------- -/*! - \brief Reimplemented to suppress default ParaView client behavior. Does nothing. -*/ -void PVGUI_ProcessModuleHelper::hideWindow() -{ -} - -//----------------------------------------------------------------------------- -/*! - \brief Finalize application in order to save server settings. -*/ -void PVGUI_ProcessModuleHelper::finalize() -{ - this->FinalizeApplication(); -} - -//----------------------------------------------------------------------------- -/*! - \brief Calls the base implementation and redirects ParaView output to PVGUI_OutputWindowAdapter instance. - \sa PVGUI_OutputWindowAdapter -*/ -int PVGUI_ProcessModuleHelper::InitializeApplication(int argc, char** argv) -{ - if ( pqProcessModuleGUIHelper::InitializeApplication( argc, argv ) ){ - // Redirect VTK debug output to SALOME GUI message console - vtkOutputWindow::SetInstance(Implementation->OutputWindowAdapter); - } - - return 1; -} - -//----------------------------------------------------------------------------- -/*! - \brief Reimplemented to suppress default ParaView client behavior and not to run Qt event loop. Does nothing. -*/ -int PVGUI_ProcessModuleHelper::appExec() -{ - return 0; -} - -/*! - \brief Reimplemented to suppress default ParaView client behavior and not to exit after the client initalization. Does nothing. -*/ -//----------------------------------------------------------------------------- -int PVGUI_ProcessModuleHelper::postAppExec() -{ - return 0; -} - -/*! - \brief Reimplemented to suppress default ParaView client behavior. Does nothing. -*/ -//----------------------------------------------------------------------------- -QWidget* PVGUI_ProcessModuleHelper::CreateMainWindow() -{ - return 0; -} - -//----------------------------------------------------------------------------- -/*! - \brief Reimplemented to suppress default ParaView client behavior. Does nothing. -*/ -void PVGUI_ProcessModuleHelper::ExitApplication() -{ - // Cannot exit here, so do nothing -} diff --git a/src/PVGUI/PVGUI_ProcessModuleHelper.h b/src/PVGUI/PVGUI_ProcessModuleHelper.h deleted file mode 100644 index b59089a2..00000000 --- a/src/PVGUI/PVGUI_ProcessModuleHelper.h +++ /dev/null @@ -1,75 +0,0 @@ -// PARAVIS : ParaView wrapper SALOME module -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File : PVGUI_ProcessModuleHelper.h -// Author : Sergey ANIKIN -// - -#ifndef PVGUI_ProcessModuleHelper_H -#define PVGUI_ProcessModuleHelper_H - -#include - -/*! - \class PVGUI_ProcessModuleHelper - One of the key elements of ParaView integration into SALOME GUI. - Sub-classes pqProcessModuleGUIHelper with the following main features: - \li No main window is created by this class - \li Qt event loop is run outside this class - \li ParaView messages are redirected to SALOME GUI message console - \li Client-server architecture is intialized and used as in any ParaView client - */ -class PVGUI_ProcessModuleHelper : public pqProcessModuleGUIHelper -{ -public: - static PVGUI_ProcessModuleHelper* New(); - vtkTypeRevisionMacro(PVGUI_ProcessModuleHelper, pqProcessModuleGUIHelper); - void PrintSelf(ostream& os, vtkIndent indent); - - virtual bool compareView(const QString& ReferenceImage, double Threshold, ostream& Output, const QString& TempDirectory); - - virtual void showOutputWindow(); - virtual void showWindow(); - virtual void hideWindow(); - - void finalize(); - -protected: - virtual int InitializeApplication(int argc, char** argv); - - virtual int appExec(); - virtual int postAppExec(); - - PVGUI_ProcessModuleHelper(); - ~PVGUI_ProcessModuleHelper(); - - virtual QWidget* CreateMainWindow(); - virtual void ExitApplication(); - -private: - PVGUI_ProcessModuleHelper(const PVGUI_ProcessModuleHelper&); // Not implemented. - void operator=(const PVGUI_ProcessModuleHelper&); // Not implemented. - - class pqImplementation; - pqImplementation* const Implementation; -}; - -#endif diff --git a/src/PVGUI/PVGUI_Tools.cxx b/src/PVGUI/PVGUI_Tools.cxx index fb292eea..cf79d811 100644 --- a/src/PVGUI/PVGUI_Tools.cxx +++ b/src/PVGUI/PVGUI_Tools.cxx @@ -46,8 +46,6 @@ namespace PARAVIS PARAVIS_Gen_var aPARAVIS = PARAVIS_Gen::_narrow(aComponent); if(!CORBA::is_nil(aPARAVIS)){ aGen = PARAVIS_Gen_i::GetParavisGenImpl(); - //if(aGen) - //aGen->SetCurrentStudy(GetDSStudy(GetCStudy(GetAppStudy(theModule)))); } } if(!aGen) diff --git a/src/PVGUI/PVGUI_Trace.cxx b/src/PVGUI/PVGUI_Trace.cxx deleted file mode 100644 index a148f734..00000000 --- a/src/PVGUI/PVGUI_Trace.cxx +++ /dev/null @@ -1,857 +0,0 @@ -#include "PVGUI_Trace.h" -#include "PVGUI_Module.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -extern PVGUI_Module* ParavisModule; - -static trace_globals globals; -static bool myInitialised = false; - - -//******************************************************************** -QString pyvariable_from_proxy_name(const QString& proxy_name) -{ - QString aName = proxy_name; - return make_name_valid(aName.replace(".", "_")); -} - -//******************************************************************** -proxy_trace_info::proxy_trace_info(vtkSMProxy* proxy, - const QString& proxyGroup, - const QString& proxyName) -{ - Proxy = proxy; - Group = proxyGroup; - ProxyName = proxyName; - PyVariable = pyvariable_from_proxy_name(proxyName); - ignore_next_unregister = false; -} - -//******************************************************************** -prop_trace_info::prop_trace_info(const proxy_trace_info_ptr proxyTraceInfo, vtkSMProperty* prop) -{ - Prop = prop; - // Determine python variable name - PyVariable = prop->GetXMLLabel(); - // For non-self properties, use the xml name instead of xml label: - if (prop->GetParent() != proxyTraceInfo->Proxy) - PyVariable = proxyTraceInfo->Proxy->GetPropertyName(prop); - PyVariable = make_name_valid(PyVariable); -} - - -//******************************************************************** -QString make_name_valid(const QString& theName) -{ - QString name = theName; - if (name.isNull()) - return QString(""); - if ((name.indexOf('(') >= 0) || (name.indexOf(')') >=0)) - return QString(""); - name = name.replace(" ",""); - name = name.replace("-",""); - name = name.replace(":",""); - name = name.replace(".",""); - if (!name.at(0).isLetter()) - name = "a" + name; - return name; -} - -//******************************************************************** -vtkSMPythonTraceObserver* trace_observer() -{ - return globals.observer; -} - -//******************************************************************** -QStringList ignoredViewProperties() -{ - return globals.ignored_view_properties; -} - -//******************************************************************** -QStringList ignoredRepresentationProperties() -{ - return globals.ignored_representation_properties; -} - -//******************************************************************** -bool propIsIgnored(const proxy_trace_info_ptr info, const QString& propName) -{ - QStringList aIgnoredList = ignoredViewProperties(); - if ((info->Group == "views") && (aIgnoredList.contains(propName))) - return true; - aIgnoredList = ignoredRepresentationProperties(); - if ((info->Group == "representations") && (aIgnoredList.contains(propName))) - return true; - return false; -} - -//******************************************************************** -bool operator < (const QStringList& list1, const QStringList& list2) { - QString s1 = list1.join(":"); - QString s2 = list2.join(":"); - return (s1 < s2); -} - -//******************************************************************** -void GetProxiesInGroup(const char* theName, QMap& proxies) -{ - pqServer* aServer = ParavisModule->getActiveServer(); - - vtkSMProxyIterator* aIt = vtkSMProxyIterator::New(); - aIt->SetConnectionID(aServer->GetConnectionID()); - aIt->SetModeToOneGroup(); - for (aIt->Begin(theName); !aIt->IsAtEnd(); aIt->Next()) { - vtkSMProxy* aProxy = aIt->GetProxy(); - QStringList aKey; - aKey << aIt->GetKey() << aProxy->GetSelfIDAsString(); - proxies[aKey] = aProxy; - } - aIt->Delete(); -} - -//******************************************************************** -void track_existing_sources() -{ - QMap existing_sources; - GetProxiesInGroup("sources", existing_sources); - - QMap::const_iterator aIt; - for (aIt = existing_sources.constBegin(); aIt!=existing_sources.constEnd(); ++aIt) { - QStringList aKey = aIt.key(); - vtkSMProxy* aProxy = aIt.value(); - track_existing_source_proxy(aProxy, ""); - } -} - -//******************************************************************** -proxy_trace_info_ptr track_existing_source_proxy(vtkSMProxy* proxy, const QString& proxy_name) -{ - proxy_trace_info_ptr proxy_info(new proxy_trace_info(proxy, "sources", proxy_name)); - globals.registered_proxies.append(proxy_info); - if ((!globals.last_active_source) && (proxy == globals.active_source_at_start)) { - globals.last_active_source = proxy; - globals.trace_output.append(QString("%1 = GetActiveSource()").arg(proxy_info->PyVariable)); - } else { - globals.trace_output.append(QString("%1 = FindSource(\"%2\")").arg(proxy_info->PyVariable).arg(proxy_name)); - } - return proxy_info; -} - -//******************************************************************** -QList GetRenderViews() -{ - QList render_modules; - - pqServer* aServer = ParavisModule->getActiveServer(); - - vtkSMProxyIterator* aIt = vtkSMProxyIterator::New(); - aIt->SetConnectionID(aServer->GetConnectionID()); - for (aIt->Begin(); !aIt->IsAtEnd(); aIt->Next()) { - vtkSMProxy* aProxy = aIt->GetProxy(); - if (aProxy->IsA("vtkSMRenderViewProxy")) - render_modules.append(aProxy); - } - aIt->Delete(); - return render_modules; -} - -//******************************************************************** -proxy_trace_info_ptr track_existing_view_proxy(vtkSMProxy* proxy, const QString& proxy_name) -{ - proxy_trace_info_ptr proxy_info(new proxy_trace_info(proxy, "views", proxy_name)); - globals.registered_proxies.append(proxy_info); - if ((!globals.last_active_view) && (proxy == globals.active_view_at_start)) { - globals.last_active_view = proxy; - globals.trace_output.append(QString("%1 = GetRenderView()").arg(proxy_info->PyVariable)); - } else { - QList all_views = GetRenderViews(); - if (all_views.contains(proxy)) { - int view_index = all_views.indexOf(proxy); - if (view_index != -1) - globals.trace_output.append(QString("%1 = GetRenderViews()[%2]").arg(proxy_info->PyVariable).arg(view_index)); - } - } - return proxy_info; -} - -//******************************************************************** -proxy_trace_info_ptr track_existing_representation_proxy(vtkSMProxy* proxy, - const QString& proxy_name) -{ - vtkSMProxyProperty* input_property = dynamic_cast(proxy->GetProperty("Input")); - if (!input_property) return proxy_trace_info_ptr(); - - if (input_property->GetNumberOfProxies() > 0) { - vtkSMProxy* input_proxy = input_property->GetProxy(0); - proxy_trace_info_ptr input_proxy_info = get_proxy_info(input_proxy); - if (input_proxy_info.get()) { - proxy_trace_info_ptr proxy_info(new proxy_trace_info(proxy, "representations", proxy_name)); - globals.registered_proxies.append(proxy_info); - globals.trace_output.append(QString("%1 = GetDisplayProperties(%2)").arg(proxy_info->PyVariable).arg(input_proxy_info->PyVariable)); - return proxy_info; - } - } - return proxy_trace_info_ptr(); -} - -//******************************************************************** -proxy_trace_info_ptr track_existing_proxy(vtkSMProxy* proxy) -{ - QString proxy_name = get_source_proxy_registration_name(proxy); - if (!proxy_name.isNull()) - return track_existing_source_proxy(proxy, proxy_name); - - proxy_name = get_representation_proxy_registration_name(proxy); - if (!proxy_name.isNull()) - return track_existing_representation_proxy(proxy, proxy_name); - - proxy_name = get_view_proxy_registration_name(proxy); - if (!proxy_name.isNull()) - return track_existing_view_proxy(proxy, proxy_name); - return proxy_trace_info_ptr(); -} - -//******************************************************************** -proxy_trace_info_ptr get_proxy_info(const QString& p, bool search_existing) -{ - foreach(proxy_trace_info_ptr info, globals.last_registered_proxies) { - if (info->PyVariable == p) return info; - } - foreach(proxy_trace_info_ptr info, globals.registered_proxies) { - if (info->PyVariable == p) return info; - } - - if(search_existing) return proxy_trace_info_ptr(); - - return proxy_trace_info_ptr(); -} - -//******************************************************************** -proxy_trace_info_ptr get_proxy_info(vtkSMProxy* p, bool search_existing) -{ - foreach(proxy_trace_info_ptr info, globals.last_registered_proxies) { - if (info->Proxy == p) return info; - } - foreach(proxy_trace_info_ptr info, globals.registered_proxies) { - if (info->Proxy == p) return info; - } - // It must be a proxy that existed before trace started - if (search_existing) return track_existing_proxy(p); - - return proxy_trace_info_ptr(); -} - -//******************************************************************** -void ensure_active_source(const proxy_trace_info_ptr proxy_info) -{ - if (proxy_info && (proxy_info->Proxy != globals.last_active_source)) { - globals.trace_output.append(QString("SetActiveSource(%1)").arg(proxy_info->PyVariable)); - globals.last_active_source = proxy_info->Proxy; - } -} - -//******************************************************************** -void ensure_active_view(const proxy_trace_info_ptr proxy_info) -{ - if (proxy_info && (proxy_info->Proxy != globals.last_active_view)) { - globals.trace_output.append(QString("SetActiveView(%1)").arg(proxy_info->PyVariable)); - globals.last_active_view = proxy_info->Proxy; - } -} - -//******************************************************************** -proxy_trace_info_ptr get_input_proxy_info_for_rep(const proxy_trace_info_ptr rep_info) -{ - if (rep_info->CurrentProps.contains("Input")) { - QString input_proxy_pyvariable = rep_info->CurrentProps["Input"]; - return get_proxy_info(input_proxy_pyvariable); - } - return proxy_trace_info_ptr(); -} - -//******************************************************************** -proxy_trace_info_ptr get_view_proxy_info_for_rep(const proxy_trace_info_ptr rep_info) -{ - QList aTmpList; - aTmpList.append(globals.registered_proxies); - aTmpList.append(globals.last_registered_proxies); - foreach (proxy_trace_info_ptr p, aTmpList) { - // If the proxy is a view, check for rep_info.Proxy in the - // view's 'Representation' property - if (p->Group == "views") { - vtkSMProxyProperty* rep_prop = - dynamic_cast(p->Proxy->GetProperty("Representations")); - if (rep_prop) { - for (int i = 0; i < rep_prop->GetNumberOfProxies(); i++) { - if (rep_info->Proxy == rep_prop->GetProxy(i)) - return p; - } - } - } - } - return proxy_trace_info_ptr(); -} - -//******************************************************************** -QString get_source_proxy_registration_name(vtkSMProxy* proxy) -{ - return vtkSMObject::GetProxyManager()->GetProxyName("sources", proxy); -} - -//******************************************************************** -QString get_view_proxy_registration_name(vtkSMProxy* proxy) -{ - return vtkSMObject::GetProxyManager()->GetProxyName("views", proxy); -} - -//******************************************************************** -QString get_representation_proxy_registration_name(vtkSMProxy* proxy) -{ - return vtkSMObject::GetProxyManager()->GetProxyName("representations", proxy); -} - -//******************************************************************** -QString make_comma_separated_string(QStringList values) -{ - QString ret=values.join(", "); - if(ret!="") - ret = QString(" %1 ").arg(ret); - return ret; -} - -QStringList wrap_property(vtkSMProxy* proxy, vtkSMProperty* smproperty) -{ - QStringList propertyList; - if(smproperty->IsA("vtkSMVectorProperty")) { - vtkSMVectorProperty* property = dynamic_cast(smproperty); - int nElem = property->GetNumberOfElements(); - int di = 1; - vtkSMDomain* dom = NULL; - if(property->IsA("vtkSMStringVectorProperty")) { - dom = property->GetDomain("array_list"); - if(dom!=NULL && dom->IsA("vtkSMArraySelectionDomain") && property->GetRepeatable()) { - if(nElem%2 != 0) { - cerr << "!!!Error: The SMProperty with XML label" << smproperty->GetXMLLabel() << "has a size that is not a multiple of 2." << endl; - nElem=0; - } else { - di=2; - } - } - } else if(property->IsA("vtkSMIntVectorProperty")) { - dom = property->GetDomain("enum"); - } - for(int i = 0; i < nElem; i+=di) { - bool ap=true; - if(di!=1) { - if(dynamic_cast(property)->GetElement(i+1) == "0") { - ap=false; - } - } - if(ap) { - if(property->IsA("vtkSMStringVectorProperty")) - propertyList.append(QString("'%1'").arg(dynamic_cast(property)->GetElement(i))); - if(property->IsA("vtkSMIntVectorProperty")) { - if(dom == NULL) { - propertyList.append(QString("%1").arg(dynamic_cast(property)->GetElement(i))); - } else { - for(int j = 0; j < dynamic_cast(dom)->GetNumberOfEntries(); j++) { - if(dynamic_cast(dom)->GetEntryValue(j) == dynamic_cast(property)->GetElement(i)) { - propertyList.append(QString("'%1'").arg(dynamic_cast(dom)->GetEntryText(j))); - break; - } - } - } - } - if(property->IsA("vtkSMIdTypeVectorProperty")) - propertyList.append(QString("%1").arg(dynamic_cast(property)->GetElement(i))); - if(property->IsA("vtkSMDoubleVectorProperty")) - propertyList.append(QString("%1").arg(dynamic_cast(property)->GetElement(i))); - } - } - } - return propertyList; -} - -//******************************************************************** -QString vector_smproperty_tostring(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo) -{ - vtkSMProxy* proxy = proxyInfo->Proxy; - vtkSMProperty* prop = propInfo->Prop; - QStringList propList = wrap_property(proxy, prop); - QString pythonProp; - if (propList.size() == 0) - pythonProp = "[]"; - if (propList.size() == 1) - return propList.first(); - if (propList.size() > 1) { - pythonProp = make_comma_separated_string(propList); - pythonProp = QString("[%1]").arg(pythonProp); - } - return pythonProp; -} - -//******************************************************************** -QString get_property_value_from_list_domain(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo) -{ - vtkSMProxy* proxy = proxyInfo->Proxy; - vtkSMProxyProperty* prop = dynamic_cast(propInfo->Prop); - vtkSMProxyListDomain* listdomain = dynamic_cast(prop->GetDomain("proxy_list")); - if (listdomain != NULL && prop->GetNumberOfProxies() == 1) { - vtkSMProxy* proxyPropertyValue = prop->GetProxy(0); - for (int i = 0; i < listdomain->GetNumberOfProxies(); i++) { - if (listdomain->GetProxy(i) == proxyPropertyValue) { - proxy_trace_info_ptr info = get_proxy_info(proxyPropertyValue); - if (!info) { - proxy_trace_info_ptr infotmp(new proxy_trace_info(proxyPropertyValue, "helpers", listdomain->GetProxy(i)->GetXMLLabel())); - info = infotmp; - } - info->PyVariable = QString("%1.%2").arg(proxyInfo->PyVariable).arg(propInfo->PyVariable); - globals.registered_proxies.append(info); - return QString("\"%1\"").arg(listdomain->GetProxy(i)->GetXMLLabel()); - } - } - } - return QString(); -} - -//******************************************************************** -QString proxy_smproperty_tostring(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo) -{ - QString strValue = get_property_value_from_list_domain(proxyInfo, propInfo); - if (!strValue.isNull()) - return strValue; - vtkSMProxy* proxy = proxyInfo->Proxy; - vtkSMProxyProperty* prop = dynamic_cast(propInfo->Prop); - // Create a list of the python variables for each proxy in the property vector - QStringList nameList; - for (int i = 0; i < prop->GetNumberOfProxies(); i++) { - vtkSMProxy* inputProxy = prop->GetProxy(i); - proxy_trace_info_ptr info = get_proxy_info(inputProxy); - if (info && (!info->PyVariable.isNull())) - nameList.append(info->PyVariable); - } - if (nameList.size() == 0) - return "[]"; - if (nameList.size() == 1) - return nameList.first(); - if (nameList.size() > 1) { - QString nameListStr = make_comma_separated_string(nameList); - return QString("[%1]").arg(nameListStr); - } -} - -//******************************************************************** -QString input_smproperty_tostring(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo) -{ - return proxy_smproperty_tostring(proxyInfo, propInfo); -} - -//******************************************************************** -void trace_proxy_rename(const proxy_trace_info_ptr proxy_info, const char* new_name) -{ - if ((!proxy_info) || (proxy_info->Group != "sources")) - return; - QString old_pyvariable = proxy_info->PyVariable; - proxy_info->PyVariable = pyvariable_from_proxy_name(new_name); - proxy_info->ignore_next_unregister = true; - QString newName(new_name); - QString name_to_set = newName.replace("\"", ""); - globals.trace_output.append(QString("RenameSource(\"%1\", %2)").arg(name_to_set).arg(old_pyvariable)); - globals.trace_output.append(QString("%1 = %2").arg(proxy_info->PyVariable).arg(old_pyvariable)); - globals.trace_output.append(QString("del %1").arg(old_pyvariable)); -} - -//******************************************************************** -proxy_trace_info_ptr trace_proxy_registered(vtkSMProxy* proxy, - const QString& proxyGroup, - const char* proxyName) -{ - //if trace_globals.verbose: - // print "Proxy '%s' registered in group '%s'" % (proxyName, proxyGroup) - if (!globals.traced_proxy_groups.contains(proxyGroup)) - return proxy_trace_info_ptr(); - - proxy_trace_info_ptr info(new proxy_trace_info(proxy, proxyGroup, proxyName)); - globals.last_registered_proxies.append(info); - if (globals.capture_all_properties) { - vtkSMPropertyIterator* itr = proxy->NewPropertyIterator(); - for (itr->Begin(); !itr->IsAtEnd(); itr->Next()) { - vtkSMProperty* prop = itr->GetProperty(); - if (prop->GetInformationOnly() || prop->GetIsInternal()) continue; - trace_property_modified(info, prop); - } - } - return info; -} - -//******************************************************************** -prop_trace_info_ptr trace_property_modified(proxy_trace_info_ptr info, vtkSMProperty* prop) -{ - prop_trace_info_ptr propInfo(new prop_trace_info(info, prop)); - //if (globals.verbose) - // print "Property '%s' modifed on proxy '%s'" % (propInfo.PyVariable, info.ProxyName) - QString propValue; - if (prop->IsA("vtkSMVectorProperty")) - propValue = vector_smproperty_tostring(info, propInfo); - else if (prop->IsA("vtkSMInputProperty")) - propValue = input_smproperty_tostring(info, propInfo); - else if (prop->IsA("vtkSMProxyProperty")) - propValue = proxy_smproperty_tostring(info, propInfo); - if (!propValue.isNull()) { - info->Props[prop] = propValue; - info->ModifiedProps[propInfo->PyVariable] = propValue; - info->CurrentProps[propInfo->PyVariable] = propValue; - } - return propInfo; -} - -//******************************************************************** -QList sort_proxy_info_by_group(const QList& infoList) -{ - QList views; - QList sources; - QList representations; - QList other; - foreach (proxy_trace_info_ptr i, infoList) { - if (i->Group == "views") views.append(i); - else if (i->Group == "sources") sources.append(i); - else if (i->Group == "representations") representations.append(i); - else other.append(i); - } - views.append(sources); - views.append(other); - views.append(representations); - return views; -} - -//******************************************************************** -void append_trace() -{ - // Get the list of last registered proxies in sorted order - QList modified_proxies = - sort_proxy_info_by_group(globals.last_registered_proxies); - - // Now append the existing proxies to the list - foreach (proxy_trace_info_ptr p, globals.registered_proxies) - modified_proxies.append(p); - - foreach(proxy_trace_info_ptr info, modified_proxies) { - QString traceOutput = ""; - - // Generate list of tuples : (propName, propValue) - QMap propNameValues; - QMap::const_iterator aIt; - for (aIt = info->ModifiedProps.constBegin(); aIt!=info->ModifiedProps.constEnd(); ++aIt) { - QString propName = aIt.key(); - QString propValue = aIt.value(); - if (propIsIgnored(info, propName)) - continue; - - // Note, the 'Input' property is ignored for representations, so we are - // only dealing with filter proxies here. If the 'Input' property is a - // single value (not a multi-input filter), then ensure the input is - // the active source and leave the 'Input' property out of the - // propNameValues list. - if ((propName == "Input") && (!propValue.contains("["))) { - proxy_trace_info_ptr inputProxyInfo = get_proxy_info(propValue); - ensure_active_source(inputProxyInfo); - continue; - } - propNameValues[propName] = propValue; - } - - // Clear the modified prop list - info->ModifiedProps.clear(); - - // If info is in the last_registered_proxies list, then we need to add the - // proxy's constructor call to the trace - if(globals.last_registered_proxies.contains(info)) { - // Determine the function call to construct the proxy - bool setPropertiesInCtor = true; - QStringList ctorArgs; - QString extraCtorCommands = ""; - QString ctorMethod = make_name_valid(info->Proxy->GetXMLLabel()); - if (info->Group == "sources") { - // track it as the last active source now - globals.last_active_source = info->Proxy; - // maybe append the guiName property - if (globals.use_gui_name) - ctorArgs.append(QString("guiName=\"%1\"").arg(info->ProxyName)); - } - if (info->Group == "representations") { - ctorMethod = "Show"; - setPropertiesInCtor = false; - // Ensure the input proxy is the active source: - proxy_trace_info_ptr input_proxy_info = get_input_proxy_info_for_rep(info); - if (input_proxy_info) - ensure_active_source(input_proxy_info); - - // Ensure the view is the active view: - proxy_trace_info_ptr view_proxy_info = get_view_proxy_info_for_rep(info); - if (view_proxy_info) { - ensure_active_view(view_proxy_info); - } - } - if (info->Group == "scalar_bars") { - ctorMethod = "CreateScalarBar"; - extraCtorCommands = - QString("GetRenderView().Representations.append(%1)").arg(info->PyVariable); - } - if (info->Group == "views") { - ctorMethod = "CreateRenderView"; - // Now track it as the last active view - globals.last_active_view = info->Proxy; - setPropertiesInCtor = false; - } - if (info->Group == "lookup_tables") - ctorMethod = "CreateLookupTable"; - - - if (setPropertiesInCtor) { - QMap::const_iterator aIt1; - for (aIt1 = propNameValues.constBegin(); aIt1!=propNameValues.constEnd(); ++aIt1) { - QString propName = aIt1.key(); - QString propValue = aIt1.value(); - ctorArgs.append(QString("%1=%2").arg(propName).arg(propValue)); - } - propNameValues.clear(); - } - QString ctorArgString = make_comma_separated_string(ctorArgs); - traceOutput = - QString("%1 = %2(%3)\n%4").arg(info->PyVariable).arg(ctorMethod).arg(ctorArgString).arg(extraCtorCommands); - } - // Set properties on the proxy - - QMap::const_iterator aIt2; - for (aIt2 = propNameValues.constBegin(); aIt2!=propNameValues.constEnd(); ++aIt2) { - QString propName = aIt2.key(); - QString propValue = aIt2.value(); - traceOutput += QString("%1.%2 = %3\n").arg(info->PyVariable).arg(propName).arg(propValue); - } - if (traceOutput.length() > 0){ - globals.trace_output.append(traceOutput); - } - } - foreach (proxy_trace_info_ptr p, globals.last_registered_proxies) { - globals.registered_proxies.append(p); - } - while (globals.last_registered_proxies.size() > 0) - globals.last_registered_proxies.removeLast(); -} - -//******************************************************************** -QString get_trace_string() -{ - append_trace(); - QString s = globals.trace_output.join("\n"); - s += globals.trace_output_endblock + "\n"; - - return s; -} - -//******************************************************************** -void save_trace(const QString& fileName) -{ - QFile file(fileName); - if(!file.open(QFile::WriteOnly)) - return; - - QString trace = get_trace_string(); - QTextStream out(&file); - out << trace; - file.close(); -} - -//******************************************************************** -//QString print_trace() - -//******************************************************************** -void on_proxy_registered(vtkObject* obj, unsigned long , void* , void *) -{ - vtkSMPythonTraceObserver* o = dynamic_cast(obj); - if (!o) return; - - vtkSMProxy* p = o->GetLastProxyRegistered(); - const char* pGroup = o->GetLastProxyRegisteredGroup(); - const char* pName = o->GetLastProxyRegisteredName(); - if (p && pGroup && pName) { - proxy_trace_info_ptr proxy_info = get_proxy_info(p, false); - // handle source proxy rename, no-op if proxy isn't a source - if (proxy_info) - trace_proxy_rename(proxy_info, pName); - else - trace_proxy_registered(p, pGroup, pName); - } -} - -//******************************************************************** -void on_proxy_unregistered(vtkObject* obj, unsigned long , void* , void*) -{ - vtkSMPythonTraceObserver* o = dynamic_cast(obj); - if (!o) return; - - vtkSMProxy* p = o->GetLastProxyUnRegistered(); - const char* pGroup = o->GetLastProxyUnRegisteredGroup(); - const char* pName = o->GetLastProxyUnRegisteredName(); - if (p && pGroup && pName) { - proxy_trace_info_ptr proxy_info = get_proxy_info(p); - if (proxy_info != NULL && proxy_info->Proxy != NULL) { - if (proxy_info->ignore_next_unregister) { - proxy_info->ignore_next_unregister = false; - return; - } - globals.trace_output.append(QString("Delete(%1)").arg(proxy_info->PyVariable)); - if (globals.last_registered_proxies.contains(proxy_info)) { - int aInd = globals.last_registered_proxies.indexOf(proxy_info); - globals.last_registered_proxies.removeAt(aInd); - } - if (globals.registered_proxies.contains(proxy_info)) { - int aInd = globals.registered_proxies.indexOf(proxy_info); - globals.registered_proxies.removeAt(aInd); - } - } - } -} - -//******************************************************************** -void on_property_modified(vtkObject* obj, unsigned long , void* , void*) -{ - vtkSMPythonTraceObserver* o = dynamic_cast(obj); - if (!o) return; - - const char* propName = o->GetLastPropertyModifiedName(); - vtkSMProxy* proxy = o->GetLastPropertyModifiedProxy(); - if ((propName != NULL) && (proxy != NULL)) { - vtkSMProperty* prop = proxy->GetProperty(propName); - if (prop->GetInformationOnly() || prop->GetIsInternal()) return; - - // small hack here: some view properties are modified before the view - // is registered. We don't want to call get_proxy_info until after - // the view is registered, so for now lets ignore these properties: - QStringList ignoredViewProp = ignoredViewProperties(); - if (ignoredViewProp.contains(propName)) return; - - proxy_trace_info_ptr info = get_proxy_info(proxy); - if ((info != NULL && info->Proxy != NULL) && (prop != NULL)) - trace_property_modified(info, prop); - } -} - -//******************************************************************** -void on_update_information(vtkObject*, unsigned long , void* , void*) -{ - append_trace(); -} - -//******************************************************************** -void add_observers() -{ - vtkCallbackCommand *aCommand = NULL; - vtkSMPythonTraceObserver* o = trace_observer(); - aCommand = vtkCallbackCommand::New(); - aCommand->SetCallback(on_proxy_registered); - o->AddObserver("RegisterEvent", aCommand); - aCommand->Delete(); - aCommand = vtkCallbackCommand::New(); - aCommand->SetCallback(on_proxy_unregistered); - o->AddObserver("UnRegisterEvent", aCommand); - aCommand->Delete(); - aCommand = vtkCallbackCommand::New(); - aCommand->SetCallback(on_property_modified); - o->AddObserver("PropertyModifiedEvent", aCommand); - aCommand->Delete(); - aCommand = vtkCallbackCommand::New(); - aCommand->SetCallback(on_update_information); - o->AddObserver("UpdateInformationEvent", aCommand); - aCommand->Delete(); - globals.observer_active = true; -} - -//******************************************************************** -void reset_trace_observer() -{ - if (myInitialised) - globals.observer->Delete(); - globals.observer = vtkSMPythonTraceObserver::New(); - globals.observer_active = false; - myInitialised = true; -} - -//******************************************************************** -void reset_trace_globals() -{ - globals.capture_all_properties = false; - globals.use_gui_name = false; - globals.verbose = false; - globals.active_source_at_start = 0; - globals.active_view_at_start = 0; - globals.last_active_view = 0; - globals.last_active_source = 0; - globals.last_registered_proxies.clear(); - globals.registered_proxies.clear(); - globals.trace_output.clear(); - globals.trace_output << "try: pvsimple\nexcept: from pvsimple import *\n"; - globals.trace_output_endblock = "Render()"; - globals.traced_proxy_groups.clear(); - globals.traced_proxy_groups << "sources"<<"representations"<<"views"<<"lookup_tables"<<"scalar_bars"; - globals.ignored_view_properties.clear(); - globals.ignored_view_properties << "ViewSize"<<"GUISize"<<"ViewPosition"<<"ViewTime"<<"Representations"; - globals.ignored_representation_properties.clear(); - globals.ignored_representation_properties << "Input"; - reset_trace_observer(); -} - -//******************************************************************** -void clear_trace() -{ - reset_trace_globals(); -} - -//******************************************************************** -void stop_trace() -{ - reset_trace_observer(); -} - -//******************************************************************** -void start_trace(bool CaptureAllProperties, bool UseGuiName, bool Verbose) -{ - clear_trace(); - add_observers(); - // VSV: Has to be defined - //globals.active_source_at_start = simple.GetActiveSource() - //globals.active_view_at_start = simple.GetActiveView() - //globals.capture_all_properties = CaptureAllProperties - //globals.use_gui_name = UseGuiName - //globals.verbose = Verbose -} diff --git a/src/PVGUI/PVGUI_Trace.h b/src/PVGUI/PVGUI_Trace.h deleted file mode 100644 index de060e37..00000000 --- a/src/PVGUI/PVGUI_Trace.h +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File : PVGUI_Trace.h -// Author : Vitaly Smetannikov -// Module : PARAVIS -// -#ifndef __PARAVIS_TRACE_I_H__ -#define __PARAVIS_TRACE_I_H__ - -#include -#include -#include -#include -#include - -class vtkSMPythonTraceObserver; -class vtkSMProxy; -class vtkSMProperty; -class vtkObject; - -class proxy_trace_info: public QObject -{ - Q_OBJECT -public: - proxy_trace_info(vtkSMProxy* proxy, const QString& proxyGroup, const QString& proxyName); - - vtkSMProxy* Proxy; - QString Group; - QString ProxyName; - QString PyVariable; - QMap Props; - QMap CurrentProps; - QMap ModifiedProps; - bool ignore_next_unregister; -}; - -typedef boost::shared_ptr proxy_trace_info_ptr; - - - -class prop_trace_info: public QObject -{ - Q_OBJECT -public: - prop_trace_info(proxy_trace_info_ptr proxyTraceInfo, vtkSMProperty* prop); - - vtkSMProperty* Prop; - QString PyVariable; -}; - -typedef boost::shared_ptr prop_trace_info_ptr; - -struct trace_globals -{ - vtkSMPythonTraceObserver* observer; - bool observer_active; - bool capture_all_properties; - bool use_gui_name; - bool verbose; - - vtkSMProxy* active_source_at_start; - vtkSMProxy* last_active_source; - - vtkSMProxy* active_view_at_start; - vtkSMProxy* last_active_view; - - QList last_registered_proxies; - QList registered_proxies; - - QStringList trace_output; - QString trace_output_endblock; - QStringList traced_proxy_groups; - QStringList ignored_view_properties; - QStringList ignored_representation_properties; -}; - - -QString make_name_valid(const QString& theName); - -void reset_trace_observer(); - -void reset_trace_globals(); - -QString pyvariable_from_proxy_name(const QString& proxy_name); - -vtkSMPythonTraceObserver* trace_observer(); - -QStringList ignoredViewProperties(); - -QStringList ignoredRepresentationProperties(); - -bool propIsIgnored(const proxy_trace_info_ptr info, const QString& propName); - -void track_existing_sources(); - -proxy_trace_info_ptr track_existing_source_proxy(vtkSMProxy* proxy, const QString& proxy_name); - -proxy_trace_info_ptr track_existing_view_proxy(vtkSMProxy* proxy, const QString& proxy_name); - -proxy_trace_info_ptr track_existing_representation_proxy(vtkSMProxy* proxy, const QString& proxy_name); - -proxy_trace_info_ptr track_existing_proxy(vtkSMProxy* proxy); - -proxy_trace_info_ptr get_proxy_info(const QString& p, bool search_existing=true); -proxy_trace_info_ptr get_proxy_info(vtkSMProxy* p, bool search_existing=true); - -void ensure_active_source(const proxy_trace_info_ptr proxy_info); -void ensure_active_view(const proxy_trace_info_ptr proxy_info); - -proxy_trace_info_ptr get_input_proxy_info_for_rep(const proxy_trace_info_ptr rep_info); -proxy_trace_info_ptr get_view_proxy_info_for_rep(const proxy_trace_info_ptr rep_info); - -QString get_source_proxy_registration_name(vtkSMProxy* proxy); - -QString get_view_proxy_registration_name(vtkSMProxy* proxy); - -QString get_representation_proxy_registration_name(vtkSMProxy* proxy); - -QString make_comma_separated_string(QStringList values); - -QString vector_smproperty_tostring(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo); - -QString get_property_value_from_list_domain(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo); - -QString proxy_smproperty_tostring(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo); - -QString input_smproperty_tostring(const proxy_trace_info_ptr proxyInfo, - const prop_trace_info_ptr propInfo); - -void trace_proxy_rename(const proxy_trace_info_ptr proxy_info, const char* new_name); - -proxy_trace_info_ptr trace_proxy_registered(vtkSMProxy* proxy, - const QString& proxyGroup, - const char* proxyName); - -prop_trace_info_ptr trace_property_modified(proxy_trace_info_ptr info, vtkSMProperty* prop); - - -QList sort_proxy_info_by_group(const QList& infoList); - -void append_trace(); - -QString get_trace_string(); - -void save_trace(const QString& fileName); - -//QString print_trace(); - -void on_proxy_registered(vtkObject* o, unsigned long eid, void* clientdata, void *calldata); - -void on_proxy_unregistered(vtkObject* o, unsigned long eid, void* clientdata, void *calldata); - -void on_property_modified(vtkObject* o, unsigned long eid, void* clientdata, void *calldata); - -void on_update_information(vtkObject* o, unsigned long eid, void* clientdata, void *calldata); - -void add_observers(); - -void clear_trace(); - -void stop_trace(); - -void start_trace(bool CaptureAllProperties=false, bool UseGuiName=false, bool Verbose=false); - - -#endif diff --git a/src/PVGUI/PVGUI_ViewManager.cxx b/src/PVGUI/PVGUI_ViewManager.cxx index ef884197..099f16d7 100644 --- a/src/PVGUI/PVGUI_ViewManager.cxx +++ b/src/PVGUI/PVGUI_ViewManager.cxx @@ -19,7 +19,8 @@ #include #include #include - +#include +#include /*! Constructor @@ -42,9 +43,5 @@ PVGUI_ViewManager::~PVGUI_ViewManager() */ pqViewManager* PVGUI_ViewManager::getMultiViewManager() { - pqViewManager* aMVM = 0; - PVGUI_ViewWindow* aVW = dynamic_cast( getActiveView() ); - if ( aVW ) - aMVM = aVW->getMultiViewManager(); - return aMVM; + return qobject_cast(pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); } diff --git a/src/PVGUI/PVGUI_ViewWindow.cxx b/src/PVGUI/PVGUI_ViewWindow.cxx index a8c03aaa..6298d3e4 100644 --- a/src/PVGUI/PVGUI_ViewWindow.cxx +++ b/src/PVGUI/PVGUI_ViewWindow.cxx @@ -28,7 +28,7 @@ #include #include - +#include /*! \class PVGUI_ViewWindow @@ -44,6 +44,14 @@ PVGUI_ViewWindow::PVGUI_ViewWindow( SUIT_Desktop* theDesktop, PVGUI_Viewer* theM : SUIT_ViewWindow( theDesktop ), myPVMgr( 0 ) { myModel = theModel; + myPVMgr = qobject_cast(pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); + if (myPVMgr) { + myPVMgr->setParent( this ); + // This is mandatory, see setParent() method in Qt 4 documentation + myPVMgr->show(); + setCentralWidget( myPVMgr ); + } else + qDebug("No multiViewManager defined"); } /*! @@ -83,14 +91,17 @@ void PVGUI_ViewWindow::setVisualParameters( const QString& parameters ) /*! \brief Sets the ParaView multi-view manager for this view window */ -void PVGUI_ViewWindow::setMultiViewManager( pqViewManager* viewMgr ) -{ - myPVMgr = viewMgr; - myPVMgr->setParent( this ); - // This is mandatory, see setParent() method in Qt 4 documentation - myPVMgr->show(); - setCentralWidget( myPVMgr ); -} +// void PVGUI_ViewWindow::setMultiViewManager() +// { +// myPVMgr = qobject_cast(pqApplicationCore::instance()->manager("MULTIVIEW_MANAGER")); +// if (myPVMgr) { +// myPVMgr->setParent( this ); +// // This is mandatory, see setParent() method in Qt 4 documentation +// myPVMgr->show(); +// setCentralWidget( myPVMgr ); +// } else +// qDebug("No multiViewManager defined"); +// } /*! \brief Returns the ParaView multi-view manager previously set with setMultiViewManager() diff --git a/src/PVGUI/PVGUI_ViewWindow.h b/src/PVGUI/PVGUI_ViewWindow.h index df0b1af4..7e2311f6 100644 --- a/src/PVGUI/PVGUI_ViewWindow.h +++ b/src/PVGUI/PVGUI_ViewWindow.h @@ -41,7 +41,7 @@ public: virtual QString getVisualParameters(); virtual void setVisualParameters( const QString& ); - void setMultiViewManager( pqViewManager* ); + //void setMultiViewManager(); pqViewManager* getMultiViewManager() const; private: diff --git a/src/PVGUI/PV_Events.h b/src/PVGUI/PV_Events.h index 48326e31..30a2060b 100644 --- a/src/PVGUI/PV_Events.h +++ b/src/PVGUI/PV_Events.h @@ -117,7 +117,7 @@ namespace PARAVIS { */ struct TGetTrace: public TModuleEvent { - typedef const char* TResult; + typedef std::string TResult; TResult myResult; TGetTrace(SalomeApp_Application* theApp) : TModuleEvent(theApp) @@ -129,7 +129,7 @@ namespace PARAVIS { { PVGUI_Module* aPVModule = getModule(); if (aPVModule) - myResult = qPrintable(aPVModule->printTrace()); + myResult = qPrintable(aPVModule->getTraceString()); } }; diff --git a/src/PVGUI/PV_Tools.cxx b/src/PVGUI/PV_Tools.cxx index e6644d4a..42d9edb5 100644 --- a/src/PVGUI/PV_Tools.cxx +++ b/src/PVGUI/PV_Tools.cxx @@ -79,6 +79,9 @@ namespace PARAVIS anAttr = aStudyBuilder->FindOrCreateAttribute(aSComponent, "AttributePixMap"); SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); aPixmap->SetPixMap( "pqAppIcon16.png" ); + + // Create Attribute parameters for future using + anAttr = aStudyBuilder->FindOrCreateAttribute(aSComponent, "AttributeParameter"); PARAVIS_Gen_var aParaVisGen = PARAVIS_Gen_i::GetParavisGenImpl()->_this(); aStudyBuilder->DefineComponentInstance(aSComponent, aParaVisGen); @@ -102,4 +105,25 @@ namespace PARAVIS } return NULL; } + + void SetRestoreParam(SALOMEDS::SComponent_ptr theComponent, bool theRestore) + { + SALOMEDS::GenericAttribute_var anAttr; + if (theComponent->FindAttribute(anAttr, "AttributeParameter")) { + SALOMEDS::AttributeParameter_var aParams = SALOMEDS::AttributeParameter::_narrow(anAttr); + aParams->SetBool("RestorePath", theRestore); + } + } + + bool GetRestoreParam(SALOMEDS::SComponent_ptr theComponent) + { + SALOMEDS::GenericAttribute_var anAttr; + if (theComponent->FindAttribute(anAttr, "AttributeParameter")) { + SALOMEDS::AttributeParameter_var aParams = SALOMEDS::AttributeParameter::_narrow(anAttr); + if (aParams->IsSet("RestorePath", 2)) { + return aParams->GetBool("RestorePath"); + } + } + return true; + } }; diff --git a/src/PVGUI/PV_Tools.h b/src/PVGUI/PV_Tools.h index 9900b473..bc643d4a 100644 --- a/src/PVGUI/PV_Tools.h +++ b/src/PVGUI/PV_Tools.h @@ -46,6 +46,12 @@ namespace PARAVIS SALOMEDS::SComponent_var FindOrCreateParaVisComponent(SALOMEDS::Study_ptr theStudyDocument); + /*! + * Set/Get flag to restore or not path in paraview state file. + */ + void SetRestoreParam(SALOMEDS::SComponent_ptr theComponent, bool theRestore); + bool GetRestoreParam(SALOMEDS::SComponent_ptr theComponent); + PARAVIS_Base_i* GET_SERVANT(CORBA::Object_ptr aObj); //dynamic_cast(PARAVIS_Gen_i::GetPOA()->reference_to_servant(OBJ).in()) diff --git a/src/PVGUI/create_class.sh b/src/PVGUI/create_class.sh new file mode 100755 index 00000000..73c04502 --- /dev/null +++ b/src/PVGUI/create_class.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +file=PARAVIS_CreateClass.cxx +wfile=$1/wrapfiles.txt + +echo '#include ' > $file +echo '#include ' >> $file +echo '#include "PARAVIS_Gen_i.hh"' >> $file +awk '{print "#include \"PARAVIS_Gen_"$1"_i.hh\"";}' $wfile >> $file +echo '' >> $file +echo 'PARAVIS::PARAVIS_Base_i* CreateInstance(::vtkObjectBase* Inst, const QString& theClassName)' >> $file +echo '{' >> $file +awk 'BEGIN {lst="";} {lst=lst" "$1;} END{i=split(lst,arr);for(j=i;j>0;j--) {print " if(theClassName == \""arr[j]"\" || (Inst != NULL && Inst->IsA(\""arr[j]"\")))";print " return new PARAVIS::"arr[j]"_i();"}}' $wfile >> $file +echo '' >> $file +echo ' cerr << "The class " << theClassName.toStdString() << " is not created!" << endl;' >> $file +echo ' return new PARAVIS::PARAVIS_Base_i();' >> $file +echo '}' >> $file diff --git a/src/PVGUI/resources/PARAVIS_msg_en.ts b/src/PVGUI/resources/PARAVIS_msg_en.ts index d70865a4..8aefd29c 100644 --- a/src/PVGUI/resources/PARAVIS_msg_en.ts +++ b/src/PVGUI/resources/PARAVIS_msg_en.ts @@ -209,7 +209,7 @@ MEN_OPEN - &Open + &Open... MEN_OPEN_FILE @@ -325,7 +325,7 @@ MEN_DISCONNECT - &Disconnect... + &Disconnect STB_DISCONNECT @@ -459,6 +459,18 @@ INF_APP_CHANGE_INPUTACTIONS Change a Filter's Input + + MEN_IGNORE_TIME + Ignore Time + + + TOP_IGNORE_TIME + Ignore Time + + + STB_IGNORE_TIME + Disregard this source/filter's time from animation + TOP_DELETE Delete @@ -897,7 +909,7 @@ MEN_MANAGE_PLUGINS - Manage Plugins/Extensions... + Manage Plugins... STB_MANAGE_PLUGINS @@ -953,15 +965,15 @@ TOP_MAX_WINDOW_SIZE - Max Window Size: 300x300 + Lock View Size MEN_MAX_WINDOW_SIZE - Max Window Size: 300x300 + Lock View Size PRP_APP_MAX_WINDOW_SIZE - Set Max Window Size: 300x300 + Lock View Size TOP_TIMER_LOG @@ -1005,7 +1017,7 @@ MEN_ABOUT - About ParaView + About ParaView... STB_ABOUT @@ -1017,7 +1029,7 @@ MEN_PARAVIEW_HELP - ParaView User Documentation + ParaView Help STB_PARAVIEW_HELP @@ -1095,5 +1107,25 @@ TIT_TRACE Trace + + MEN_MACROS + &Macros + + + PREF_SAVE_TYPE_LBL + Paraview state saving type + + + PREF_SAVE_TYPE_0 + Save referenced files only for builin server + + + PREF_SAVE_TYPE_1 + Always save referenced files when they are accessible + + + PREF_SAVE_TYPE_2 + Never save referenced files + diff --git a/src/PVGUI/wrap.cmake b/src/PVGUI/wrap.cmake new file mode 100755 index 00000000..a957af52 --- /dev/null +++ b/src/PVGUI/wrap.cmake @@ -0,0 +1,54 @@ +SET(WRAP_IDL_I_HH) +SET(WRAP_IDL_I_CC) + +IF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt) + EXECUTE_PROCESS( + COMMAND cat ${CMAKE_BINARY_DIR}/wrapfiles.txt + OUTPUT_VARIABLE WRAP_LIST_FULL + ) + + STRING(REGEX MATCHALL "[^\n]+" WRAP_LIST_REG ${WRAP_LIST_FULL}) + FOREACH(STR ${WRAP_LIST_REG}) + + SEPARATE_ARGUMENTS(STR) + LIST(LENGTH STR WRAP_LEN) + SET(DEP_HH) + SET(DEP_CC) + + LIST(GET STR 0 VAL) + + IF(WRAP_LEN GREATER 1) + MATH(EXPR WRAP_LEN1 "${WRAP_LEN} - 1" ) + + FOREACH(IND RANGE 1 ${WRAP_LEN1}) + LIST(GET STR ${IND} DEP_VAL) + SET(DEP_HH ${DEP_HH} PARAVIS_Gen_${DEP_VAL}_i.hh) + SET(DEP_CC ${DEP_CC} PARAVIS_Gen_${DEP_VAL}_i.cc) + ENDFOREACH(IND RANGE 1 ${WRAP_LEN1}) + + ENDIF(WRAP_LEN GREATER 1) + + SET(WRAP_IDL_I_HH ${WRAP_IDL_I_HH} PARAVIS_Gen_${VAL}_i.hh) + SET(WRAP_IDL_I_CC ${WRAP_IDL_I_CC} PARAVIS_Gen_${VAL}_i.cc) + + ADD_CUSTOM_COMMAND( + OUTPUT PARAVIS_Gen_${VAL}_i.hh + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_HH_exe ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints 0 PARAVIS_Gen_${VAL}_i.hh + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_HH_exe ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_HH} + ) + + ADD_CUSTOM_COMMAND( + OUTPUT PARAVIS_Gen_${VAL}_i.cc + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_CC_exe ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints 0 PARAVIS_Gen_${VAL}_i.cc + DEPENDS PARAVIS_Gen_${VAL}_i.hh ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_CC_exe ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_CC} + ) + + ENDFOREACH(STR ${WRAP_LIST_REG}) +ENDIF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt) + +ADD_CUSTOM_COMMAND( + OUTPUT PARAVIS_CreateClass.cxx + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create_class.sh ${CMAKE_SOURCE_DIR} + DEPENDS ${CMAKE_BINARY_DIR}/wrapfiles.txt ${WRAP_IDL_I_HH} +) +ADD_CUSTOM_TARGET(generate_pvgui ALL DEPENDS ${CMAKE_BINARY_DIR}/wrapfiles.txt PARAVIS_CreateClass.cxx ${WRAP_IDL_I_HH} ${WRAP_IDL_I_CC}) diff --git a/src/PV_SWIG/CMakeLists.txt b/src/PV_SWIG/CMakeLists.txt new file mode 100644 index 00000000..4c710923 --- /dev/null +++ b/src/PV_SWIG/CMakeLists.txt @@ -0,0 +1,123 @@ + + SET(VERSION_INFO 0.0.0) + SET(SOVERSION_INFO 0) + SET(SUBDIRS) + SET(AM_CPPFLAGS) + SET(AM_CXXFLAGS) + SET(LDADD) + + + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h) + +# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# VISU VISU_SWIG : binding of C++ implementation and Python +# File : Makefile.am +# Author : Paul RASCLE, EDF +# Module : VISU +# +# include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SET(dist_salomescript_DATA + paravis.py + paravisSM.py + pvsimple.py +) + + + + FOREACH(dir ${SUBDIRS}) + IF(NOT dir STREQUAL .) + ADD_SUBDIRECTORY(${dir}) + ENDIF(NOT dir STREQUAL .) + ENDFOREACH(dir ${SUBDIRS}) + +FOREACH(f ${dist_salomescript_DATA}) + + SET(DEST bin/salome) + + + STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in) + IF(test_SALOMEconfig.h.in) + INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in) + ELSE(test_SALOMEconfig.h.in) + SET(dummy dummy-NOTFOUND) + MARK_AS_ADVANCED(dummy) + # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f}) + FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH) + IF(dummy) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + IF(DEST STREQUAL bin/salome) + SET(PERMS) + SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE) + SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE) + SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE) + INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS}) + ELSE(DEST STREQUAL bin/salome) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(DEST STREQUAL bin/salome) + ELSE(ext STREQUAL .py) + INSTALL(FILES ${f} DESTINATION ${DEST}) + ENDIF(ext STREQUAL .py) + + + ELSE(dummy) + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .qm) + STRING(REGEX REPLACE .qm .ts input ${f}) + + + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input}) + + + SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f}) + # ADD_CUSTOM_COMMAND( + # OUTPUT ${output} + # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output} + # MAIN_DEPENDENCY ${input} + # ) + EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}) + ENDIF(ext STREQUAL .qm) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST}) + ENDIF(dummy) + ENDIF(test_SALOMEconfig.h.in) + + + GET_FILENAME_COMPONENT(ext ${f} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})") + INSTALL(CODE "SET(DEST ${DEST})") + INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})") + + + STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR}) + INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake) + + + ENDIF(ext STREQUAL .py) + +ENDFOREACH(f ${dist_salomescript_DATA}) diff --git a/src/PV_SWIG/Makefile.am b/src/PV_SWIG/Makefile.am deleted file mode 100644 index 732c24ee..00000000 --- a/src/PV_SWIG/Makefile.am +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# VISU VISU_SWIG : binding of C++ implementation and Python -# File : Makefile.am -# Author : Paul RASCLE, EDF -# Module : VISU -# -include $(top_srcdir)/adm_local/unix/make_common_starter.am - -dist_salomescript_DATA = paravis.py paravisSM.py pvsimple.py - diff --git a/src/PV_SWIG/paravisSM.py b/src/PV_SWIG/paravisSM.py index 371b8519..9bce3efc 100644 --- a/src/PV_SWIG/paravisSM.py +++ b/src/PV_SWIG/paravisSM.py @@ -1816,8 +1816,7 @@ def _connectDsRs(ds_host, ds_port, rs_host, rs_port): return conn def _connectSelf(): - """Initialises self connection.Internal method, use Connect() instead.""" - print "Connect to self" + """Creates a new self connection.Internal method, use Connect() instead.""" pm = vtkProcessModule.GetProcessModule() pmOptions = pm.GetOptions() if pmOptions.GetProcessType() == 0x40: # PVBATCH @@ -1964,26 +1963,31 @@ def CreateRenderView(connection=None, **extraArgs): is not specified, then the active connection is used, if available. This method can also be used to initialize properties by passing - keyword arguments where the key is the name of the property.In addition + keyword arguments where the key is the name of the property. In addition registrationGroup and registrationName (optional) can be specified (as keyword arguments) to automatically register the proxy with the proxy manager.""" + return _create_view("RenderView", connection, **extraArgs) +def _create_view(view_xml_name, connection=None, **extraArgs): + """Creates a view on the particular connection. If connection + is not specified, then the active connection is used, if available. + This method can also be used to initialize properties by passing + keyword arguments where the key is the name of the property.""" if not connection: connection = ActiveConnection if not connection: - raise RuntimeError, "Cannot create render window without connection." + raise RuntimeError, "Cannot create view without connection." pxm = ProxyManager() - prototype = pxm.GetPrototypeProxy("views", "RenderView") - + prototype = pxm.GetPrototypeProxy("views", view_xml_name) proxy_xml_name = prototype.GetSuggestedViewType(connection.ID) - ren_module = None + view_module = None if proxy_xml_name: - ren_module = CreateProxy("views", proxy_xml_name, connection) - if not ren_module: + view_module = CreateProxy("views", proxy_xml_name, connection) + if not view_module: return None - extraArgs['proxy'] = ren_module - proxy = rendering.__dict__[ren_module.GetXMLName()](**extraArgs) + extraArgs['proxy'] = view_module + proxy = rendering.__dict__[view_module.GetXMLName()](**extraArgs) return proxy def GetRepresentation(aProxy, view): @@ -2012,7 +2016,7 @@ def CreateRepresentation(aProxy, view, **extraArgs): if not aProxy: raise RuntimeError, "proxy argument cannot be None." if not view: - raise RuntimeError, "render module argument cannot be None." + raise RuntimeError, "view argument cannot be None." if "proxyName" in extraArgs: display = CreateProxy("representations", extraArgs['proxyName'], None) del extraArgs['proxyName'] @@ -2230,30 +2234,24 @@ def AnimateReader(reader, view, filename=None): scene.Play() return scene -def ToggleProgressPrinting(): - """Turn on/off printing of progress (by default, it is on). You can - always turn progress off and add your own observer to the process - module to handle progress in a custom way. See _printProgress for - an example event observer.""" +def GetProgressPrintingIsEnabled(): + return progressObserverTag is not None + +def SetProgressPrintingEnabled(value): + """Is not supported because of not supported observers""" pass - #vsv global progressObserverTag - #vsv if fromGUI: - #vsv raise RuntimeError, "Printing progress in the GUI is not supported." - #vsv if progressObserverTag: - #vsv vtkProcessModule.GetProcessModule().RemoveObserver(progressObserverTag) - #vsv progressObserverTag = None - #VSV Observer is not supported - #else: - # progressObserverTag = vtkProcessModule.GetProcessModule().AddObserver("ProgressEvent", _printProgress) +def ToggleProgressPrinting(): + """Turn on/off printing of progress. See SetProgressPrintingEnabled.""" + SetProgressPrintingEnabled(not GetProgressPrintingIsEnabled()) def Finalize(): - """Although not required, this can be called at exit to cleanup.""" - global progressObserverTag - # Make sure to remove the observer - if progressObserverTag: - ToggleProgressPrinting() - vtkInitializationHelper.Finalize() + """Although not required, this can be called at exit to cleanup.""" + global progressObserverTag + # Make sure to remove the observer + if progressObserverTag: + ToggleProgressPrinting() + vtkInitializationHelper.Finalize() # Internal methods @@ -2322,7 +2320,8 @@ def _createSetProperty(pName): def _findClassForProxy(xmlName, xmlGroup): """Given the xmlName for a proxy, returns a Proxy class. Note that if there are duplicates, the first one is returned.""" - global sources, filters, rendering, animation, implicit_functions, writers, extended_sources, misc + global sources, filters, writers, rendering, animation, implicit_functions,\ + piecewise_functions, extended_sources, misc if not xmlName: return None if xmlGroup == "sources": @@ -2331,6 +2330,8 @@ def _findClassForProxy(xmlName, xmlGroup): return filters.__dict__[xmlName] elif xmlGroup == "implicit_functions": return implicit_functions.__dict__[xmlName] + elif xmlGroup == "piecewise_functions": + return piecewise_functions.__dict__[xmlName] elif xmlGroup == "writers": return writers.__dict__[xmlName] elif xmlGroup == "extended_sources": @@ -2381,7 +2382,8 @@ def _printProgress(caller, event): def updateModules(): """Called when a plugin is loaded, this method updates the proxy class object in all known modules.""" - global sources, filters, writers, rendering, animation, implicit_functions, extended_sources, misc + global sources, filters, writers, rendering, animation, implicit_functions,\ + piecewise_functions, extended_sources, misc createModule("sources", sources) createModule("filters", filters) @@ -2394,12 +2396,15 @@ def updateModules(): createModule("misc", misc) createModule('animation_keyframes', animation) createModule('implicit_functions', implicit_functions) + createModule('piecewise_functions', piecewise_functions) createModule("extended_sources", extended_sources) + createModule("incremental_point_locators", misc) def _createModules(): """Called when the module is loaded, this creates sub- modules for all know proxy groups.""" - global sources, filters, writers, rendering, animation, implicit_functions, extended_sources, misc + global sources, filters, writers, rendering, animation, implicit_functions,\ + piecewise_functions, extended_sources, misc sources = createModule('sources') filters = createModule('filters') @@ -2411,22 +2416,22 @@ def _createModules(): animation = createModule('animation') createModule('animation_keyframes', animation) implicit_functions = createModule('implicit_functions') + piecewise_functions = createModule('piecewise_functions') extended_sources = createModule("extended_sources") misc = createModule("misc") + createModule("incremental_point_locators", misc) class PVModule(object): pass def _make_name_valid(name): - "Make a string into a valid Python variable name" - if not name: + """Make a string into a valid Python variable name. Return None if + the name contains parentheses.""" + if not name or '(' in name or ')' in name: return None - if name.find('(') >= 0 or name.find(')') >=0: - return None - name = name.replace(' ','') - name = name.replace('-','') - name = name.replace(':','') - name = name.replace('.','') + import string + valid_chars = "_%s%s" % (string.ascii_letters, string.digits) + name = str().join([c for c in name if c in valid_chars]) if not name[0].isalpha(): name = 'a' + name return name @@ -2447,6 +2452,7 @@ def createModule(groupName, mdl=None): for i in range(numProxies): proxyName = pxm.GetXMLProxyName(groupName, i) proto = pxm.GetPrototypeProxy(groupName, proxyName) + pname = proxyName if proto.GetXMLLabel(): pname = proto.GetXMLLabel() pname = _make_name_valid(pname) @@ -2478,10 +2484,11 @@ def createModule(groupName, mdl=None): None, propDoc) # Add the documentation as the class __doc__ - if proto.GetDocumentation() and proto.GetDocumentation().GetDescription(): + if proto.GetDocumentation() and \ + proto.GetDocumentation().GetDescription(): doc = proto.GetDocumentation().GetDescription() - #else: - doc = Proxy.__doc__ + else: + doc = Proxy.__doc__ cdict['__doc__'] = doc # Create the new type if proto.GetXMLName() == "ExodusIIReader": @@ -2517,6 +2524,8 @@ def __determineGroup(proxy): return "lookup_tables" elif xmlgroup == "implicit_functions": return "implicit_functions" + elif xmlgroup == "piecewise_functions": + return "piecewise_functions" return None __nameCounter = {} diff --git a/src/PV_SWIG/pvsimple.py b/src/PV_SWIG/pvsimple.py index 54d6aa93..9a48623c 100644 --- a/src/PV_SWIG/pvsimple.py +++ b/src/PV_SWIG/pvsimple.py @@ -23,26 +23,35 @@ import paravisSM servermanager = paravisSM -def Connect(ds_host=None, ds_port=11111, rs_host=None, rs_port=11111): - """Creates a connection to a server. Example usage: - > Connect("amber") # Connect to a single server at default port - > Connect("amber", 12345) # Connect to a single server at port 12345 - > Connect("amber", 11111, "vis_cluster", 11111) # connect to data server, render server pair - This also create a default render view.""" +def _disconnect(): servermanager.ProxyManager().UnRegisterProxies() active_objects.view = None active_objects.source = None import gc gc.collect() servermanager.Disconnect() + +def Connect(ds_host=None, ds_port=11111, rs_host=None, rs_port=11111): + """Creates a connection to a server. Example usage: + > Connect("amber") # Connect to a single server at default port + > Connect("amber", 12345) # Connect to a single server at port 12345 + > Connect("amber", 11111, "vis_cluster", 11111) # connect to data server, render server pair""" + _disconnect() cid = servermanager.Connect(ds_host, ds_port, rs_host, rs_port) servermanager.ProxyManager().RegisterProxy("timekeeper", "tk", servermanager.misc.TimeKeeper()) + return cid +def ReverseConnect(port=11111): + """Create a reverse connection to a server. Listens on port and waits for + an incoming connection from the server.""" + _disconnect() + cid = servermanager.ReverseConnect(port) + servermanager.ProxyManager().RegisterProxy("timekeeper", "tk", servermanager.misc.TimeKeeper()) return cid -def CreateRenderView(): +def _create_view(view_xml_name): "Creates and returns a 3D render view." - view = servermanager.CreateRenderView() + view = servermanager._create_view(view_xml_name) servermanager.ProxyManager().RegisterProxy("views", \ "my_view%d" % _funcs_internals.view_counter, view) active_objects.view = view @@ -55,6 +64,15 @@ def CreateRenderView(): return view +def CreateRenderView(): + return _create_view("RenderView") + +def CreateXYPlotView(): + return _create_view("XYPlotView") + +def CreateBarChartView(): + return _create_view("BarChart") + def GetRenderView(): "Returns the active view if there is one. Else creates and returns a new view." view = active_objects.view @@ -92,7 +110,7 @@ def Show(proxy=None, view=None, **params): proxy = GetActiveSource() if proxy == None: raise RuntimeError, "Show() needs a proxy argument or that an active source is set." - if not view and len(GetRenderViews()) == 0: + if not view and not active_objects.view: CreateRenderView() rep = GetDisplayProperties(proxy, view) if rep == None: @@ -114,8 +132,11 @@ def Render(view=None): view = active_objects.view view.StillRender() if _funcs_internals.first_render: - view.ResetCamera() - view.StillRender() + # Not all views have a ResetCamera method + try: + view.ResetCamera() + view.StillRender() + except AttributeError: pass _funcs_internals.first_render = False return view @@ -271,6 +292,15 @@ def CreateLookupTable(**params): SetProperties(lt, **params) return lt +def CreatePiecewiseFunction(**params): + """Create and return a piecewise function. Optionally, parameters can be + given to assign to the piecewise function. + """ + pfunc = servermanager.piecewise_functions.PiecewiseFunction() + servermanager.Register(pfunc) + SetProperties(pfunc, **params) + return pfunc + def CreateScalarBar(**params): """Create and return a scalar bar widget. The returned widget may be added to a render view by appending it to the view's representations @@ -315,7 +345,7 @@ def _find_writer(filename): elif extension == 'bmp': return 'vtkBMPWriter' elif extension == 'ppm': - return vtkPNMWriter + return 'vtkPNMWriter' elif extension == 'tif' or extension == 'tiff': return 'vtkTIFFWriter' elif extension == 'jpg' or extension == 'jpeg': @@ -679,3 +709,6 @@ active_objects.view = servermanager.GetRenderView() if not servermanager.ActiveConnection: Connect() + +def ImportFile(theFileName): + paravisSM.ImportFile(theFileName) diff --git a/src/PV_SWIG/servermanager.diff b/src/PV_SWIG/servermanager.diff index fbe89740..937070a4 100644 --- a/src/PV_SWIG/servermanager.diff +++ b/src/PV_SWIG/servermanager.diff @@ -2,7 +2,7 @@ < #============================================================================== < # < # Program: ParaView -< # Module: $RCSfile$ +< # Module: $RCSfile: servermanager.diff,v $ < # < # Copyright (c) Kitware, Inc. < # All rights reserved. @@ -122,96 +122,69 @@ < collection = vtk.vtkCollection() --- > collection = vtkCollection() -1844c1819,1820 -< """Creates a new self connection.Internal method, use Connect() instead.""" ---- -> """Initialises self connection.Internal method, use Connect() instead.""" -> print "Connect to self" -1909c1885 +1909c1884 < --- > -2015c1991,1992 +2020c1995,1996 < try: isRep = rep.Input == aProxy --- > #VSV: == > try: isRep = rep.Input.IsSame(aProxy) -2261c2238,2239 +2265,2281c2241,2242 +< """Turn on/off printing of progress (by default, it is on). You can +< always turn progress off and add your own observer to the process +< module to handle progress in a custom way. See _printProgress for +< an example event observer.""" < global progressObserverTag ---- -> pass -> #vsv global progressObserverTag -2263,2270c2241,2248 -< if fromGUI: -< raise RuntimeError, "Printing progress in the GUI is not supported." -< if progressObserverTag: +< +< # If value is true and progress printing is currently off... +< if value and not GetProgressPrintingIsEnabled(): +< if fromGUI: +< raise RuntimeError("Printing progress in the GUI is not supported.") +< progressObserverTag = vtkProcessModule.GetProcessModule().AddObserver(\ +< "ProgressEvent", _printProgress) +< +< # If value is false and progress printing is currently on... +< elif GetProgressPrintingIsEnabled(): < vtkProcessModule.GetProcessModule().RemoveObserver(progressObserverTag) < progressObserverTag = None -< else: -< progressObserverTag = vtkProcessModule.GetProcessModule().AddObserver(\ -< "ProgressEvent", _printProgress) ---- -> #vsv if fromGUI: -> #vsv raise RuntimeError, "Printing progress in the GUI is not supported." -> #vsv if progressObserverTag: -> #vsv vtkProcessModule.GetProcessModule().RemoveObserver(progressObserverTag) -> #vsv progressObserverTag = None -> #VSV Observer is not supported -> #else: -> # progressObserverTag = vtkProcessModule.GetProcessModule().AddObserver("ProgressEvent", _printProgress) -2273,2278c2251,2256 -< """Although not required, this can be called at exit to cleanup.""" -< global progressObserverTag -< # Make sure to remove the observer -< if progressObserverTag: -< ToggleProgressPrinting() -< vtkInitializationHelper.Finalize() --- -> """Although not required, this can be called at exit to cleanup.""" -> global progressObserverTag -> # Make sure to remove the observer -> if progressObserverTag: -> ToggleProgressPrinting() -> vtkInitializationHelper.Finalize() -2293,2295c2271,2272 +> """Is not supported because of not supported observers""" +> pass +2308,2310c2269,2270 < if paraview.compatibility.GetVersion() >= 3.5: < if smproxy.GetXMLLabel(): < xmlName = smproxy.GetXMLLabel() --- > if smproxy.GetXMLLabel(): > xmlName = smproxy.GetXMLLabel() -2335,2338c2312 +2350,2353c2310 < if paraview.compatibility.GetVersion() >= 3.5: < return self.GetPropertyValue(propName) < else: < return self.GetProperty(propName) --- > return self.GetPropertyValue(propName) -2447c2421,2432 +2471c2428,2437 < return paraview.make_name_valid(name) --- -> "Make a string into a valid Python variable name" -> if not name: -> return None -> if name.find('(') >= 0 or name.find(')') >=0: +> """Make a string into a valid Python variable name. Return None if +> the name contains parentheses.""" +> if not name or '(' in name or ')' in name: > return None -> name = name.replace(' ','') -> name = name.replace('-','') -> name = name.replace(':','') -> name = name.replace('.','') +> import string +> valid_chars = "_%s%s" % (string.ascii_letters, string.digits) +> name = str().join([c for c in name if c in valid_chars]) > if not name[0].isalpha(): > name = 'a' + name > return name -2465,2469c2450,2451 -< if paraview.compatibility.GetVersion() >= 3.5: -< if proto.GetXMLLabel(): -< pname = proto.GetXMLLabel() -< else: -< pname = proxyName +2490,2491c2456 +< if paraview.compatibility.GetVersion() >= 3.5 and\ +< proto.GetXMLLabel(): --- > if proto.GetXMLLabel(): -> pname = proto.GetXMLLabel() -2483,2486c2465,2466 +2506,2509c2471,2472 < if paraview.compatibility.GetVersion() >= 3.5: < if (prop.GetInformationOnly() and propName != "TimestepValues" ) \ < or prop.GetIsInternal(): @@ -219,23 +192,12 @@ --- > if (prop.GetInformationOnly() and propName != "TimestepValues" ) or prop.GetIsInternal(): > continue -2488,2489c2468 +2511,2512c2474 < if paraview.compatibility.GetVersion() >= 3.5: < names = [iter.PropertyLabel] --- > names = [iter.PropertyLabel] -2502,2503c2481 -< if proto.GetDocumentation() and \ -< proto.GetDocumentation().GetDescription(): ---- -> if proto.GetDocumentation() and proto.GetDocumentation().GetDescription(): -2505,2506c2483,2484 -< else: -< doc = Proxy.__doc__ ---- -> #else: -> doc = Proxy.__doc__ -2616,2625c2594,2597 +2641,2650c2603,2606 < if paraview.compatibility.GetVersion() <= 3.4: < ss = sources.SphereSource(Radius=2, ThetaResolution=32) < shr = filters.ShrinkFilter(Input=OutputPort(ss,0)) @@ -251,28 +213,28 @@ > shr = filters.Shrink(Input=OutputPort(ss,0)) > cs = sources.Cone() > app = filters.AppendDatasets() -2646,2649c2618 +2671,2674c2627 < if paraview.compatibility.GetVersion() <= 3.4: < arraySelection = reader.PointResultArrayStatus < else: < arraySelection = reader.PointVariables --- > arraySelection = reader.PointVariables -2683,2686c2652 +2708,2711c2661 < if paraview.compatibility.GetVersion() <= 3.4: < print "Range:", ai.Range(j) < else: < print "Range:", ai.GetRange(j) --- > print "Range:", ai.GetRange(j) -2717,2720c2683 +2742,2745c2692 < if paraview.compatibility.GetVersion() <= 3.4: < source = sources.RTAnalyticSource() < else: < source = sources.Wavelet() --- > source = sources.Wavelet() -2751,2758c2714,2716 +2776,2783c2723,2725 < if paraview.compatibility.GetVersion() <= 3.4: < probe = filters.Probe(Input=source) < # with a line @@ -285,14 +247,18 @@ > probe = filters.ResampleWithDataset(Input=source) > # with a line > line = sources.Line(Resolution=60) -2802,2805c2760 +2827,2830c2769 < if paraview.compatibility.GetVersion() <= 3.4: < sphere = sources.SphereSource() < else: < sphere = sources.Sphere() --- > sphere = sources.Sphere() -2871a2827,2833 +2897,2899c2836,2844 +< if hasattr(sys, "ps1"): +< # session is interactive. +< print vtkSMProxyManager.GetParaViewSourceVersion(); +--- > # Definitions for working in SALOME GUI mode > aParams = myParavis.GetConnectionParameters() > ActiveConnection = Connection(aParams[0]) @@ -300,5 +266,5 @@ > ToggleProgressPrinting() > fromGUI = True > -2872a2835 +> print vtkSMProxyManager.GetParaViewSourceVersion(); > diff --git a/src/PV_SWIG/simple.diff b/src/PV_SWIG/simple.diff index ed0df8a0..18ffcb82 100644 --- a/src/PV_SWIG/simple.diff +++ b/src/PV_SWIG/simple.diff @@ -2,7 +2,7 @@ < #============================================================================== < # < # Program: ParaView -< # Module: $RCSfile$ +< # Module: $RCSfile: simple.diff,v $ < # < # Copyright (c) Kitware, Inc. < # All rights reserved. @@ -23,22 +23,22 @@ > import paravisSM > > servermanager = paravisSM -259c244,245 +280c265,266 < if proxy == GetActiveSource(): --- > #VSV:== > if proxy.IsSame(GetActiveSource()): -267c253,254 +288c274,275 < if rep.Input == proxy: --- > #VSV:== > if rep.Input.IsSame(proxy): -271c258,259 +292c279,280 < if proxy == GetActiveView(): --- > ##VSV:== > if proxy.IsSame(GetActiveView()): -679a668,674 +709a698,704 > def PrintTrace(): > print paravisSM.myParavis.GetTrace() > @@ -46,6 +46,10 @@ > paravisSM.myParavis.SaveTrace(fileName) > > -681a677,678 +711a707,708 > ## Initialisation for SALOME GUI > active_objects.view = servermanager.GetRenderView() +714a712,714 +> +> def ImportFile(theFileName): +> paravisSM.ImportFile(theFileName) diff --git a/src/ParaView/lex.yy.c b/src/ParaView/lex.yy.c new file mode 100644 index 00000000..2b12ad47 --- /dev/null +++ b/src/ParaView/lex.yy.c @@ -0,0 +1,3016 @@ + +#line 3 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart(yyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires + * access to the local variable yy_act. Since yyless() is a macro, it would break + * existing scanners that call yyless() from OUTSIDE yylex. + * One obvious solution it to make yy_act a global. I tried that, and saw + * a 5% performance hit in a non-yylineno scanner, because yy_act is + * normally declared as a register variable-- so it is not worth it. + */ + #define YY_LESS_LINENO(n) \ + do { \ + int yyl;\ + for ( yyl = n; yyl < yyleng; ++yyl )\ + if ( yytext[yyl] == '\n' )\ + --yylineno;\ + }while(0) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +int yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 94 +#define YY_END_OF_BUFFER 95 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[772] = + { 0, + 0, 0, 95, 93, 89, 89, 93, 92, 93, 84, + 88, 88, 90, 91, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 89, 9, 9, 93, + 93, 0, 1, 11, 84, 0, 0, 88, 88, 88, + 0, 0, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 0, 9, 0, 0, 86, 10, 85, + 11, 0, 88, 0, 0, 14, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 30, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 87, 10, 10, + + 10, 10, 0, 88, 88, 88, 37, 36, 88, 88, + 88, 88, 88, 0, 88, 88, 33, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 35, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 10, + 10, 10, 10, 10, 10, 0, 88, 88, 88, 88, + 26, 39, 88, 31, 88, 0, 0, 88, 88, 0, + 88, 88, 88, 88, 88, 88, 32, 88, 88, 88, + 88, 0, 0, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 10, 10, 10, 10, 10, + 10, 10, 0, 88, 88, 88, 88, 0, 34, 42, + + 0, 0, 88, 88, 0, 0, 88, 88, 88, 88, + 88, 27, 0, 88, 88, 43, 88, 88, 0, 0, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 10, 10, 10, 10, 10, 10, 10, 10, + 2, 0, 88, 88, 12, 24, 0, 0, 0, 0, + 20, 88, 0, 0, 18, 88, 88, 28, 88, 0, + 88, 0, 88, 88, 38, 0, 0, 0, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 10, 10, + 10, 10, 10, 10, 10, 12, 88, 88, 0, 20, + + 0, 0, 88, 19, 18, 0, 21, 40, 88, 0, + 17, 0, 88, 41, 0, 0, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 10, 10, 10, 3, 10, 10, 88, 88, 0, 0, + 19, 88, 21, 0, 88, 29, 17, 0, 88, 0, + 0, 87, 87, 87, 87, 87, 87, 87, 45, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 3, 10, 10, 3, 10, + 10, 72, 88, 0, 0, 15, 0, 88, 0, 88, + + 0, 25, 0, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 12, 3, 10, 10, 10, + 10, 88, 0, 22, 0, 23, 25, 0, 87, 87, + 87, 48, 87, 87, 87, 0, 0, 87, 47, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 74, 87, + 87, 87, 87, 87, 10, 10, 10, 10, 88, 22, + 23, 0, 87, 87, 87, 87, 87, 87, 0, 13, + 87, 87, 87, 87, 87, 46, 87, 76, 78, 80, + 70, 87, 87, 87, 87, 75, 87, 87, 10, 10, + + 10, 10, 88, 0, 0, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 77, 79, 81, + 87, 87, 10, 10, 10, 10, 10, 10, 10, 88, + 0, 16, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 82, 83, 87, 87, 87, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 73, 55, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 10, + + 10, 10, 10, 10, 10, 10, 10, 10, 8, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 51, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 10, 10, 10, 10, 8, 10, 10, 10, 10, + 8, 87, 87, 87, 54, 50, 87, 87, 87, 87, + 65, 52, 87, 49, 87, 87, 87, 87, 64, 87, + 87, 87, 10, 10, 10, 10, 8, 10, 10, 10, + 10, 87, 87, 87, 60, 61, 62, 63, 87, 56, + 57, 58, 59, 87, 87, 87, 10, 10, 10, 10, + 10, 10, 10, 10, 87, 87, 87, 87, 87, 87, + + 87, 10, 10, 10, 10, 7, 10, 10, 10, 68, + 87, 44, 87, 71, 87, 87, 7, 10, 10, 10, + 7, 10, 5, 6, 87, 87, 87, 87, 7, 10, + 5, 6, 10, 5, 6, 87, 87, 87, 87, 10, + 5, 6, 10, 87, 87, 87, 67, 10, 4, 87, + 87, 87, 4, 4, 87, 87, 87, 4, 87, 87, + 66, 87, 87, 69, 87, 87, 87, 87, 87, 53, + 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 1, 6, 7, 1, 1, 8, 1, 9, + 10, 11, 1, 8, 8, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 19, 21, 19, 22, 23, 1, + 8, 1, 1, 1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 31, 33, 34, 35, 36, 37, 38, + 31, 39, 40, 41, 42, 43, 44, 45, 46, 31, + 47, 1, 48, 1, 49, 1, 50, 51, 52, 53, + + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 31, 66, 67, 68, 69, 70, 71, 72, + 73, 31, 8, 1, 8, 8, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[74] = + { 0, + 1, 2, 3, 2, 2, 4, 1, 1, 1, 5, + 1, 1, 1, 6, 7, 7, 7, 7, 7, 7, + 7, 1, 8, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 1, 10, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9 + } ; + +static yyconst flex_int16_t yy_base[799] = + { 0, + 0, 72, 1713, 1714, 1714, 1714, 0, 1714, 67, 72, + 1663, 53, 79, 1714, 67, 47, 48, 49, 54, 51, + 55, 52, 57, 50, 61, 73, 125, 1714, 1714, 1708, + 121, 1704, 1714, 0, 128, 1660, 105, 1659, 107, 103, + 155, 159, 106, 122, 76, 116, 118, 90, 120, 121, + 123, 124, 125, 129, 126, 142, 130, 146, 137, 133, + 147, 148, 149, 212, 1714, 1694, 1703, 1714, 194, 1714, + 0, 156, 1656, 218, 224, 1714, 186, 155, 181, 182, + 183, 184, 159, 162, 185, 241, 191, 187, 188, 189, + 200, 203, 192, 205, 207, 210, 211, 284, 257, 0, + + 256, 1663, 225, 242, 230, 226, 1654, 1653, 222, 228, + 231, 232, 235, 301, 246, 236, 327, 238, 268, 272, + 285, 270, 286, 287, 266, 288, 344, 1652, 290, 292, + 250, 301, 248, 295, 302, 293, 303, 309, 332, 0, + 351, 1659, 329, 1645, 1653, 330, 343, 333, 335, 355, + 372, 1648, 337, 1647, 334, 1631, 1637, 331, 341, 393, + 340, 350, 351, 352, 357, 358, 413, 359, 373, 364, + 374, 426, 434, 362, 258, 383, 384, 393, 391, 392, + 395, 400, 401, 397, 408, 428, 1639, 1647, 1667, 1662, + 1622, 1685, 417, 428, 437, 426, 425, 476, 1638, 1637, + + 1622, 1620, 420, 421, 1620, 1618, 423, 433, 424, 435, + 434, 1632, 490, 436, 501, 1631, 458, 448, 511, 515, + 449, 459, 451, 489, 462, 479, 517, 487, 485, 484, + 481, 502, 1655, 1650, 1610, 1673, 1640, 1648, 1621, 1669, + 1714, 496, 520, 509, 1622, 1621, 559, 1601, 1612, 1601, + 569, 500, 1598, 1602, 1615, 521, 510, 1614, 526, 1599, + 516, 583, 532, 529, 1612, 588, 592, 600, 557, 534, + 558, 559, 563, 564, 566, 568, 567, 518, 572, 574, + 570, 578, 582, 579, 609, 588, 590, 603, 1625, 1633, + 1606, 1654, 1628, 1614, 1588, 1604, 616, 1603, 1591, 652, + + 1582, 657, 600, 1600, 1714, 1592, 665, 1598, 622, 1578, + 1596, 1587, 623, 1594, 674, 682, 631, 614, 639, 640, + 482, 625, 641, 596, 645, 646, 649, 651, 653, 654, + 655, 656, 660, 662, 666, 663, 687, 675, 680, 688, + 1614, 1600, 1574, 0, 1607, 1580, 682, 698, 730, 1573, + 1714, 681, 738, 746, 696, 1587, 1714, 1585, 689, 758, + 1570, 705, 715, 707, 708, 717, 709, 697, 1584, 723, + 724, 726, 728, 729, 730, 731, 732, 736, 735, 742, + 738, 744, 740, 746, 756, 0, 1600, 1573, 0, 1593, + 1564, 1579, 753, 809, 813, 1714, 1564, 770, 1563, 752, + + 1559, 1575, 1565, 774, 772, 773, 775, 778, 782, 784, + 829, 786, 788, 791, 792, 793, 795, 797, 800, 846, + 798, 804, 805, 806, 808, 1573, 0, 1584, 1555, 1583, + 1550, 827, 1561, 1567, 1547, 1565, 1714, 1560, 820, 830, + 837, 1563, 828, 831, 832, 879, 1601, 848, 1561, 833, + 836, 843, 840, 844, 842, 874, 886, 885, 1560, 855, + 858, 894, 879, 863, 1572, 1539, 1601, 1547, 888, 1714, + 1714, 928, 868, 869, 872, 873, 878, 928, 1594, 1714, + 891, 889, 898, 915, 935, 1554, 937, 1553, 1552, 1551, + 1550, 900, 936, 910, 942, 1549, 916, 913, 1592, 1538, + + 941, 1531, 930, 971, 985, 923, 929, 934, 947, 949, + 958, 965, 966, 967, 954, 957, 961, 968, 963, 970, + 983, 986, 987, 974, 1009, 1008, 978, 1545, 1544, 1543, + 979, 980, 1004, 1527, 1540, 1535, 1534, 1533, 1523, 997, + 1045, 1714, 985, 991, 988, 1004, 1010, 1011, 1014, 1016, + 1018, 1020, 1021, 1024, 1025, 1026, 1031, 1033, 1035, 1039, + 1041, 1536, 1535, 1028, 1037, 1043, 1533, 1528, 1527, 1526, + 1516, 1508, 1510, 1522, 1521, 1552, 1524, 1523, 1059, 1046, + 1047, 1050, 1048, 1052, 1053, 1058, 1060, 990, 1062, 1086, + 1066, 1068, 1069, 1070, 1075, 1074, 1090, 1080, 1081, 1501, + + 1503, 1515, 1514, 1545, 1512, 1513, 1559, 1558, 0, 1087, + 1089, 1093, 1092, 1095, 1096, 1097, 1098, 1099, 1102, 1513, + 1103, 1104, 1105, 1106, 1108, 1109, 1111, 1112, 1100, 1121, + 1122, 1507, 1508, 1554, 1553, 0, 1507, 1490, 1531, 1504, + 0, 1129, 1124, 1131, 1497, 1487, 1133, 1134, 1135, 1136, + 1477, 1467, 1137, 1457, 1138, 1139, 1143, 1144, 1447, 1160, + 1142, 1147, 1436, 1410, 1442, 1406, 0, 1368, 1371, 1367, + 1357, 1161, 1162, 1164, 1355, 1351, 1331, 1327, 1165, 1317, + 1313, 1312, 1309, 1166, 1167, 1184, 1289, 1289, 1272, 1271, + 1264, 1262, 1256, 1247, 1172, 1173, 1169, 1175, 1177, 1176, + + 1181, 1242, 1243, 1239, 1238, 0, 1235, 1238, 1236, 1249, + 1188, 1248, 1185, 1247, 1193, 1186, 0, 1224, 1198, 1131, + 0, 1131, 0, 0, 1196, 1199, 1214, 1201, 0, 994, + 0, 0, 977, 0, 0, 1202, 1217, 1206, 1204, 907, + 0, 0, 603, 1222, 1210, 1220, 550, 427, 0, 1224, + 1221, 1209, 0, 0, 1227, 1228, 1229, 0, 1215, 1234, + 353, 1235, 1236, 154, 1252, 1239, 1242, 1241, 1246, 127, + 1714, 1310, 1315, 1319, 1327, 1334, 1344, 1353, 1363, 1368, + 1377, 1387, 1396, 1405, 1415, 1424, 1433, 1443, 1453, 1463, + 1473, 1483, 1493, 1503, 1513, 1523, 1533, 1543 + + } ; + +static yyconst flex_int16_t yy_def[799] = + { 0, + 771, 1, 771, 771, 771, 771, 772, 771, 771, 773, + 774, 774, 775, 771, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 771, 771, 771, 776, + 771, 772, 771, 777, 773, 773, 773, 774, 774, 774, + 775, 778, 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 771, 771, 771, 776, 771, 779, 771, + 777, 773, 774, 771, 778, 771, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 780, 781, 779, + + 779, 779, 773, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 771, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 781, + 781, 781, 779, 779, 779, 773, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 771, 771, 774, 774, 771, + 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, + 774, 771, 771, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 781, 781, 781, 779, 779, + 779, 782, 773, 774, 774, 774, 774, 771, 774, 774, + + 771, 771, 774, 774, 771, 771, 774, 774, 774, 774, + 774, 774, 771, 774, 774, 774, 774, 774, 771, 783, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 781, 781, 781, 784, 779, 779, 779, 782, + 771, 773, 774, 774, 774, 774, 771, 771, 771, 771, + 774, 774, 771, 771, 774, 774, 774, 774, 774, 771, + 774, 771, 774, 774, 774, 771, 771, 783, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 781, 781, + 781, 784, 779, 779, 779, 773, 774, 774, 771, 771, + + 771, 771, 774, 774, 771, 771, 774, 774, 774, 771, + 774, 771, 774, 774, 771, 771, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 781, 781, 781, 785, 779, 779, 774, 774, 786, 771, + 771, 774, 771, 771, 774, 774, 771, 771, 774, 771, + 771, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 787, 781, 781, 785, 779, + 779, 774, 774, 771, 786, 771, 771, 774, 771, 774, + + 771, 774, 771, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 787, 781, 781, 779, + 779, 774, 771, 774, 771, 774, 771, 771, 780, 780, + 780, 780, 780, 780, 780, 771, 788, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 781, 781, 779, 779, 774, 771, + 771, 771, 780, 780, 780, 780, 780, 780, 788, 771, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 781, 781, + + 779, 779, 774, 771, 771, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 781, 781, 779, 779, 779, 779, 779, 774, + 771, 771, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 781, 781, 781, 781, + 781, 779, 779, 779, 779, 779, 774, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 781, + + 781, 781, 781, 781, 779, 779, 779, 779, 789, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 781, 781, 781, 781, 790, 779, 779, 779, 779, + 789, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 781, 781, 781, 781, 790, 779, 779, 779, + 779, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 781, 781, 781, 781, + 779, 779, 779, 779, 780, 780, 780, 780, 780, 780, + + 780, 781, 781, 781, 781, 791, 779, 779, 779, 780, + 780, 780, 780, 780, 780, 780, 792, 781, 781, 781, + 791, 779, 793, 794, 780, 780, 780, 780, 792, 781, + 795, 796, 779, 793, 794, 780, 780, 780, 780, 781, + 795, 796, 779, 780, 780, 780, 780, 781, 797, 780, + 780, 780, 798, 797, 780, 780, 780, 798, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 0, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771 + + } ; + +static yyconst flex_int16_t yy_nxt[1788] = + { 0, + 4, 5, 6, 5, 5, 7, 4, 8, 8, 8, + 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, + 10, 8, 8, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 12, 11, 11, 11, 13, 14, 15, 11, + 16, 17, 18, 11, 19, 11, 11, 20, 11, 11, + 21, 11, 11, 22, 23, 11, 24, 11, 25, 26, + 11, 11, 11, 27, 28, 29, 27, 33, 30, 34, + 41, 41, 41, 41, 31, 35, 35, 35, 35, 35, + 35, 35, 35, 40, 43, 39, 39, 39, 39, 39, + + 39, 39, 39, 39, 46, 39, 57, 58, 47, 39, + 45, 48, 49, 52, 50, 44, 54, 59, 53, 51, + 37, 39, 55, 60, 39, 56, 64, 65, 65, 64, + 61, 33, 72, 69, 43, 73, 62, 66, 39, 79, + 63, 35, 35, 35, 35, 35, 35, 35, 35, 43, + 77, 39, 82, 37, 39, 39, 41, 41, 41, 41, + 74, 74, 74, 74, 39, 80, 39, 81, 39, 39, + 39, 39, 39, 39, 39, 139, 37, 39, 39, 78, + 85, 39, 88, 89, 84, 39, 94, 87, 83, 90, + 39, 86, 91, 92, 39, 39, 39, 39, 101, 95, + + 103, 93, 139, 39, 37, 97, 76, 39, 98, 111, + 39, 112, 96, 64, 65, 65, 64, 106, 102, 74, + 74, 74, 74, 105, 66, 74, 74, 74, 74, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 113, 39, + 39, 107, 114, 114, 114, 114, 117, 108, 39, 109, + 110, 39, 118, 39, 123, 39, 120, 119, 39, 39, + 121, 141, 146, 127, 125, 76, 149, 143, 122, 43, + 39, 76, 124, 37, 39, 147, 39, 126, 39, 39, + 39, 142, 144, 39, 39, 148, 39, 163, 151, 39, + 39, 153, 159, 150, 39, 152, 139, 155, 139, 154, + + 178, 115, 114, 114, 114, 114, 139, 116, 129, 158, + 176, 130, 131, 132, 39, 133, 39, 164, 39, 134, + 39, 170, 222, 135, 136, 165, 137, 138, 160, 160, + 160, 160, 139, 39, 39, 39, 39, 167, 139, 168, + 139, 139, 166, 139, 169, 172, 172, 172, 172, 139, + 139, 139, 173, 174, 177, 180, 171, 139, 179, 185, + 183, 156, 186, 175, 189, 182, 193, 157, 190, 181, + 194, 195, 184, 196, 197, 39, 198, 187, 37, 39, + 139, 39, 39, 39, 161, 39, 200, 162, 39, 39, + 199, 39, 39, 203, 160, 160, 160, 160, 39, 39, + + 39, 139, 207, 39, 204, 39, 39, 39, 211, 212, + 139, 215, 39, 208, 213, 213, 213, 213, 209, 210, + 39, 39, 39, 218, 216, 221, 217, 172, 172, 172, + 172, 139, 139, 225, 173, 219, 219, 219, 219, 139, + 139, 139, 246, 139, 220, 139, 223, 228, 139, 139, + 205, 224, 232, 206, 230, 242, 139, 243, 226, 227, + 244, 39, 231, 233, 229, 37, 245, 234, 39, 39, + 214, 39, 39, 39, 39, 251, 39, 247, 247, 247, + 247, 39, 39, 39, 39, 39, 252, 257, 258, 753, + 255, 213, 213, 213, 213, 256, 39, 139, 261, 139, + + 271, 259, 262, 262, 262, 262, 39, 139, 265, 269, + 139, 264, 219, 219, 219, 219, 266, 266, 266, 266, + 277, 220, 270, 272, 267, 273, 284, 139, 274, 139, + 139, 275, 139, 139, 276, 139, 296, 139, 285, 288, + 366, 287, 278, 297, 37, 248, 298, 260, 39, 39, + 139, 279, 263, 280, 286, 281, 282, 39, 39, 283, + 247, 247, 247, 247, 39, 139, 139, 304, 39, 39, + 302, 302, 302, 302, 39, 308, 307, 39, 326, 309, + 39, 314, 139, 311, 262, 262, 262, 262, 313, 266, + 266, 266, 266, 315, 315, 315, 315, 267, 139, 318, + + 316, 266, 266, 266, 266, 139, 139, 139, 320, 267, + 317, 139, 139, 321, 139, 139, 139, 39, 139, 323, + 139, 327, 139, 329, 328, 319, 139, 139, 248, 303, + 139, 322, 324, 325, 312, 331, 139, 333, 139, 340, + 334, 347, 339, 335, 139, 330, 332, 336, 39, 369, + 337, 139, 338, 302, 302, 302, 302, 139, 302, 302, + 302, 302, 139, 352, 39, 749, 354, 354, 354, 354, + 39, 39, 359, 139, 356, 315, 315, 315, 315, 139, + 362, 363, 316, 360, 360, 360, 360, 139, 139, 139, + 367, 365, 368, 139, 139, 371, 364, 139, 370, 139, + + 372, 139, 139, 139, 139, 384, 376, 374, 139, 373, + 139, 139, 350, 39, 139, 380, 381, 350, 382, 375, + 378, 377, 355, 139, 379, 393, 385, 392, 139, 39, + 39, 394, 394, 394, 394, 139, 139, 39, 383, 354, + 354, 354, 354, 398, 39, 139, 39, 354, 354, 354, + 354, 361, 396, 139, 402, 139, 139, 139, 400, 360, + 360, 360, 360, 139, 410, 139, 409, 404, 405, 406, + 408, 139, 139, 407, 139, 411, 139, 139, 139, 139, + 139, 414, 415, 139, 139, 412, 139, 416, 139, 418, + 139, 413, 139, 421, 139, 399, 426, 432, 417, 419, + + 39, 39, 420, 399, 139, 424, 423, 422, 439, 425, + 394, 394, 394, 394, 394, 394, 394, 394, 39, 436, + 139, 139, 139, 139, 440, 434, 139, 361, 441, 443, + 139, 396, 139, 446, 139, 396, 139, 447, 442, 139, + 139, 139, 450, 139, 444, 139, 139, 445, 139, 455, + 448, 449, 139, 139, 139, 452, 139, 451, 453, 454, + 456, 461, 457, 460, 105, 458, 459, 469, 139, 473, + 474, 464, 462, 463, 475, 39, 139, 139, 139, 139, + 139, 139, 481, 446, 139, 139, 477, 447, 139, 483, + 139, 139, 139, 488, 139, 476, 139, 478, 484, 486, + + 482, 489, 490, 139, 497, 485, 139, 509, 493, 487, + 494, 139, 510, 495, 496, 503, 139, 139, 491, 506, + 139, 139, 139, 517, 492, 529, 139, 139, 498, 504, + 504, 504, 504, 139, 139, 508, 39, 139, 505, 139, + 516, 507, 139, 511, 512, 513, 139, 514, 139, 519, + 520, 521, 522, 525, 523, 528, 526, 527, 139, 530, + 518, 139, 515, 139, 139, 532, 535, 536, 540, 524, + 748, 139, 504, 504, 504, 504, 139, 139, 39, 531, + 537, 505, 139, 139, 139, 139, 541, 541, 543, 541, + 139, 545, 548, 544, 542, 139, 546, 139, 547, 549, + + 550, 551, 139, 552, 557, 139, 139, 538, 553, 139, + 554, 139, 556, 139, 139, 139, 139, 558, 139, 555, + 559, 560, 139, 561, 562, 563, 139, 139, 139, 567, + 568, 139, 577, 139, 139, 139, 139, 566, 139, 139, + 743, 564, 565, 569, 579, 39, 541, 541, 578, 541, + 580, 740, 139, 620, 542, 581, 139, 139, 139, 139, + 583, 582, 139, 584, 139, 585, 139, 586, 139, 139, + 570, 587, 139, 139, 139, 589, 139, 591, 590, 139, + 592, 139, 593, 139, 594, 139, 588, 139, 595, 139, + 597, 139, 596, 610, 139, 139, 139, 611, 139, 615, + + 139, 139, 598, 616, 617, 599, 139, 139, 139, 618, + 139, 622, 613, 612, 139, 614, 139, 139, 139, 624, + 625, 626, 139, 139, 629, 619, 627, 621, 139, 139, + 631, 623, 630, 644, 139, 139, 642, 139, 139, 628, + 139, 139, 643, 139, 139, 139, 139, 139, 139, 660, + 139, 139, 139, 139, 139, 645, 139, 139, 646, 139, + 139, 647, 648, 649, 650, 651, 652, 653, 654, 139, + 139, 655, 139, 656, 657, 659, 658, 139, 661, 139, + 672, 139, 139, 139, 139, 139, 139, 139, 733, 662, + 139, 139, 139, 673, 732, 139, 675, 676, 677, 678, + + 686, 680, 681, 674, 685, 679, 682, 683, 139, 139, + 139, 684, 139, 139, 139, 139, 700, 139, 701, 696, + 139, 139, 712, 139, 139, 139, 695, 698, 697, 139, + 716, 699, 139, 139, 139, 710, 139, 728, 726, 711, + 714, 139, 713, 715, 139, 725, 727, 139, 738, 139, + 139, 737, 139, 745, 139, 746, 750, 139, 139, 736, + 751, 731, 139, 139, 744, 139, 739, 747, 139, 139, + 139, 752, 139, 755, 757, 139, 139, 139, 759, 756, + 762, 760, 139, 139, 139, 763, 766, 139, 767, 139, + 139, 730, 761, 768, 139, 139, 139, 139, 764, 724, + + 139, 723, 722, 765, 720, 719, 769, 718, 717, 770, + 32, 32, 32, 709, 32, 32, 32, 32, 32, 32, + 36, 36, 708, 36, 38, 38, 707, 38, 42, 42, + 706, 705, 704, 42, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 71, 71, 703, 71, 71, 71, + 71, 71, 71, 71, 75, 75, 702, 139, 75, 75, + 139, 139, 75, 100, 100, 139, 100, 100, 100, 100, + 100, 100, 100, 128, 128, 139, 128, 140, 140, 139, + 140, 140, 140, 140, 140, 140, 140, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 268, 268, 139, + + 268, 268, 268, 139, 268, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 389, 389, 694, 389, 389, + 389, 389, 389, 389, 389, 395, 395, 693, 692, 395, + 395, 395, 395, 427, 427, 691, 427, 427, 427, 427, + 427, 427, 427, 479, 479, 479, 479, 479, 479, 479, + 479, 479, 479, 641, 641, 690, 641, 641, 641, 641, + 641, 641, 641, 667, 667, 689, 667, 667, 667, 667, + 667, 667, 667, 721, 721, 688, 721, 721, 721, 721, + 721, 721, 721, 729, 729, 687, 729, 729, 729, 729, + 729, 729, 729, 734, 734, 139, 734, 734, 734, 734, + + 734, 734, 734, 735, 735, 139, 735, 735, 735, 735, + 735, 735, 735, 741, 741, 139, 741, 741, 741, 741, + 741, 741, 741, 742, 742, 139, 742, 742, 742, 742, + 742, 742, 742, 754, 754, 139, 754, 754, 754, 754, + 754, 754, 754, 758, 758, 139, 758, 758, 758, 758, + 758, 758, 758, 671, 670, 669, 668, 666, 665, 664, + 663, 139, 640, 639, 638, 637, 636, 635, 634, 633, + 632, 139, 39, 609, 608, 607, 606, 605, 604, 603, + 602, 601, 600, 139, 139, 576, 575, 574, 573, 572, + 571, 139, 139, 139, 539, 534, 533, 139, 139, 139, + + 139, 139, 139, 480, 502, 501, 500, 499, 139, 139, + 480, 139, 472, 39, 471, 39, 470, 468, 467, 466, + 465, 139, 438, 39, 437, 435, 433, 39, 431, 430, + 429, 428, 139, 403, 401, 39, 397, 391, 390, 388, + 387, 386, 39, 358, 39, 357, 39, 353, 39, 351, + 349, 348, 37, 346, 345, 344, 241, 343, 342, 341, + 39, 310, 39, 39, 306, 305, 301, 300, 299, 39, + 39, 241, 295, 294, 293, 241, 291, 290, 289, 39, + 39, 254, 253, 250, 249, 39, 39, 241, 239, 238, + 237, 236, 235, 202, 201, 39, 39, 192, 191, 188, + + 139, 39, 39, 145, 104, 68, 99, 39, 37, 70, + 68, 39, 771, 3, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771 + } ; + +static yyconst flex_int16_t yy_chk[1788] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 9, 2, 9, + 13, 13, 13, 13, 2, 10, 10, 10, 10, 10, + 10, 10, 10, 12, 15, 16, 17, 18, 24, 20, + + 22, 12, 19, 21, 17, 23, 24, 24, 17, 25, + 16, 17, 18, 20, 19, 15, 22, 24, 21, 19, + 10, 26, 23, 25, 45, 23, 27, 27, 27, 27, + 26, 31, 37, 31, 39, 40, 26, 27, 48, 45, + 26, 35, 35, 35, 35, 35, 35, 35, 35, 44, + 43, 40, 48, 37, 43, 39, 41, 41, 41, 41, + 42, 42, 42, 42, 46, 46, 47, 47, 49, 50, + 44, 51, 52, 53, 55, 770, 35, 54, 57, 44, + 51, 60, 54, 55, 50, 59, 59, 53, 49, 55, + 56, 52, 56, 57, 58, 61, 62, 63, 69, 60, + + 72, 58, 764, 78, 72, 62, 42, 83, 63, 83, + 84, 84, 61, 64, 64, 64, 64, 78, 69, 74, + 74, 74, 74, 77, 64, 75, 75, 75, 75, 79, + 80, 81, 82, 85, 77, 88, 89, 90, 85, 87, + 93, 79, 86, 86, 86, 86, 87, 80, 91, 81, + 82, 92, 88, 94, 93, 95, 90, 89, 96, 97, + 91, 99, 103, 97, 95, 74, 105, 101, 92, 104, + 109, 75, 94, 103, 106, 104, 110, 96, 105, 111, + 112, 99, 101, 113, 116, 104, 118, 118, 109, 86, + 104, 111, 116, 106, 115, 110, 133, 113, 131, 112, + + 133, 86, 114, 114, 114, 114, 175, 86, 98, 115, + 131, 98, 98, 98, 125, 98, 119, 119, 122, 98, + 120, 125, 175, 98, 98, 120, 98, 98, 117, 117, + 117, 117, 98, 121, 123, 124, 126, 122, 129, 123, + 130, 136, 121, 134, 124, 127, 127, 127, 127, 132, + 135, 137, 127, 129, 132, 135, 126, 138, 134, 139, + 137, 114, 141, 130, 143, 136, 146, 114, 143, 135, + 147, 148, 138, 149, 150, 117, 151, 141, 146, 158, + 139, 148, 155, 149, 117, 153, 155, 117, 161, 159, + 153, 147, 127, 158, 160, 160, 160, 160, 162, 163, + + 164, 761, 161, 150, 159, 165, 166, 168, 165, 166, + 174, 168, 170, 162, 167, 167, 167, 167, 163, 164, + 151, 169, 171, 171, 169, 174, 170, 172, 172, 172, + 172, 176, 177, 178, 172, 173, 173, 173, 173, 179, + 180, 178, 197, 181, 173, 184, 176, 181, 182, 183, + 160, 177, 185, 160, 183, 193, 185, 194, 179, 180, + 195, 167, 184, 186, 182, 193, 196, 186, 203, 204, + 167, 207, 209, 197, 196, 203, 194, 198, 198, 198, + 198, 208, 211, 210, 214, 195, 204, 209, 210, 748, + 207, 213, 213, 213, 213, 208, 218, 221, 214, 223, + + 223, 211, 215, 215, 215, 215, 217, 222, 218, 221, + 225, 217, 219, 219, 219, 219, 220, 220, 220, 220, + 226, 219, 222, 224, 220, 224, 228, 226, 224, 231, + 321, 224, 230, 229, 225, 228, 242, 224, 229, 232, + 321, 231, 227, 243, 242, 198, 244, 213, 252, 215, + 232, 227, 215, 227, 230, 227, 227, 244, 257, 227, + 247, 247, 247, 247, 261, 227, 278, 252, 243, 256, + 251, 251, 251, 251, 259, 257, 256, 264, 278, 259, + 263, 264, 270, 261, 262, 262, 262, 262, 263, 266, + 266, 266, 266, 267, 267, 267, 267, 266, 747, 270, + + 267, 268, 268, 268, 268, 269, 271, 272, 272, 268, + 269, 273, 274, 273, 275, 277, 276, 251, 281, 275, + 279, 279, 280, 281, 280, 271, 282, 284, 247, 251, + 283, 274, 276, 277, 262, 283, 286, 285, 287, 288, + 285, 297, 287, 285, 324, 282, 284, 285, 303, 324, + 285, 288, 286, 300, 300, 300, 300, 285, 302, 302, + 302, 302, 318, 303, 297, 743, 307, 307, 307, 307, + 309, 313, 313, 322, 309, 315, 315, 315, 315, 317, + 317, 318, 315, 316, 316, 316, 316, 319, 320, 323, + 322, 320, 323, 325, 326, 326, 319, 327, 325, 328, + + 327, 329, 330, 331, 332, 339, 331, 329, 333, 328, + 334, 336, 300, 307, 335, 335, 336, 302, 337, 330, + 333, 332, 307, 338, 334, 348, 340, 347, 339, 352, + 347, 349, 349, 349, 349, 337, 340, 359, 338, 353, + 353, 353, 353, 352, 355, 368, 348, 354, 354, 354, + 354, 316, 349, 362, 359, 364, 365, 367, 355, 360, + 360, 360, 360, 363, 368, 366, 367, 362, 363, 364, + 366, 370, 371, 365, 372, 370, 373, 374, 375, 376, + 377, 373, 374, 379, 378, 371, 381, 375, 383, 377, + 380, 372, 382, 380, 384, 353, 385, 393, 376, 378, + + 400, 393, 379, 354, 385, 383, 382, 381, 404, 384, + 394, 394, 394, 394, 395, 395, 395, 395, 398, 400, + 405, 406, 404, 407, 405, 398, 408, 360, 406, 408, + 409, 394, 410, 411, 412, 395, 413, 411, 407, 414, + 415, 416, 414, 417, 409, 418, 421, 410, 419, 419, + 412, 413, 422, 423, 424, 416, 425, 415, 417, 418, + 420, 422, 420, 421, 432, 420, 420, 432, 439, 439, + 440, 425, 423, 424, 441, 432, 443, 411, 440, 444, + 445, 450, 448, 446, 451, 441, 444, 446, 453, 451, + 455, 452, 454, 456, 420, 443, 448, 445, 452, 454, + + 450, 457, 458, 460, 463, 453, 461, 476, 462, 455, + 462, 464, 477, 462, 462, 469, 473, 474, 460, 473, + 475, 476, 456, 482, 461, 494, 477, 463, 464, 472, + 472, 472, 472, 458, 457, 475, 469, 482, 472, 481, + 481, 474, 462, 478, 478, 478, 483, 478, 492, 484, + 485, 485, 485, 487, 485, 493, 487, 492, 494, 495, + 483, 498, 478, 484, 497, 498, 501, 501, 503, 485, + 740, 506, 504, 504, 504, 504, 478, 507, 503, 497, + 501, 504, 508, 485, 493, 487, 505, 505, 506, 505, + 495, 508, 511, 507, 505, 509, 509, 510, 510, 512, + + 513, 514, 515, 515, 520, 516, 511, 501, 516, 517, + 517, 519, 519, 512, 513, 514, 518, 521, 520, 518, + 522, 523, 524, 524, 525, 526, 527, 531, 532, 533, + 533, 521, 540, 543, 522, 523, 545, 532, 588, 544, + 733, 527, 531, 533, 544, 540, 541, 541, 543, 541, + 545, 730, 546, 588, 541, 546, 526, 525, 547, 548, + 548, 547, 549, 549, 550, 550, 551, 551, 552, 553, + 533, 552, 554, 555, 556, 554, 564, 556, 555, 557, + 557, 558, 558, 559, 559, 565, 553, 560, 560, 561, + 564, 566, 561, 579, 580, 581, 583, 579, 582, 583, + + 584, 585, 565, 584, 585, 566, 586, 579, 587, 586, + 589, 590, 581, 580, 591, 582, 592, 593, 594, 592, + 593, 594, 596, 595, 597, 587, 595, 589, 598, 599, + 599, 591, 598, 612, 590, 610, 610, 611, 597, 596, + 613, 612, 611, 614, 615, 616, 617, 618, 629, 629, + 619, 621, 622, 623, 624, 613, 625, 626, 614, 627, + 628, 615, 616, 617, 618, 619, 621, 622, 623, 630, + 631, 624, 643, 625, 626, 628, 627, 642, 630, 644, + 642, 647, 648, 649, 650, 653, 655, 656, 722, 631, + 661, 657, 658, 643, 720, 662, 647, 648, 649, 650, + + 662, 655, 656, 644, 661, 653, 657, 658, 660, 672, + 673, 660, 674, 679, 684, 685, 685, 697, 686, 673, + 695, 696, 697, 698, 700, 699, 672, 679, 674, 701, + 701, 684, 686, 713, 716, 695, 711, 716, 713, 696, + 699, 715, 698, 700, 725, 711, 715, 726, 727, 728, + 736, 726, 739, 737, 738, 738, 744, 752, 745, 725, + 745, 719, 727, 759, 736, 737, 728, 739, 746, 751, + 744, 746, 750, 750, 752, 755, 756, 757, 755, 751, + 759, 756, 760, 762, 763, 760, 765, 766, 766, 768, + 767, 718, 757, 767, 769, 714, 712, 710, 762, 709, + + 765, 708, 707, 763, 705, 704, 768, 703, 702, 769, + 772, 772, 772, 694, 772, 772, 772, 772, 772, 772, + 773, 773, 693, 773, 774, 774, 692, 774, 775, 775, + 691, 690, 689, 775, 776, 776, 776, 776, 776, 776, + 776, 776, 776, 776, 777, 777, 688, 777, 777, 777, + 777, 777, 777, 777, 778, 778, 687, 683, 778, 778, + 682, 681, 778, 779, 779, 680, 779, 779, 779, 779, + 779, 779, 779, 780, 780, 678, 780, 781, 781, 677, + 781, 781, 781, 781, 781, 781, 781, 782, 782, 782, + 782, 782, 782, 782, 782, 782, 782, 783, 783, 676, + + 783, 783, 783, 675, 783, 784, 784, 784, 784, 784, + 784, 784, 784, 784, 784, 785, 785, 671, 785, 785, + 785, 785, 785, 785, 785, 786, 786, 670, 669, 786, + 786, 786, 786, 787, 787, 668, 787, 787, 787, 787, + 787, 787, 787, 788, 788, 788, 788, 788, 788, 788, + 788, 788, 788, 789, 789, 666, 789, 789, 789, 789, + 789, 789, 789, 790, 790, 665, 790, 790, 790, 790, + 790, 790, 790, 791, 791, 664, 791, 791, 791, 791, + 791, 791, 791, 792, 792, 663, 792, 792, 792, 792, + 792, 792, 792, 793, 793, 659, 793, 793, 793, 793, + + 793, 793, 793, 794, 794, 654, 794, 794, 794, 794, + 794, 794, 794, 795, 795, 652, 795, 795, 795, 795, + 795, 795, 795, 796, 796, 651, 796, 796, 796, 796, + 796, 796, 796, 797, 797, 646, 797, 797, 797, 797, + 797, 797, 797, 798, 798, 645, 798, 798, 798, 798, + 798, 798, 798, 640, 639, 638, 637, 635, 634, 633, + 632, 620, 608, 607, 606, 605, 604, 603, 602, 601, + 600, 578, 577, 576, 575, 574, 573, 572, 571, 570, + 569, 568, 567, 563, 562, 539, 538, 537, 536, 535, + 534, 530, 529, 528, 502, 500, 499, 496, 491, 490, + + 489, 488, 486, 479, 468, 467, 466, 465, 459, 449, + 447, 442, 438, 436, 435, 434, 433, 431, 430, 429, + 428, 426, 403, 402, 401, 399, 397, 392, 391, 390, + 388, 387, 369, 361, 358, 356, 350, 346, 345, 343, + 342, 341, 314, 312, 311, 310, 308, 306, 304, 301, + 299, 298, 296, 295, 294, 293, 292, 291, 290, 289, + 265, 260, 258, 255, 254, 253, 250, 249, 248, 246, + 245, 240, 239, 238, 237, 236, 235, 234, 233, 216, + 212, 206, 205, 202, 201, 200, 199, 192, 191, 190, + 189, 188, 187, 157, 156, 154, 152, 145, 144, 142, + + 128, 108, 107, 102, 73, 67, 66, 38, 36, 32, + 30, 11, 3, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771 + } ; + +/* Table of booleans, true if rule could match eol. */ +static yyconst flex_int32_t yy_rule_can_match_eol[95] = + { 0, +0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, }; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "vtkParse.l" +#line 3 "vtkParse.l" + +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex -olex.yy.c vtkParse.l + +Modify lex.yy.c: + - remove yyunput function + - remove TABs + - change yy_n_chars declarations from "int yy_n_chars;" to + "size_t yy_n_chars;" in both the yy_buffer_state structure + and the global scope. + - change num_to_read declaration from "int num_to_read;" to + "size_t num_to_read;" in yy_get_next_buffer function. + +*/ + +/* We do not care of interactive mode */ +#define YY_NEVER_INTERACTIVE 1 +#define YY_NO_UNPUT 1 + +/* Do not include unistd.h in generated source. */ +#define YY_NO_UNISTD_H + +/* Skip declaring this function. It is a macro. */ +#define YY_SKIP_YYWRAP + +#ifdef _WIN32 +#pragma warning ( disable : 4018 ) +#pragma warning ( disable : 4127 ) +#pragma warning ( disable : 4131 ) +#pragma warning ( disable : 4244 ) +#pragma warning ( disable : 4251 ) +#pragma warning ( disable : 4267 ) +#pragma warning ( disable : 4305 ) +#pragma warning ( disable : 4309 ) +#pragma warning ( disable : 4706 ) +#pragma warning ( disable : 4786 ) +#endif + +#line 1179 "lex.yy.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +int yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 49 "vtkParse.l" + + +#line 1372 "lex.yy.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); + yy_current_state += YY_AT_BOL(); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 772 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 1714 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + + if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) + { + int yyl; + for ( yyl = 0; yyl < yyleng; ++yyl ) + if ( yytext[yyl] == '\n' ) + + yylineno++; +; + } + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 51 "vtkParse.l" +{ int c1 = 0, c2 = input(); + for (;;) + { + if (c2 == 0) + { + fprintf(yyout,"Cannot find closing comment.\n"); + break; + } + if (c1 == '*' && c2 == '/') break; + c1 = c2; c2 = input(); + } + }; + YY_BREAK +case 2: +*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 64 "vtkParse.l" +{ + int c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = input(); + for (;;) + { + if (c5 == 0) + { + fprintf(yyout,"Cannot find matching //ETX.\n"); + break; + } + if (c1 == '/' && c2 == '/' && c3 == 'E' && c4 == 'T' && c5 == 'X') break; + c1 = c2; c2 = c3; c3 = c4; c4 = c5; c5 = input(); + } + for (;;) + { + if (c5 == 0) break; + if (c5 == '\n') break; + c5 = input(); + } + }; + YY_BREAK +case 3: +YY_RULE_SETUP +#line 84 "vtkParse.l" +{ + int pos = 1; + while (yytext[pos-1] != 'M' || yytext[pos] != 'E') + { + pos++; + } + yylval.str = (char *)malloc(yyleng + 1 - pos - 1); + memcpy(yylval.str,yytext+ pos + 1,yyleng - pos - 1); + yylval.str[yyleng - pos - 1] = '\0'; + data.NameComment = vtkstrdup(yylval.str); + }; + YY_BREAK +case 4: +YY_RULE_SETUP +#line 96 "vtkParse.l" +{ + CommentState = 1; + data.Description = (char*)malloc(100000); + data.Description[0] = '\0'; + }; + YY_BREAK +case 5: +YY_RULE_SETUP +#line 102 "vtkParse.l" +{ + CommentState = 3; + data.SeeAlso = (char*)malloc(100000); + data.SeeAlso[0] = '\0'; + }; + YY_BREAK +case 6: +YY_RULE_SETUP +#line 108 "vtkParse.l" +{ + CommentState = 3; + data.SeeAlso = (char*)malloc(100000); + data.SeeAlso[0] = '\0'; + }; + YY_BREAK +case 7: +YY_RULE_SETUP +#line 114 "vtkParse.l" +{ + CommentState = 4; + data.Caveats = (char*)malloc(100000); + data.Caveats[0] = '\0'; + }; + YY_BREAK +case 8: +YY_RULE_SETUP +#line 120 "vtkParse.l" +{ + CommentState = 2; + HaveComment = 1; + CommentText[0] = '\0'; + }; + YY_BREAK +case 9: +/* rule 9 can match eol */ +YY_RULE_SETUP +#line 126 "vtkParse.l" +{ + HaveComment = 0; + CommentState = 0; + }; + YY_BREAK +case 10: +YY_RULE_SETUP +#line 131 "vtkParse.l" +{ + int pos = 1; + while (yytext[pos-1] != '/' || yytext[pos] != '/') pos++; + yylval.str = (char *)malloc(yyleng + 1 - pos - 1 + 1); + memcpy(yylval.str,yytext+ pos + 1,yyleng - pos - 1); + yylval.str[yyleng - pos - 1] = '\n'; + yylval.str[yyleng - pos] = '\0'; + switch (CommentState) + { + case 1: strcat(data.Description,yylval.str); break; + case 2: strcat(CommentText,yylval.str); break; + case 3: strcat(data.SeeAlso,yylval.str); break; + case 4: strcat(data.Caveats,yylval.str); break; + } + }; + YY_BREAK +case 11: +YY_RULE_SETUP +#line 147 "vtkParse.l" +; + YY_BREAK +case 12: +YY_RULE_SETUP +#line 149 "vtkParse.l" +; + YY_BREAK +case 13: +/* rule 13 can match eol */ +YY_RULE_SETUP +#line 151 "vtkParse.l" +; + YY_BREAK +case 14: +/* rule 14 can match eol */ +YY_RULE_SETUP +#line 153 "vtkParse.l" +{ + sscanf(yytext+1,"%d",&yylval.integer); return(ARRAY_NUM);} + YY_BREAK +case 15: +/* rule 15 can match eol */ +YY_RULE_SETUP +#line 157 "vtkParse.l" +return(CLASS_REF); + YY_BREAK +case 16: +/* rule 16 can match eol */ +YY_RULE_SETUP +#line 159 "vtkParse.l" +return(VAR_FUNCTION); + YY_BREAK +case 17: +/* rule 17 can match eol */ +YY_RULE_SETUP +#line 161 "vtkParse.l" +return(SHORT); + YY_BREAK +case 18: +/* rule 18 can match eol */ +YY_RULE_SETUP +#line 162 "vtkParse.l" +return(LONG); + YY_BREAK +case 19: +/* rule 19 can match eol */ +YY_RULE_SETUP +#line 163 "vtkParse.l" +return(SHORT); + YY_BREAK +case 20: +/* rule 20 can match eol */ +YY_RULE_SETUP +#line 164 "vtkParse.l" +return(LONG); + YY_BREAK +case 21: +/* rule 21 can match eol */ +YY_RULE_SETUP +#line 166 "vtkParse.l" +return(LONG_LONG); + YY_BREAK +case 22: +/* rule 22 can match eol */ +YY_RULE_SETUP +#line 167 "vtkParse.l" +return(LONG_LONG); + YY_BREAK +case 23: +/* rule 23 can match eol */ +YY_RULE_SETUP +#line 168 "vtkParse.l" +return(LONG_LONG); + YY_BREAK +case 24: +YY_RULE_SETUP +#line 170 "vtkParse.l" +return(INT64__); + YY_BREAK +case 25: +/* rule 25 can match eol */ +YY_RULE_SETUP +#line 172 "vtkParse.l" +return(SIGNED_CHAR); + YY_BREAK +case 26: +YY_RULE_SETUP +#line 174 "vtkParse.l" +return(CLASS); + YY_BREAK +case 27: +YY_RULE_SETUP +#line 175 "vtkParse.l" +return(PUBLIC); + YY_BREAK +case 28: +YY_RULE_SETUP +#line 176 "vtkParse.l" +return(PRIVATE); + YY_BREAK +case 29: +YY_RULE_SETUP +#line 177 "vtkParse.l" +return(PROTECTED); + YY_BREAK +case 30: +YY_RULE_SETUP +#line 178 "vtkParse.l" +return(INT); + YY_BREAK +case 31: +YY_RULE_SETUP +#line 179 "vtkParse.l" +return(FLOAT); + YY_BREAK +case 32: +YY_RULE_SETUP +#line 180 "vtkParse.l" +return(SHORT); + YY_BREAK +case 33: +YY_RULE_SETUP +#line 181 "vtkParse.l" +return(LONG); + YY_BREAK +case 34: +YY_RULE_SETUP +#line 182 "vtkParse.l" +return(DOUBLE); + YY_BREAK +case 35: +YY_RULE_SETUP +#line 183 "vtkParse.l" +return(VOID); + YY_BREAK +case 36: +YY_RULE_SETUP +#line 184 "vtkParse.l" +return(CHAR); + YY_BREAK +case 37: +YY_RULE_SETUP +#line 185 "vtkParse.l" +return(BOOL); + YY_BREAK +case 38: +YY_RULE_SETUP +#line 186 "vtkParse.l" +return(VIRTUAL); + YY_BREAK +case 39: +YY_RULE_SETUP +#line 187 "vtkParse.l" +return(CONST); + YY_BREAK +case 40: +YY_RULE_SETUP +#line 188 "vtkParse.l" +return(OPERATOR); + YY_BREAK +case 41: +YY_RULE_SETUP +#line 189 "vtkParse.l" +return(UNSIGNED); + YY_BREAK +case 42: +YY_RULE_SETUP +#line 190 "vtkParse.l" +return(FRIEND); + YY_BREAK +case 43: +YY_RULE_SETUP +#line 191 "vtkParse.l" +return(STATIC); + YY_BREAK +case 44: +YY_RULE_SETUP +#line 193 "vtkParse.l" +return(DOUBLE); + YY_BREAK +case 45: +YY_RULE_SETUP +#line 194 "vtkParse.l" +return(IdType); + YY_BREAK +case 46: +YY_RULE_SETUP +#line 195 "vtkParse.l" +return(StdString); + YY_BREAK +case 47: +YY_RULE_SETUP +#line 196 "vtkParse.l" +return(SetMacro); + YY_BREAK +case 48: +YY_RULE_SETUP +#line 197 "vtkParse.l" +return(GetMacro); + YY_BREAK +case 49: +YY_RULE_SETUP +#line 198 "vtkParse.l" +return(SetStringMacro); + YY_BREAK +case 50: +YY_RULE_SETUP +#line 199 "vtkParse.l" +return(GetStringMacro); + YY_BREAK +case 51: +YY_RULE_SETUP +#line 200 "vtkParse.l" +return(SetClampMacro); + YY_BREAK +case 52: +YY_RULE_SETUP +#line 201 "vtkParse.l" +return(SetObjectMacro); + YY_BREAK +case 53: +YY_RULE_SETUP +#line 202 "vtkParse.l" +return(SetReferenceCountedObjectMacro); + YY_BREAK +case 54: +YY_RULE_SETUP +#line 203 "vtkParse.l" +return(GetObjectMacro); + YY_BREAK +case 55: +YY_RULE_SETUP +#line 204 "vtkParse.l" +return(BooleanMacro); + YY_BREAK +case 56: +YY_RULE_SETUP +#line 205 "vtkParse.l" +return(SetVector2Macro); + YY_BREAK +case 57: +YY_RULE_SETUP +#line 206 "vtkParse.l" +return(SetVector3Macro); + YY_BREAK +case 58: +YY_RULE_SETUP +#line 207 "vtkParse.l" +return(SetVector4Macro); + YY_BREAK +case 59: +YY_RULE_SETUP +#line 208 "vtkParse.l" +return(SetVector6Macro); + YY_BREAK +case 60: +YY_RULE_SETUP +#line 209 "vtkParse.l" +return(GetVector2Macro); + YY_BREAK +case 61: +YY_RULE_SETUP +#line 210 "vtkParse.l" +return(GetVector3Macro); + YY_BREAK +case 62: +YY_RULE_SETUP +#line 211 "vtkParse.l" +return(GetVector4Macro); + YY_BREAK +case 63: +YY_RULE_SETUP +#line 212 "vtkParse.l" +return(GetVector6Macro); + YY_BREAK +case 64: +YY_RULE_SETUP +#line 213 "vtkParse.l" +return(SetVectorMacro); + YY_BREAK +case 65: +YY_RULE_SETUP +#line 214 "vtkParse.l" +return(GetVectorMacro); + YY_BREAK +case 66: +YY_RULE_SETUP +#line 215 "vtkParse.l" +return(ViewportCoordinateMacro); + YY_BREAK +case 67: +YY_RULE_SETUP +#line 216 "vtkParse.l" +return(WorldCoordinateMacro); + YY_BREAK +case 68: +YY_RULE_SETUP +#line 217 "vtkParse.l" +return(TypeMacro); + YY_BREAK +case 69: +YY_RULE_SETUP +#line 218 "vtkParse.l" +return(TypeMacro); + YY_BREAK +case 70: +YY_RULE_SETUP +#line 219 "vtkParse.l" +return(TypeMacro); + YY_BREAK +case 71: +YY_RULE_SETUP +#line 220 "vtkParse.l" +return(TypeMacro); + YY_BREAK +case 72: +YY_RULE_SETUP +#line 221 "vtkParse.l" +return(VTK_LEGACY); + YY_BREAK +case 73: +YY_RULE_SETUP +#line 222 "vtkParse.l" +return(VTK_WRAP_EXTERN); + YY_BREAK +case 74: +YY_RULE_SETUP +#line 223 "vtkParse.l" +return(TypeInt8); + YY_BREAK +case 75: +YY_RULE_SETUP +#line 224 "vtkParse.l" +return(TypeUInt8); + YY_BREAK +case 76: +YY_RULE_SETUP +#line 225 "vtkParse.l" +return(TypeInt16); + YY_BREAK +case 77: +YY_RULE_SETUP +#line 226 "vtkParse.l" +return(TypeUInt16); + YY_BREAK +case 78: +YY_RULE_SETUP +#line 227 "vtkParse.l" +return(TypeInt32); + YY_BREAK +case 79: +YY_RULE_SETUP +#line 228 "vtkParse.l" +return(TypeUInt32); + YY_BREAK +case 80: +YY_RULE_SETUP +#line 229 "vtkParse.l" +return(TypeInt64); + YY_BREAK +case 81: +YY_RULE_SETUP +#line 230 "vtkParse.l" +return(TypeUInt64); + YY_BREAK +case 82: +YY_RULE_SETUP +#line 231 "vtkParse.l" +return(TypeFloat32); + YY_BREAK +case 83: +YY_RULE_SETUP +#line 232 "vtkParse.l" +return(TypeFloat64); + YY_BREAK +case 84: +YY_RULE_SETUP +#line 235 "vtkParse.l" +{ sscanf(yytext,"%d",&yylval.integer); return(NUM);} + YY_BREAK +case 85: +/* rule 85 can match eol */ +YY_RULE_SETUP +#line 237 "vtkParse.l" +{ + yylval.str = vtkstrdup(yytext + 1); + yylval.str[strlen(yytext)-2] = '\0'; + return(STRING); + } + YY_BREAK +case 86: +*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 243 "vtkParse.l" +; + YY_BREAK +case 87: +YY_RULE_SETUP +#line 246 "vtkParse.l" +{ yylval.str = (char *)malloc(yyleng + 1); + memcpy(yylval.str,yytext,yyleng); + yylval.str[yyleng] = '\0'; + return(VTK_ID); + } + YY_BREAK +case 88: +YY_RULE_SETUP +#line 252 "vtkParse.l" +{ yylval.str = (char *)malloc(yyleng + 1); + memcpy(yylval.str,yytext,yyleng); + yylval.str[yyleng] = '\0'; + return(ID); + } + YY_BREAK +case 89: +/* rule 89 can match eol */ +YY_RULE_SETUP +#line 258 "vtkParse.l" +; + YY_BREAK +case 90: +YY_RULE_SETUP +#line 261 "vtkParse.l" +return(yytext[0]); + YY_BREAK +case 91: +YY_RULE_SETUP +#line 262 "vtkParse.l" +return(yytext[0]); + YY_BREAK +case 92: +YY_RULE_SETUP +#line 265 "vtkParse.l" +{ return(yytext[0]); } + YY_BREAK +case 93: +YY_RULE_SETUP +#line 267 "vtkParse.l" +return(OTHER); + YY_BREAK +case 94: +YY_RULE_SETUP +#line 268 "vtkParse.l" +ECHO; + YY_BREAK +#line 2046 "lex.yy.c" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart(yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 772 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 772 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 771); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart(yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol ) + + yylineno++; +; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + /* We do not touch yylineno unless the option is enabled. */ + yylineno = 1; + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 268 "vtkParse.l" + + + + diff --git a/src/ParaView/readme.txt b/src/ParaView/readme.txt new file mode 100644 index 00000000..40939f71 --- /dev/null +++ b/src/ParaView/readme.txt @@ -0,0 +1,3 @@ +These files are pure copy from Paraview sources. +They need for extractor building. +Them has to be updated if the corresponded files in paraview will be changed \ No newline at end of file diff --git a/src/ParaView/vtkParse.h b/src/ParaView/vtkParse.h new file mode 100644 index 00000000..febcdf26 --- /dev/null +++ b/src/ParaView/vtkParse.h @@ -0,0 +1,167 @@ +/*========================================================================= + + Program: Visualization Toolkit + Module: $RCSfile$ + + Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm 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. + +=========================================================================*/ +#ifndef __vtkParse_h +#define __vtkParse_h + +#if defined(__cplusplus) +#include +#include +#endif + +#define MAX_ARGS 20 + +typedef struct _FunctionInfo + { +#if defined(__cplusplus) + vtkstd::string Name; +#else + char *Name; +#endif + int NumberOfArguments; + int ArrayFailure; + int IsPureVirtual; + int IsPublic; + int IsProtected; + int IsOperator; + int HaveHint; + int HintSize; + int ArgTypes[MAX_ARGS]; + int ArgCounts[MAX_ARGS]; + +#if defined(__cplusplus) + vtkstd::string ArgClasses[MAX_ARGS]; +#else + char *ArgClasses[MAX_ARGS]; +#endif + int ArgExternals[MAX_ARGS]; + int ReturnType; + +#if defined(__cplusplus) + vtkstd::string ReturnClass; + vtkstd::string Comment; + vtkstd::string Signature; +#else + char *ReturnClass; + char *Comment; + char *Signature; +#endif + int ReturnExternal; + int IsLegacy; + } FunctionInfo; + +#if defined(__cplusplus) +#else +typedef struct _FileInfo + { + int HasDelete; + int IsAbstract; + int IsConcrete; +#if defined(__cplusplus) + vtkstd::string ClassName; + vtkstd::string FileName; + vtkstd::string OutputFileName; + vtkstd::string SuperClasses[10]; +#else + char *ClassName; + char *FileName; + char *OutputFileName; + char *SuperClasses[10]; +#endif + + int NumberOfSuperClasses; + int NumberOfFunctions; + FunctionInfo Functions[1000]; +#if defined(__cplusplus) + vtkstd::string NameComment; + vtkstd::string Description; + vtkstd::string Caveats; + vtkstd::string SeeAlso; +#else + char *NameComment; + char *Description; + char *Caveats; + char *SeeAlso; +#endif + + } FileInfo; + +#endif +//--------------------------------------------------------------------------nix +/* + * This structure is used internally to sort+collect individual functions. + * Polymorphed functions will be combined and can be handeled together. + * + */ +typedef struct _UniqueFunctionInfo +{ +#if defined(__cplusplus) + vtkstd::string Name; +#else + char *Name; +#endif + int TotalPolymorphTypes; +#if defined(__cplusplus) + vtkstd::vector Function; +#else + FunctionInfo Function[20]; +#endif +}UniqueFunctionInfo; + + +//--------------------------------------------------------------------------nix +/* + * This structure is used to collect and hold class information. It is a + * modified version of FileInfo + * + */ +typedef struct _ClassInfo +{ + int HasDelete; + int IsAbstract; + int IsConcrete; +#if defined(__cplusplus) + vtkstd::string ClassName; + vtkstd::string FileName; + vtkstd::string OutputFileName; + vtkstd::string SuperClasses[10]; +#else + char *ClassName; + char *FileName; + char *OutputFileName; + char *SuperClasses[10]; +#endif + + int NumberOfSuperClasses; + int NumberOfFunctions; +#if defined(__cplusplus) + vtkstd::vector Functions; +#else + UniqueFunctionInfo Functions[1000]; +#endif +#if defined(__cplusplus) + vtkstd::string NameComment; + vtkstd::string Description; + vtkstd::string Caveats; + vtkstd::string SeeAlso; +#else + char *NameComment; + char *Description; + char *Caveats; + char *SeeAlso; +#endif +}ClassInfo; + + +#endif //__vtkParse_h diff --git a/src/ParaView/vtkParse.tab.c b/src/ParaView/vtkParse.tab.c new file mode 100644 index 00000000..2a9f1b29 --- /dev/null +++ b/src/ParaView/vtkParse.tab.c @@ -0,0 +1,4000 @@ + +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.4.1" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ +#line 15 "vtkParse.y" + + +/* + +This file must be translated to C and modified to build everywhere. + +Run yacc like this: + + yacc -b vtkParse vtkParse.y + +Modify vtkParse.tab.c: + - remove TABs + - remove yyerrorlab stuff in range ["goto yyerrlab1;", "yyerrstatus = 3;") + +*/ + +#include +#include +#include +#define yyerror(a) fprintf(stderr,"%s\n",a) +#define yywrap() 1 + +/* Make sure yacc-generated code knows we have included stdlib.h. */ +#ifndef _STDLIB_H +# define _STDLIB_H +#endif +#define YYINCLUDED_STDLIB_H + +/* Map from the type enumeration in vtkType.h to the VTK wrapping type + system number for the type. Note that the wrapping type system + does not enumerate its type values by name. Look in the + type_primitive production rule in the grammar for the "official" + enumeration. */ +static int vtkParseTypeMap[] = + { + 0x2, /* VTK_VOID 0 */ + 0, /* VTK_BIT 1 */ + 0x3, /* VTK_CHAR 2 */ + 0x13, /* VTK_UNSIGNED_CHAR 3 */ + 0x5, /* VTK_SHORT 4 */ + 0x15, /* VTK_UNSIGNED_SHORT 5 */ + 0x4, /* VTK_INT 6 */ + 0x14, /* VTK_UNSIGNED_INT 7 */ + 0x6, /* VTK_LONG 8 */ + 0x16, /* VTK_UNSIGNED_LONG 9 */ + 0x1, /* VTK_FLOAT 10 */ + 0x7, /* VTK_DOUBLE 11 */ + 0xA, /* VTK_ID_TYPE 12 */ + 0, /* VTK_STRING 13 */ + 0, /* VTK_OPAQUE 14 */ + 0xD, /* VTK_SIGNED_CHAR 15 */ + 0xB, /* VTK_LONG_LONG 16 */ + 0x1B, /* VTK_UNSIGNED_LONG_LONG 17 */ + 0xC, /* VTK___INT64 18 */ + 0x1C /* VTK_UNSIGNED___INT64 19 */ + }; + +/* Define some constants to simplify references to the table lookup in + the type_primitive production rule code. */ +#include "vtkType.h" +#define VTK_PARSE_INT8 vtkParseTypeMap[VTK_TYPE_INT8] +#define VTK_PARSE_UINT8 vtkParseTypeMap[VTK_TYPE_UINT8] +#define VTK_PARSE_INT16 vtkParseTypeMap[VTK_TYPE_INT16] +#define VTK_PARSE_UINT16 vtkParseTypeMap[VTK_TYPE_UINT16] +#define VTK_PARSE_INT32 vtkParseTypeMap[VTK_TYPE_INT32] +#define VTK_PARSE_UINT32 vtkParseTypeMap[VTK_TYPE_UINT32] +#define VTK_PARSE_INT64 vtkParseTypeMap[VTK_TYPE_INT64] +#define VTK_PARSE_UINT64 vtkParseTypeMap[VTK_TYPE_UINT64] +#define VTK_PARSE_FLOAT32 vtkParseTypeMap[VTK_TYPE_FLOAT32] +#define VTK_PARSE_FLOAT64 vtkParseTypeMap[VTK_TYPE_FLOAT64] + +static void vtkParseDebug(const char* s1, const char* s2); + +/* Borland and MSVC do not define __STDC__ properly. */ +#if !defined(__STDC__) +# if (defined(_MSC_VER) && _MSC_VER >= 1200) || defined(__BORLANDC__) +# define __STDC__ 1 +# endif +#endif + +/* Disable warnings in generated code. */ +#if defined(_MSC_VER) +# pragma warning (disable: 4127) /* conditional expression is constant */ +# pragma warning (disable: 4244) /* conversion to smaller integer type */ +#endif +#if defined(__BORLANDC__) +# pragma warn -8004 /* assigned a value that is never used */ +# pragma warn -8008 /* conditional is always true */ +# pragma warn -8066 /* unreachable code */ +#endif + +int yylex(void); +void output_function(void); + +/* vtkstrdup is not part of POSIX so we create our own */ +char *vtkstrdup(const char *in) +{ + char *res = malloc(strlen(in)+1); + strcpy(res,in); + return res; +} + +#include "vtkParse.h" + + FileInfo data; + FunctionInfo *currentFunction; + + FILE *fhint; + char temps[2048]; + int in_public; + int in_protected; + int HaveComment; + char CommentText[50000]; + int CommentState; + int openSig; + int invertSig; + unsigned int sigAllocatedLength; + +#define YYMAXDEPTH 1000 + + void checkSigSize(const char *arg) + { + if (strlen(currentFunction->Signature) + strlen(arg) + 3 > + sigAllocatedLength) + { + currentFunction->Signature = (char *) + realloc(currentFunction->Signature, sigAllocatedLength*2); + sigAllocatedLength = sigAllocatedLength*2; + } + } + void preSig(const char *arg) + { + if (!currentFunction->Signature) + { + currentFunction->Signature = (char*)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"%s",arg); + } + else if (openSig) + { + char *tmp; + checkSigSize(arg); + tmp = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"%s%s",arg,tmp); + free(tmp); + } + } + void postSig(const char *arg) + { + if (!currentFunction->Signature) + { + currentFunction->Signature = (char*)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"%s",arg); + } + else if (openSig) + { + char *tmp; + checkSigSize(arg); + tmp = vtkstrdup(currentFunction->Signature); + if (invertSig) + { + sprintf(currentFunction->Signature,"%s%s",arg,tmp); + } + else + { + sprintf(currentFunction->Signature,"%s%s",tmp,arg); + } + free(tmp); + } + } + void delSig(void) + { + if (currentFunction->Signature) + { + free(currentFunction->Signature); + currentFunction->Signature = NULL; + } + } + void legacySig(void) + { + currentFunction->IsLegacy = 1; + } + + +/* Line 189 of yacc.c */ +#line 259 "vtkParse.tab.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + CLASS = 258, + PUBLIC = 259, + PRIVATE = 260, + PROTECTED = 261, + VIRTUAL = 262, + STRING = 263, + NUM = 264, + ID = 265, + INT = 266, + FLOAT = 267, + SHORT = 268, + LONG = 269, + LONG_LONG = 270, + INT64__ = 271, + DOUBLE = 272, + VOID = 273, + CHAR = 274, + SIGNED_CHAR = 275, + BOOL = 276, + CLASS_REF = 277, + OTHER = 278, + CONST = 279, + OPERATOR = 280, + UNSIGNED = 281, + FRIEND = 282, + VTK_ID = 283, + STATIC = 284, + VAR_FUNCTION = 285, + ARRAY_NUM = 286, + VTK_LEGACY = 287, + TypeInt8 = 288, + TypeUInt8 = 289, + TypeInt16 = 290, + TypeUInt16 = 291, + TypeInt32 = 292, + TypeUInt32 = 293, + TypeInt64 = 294, + TypeUInt64 = 295, + TypeFloat32 = 296, + TypeFloat64 = 297, + IdType = 298, + StdString = 299, + SetMacro = 300, + GetMacro = 301, + SetStringMacro = 302, + GetStringMacro = 303, + SetClampMacro = 304, + SetObjectMacro = 305, + SetReferenceCountedObjectMacro = 306, + GetObjectMacro = 307, + BooleanMacro = 308, + SetVector2Macro = 309, + SetVector3Macro = 310, + SetVector4Macro = 311, + SetVector6Macro = 312, + GetVector2Macro = 313, + GetVector3Macro = 314, + GetVector4Macro = 315, + GetVector6Macro = 316, + SetVectorMacro = 317, + GetVectorMacro = 318, + ViewportCoordinateMacro = 319, + WorldCoordinateMacro = 320, + TypeMacro = 321, + VTK_WRAP_EXTERN = 322 + }; +#endif + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 214 of yacc.c */ +#line 200 "vtkParse.y" + + char *str; + int integer; + struct { + char* name; + int external; + } vtkid; + + + +/* Line 214 of yacc.c */ +#line 373 "vtkParse.tab.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + + +/* Copy the second part of user declarations. */ + + +/* Line 264 of yacc.c */ +#line 385 "vtkParse.tab.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int yyi) +#else +static int +YYID (yyi) + int yyi; +#endif +{ + return yyi; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 63 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 891 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 83 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 75 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 197 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 370 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 322 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 79, 2, + 72, 73, 80, 2, 76, 81, 82, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 70, 71, + 2, 75, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 77, 2, 78, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 68, 2, 69, 74, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 7, 10, 12, 13, 21, 23, 26, + 29, 31, 33, 36, 39, 43, 46, 49, 51, 56, + 59, 63, 65, 68, 72, 77, 81, 84, 86, 89, + 93, 98, 102, 105, 109, 110, 111, 116, 120, 121, + 123, 124, 130, 132, 134, 136, 138, 140, 145, 149, + 153, 154, 156, 158, 159, 164, 166, 167, 172, 174, + 175, 178, 182, 185, 188, 189, 190, 194, 199, 202, + 204, 207, 211, 213, 216, 218, 220, 223, 226, 228, + 230, 232, 235, 238, 239, 243, 245, 247, 249, 251, + 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, + 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, + 293, 294, 297, 300, 301, 307, 309, 311, 313, 316, + 318, 320, 324, 326, 327, 335, 336, 337, 346, 347, + 353, 354, 360, 361, 362, 373, 374, 382, 383, 391, + 392, 393, 402, 403, 411, 412, 420, 421, 429, 430, + 438, 439, 447, 448, 456, 457, 465, 466, 474, 475, + 483, 484, 494, 495, 505, 510, 515, 522, 530, 531, + 534, 535, 538, 540, 542, 544, 546, 548, 550, 552, + 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, + 574, 576, 578, 580, 582, 584, 588, 592 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 84, 0, -1, 151, 86, 151, -1, 28, 67, -1, + 28, -1, -1, 3, 28, 87, 122, 68, 88, 69, + -1, 89, -1, 89, 88, -1, 125, 70, -1, 110, + -1, 92, -1, 27, 92, -1, 91, 103, -1, 27, + 91, 103, -1, 90, 103, -1, 128, 71, -1, 128, + -1, 32, 72, 91, 73, -1, 74, 94, -1, 7, + 74, 94, -1, 94, -1, 114, 94, -1, 114, 24, + 94, -1, 7, 114, 24, 94, -1, 7, 114, 94, + -1, 7, 94, -1, 93, -1, 114, 93, -1, 114, + 24, 93, -1, 7, 114, 24, 93, -1, 7, 114, + 93, -1, 7, 93, -1, 25, 152, 71, -1, -1, + -1, 98, 95, 97, 96, -1, 98, 75, 9, -1, + -1, 24, -1, -1, 102, 72, 99, 104, 73, -1, + 24, -1, 29, -1, 85, -1, 10, -1, 71, -1, + 68, 151, 69, 71, -1, 68, 151, 69, -1, 70, + 152, 71, -1, -1, 105, -1, 107, -1, -1, 107, + 106, 76, 105, -1, 114, -1, -1, 114, 111, 108, + 109, -1, 30, -1, -1, 75, 126, -1, 114, 111, + 71, -1, 30, 71, -1, 102, 112, -1, -1, -1, + 31, 113, 112, -1, 77, 152, 78, 112, -1, 100, + 115, -1, 115, -1, 101, 115, -1, 101, 100, 115, + -1, 119, -1, 119, 118, -1, 116, -1, 117, -1, + 117, 79, -1, 117, 80, -1, 44, -1, 79, -1, + 80, -1, 79, 118, -1, 80, 118, -1, -1, 26, + 120, 121, -1, 121, -1, 33, -1, 34, -1, 35, + -1, 36, -1, 37, -1, 38, -1, 39, -1, 40, + -1, 41, -1, 42, -1, 12, -1, 18, -1, 19, + -1, 11, -1, 13, -1, 14, -1, 17, -1, 10, + -1, 85, -1, 43, -1, 15, -1, 16, -1, 20, + -1, 21, -1, -1, 70, 123, -1, 125, 28, -1, + -1, 125, 28, 124, 76, 123, -1, 4, -1, 5, + -1, 6, -1, 81, 127, -1, 127, -1, 9, -1, + 9, 82, 9, -1, 102, -1, -1, 45, 72, 102, + 76, 129, 119, 73, -1, -1, -1, 46, 72, 130, + 102, 76, 131, 119, 73, -1, -1, 47, 72, 132, + 102, 73, -1, -1, 48, 72, 133, 102, 73, -1, + -1, -1, 49, 72, 102, 76, 134, 119, 135, 76, + 152, 73, -1, -1, 50, 72, 102, 76, 136, 119, + 73, -1, -1, 51, 72, 102, 76, 137, 119, 73, + -1, -1, -1, 52, 72, 138, 102, 76, 139, 119, + 73, -1, -1, 53, 72, 102, 140, 76, 119, 73, + -1, -1, 54, 72, 102, 76, 141, 119, 73, -1, + -1, 58, 72, 102, 76, 142, 119, 73, -1, -1, + 55, 72, 102, 76, 143, 119, 73, -1, -1, 59, + 72, 102, 76, 144, 119, 73, -1, -1, 56, 72, + 102, 76, 145, 119, 73, -1, -1, 60, 72, 102, + 76, 146, 119, 73, -1, -1, 57, 72, 102, 76, + 147, 119, 73, -1, -1, 61, 72, 102, 76, 148, + 119, 73, -1, -1, 62, 72, 102, 76, 149, 119, + 76, 126, 73, -1, -1, 63, 72, 102, 76, 150, + 119, 76, 126, 73, -1, 64, 72, 102, 73, -1, + 65, 72, 102, 73, -1, 66, 72, 102, 76, 102, + 73, -1, 66, 72, 102, 76, 102, 76, 73, -1, + -1, 153, 151, -1, -1, 154, 152, -1, 71, -1, + 154, -1, 23, -1, 155, -1, 156, -1, 80, -1, + 75, -1, 70, -1, 76, -1, 82, -1, 8, -1, + 119, -1, 117, -1, 9, -1, 22, -1, 79, -1, + 157, -1, 24, -1, 25, -1, 81, -1, 74, -1, + 29, -1, 31, -1, 68, 151, 69, -1, 72, 151, + 73, -1, 77, 151, 78, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 281, 281, 283, 288, 295, 294, 300, 300, 302, + 302, 303, 304, 305, 306, 307, 308, 309, 311, 313, + 314, 315, 316, 320, 324, 329, 334, 340, 344, 349, + 354, 360, 366, 372, 378, 378, 378, 384, 393, 393, + 395, 395, 397, 399, 401, 401, 403, 404, 405, 406, + 408, 408, 410, 411, 411, 413, 419, 418, 425, 432, + 432, 434, 434, 436, 444, 445, 445, 448, 451, 452, + 453, 454, 456, 457, 459, 461, 462, 463, 465, 475, + 476, 477, 478, 480, 480, 482, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 507, 527, 528, 529, 530, 531, + 533, 533, 535, 541, 540, 546, 547, 548, 550, 550, + 552, 553, 553, 557, 556, 568, 568, 568, 577, 577, + 588, 588, 598, 599, 597, 630, 629, 642, 641, 653, + 654, 653, 663, 662, 680, 679, 710, 709, 727, 726, + 759, 758, 776, 775, 810, 809, 827, 826, 865, 864, + 882, 881, 900, 899, 916, 963, 1012, 1063, 1119, 1119, + 1120, 1120, 1122, 1122, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1126, + 1126, 1126, 1126, 1126, 1126, 1128, 1129, 1130 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "CLASS", "PUBLIC", "PRIVATE", + "PROTECTED", "VIRTUAL", "STRING", "NUM", "ID", "INT", "FLOAT", "SHORT", + "LONG", "LONG_LONG", "INT64__", "DOUBLE", "VOID", "CHAR", "SIGNED_CHAR", + "BOOL", "CLASS_REF", "OTHER", "CONST", "OPERATOR", "UNSIGNED", "FRIEND", + "VTK_ID", "STATIC", "VAR_FUNCTION", "ARRAY_NUM", "VTK_LEGACY", + "TypeInt8", "TypeUInt8", "TypeInt16", "TypeUInt16", "TypeInt32", + "TypeUInt32", "TypeInt64", "TypeUInt64", "TypeFloat32", "TypeFloat64", + "IdType", "StdString", "SetMacro", "GetMacro", "SetStringMacro", + "GetStringMacro", "SetClampMacro", "SetObjectMacro", + "SetReferenceCountedObjectMacro", "GetObjectMacro", "BooleanMacro", + "SetVector2Macro", "SetVector3Macro", "SetVector4Macro", + "SetVector6Macro", "GetVector2Macro", "GetVector3Macro", + "GetVector4Macro", "GetVector6Macro", "SetVectorMacro", "GetVectorMacro", + "ViewportCoordinateMacro", "WorldCoordinateMacro", "TypeMacro", + "VTK_WRAP_EXTERN", "'{'", "'}'", "':'", "';'", "'('", "')'", "'~'", + "'='", "','", "'['", "']'", "'&'", "'*'", "'-'", "'.'", "$accept", + "strt", "vtk_id", "class_def", "$@1", "class_def_body", "class_def_item", + "legacy_function", "function", "operator", "operator_sig", "func", "$@2", + "$@3", "maybe_const", "func_sig", "$@4", "const_mod", "static_mod", + "any_id", "func_body", "args_list", "more_args", "$@5", "arg", "$@6", + "opt_var_assign", "var", "var_id", "var_array", "$@7", "type", + "type_red1", "type_string1", "type_string2", "type_indirection", + "type_red2", "$@8", "type_primitive", "optional_scope", "scope_list", + "$@9", "scope_type", "float_num", "float_prim", "macro", "$@10", "$@11", + "$@12", "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "$@20", + "$@21", "$@22", "$@23", "$@24", "$@25", "$@26", "$@27", "$@28", "$@29", + "$@30", "$@31", "maybe_other", "maybe_other_no_semi", "other_stuff", + "other_stuff_no_semi", "braces", "parens", "brackets", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 123, 125, + 58, 59, 40, 41, 126, 61, 44, 91, 93, 38, + 42, 45, 46 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 83, 84, 85, 85, 87, 86, 88, 88, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 90, 91, + 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, + 92, 92, 92, 93, 95, 96, 94, 94, 97, 97, + 99, 98, 100, 101, 102, 102, 103, 103, 103, 103, + 104, 104, 105, 106, 105, 107, 108, 107, 107, 109, + 109, 110, 110, 111, 112, 113, 112, 112, 114, 114, + 114, 114, 115, 115, 115, 116, 116, 116, 117, 118, + 118, 118, 118, 120, 119, 119, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 122, 122, 123, 124, 123, 125, 125, 125, 126, 126, + 127, 127, 127, 129, 128, 130, 131, 128, 132, 128, + 133, 128, 134, 135, 128, 136, 128, 137, 128, 138, + 139, 128, 140, 128, 141, 128, 142, 128, 143, 128, + 144, 128, 145, 128, 146, 128, 147, 128, 148, 128, + 149, 128, 150, 128, 128, 128, 128, 128, 151, 151, + 152, 152, 153, 153, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 155, 156, 157 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 3, 2, 1, 0, 7, 1, 2, 2, + 1, 1, 2, 2, 3, 2, 2, 1, 4, 2, + 3, 1, 2, 3, 4, 3, 2, 1, 2, 3, + 4, 3, 2, 3, 0, 0, 4, 3, 0, 1, + 0, 5, 1, 1, 1, 1, 1, 4, 3, 3, + 0, 1, 1, 0, 4, 1, 0, 4, 1, 0, + 2, 3, 2, 2, 0, 0, 3, 4, 2, 1, + 2, 3, 1, 2, 1, 1, 2, 2, 1, 1, + 1, 2, 2, 0, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 0, 5, 1, 1, 1, 2, 1, + 1, 3, 1, 0, 7, 0, 0, 8, 0, 5, + 0, 5, 0, 0, 10, 0, 7, 0, 7, 0, + 0, 8, 0, 7, 0, 7, 0, 7, 0, 7, + 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, + 0, 9, 0, 9, 4, 4, 6, 7, 0, 2, + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 3, 3 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 168, 182, 185, 103, 99, 96, 100, 101, 106, 107, + 102, 97, 98, 108, 109, 186, 174, 189, 190, 83, + 4, 193, 194, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 105, 78, 168, 179, 172, 168, 192, + 178, 180, 168, 187, 177, 191, 181, 0, 104, 184, + 183, 85, 0, 168, 173, 175, 176, 188, 0, 3, + 0, 0, 0, 1, 0, 168, 169, 84, 195, 196, + 197, 5, 2, 110, 0, 0, 115, 116, 117, 111, + 0, 0, 112, 0, 103, 42, 170, 0, 43, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 0, 7, 0, 0, 11, + 27, 21, 34, 0, 0, 0, 10, 0, 69, 74, + 75, 72, 0, 17, 0, 0, 32, 26, 0, 0, + 170, 0, 12, 0, 62, 0, 0, 125, 128, 130, + 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 44, + 19, 6, 8, 168, 170, 46, 15, 13, 0, 38, + 68, 0, 70, 40, 0, 28, 22, 64, 0, 76, + 77, 79, 80, 73, 9, 16, 0, 20, 0, 31, + 25, 33, 171, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 37, 39, 35, 71, 50, 29, 23, 65, 170, + 63, 61, 81, 82, 114, 30, 24, 0, 18, 0, + 123, 0, 0, 0, 132, 135, 137, 0, 0, 144, + 148, 152, 156, 146, 150, 154, 158, 160, 162, 164, + 165, 0, 48, 49, 36, 58, 0, 51, 52, 55, + 64, 0, 0, 0, 126, 129, 131, 0, 0, 0, + 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 41, 0, 64, 56, 66, 64, + 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, + 59, 67, 124, 0, 0, 136, 138, 0, 143, 145, + 149, 153, 157, 147, 151, 155, 159, 0, 0, 167, + 54, 0, 57, 127, 170, 141, 120, 0, 122, 0, + 119, 0, 60, 0, 0, 118, 161, 163, 134, 121 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 47, 169, 65, 73, 115, 116, 117, 118, 119, + 120, 121, 179, 274, 233, 122, 235, 123, 124, 125, + 176, 276, 277, 305, 278, 330, 352, 126, 188, 240, + 280, 127, 128, 129, 49, 193, 50, 58, 51, 75, + 79, 134, 80, 359, 360, 133, 283, 208, 311, 209, + 210, 287, 334, 288, 289, 214, 315, 258, 292, 296, + 293, 297, 294, 298, 295, 299, 300, 301, 52, 139, + 53, 54, 55, 56, 57 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -274 +static const yytype_int16 yypact[] = +{ + 322, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -44, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, 322, -274, -274, 322, -274, + -274, -274, 322, -274, -274, -274, -274, 37, -274, -274, + -274, -274, 46, 322, -274, -274, -274, -274, 848, -274, + -3, -17, 4, -274, 56, 322, -274, -274, -274, -274, + -274, -274, -274, 29, 131, 39, -274, -274, -274, -274, + 77, 476, 32, 625, 38, -274, 397, 541, -274, 41, + 45, 47, 49, 50, 58, 59, 61, 67, 69, 71, + 72, 74, 75, 76, 80, 81, 83, 85, 93, 94, + 95, 96, 97, 22, 98, 102, 476, -46, -46, -274, + -274, -274, 53, 779, 744, 100, -274, 66, -274, -274, + -51, -2, 68, 79, 73, 22, -274, -274, 78, 88, + 397, -46, -274, 66, -274, 583, 22, -274, -274, -274, + 22, 22, 22, -274, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, -274, -274, + -274, -274, -274, 322, 397, -274, -274, -274, 166, 152, + -274, 779, -274, -274, 44, -274, -274, -13, 106, -274, + -274, -2, -2, -274, -274, -274, 131, -274, 44, -274, + -274, -274, -274, -274, 667, 105, 87, 103, 22, 22, + 22, 107, 111, 126, 22, -274, 127, 132, 133, 137, + 149, 150, 151, 153, 154, 155, 109, 159, 157, 167, + 170, -274, -274, -274, -274, 709, -274, -274, -274, 397, + -274, -274, -274, -274, -274, -274, -274, 90, -274, 22, + -274, 161, 172, 173, -274, -274, -274, 171, 174, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, 22, 178, -274, -274, -274, 180, -274, 175, 22, + -10, 177, 22, 814, -274, -274, -274, 814, 814, 814, + -274, 814, 814, 814, 814, 814, 814, 814, 814, 814, + 814, 814, -43, -274, -274, 182, -10, -274, -274, -10, + 183, 814, -274, 186, 187, 814, 188, 189, 190, 191, + 192, 193, 194, 195, 197, 196, 198, -274, 200, 709, + 201, -274, -274, 202, 203, -274, -274, 204, -274, -274, + -274, -274, -274, -274, -274, -274, -274, 17, 17, -274, + -274, 17, -274, -274, 397, -274, 199, 52, -274, 205, + -274, 207, -274, 209, 262, -274, -274, -274, -274, -274 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -274, -274, 0, -274, -274, 168, -274, -274, -70, 215, + -64, -42, -274, -274, -274, -274, -274, 162, -274, 34, + -84, -274, -39, -274, -274, -274, -274, -274, 6, -273, + -274, -75, -121, -274, -72, -66, -77, -274, 245, -274, + 108, -274, -76, -256, -50, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -22, -126, + -274, -85, -274, -274, -274 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -114 +static const yytype_int16 yytable[] = +{ + 48, 140, 180, 182, 131, 132, 131, 308, 138, 130, + 131, 130, 143, 60, 202, 130, 61, 141, 238, 136, + 62, 238, 173, 59, 174, 175, 356, 168, 189, 190, + 327, 66, 168, 328, 177, 48, 331, 63, 48, 131, + 132, 137, 48, 72, 130, 20, 131, 131, 230, 64, + 20, 130, 130, 48, 168, 140, 69, 203, 48, 183, + 234, 356, 168, 185, 239, 48, 68, 239, 131, 86, + 206, 170, 20, 130, 199, 205, 168, 191, 192, 185, + 20, 114, 70, 114, 71, 186, 48, 114, 168, 140, + 184, 86, 361, 197, 20, 362, 200, 168, 357, 74, + 168, 186, 198, 86, 131, 82, 20, 81, -113, 130, + -45, 249, 144, 281, 282, 20, 114, 145, 20, 146, + 236, 147, 148, 48, 48, 242, 243, 131, 178, 247, + 149, 150, 130, 151, 245, 76, 77, 78, 194, 152, + 48, 153, 237, 154, 155, 114, 156, 157, 158, 196, + 195, 229, 159, 160, 140, 161, 246, 162, 131, 201, + 279, 187, 137, 130, 186, 163, 164, 165, 166, 167, + -44, 171, 183, 48, 48, 231, 232, 241, 248, 250, + 207, 48, 269, 254, 211, 212, 213, 255, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 256, 259, 114, 200, 310, 237, 260, 261, + 312, 313, 314, 262, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 263, 264, 265, 363, 266, + 267, 268, 270, 271, 333, 48, 272, 284, 337, 48, + 246, 273, 251, 252, 253, 285, 286, 290, 257, 303, + 291, -53, 131, 304, 279, 309, 332, 130, 329, 335, + 336, 338, 339, 340, 341, 342, 343, 344, 345, 140, + 346, 369, 347, 349, 348, 353, 351, 355, 366, 354, + 367, 364, 368, 48, 172, 307, 181, 48, 48, 48, + 350, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 142, 67, 244, 302, 0, 365, 0, 0, + 0, 48, 0, 306, 0, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, + 20, 21, 0, 22, 48, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 358, 358, 0, 0, 358, 0, 0, 0, 0, + 35, 358, 36, 37, 38, 0, 39, 40, 41, 42, + 0, 43, 44, 45, 46, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 0, 20, 21, 0, 22, 0, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 35, 0, 36, 0, 38, + 0, 39, 40, 41, 42, 0, 43, 44, 45, 46, + 76, 77, 78, 83, 0, 0, 84, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, + 85, 86, 19, 87, 20, 88, 89, 0, 90, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 0, 0, 0, 0, 0, 83, 0, + 113, 84, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 0, 0, 85, 86, 19, 0, 20, + 88, 0, 0, 0, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 0, 0, 0, 0, + 204, 0, 0, 84, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 0, 0, 85, 0, 19, + 0, 20, 88, 0, 0, 113, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 0, 0, + 0, 0, 0, 0, 0, 84, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 0, 0, 85, + 86, 19, 0, 20, 88, 0, 0, 113, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 0, 0, 0, 0, 0, 0, 0, 84, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, + 0, 85, 0, 19, 0, 20, 88, 0, 0, 135, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 0, 0, 0, 0, 0, 0, 0, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 0, 0, 85, 0, 19, 0, 20, 88, 275, + 0, 135, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 0, 0, 85, 0, + 19, 0, 20, 0, 0, 0, 0, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 0, 0, 0, 0, 19, 0, 20, 0, 0, + 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, + 19, 0, 20, 0, 0, 0, 0, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, + 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 86, 123, 124, 81, 81, 83, 280, 83, 81, + 87, 83, 87, 35, 140, 87, 38, 87, 31, 83, + 42, 31, 68, 67, 70, 71, 9, 10, 79, 80, + 73, 53, 10, 76, 118, 35, 309, 0, 38, 116, + 116, 83, 42, 65, 116, 28, 123, 124, 174, 3, + 28, 123, 124, 53, 10, 140, 73, 141, 58, 72, + 181, 9, 10, 127, 77, 65, 69, 77, 145, 25, + 145, 113, 28, 145, 138, 145, 10, 79, 80, 143, + 28, 81, 78, 83, 28, 127, 86, 87, 10, 174, + 24, 25, 348, 135, 28, 351, 138, 10, 81, 70, + 10, 143, 24, 25, 181, 28, 28, 68, 76, 181, + 72, 24, 71, 239, 24, 28, 116, 72, 28, 72, + 184, 72, 72, 123, 124, 191, 192, 204, 75, 204, + 72, 72, 204, 72, 198, 4, 5, 6, 70, 72, + 140, 72, 184, 72, 72, 145, 72, 72, 72, 76, + 71, 173, 72, 72, 239, 72, 198, 72, 235, 71, + 235, 127, 204, 235, 206, 72, 72, 72, 72, 72, + 72, 69, 72, 173, 174, 9, 24, 71, 73, 76, + 146, 181, 73, 76, 150, 151, 152, 76, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 76, 76, 204, 247, 283, 249, 76, 76, + 287, 288, 289, 76, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 76, 76, 76, 354, 76, + 76, 76, 73, 76, 311, 235, 69, 76, 315, 239, + 282, 71, 208, 209, 210, 73, 73, 76, 214, 71, + 76, 76, 329, 73, 329, 78, 73, 329, 76, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 354, + 73, 9, 76, 73, 76, 73, 75, 73, 73, 76, + 73, 82, 73, 283, 116, 279, 124, 287, 288, 289, + 329, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 87, 58, 196, 271, -1, 357, -1, -1, + -1, 311, -1, 279, -1, 315, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 329, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, + 28, 29, -1, 31, 354, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 347, 348, -1, -1, 351, -1, -1, -1, -1, + 68, 357, 70, 71, 72, -1, 74, 75, 76, 77, + -1, 79, 80, 81, 82, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, -1, 28, 29, -1, 31, -1, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 68, -1, 70, -1, 72, + -1, 74, 75, 76, 77, -1, 79, 80, 81, 82, + 4, 5, 6, 7, -1, -1, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, -1, -1, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, -1, -1, -1, -1, -1, 7, -1, + 74, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, -1, -1, 24, 25, 26, -1, 28, + 29, -1, -1, -1, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, -1, -1, -1, -1, + 7, -1, -1, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, -1, -1, 24, -1, 26, + -1, 28, 29, -1, -1, 74, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, -1, -1, + -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, -1, -1, 24, + 25, 26, -1, 28, 29, -1, -1, 74, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, -1, + -1, 24, -1, 26, -1, 28, 29, -1, -1, 74, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, -1, -1, -1, -1, -1, -1, -1, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, -1, -1, 24, -1, 26, -1, 28, 29, 30, + -1, 74, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, -1, -1, 24, -1, + 26, -1, 28, -1, -1, -1, -1, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, -1, -1, -1, -1, 26, -1, 28, -1, -1, + -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + 26, -1, 28, -1, -1, -1, -1, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + -1, -1, -1, -1, -1, -1, 28, -1, -1, -1, + -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 28, 29, 31, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 68, 70, 71, 72, 74, + 75, 76, 77, 79, 80, 81, 82, 84, 85, 117, + 119, 121, 151, 153, 154, 155, 156, 157, 120, 67, + 151, 151, 151, 0, 3, 86, 151, 121, 69, 73, + 78, 28, 151, 87, 70, 122, 4, 5, 6, 123, + 125, 68, 28, 7, 10, 24, 25, 27, 29, 30, + 32, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 74, 85, 88, 89, 90, 91, 92, + 93, 94, 98, 100, 101, 102, 110, 114, 115, 116, + 117, 119, 125, 128, 124, 74, 93, 94, 114, 152, + 154, 91, 92, 114, 71, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 10, 85, + 94, 69, 88, 68, 70, 71, 103, 103, 75, 95, + 115, 100, 115, 72, 24, 93, 94, 102, 111, 79, + 80, 79, 80, 118, 70, 71, 76, 94, 24, 93, + 94, 71, 152, 103, 7, 91, 114, 102, 130, 132, + 133, 102, 102, 102, 138, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 151, + 152, 9, 24, 97, 115, 99, 93, 94, 31, 77, + 112, 71, 118, 118, 123, 93, 94, 114, 73, 24, + 76, 102, 102, 102, 76, 76, 76, 102, 140, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 73, + 73, 76, 69, 71, 96, 30, 104, 105, 107, 114, + 113, 152, 24, 129, 76, 73, 73, 134, 136, 137, + 76, 76, 141, 143, 145, 147, 142, 144, 146, 148, + 149, 150, 102, 71, 73, 106, 102, 111, 112, 78, + 119, 131, 119, 119, 119, 139, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 73, 76, 76, + 108, 112, 73, 119, 135, 73, 73, 119, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 76, 76, 73, + 105, 75, 109, 73, 76, 73, 9, 81, 102, 126, + 127, 126, 126, 152, 82, 127, 73, 73, 73, 9 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +#else +static void +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + +/* Prevent warnings from -Wmissing-prototypes. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + +/* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 3: + +/* Line 1455 of yacc.c */ +#line 284 "vtkParse.y" + { + ((yyval.vtkid)).name = (yyvsp[(1) - (2)].str); + ((yyval.vtkid)).external = 1; + ;} + break; + + case 4: + +/* Line 1455 of yacc.c */ +#line 289 "vtkParse.y" + { + ((yyval.vtkid)).name = (yyvsp[(1) - (1)].str); + ((yyval.vtkid)).external = 0; + ;} + break; + + case 5: + +/* Line 1455 of yacc.c */ +#line 295 "vtkParse.y" + { + data.ClassName = vtkstrdup((yyvsp[(2) - (2)].str)); + ;} + break; + + case 13: + +/* Line 1455 of yacc.c */ +#line 305 "vtkParse.y" + { output_function(); ;} + break; + + case 14: + +/* Line 1455 of yacc.c */ +#line 306 "vtkParse.y" + { output_function(); ;} + break; + + case 15: + +/* Line 1455 of yacc.c */ +#line 307 "vtkParse.y" + { legacySig(); output_function(); ;} + break; + + case 19: + +/* Line 1455 of yacc.c */ +#line 313 "vtkParse.y" + { preSig("~"); ;} + break; + + case 20: + +/* Line 1455 of yacc.c */ +#line 314 "vtkParse.y" + { preSig("virtual ~"); ;} + break; + + case 22: + +/* Line 1455 of yacc.c */ +#line 317 "vtkParse.y" + { + currentFunction->ReturnType = (yyvsp[(1) - (2)].integer); + ;} + break; + + case 23: + +/* Line 1455 of yacc.c */ +#line 321 "vtkParse.y" + { + currentFunction->ReturnType = (yyvsp[(1) - (3)].integer); + ;} + break; + + case 24: + +/* Line 1455 of yacc.c */ +#line 325 "vtkParse.y" + { + preSig("virtual "); + currentFunction->ReturnType = (yyvsp[(2) - (4)].integer); + ;} + break; + + case 25: + +/* Line 1455 of yacc.c */ +#line 330 "vtkParse.y" + { + preSig("virtual "); + currentFunction->ReturnType = (yyvsp[(2) - (3)].integer); + ;} + break; + + case 26: + +/* Line 1455 of yacc.c */ +#line 335 "vtkParse.y" + { + preSig("virtual "); + ;} + break; + + case 27: + +/* Line 1455 of yacc.c */ +#line 341 "vtkParse.y" + { + output_function(); + ;} + break; + + case 28: + +/* Line 1455 of yacc.c */ +#line 345 "vtkParse.y" + { + currentFunction->ReturnType = (yyvsp[(1) - (2)].integer); + output_function(); + ;} + break; + + case 29: + +/* Line 1455 of yacc.c */ +#line 350 "vtkParse.y" + { + currentFunction->ReturnType = (yyvsp[(1) - (3)].integer); + output_function(); + ;} + break; + + case 30: + +/* Line 1455 of yacc.c */ +#line 355 "vtkParse.y" + { + preSig("virtual "); + currentFunction->ReturnType = (yyvsp[(2) - (4)].integer); + output_function(); + ;} + break; + + case 31: + +/* Line 1455 of yacc.c */ +#line 361 "vtkParse.y" + { + preSig("virtual "); + currentFunction->ReturnType = (yyvsp[(2) - (3)].integer); + output_function(); + ;} + break; + + case 32: + +/* Line 1455 of yacc.c */ +#line 367 "vtkParse.y" + { + preSig("virtual "); + output_function(); + ;} + break; + + case 33: + +/* Line 1455 of yacc.c */ +#line 373 "vtkParse.y" + { + currentFunction->IsOperator = 1; + vtkParseDebug("Converted operator", 0); + ;} + break; + + case 34: + +/* Line 1455 of yacc.c */ +#line 378 "vtkParse.y" + { postSig(")"); ;} + break; + + case 35: + +/* Line 1455 of yacc.c */ +#line 378 "vtkParse.y" + { postSig(";"); openSig = 0; ;} + break; + + case 36: + +/* Line 1455 of yacc.c */ +#line 379 "vtkParse.y" + { + openSig = 1; + currentFunction->Name = (yyvsp[(1) - (4)].str); + vtkParseDebug("Parsed func", (yyvsp[(1) - (4)].str)); + ;} + break; + + case 37: + +/* Line 1455 of yacc.c */ +#line 385 "vtkParse.y" + { + postSig(") = 0;"); + currentFunction->Name = (yyvsp[(1) - (3)].str); + vtkParseDebug("Parsed func", (yyvsp[(1) - (3)].str)); + currentFunction->IsPureVirtual = 1; + data.IsAbstract = 1; + ;} + break; + + case 39: + +/* Line 1455 of yacc.c */ +#line 393 "vtkParse.y" + {postSig(" const");;} + break; + + case 40: + +/* Line 1455 of yacc.c */ +#line 395 "vtkParse.y" + {postSig(" ("); ;} + break; + + case 42: + +/* Line 1455 of yacc.c */ +#line 397 "vtkParse.y" + {postSig("const ");;} + break; + + case 43: + +/* Line 1455 of yacc.c */ +#line 399 "vtkParse.y" + {postSig("static ");;} + break; + + case 44: + +/* Line 1455 of yacc.c */ +#line 401 "vtkParse.y" + {postSig(((yyvsp[(1) - (1)].vtkid)).name);;} + break; + + case 45: + +/* Line 1455 of yacc.c */ +#line 401 "vtkParse.y" + {postSig((yyvsp[(1) - (1)].str));;} + break; + + case 52: + +/* Line 1455 of yacc.c */ +#line 410 "vtkParse.y" + { currentFunction->NumberOfArguments++;;} + break; + + case 53: + +/* Line 1455 of yacc.c */ +#line 411 "vtkParse.y" + { currentFunction->NumberOfArguments++; postSig(", ");;} + break; + + case 55: + +/* Line 1455 of yacc.c */ +#line 414 "vtkParse.y" + { + currentFunction->ArgCounts[currentFunction->NumberOfArguments] = 0; + currentFunction->ArgTypes[currentFunction->NumberOfArguments] = + (yyvsp[(1) - (1)].integer);;} + break; + + case 56: + +/* Line 1455 of yacc.c */ +#line 419 "vtkParse.y" + { + currentFunction->ArgCounts[currentFunction->NumberOfArguments] = + (yyvsp[(2) - (2)].integer) / 0x10000; + currentFunction->ArgTypes[currentFunction->NumberOfArguments] = + (yyvsp[(1) - (2)].integer) + (yyvsp[(2) - (2)].integer) % 0x10000; + ;} + break; + + case 58: + +/* Line 1455 of yacc.c */ +#line 426 "vtkParse.y" + { + postSig("void (*func)(void *) "); + currentFunction->ArgCounts[currentFunction->NumberOfArguments] = 0; + currentFunction->ArgTypes[currentFunction->NumberOfArguments] = 0x5000; + ;} + break; + + case 61: + +/* Line 1455 of yacc.c */ +#line 434 "vtkParse.y" + {delSig();;} + break; + + case 62: + +/* Line 1455 of yacc.c */ +#line 434 "vtkParse.y" + {delSig();;} + break; + + case 63: + +/* Line 1455 of yacc.c */ +#line 436 "vtkParse.y" + { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;} + break; + + case 64: + +/* Line 1455 of yacc.c */ +#line 444 "vtkParse.y" + { (yyval.integer) = 0; ;} + break; + + case 65: + +/* Line 1455 of yacc.c */ +#line 445 "vtkParse.y" + { char temp[100]; sprintf(temp,"[%i]",(yyvsp[(1) - (1)].integer)); + postSig(temp); ;} + break; + + case 66: + +/* Line 1455 of yacc.c */ +#line 447 "vtkParse.y" + { (yyval.integer) = 0x300 + 0x10000 * (yyvsp[(1) - (3)].integer) + (yyvsp[(3) - (3)].integer) % 0x1000; ;} + break; + + case 67: + +/* Line 1455 of yacc.c */ +#line 449 "vtkParse.y" + { postSig("[]"); (yyval.integer) = 0x300 + (yyvsp[(4) - (4)].integer) % 0x1000; ;} + break; + + case 68: + +/* Line 1455 of yacc.c */ +#line 451 "vtkParse.y" + {(yyval.integer) = 0x1000 + (yyvsp[(2) - (2)].integer);;} + break; + + case 69: + +/* Line 1455 of yacc.c */ +#line 452 "vtkParse.y" + {(yyval.integer) = (yyvsp[(1) - (1)].integer);;} + break; + + case 70: + +/* Line 1455 of yacc.c */ +#line 453 "vtkParse.y" + {(yyval.integer) = 0x2000 + (yyvsp[(2) - (2)].integer);;} + break; + + case 71: + +/* Line 1455 of yacc.c */ +#line 454 "vtkParse.y" + {(yyval.integer) = 0x3000 + (yyvsp[(3) - (3)].integer);;} + break; + + case 72: + +/* Line 1455 of yacc.c */ +#line 456 "vtkParse.y" + {(yyval.integer) = (yyvsp[(1) - (1)].integer);;} + break; + + case 73: + +/* Line 1455 of yacc.c */ +#line 458 "vtkParse.y" + {(yyval.integer) = (yyvsp[(1) - (2)].integer) + (yyvsp[(2) - (2)].integer);;} + break; + + case 74: + +/* Line 1455 of yacc.c */ +#line 459 "vtkParse.y" + {(yyval.integer) = (yyvsp[(1) - (1)].integer);;} + break; + + case 75: + +/* Line 1455 of yacc.c */ +#line 461 "vtkParse.y" + {(yyval.integer) = (yyvsp[(1) - (1)].integer);;} + break; + + case 76: + +/* Line 1455 of yacc.c */ +#line 462 "vtkParse.y" + { postSig("&"); (yyval.integer) = (yyvsp[(1) - (2)].integer);;} + break; + + case 77: + +/* Line 1455 of yacc.c */ +#line 463 "vtkParse.y" + { postSig("*"); (yyval.integer) = 0x400 + (yyvsp[(1) - (2)].integer);;} + break; + + case 78: + +/* Line 1455 of yacc.c */ +#line 465 "vtkParse.y" + { postSig("vtkStdString "); (yyval.integer) = 0x1303; ;} + break; + + case 79: + +/* Line 1455 of yacc.c */ +#line 475 "vtkParse.y" + { postSig("&"); (yyval.integer) = 0x100;;} + break; + + case 80: + +/* Line 1455 of yacc.c */ +#line 476 "vtkParse.y" + { postSig("*"); (yyval.integer) = 0x300;;} + break; + + case 81: + +/* Line 1455 of yacc.c */ +#line 477 "vtkParse.y" + { (yyval.integer) = 0x100 + (yyvsp[(2) - (2)].integer);;} + break; + + case 82: + +/* Line 1455 of yacc.c */ +#line 478 "vtkParse.y" + { (yyval.integer) = 0x400 + (yyvsp[(2) - (2)].integer);;} + break; + + case 83: + +/* Line 1455 of yacc.c */ +#line 480 "vtkParse.y" + {postSig("unsigned ");;} + break; + + case 84: + +/* Line 1455 of yacc.c */ +#line 481 "vtkParse.y" + { (yyval.integer) = 0x10 + (yyvsp[(3) - (3)].integer);;} + break; + + case 85: + +/* Line 1455 of yacc.c */ +#line 482 "vtkParse.y" + { (yyval.integer) = (yyvsp[(1) - (1)].integer);;} + break; + + case 86: + +/* Line 1455 of yacc.c */ +#line 485 "vtkParse.y" + { postSig("vtkTypeInt8 "); (yyval.integer) = VTK_PARSE_INT8; ;} + break; + + case 87: + +/* Line 1455 of yacc.c */ +#line 486 "vtkParse.y" + { postSig("vtkTypeUInt8 "); (yyval.integer) = VTK_PARSE_UINT8; ;} + break; + + case 88: + +/* Line 1455 of yacc.c */ +#line 487 "vtkParse.y" + { postSig("vtkTypeInt16 "); (yyval.integer) = VTK_PARSE_INT16; ;} + break; + + case 89: + +/* Line 1455 of yacc.c */ +#line 488 "vtkParse.y" + { postSig("vtkTypeUInt16 "); (yyval.integer) = VTK_PARSE_UINT16; ;} + break; + + case 90: + +/* Line 1455 of yacc.c */ +#line 489 "vtkParse.y" + { postSig("vtkTypeInt32 "); (yyval.integer) = VTK_PARSE_INT32; ;} + break; + + case 91: + +/* Line 1455 of yacc.c */ +#line 490 "vtkParse.y" + { postSig("vtkTypeUInt32 "); (yyval.integer) = VTK_PARSE_UINT32; ;} + break; + + case 92: + +/* Line 1455 of yacc.c */ +#line 491 "vtkParse.y" + { postSig("vtkTypeInt64 "); (yyval.integer) = VTK_PARSE_INT64; ;} + break; + + case 93: + +/* Line 1455 of yacc.c */ +#line 492 "vtkParse.y" + { postSig("vtkTypeUInt64 "); (yyval.integer) = VTK_PARSE_UINT64; ;} + break; + + case 94: + +/* Line 1455 of yacc.c */ +#line 493 "vtkParse.y" + { postSig("vtkTypeFloat32 "); (yyval.integer) = VTK_PARSE_FLOAT32; ;} + break; + + case 95: + +/* Line 1455 of yacc.c */ +#line 494 "vtkParse.y" + { postSig("vtkTypeFloat64 "); (yyval.integer) = VTK_PARSE_FLOAT64; ;} + break; + + case 96: + +/* Line 1455 of yacc.c */ +#line 495 "vtkParse.y" + { postSig("float "); (yyval.integer) = 0x1;;} + break; + + case 97: + +/* Line 1455 of yacc.c */ +#line 496 "vtkParse.y" + { postSig("void "); (yyval.integer) = 0x2;;} + break; + + case 98: + +/* Line 1455 of yacc.c */ +#line 497 "vtkParse.y" + { postSig("char "); (yyval.integer) = 0x3;;} + break; + + case 99: + +/* Line 1455 of yacc.c */ +#line 498 "vtkParse.y" + { postSig("int "); (yyval.integer) = 0x4;;} + break; + + case 100: + +/* Line 1455 of yacc.c */ +#line 499 "vtkParse.y" + { postSig("short "); (yyval.integer) = 0x5;;} + break; + + case 101: + +/* Line 1455 of yacc.c */ +#line 500 "vtkParse.y" + { postSig("long "); (yyval.integer) = 0x6;;} + break; + + case 102: + +/* Line 1455 of yacc.c */ +#line 501 "vtkParse.y" + { postSig("double "); (yyval.integer) = 0x7;;} + break; + + case 103: + +/* Line 1455 of yacc.c */ +#line 502 "vtkParse.y" + { + char ctmpid[2048]; + sprintf(ctmpid,"%s ",(yyvsp[(1) - (1)].str)); + postSig(ctmpid); + (yyval.integer) = 0x8;;} + break; + + case 104: + +/* Line 1455 of yacc.c */ +#line 508 "vtkParse.y" + { + char ctmpid[2048]; + sprintf(ctmpid,"%s ",((yyvsp[(1) - (1)].vtkid)).name); + postSig(ctmpid); + (yyval.integer) = 0x9; + currentFunction->ArgClasses[currentFunction->NumberOfArguments] = + vtkstrdup(((yyvsp[(1) - (1)].vtkid)).name); + currentFunction->ArgExternals[currentFunction->NumberOfArguments] = + ((yyvsp[(1) - (1)].vtkid)).external; + /* store the string into the return value just in case we need it */ + /* this is a parsing hack because the first "type" parser will */ + /* possibly be ht ereturn type of the first argument */ + if ((!currentFunction->ReturnClass) && + (!currentFunction->NumberOfArguments)) + { + currentFunction->ReturnClass = vtkstrdup(((yyvsp[(1) - (1)].vtkid)).name); + currentFunction->ReturnExternal = ((yyvsp[(1) - (1)].vtkid)).external; + } + ;} + break; + + case 105: + +/* Line 1455 of yacc.c */ +#line 527 "vtkParse.y" + { postSig("vtkIdType "); (yyval.integer) = 0xA;;} + break; + + case 106: + +/* Line 1455 of yacc.c */ +#line 528 "vtkParse.y" + { postSig("long long "); (yyval.integer) = 0xB;;} + break; + + case 107: + +/* Line 1455 of yacc.c */ +#line 529 "vtkParse.y" + { postSig("__int64 "); (yyval.integer) = 0xC;;} + break; + + case 108: + +/* Line 1455 of yacc.c */ +#line 530 "vtkParse.y" + { postSig("signed char "); (yyval.integer) = 0xD;;} + break; + + case 109: + +/* Line 1455 of yacc.c */ +#line 531 "vtkParse.y" + { postSig("bool "); (yyval.integer) = 0xE;;} + break; + + case 112: + +/* Line 1455 of yacc.c */ +#line 536 "vtkParse.y" + { + data.SuperClasses[data.NumberOfSuperClasses] = vtkstrdup((yyvsp[(2) - (2)].str)); + data.NumberOfSuperClasses++; + ;} + break; + + case 113: + +/* Line 1455 of yacc.c */ +#line 541 "vtkParse.y" + { + data.SuperClasses[data.NumberOfSuperClasses] = vtkstrdup((yyvsp[(2) - (2)].str)); + data.NumberOfSuperClasses++; + ;} + break; + + case 115: + +/* Line 1455 of yacc.c */ +#line 546 "vtkParse.y" + {in_public = 1; in_protected = 0;;} + break; + + case 116: + +/* Line 1455 of yacc.c */ +#line 547 "vtkParse.y" + {in_public = 0; in_protected = 0;;} + break; + + case 117: + +/* Line 1455 of yacc.c */ +#line 548 "vtkParse.y" + {in_public = 0; in_protected = 1;;} + break; + + case 120: + +/* Line 1455 of yacc.c */ +#line 552 "vtkParse.y" + {(yyval.integer) = (yyvsp[(1) - (1)].integer);;} + break; + + case 121: + +/* Line 1455 of yacc.c */ +#line 553 "vtkParse.y" + {(yyval.integer) = -1;;} + break; + + case 122: + +/* Line 1455 of yacc.c */ +#line 553 "vtkParse.y" + {(yyval.integer) = -1;;} + break; + + case 123: + +/* Line 1455 of yacc.c */ +#line 557 "vtkParse.y" + {preSig("void Set"); postSig(" ("); ;} + break; + + case 124: + +/* Line 1455 of yacc.c */ +#line 558 "vtkParse.y" + { + postSig(");"); + sprintf(temps,"Set%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + ;} + break; + + case 125: + +/* Line 1455 of yacc.c */ +#line 568 "vtkParse.y" + {postSig("Get");;} + break; + + case 126: + +/* Line 1455 of yacc.c */ +#line 568 "vtkParse.y" + {postSig(" ();"); invertSig = 1;;} + break; + + case 127: + +/* Line 1455 of yacc.c */ +#line 570 "vtkParse.y" + { + sprintf(temps,"Get%s",(yyvsp[(4) - (8)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = (yyvsp[(7) - (8)].integer); + output_function(); + ;} + break; + + case 128: + +/* Line 1455 of yacc.c */ +#line 577 "vtkParse.y" + {preSig("void Set");;} + break; + + case 129: + +/* Line 1455 of yacc.c */ +#line 578 "vtkParse.y" + { + postSig(" (char *);"); + sprintf(temps,"Set%s",(yyvsp[(4) - (5)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x303; + currentFunction->ArgCounts[0] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + ;} + break; + + case 130: + +/* Line 1455 of yacc.c */ +#line 588 "vtkParse.y" + {preSig("char *Get");;} + break; + + case 131: + +/* Line 1455 of yacc.c */ +#line 589 "vtkParse.y" + { + postSig(" ();"); + sprintf(temps,"Get%s",(yyvsp[(4) - (5)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x303; + output_function(); + ;} + break; + + case 132: + +/* Line 1455 of yacc.c */ +#line 598 "vtkParse.y" + {preSig("void Set"); postSig(" ("); ;} + break; + + case 133: + +/* Line 1455 of yacc.c */ +#line 599 "vtkParse.y" + {postSig(");"); openSig = 0;;} + break; + + case 134: + +/* Line 1455 of yacc.c */ +#line 600 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sscanf (currentFunction->Signature, "%*s %*s (%s);", local); + sprintf(temps,"Set%s",(yyvsp[(3) - (10)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = (yyvsp[(6) - (10)].integer); + currentFunction->ArgCounts[0] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"%s Get%sMinValue ();",local,(yyvsp[(3) - (10)].str)); + sprintf(temps,"Get%sMinValue",(yyvsp[(3) - (10)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = (yyvsp[(6) - (10)].integer); + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"%s Get%sMaxValue ();",local,(yyvsp[(3) - (10)].str)); + sprintf(temps,"Get%sMaxValue",(yyvsp[(3) - (10)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = (yyvsp[(6) - (10)].integer); + output_function(); + ;} + break; + + case 135: + +/* Line 1455 of yacc.c */ +#line 630 "vtkParse.y" + {preSig("void Set"); postSig(" ("); ;} + break; + + case 136: + +/* Line 1455 of yacc.c */ +#line 631 "vtkParse.y" + { + postSig("*);"); + sprintf(temps,"Set%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x309; + currentFunction->ArgCounts[0] = 1; + currentFunction->ReturnType = 0x2; + output_function(); + ;} + break; + + case 137: + +/* Line 1455 of yacc.c */ +#line 642 "vtkParse.y" + {preSig("void Set"); postSig(" ("); ;} + break; + + case 138: + +/* Line 1455 of yacc.c */ +#line 643 "vtkParse.y" + { + postSig("*);"); + sprintf(temps,"Set%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x309; + currentFunction->ArgCounts[0] = 1; + currentFunction->ReturnType = 0x2; + output_function(); + ;} + break; + + case 139: + +/* Line 1455 of yacc.c */ +#line 653 "vtkParse.y" + {postSig("*Get");;} + break; + + case 140: + +/* Line 1455 of yacc.c */ +#line 654 "vtkParse.y" + {postSig(" ();"); invertSig = 1;;} + break; + + case 141: + +/* Line 1455 of yacc.c */ +#line 655 "vtkParse.y" + { + sprintf(temps,"Get%s",(yyvsp[(4) - (8)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x309; + output_function(); + ;} + break; + + case 142: + +/* Line 1455 of yacc.c */ +#line 663 "vtkParse.y" + {preSig("void "); postSig("On ();"); openSig = 0; ;} + break; + + case 143: + +/* Line 1455 of yacc.c */ +#line 665 "vtkParse.y" + { + sprintf(temps,"%sOn",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x2; + output_function(); + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void %sOff ();",(yyvsp[(3) - (7)].str)); + sprintf(temps,"%sOff",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + output_function(); + ;} + break; + + case 144: + +/* Line 1455 of yacc.c */ +#line 680 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 145: + +/* Line 1455 of yacc.c */ +#line 685 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"void Set%s (%s, %s);",(yyvsp[(3) - (7)].str), + local, local); + sprintf(temps,"Set%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 2; + currentFunction->ArgTypes[0] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 0; + currentFunction->ArgTypes[1] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[1] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (%s a[2]);",(yyvsp[(3) - (7)].str), + local); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 0x2; + output_function(); + ;} + break; + + case 146: + +/* Line 1455 of yacc.c */ +#line 710 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 147: + +/* Line 1455 of yacc.c */ +#line 715 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"%s *Get%s ();",local, (yyvsp[(3) - (7)].str)); + sprintf(temps,"Get%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->HaveHint = 1; + currentFunction->HintSize = 2; + output_function(); + ;} + break; + + case 148: + +/* Line 1455 of yacc.c */ +#line 727 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 149: + +/* Line 1455 of yacc.c */ +#line 732 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"void Set%s (%s, %s, %s);", + (yyvsp[(3) - (7)].str), local, local, local); + sprintf(temps,"Set%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 3; + currentFunction->ArgTypes[0] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 0; + currentFunction->ArgTypes[1] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[1] = 0; + currentFunction->ArgTypes[2] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[2] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (%s a[3]);",(yyvsp[(3) - (7)].str), + local); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 3; + output_function(); + ;} + break; + + case 150: + +/* Line 1455 of yacc.c */ +#line 759 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 151: + +/* Line 1455 of yacc.c */ +#line 764 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"%s *Get%s ();",local, (yyvsp[(3) - (7)].str)); + sprintf(temps,"Get%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->HaveHint = 1; + currentFunction->HintSize = 3; + output_function(); + ;} + break; + + case 152: + +/* Line 1455 of yacc.c */ +#line 776 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 153: + +/* Line 1455 of yacc.c */ +#line 781 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"void Set%s (%s, %s, %s, %s);", + (yyvsp[(3) - (7)].str), local, local, local, local); + sprintf(temps,"Set%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 4; + currentFunction->ArgTypes[0] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 0; + currentFunction->ArgTypes[1] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[1] = 0; + currentFunction->ArgTypes[2] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[2] = 0; + currentFunction->ArgTypes[3] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[3] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (%s a[4]);",(yyvsp[(3) - (7)].str), + local); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 4; + output_function(); + ;} + break; + + case 154: + +/* Line 1455 of yacc.c */ +#line 810 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 155: + +/* Line 1455 of yacc.c */ +#line 815 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"%s *Get%s ();",local, (yyvsp[(3) - (7)].str)); + sprintf(temps,"Get%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->HaveHint = 1; + currentFunction->HintSize = 4; + output_function(); + ;} + break; + + case 156: + +/* Line 1455 of yacc.c */ +#line 827 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 157: + +/* Line 1455 of yacc.c */ +#line 832 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"void Set%s (%s, %s, %s, %s, %s, %s);", + (yyvsp[(3) - (7)].str), local, local, local, local, local, local); + sprintf(temps,"Set%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 6; + currentFunction->ArgTypes[0] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 0; + currentFunction->ArgTypes[1] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[1] = 0; + currentFunction->ArgTypes[2] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[2] = 0; + currentFunction->ArgTypes[3] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[3] = 0; + currentFunction->ArgTypes[4] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[4] = 0; + currentFunction->ArgTypes[5] = (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[5] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (%s a[6]);",(yyvsp[(3) - (7)].str), + local); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->ArgCounts[0] = 6; + output_function(); + ;} + break; + + case 158: + +/* Line 1455 of yacc.c */ +#line 865 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 159: + +/* Line 1455 of yacc.c */ +#line 870 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"%s *Get%s ();",local, (yyvsp[(3) - (7)].str)); + sprintf(temps,"Get%s",(yyvsp[(3) - (7)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x300 + (yyvsp[(6) - (7)].integer); + currentFunction->HaveHint = 1; + currentFunction->HintSize = 6; + output_function(); + ;} + break; + + case 160: + +/* Line 1455 of yacc.c */ +#line 882 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 161: + +/* Line 1455 of yacc.c */ +#line 887 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"void Set%s (%s [%i]);",(yyvsp[(3) - (9)].str), + local, (yyvsp[(8) - (9)].integer)); + sprintf(temps,"Set%s",(yyvsp[(3) - (9)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->ReturnType = 0x2; + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x300 + (yyvsp[(6) - (9)].integer); + currentFunction->ArgCounts[0] = (yyvsp[(8) - (9)].integer); + output_function(); + ;} + break; + + case 162: + +/* Line 1455 of yacc.c */ +#line 900 "vtkParse.y" + { + free (currentFunction->Signature); + currentFunction->Signature = NULL; + ;} + break; + + case 163: + +/* Line 1455 of yacc.c */ +#line 905 "vtkParse.y" + { + char *local = vtkstrdup(currentFunction->Signature); + sprintf(currentFunction->Signature,"%s *Get%s ();",local, (yyvsp[(3) - (9)].str)); + sprintf(temps,"Get%s",(yyvsp[(3) - (9)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x300 + (yyvsp[(6) - (9)].integer); + currentFunction->HaveHint = 1; + currentFunction->HintSize = (yyvsp[(8) - (9)].integer); + output_function(); + ;} + break; + + case 164: + +/* Line 1455 of yacc.c */ +#line 917 "vtkParse.y" + { + sprintf(currentFunction->Signature,"vtkCoordinate *Get%sCoordinate ();", + (yyvsp[(3) - (4)].str)); + + sprintf(temps,"Get%sCoordinate",(yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x309; + currentFunction->ReturnClass = vtkstrdup("vtkCoordinate"); + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (double, double);", + (yyvsp[(3) - (4)].str)); + sprintf(temps,"Set%s",(yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 2; + currentFunction->ArgTypes[0] = 0x7; + currentFunction->ArgCounts[0] = 0; + currentFunction->ArgTypes[1] = 0x7; + currentFunction->ArgCounts[1] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (double a[2]);", + (yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x307; + currentFunction->ArgCounts[0] = 2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"double *Get%s ();", (yyvsp[(3) - (4)].str)); + sprintf(temps,"Get%s",(yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x307; + currentFunction->HaveHint = 1; + currentFunction->HintSize = 2; + output_function(); + ;} + break; + + case 165: + +/* Line 1455 of yacc.c */ +#line 964 "vtkParse.y" + { + sprintf(currentFunction->Signature,"vtkCoordinate *Get%sCoordinate ();", + (yyvsp[(3) - (4)].str)); + + sprintf(temps,"Get%sCoordinate",(yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x309; + currentFunction->ReturnClass = vtkstrdup("vtkCoordinate"); + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (double, double, double);", + (yyvsp[(3) - (4)].str)); + sprintf(temps,"Set%s",(yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 3; + currentFunction->ArgTypes[0] = 0x7; + currentFunction->ArgCounts[0] = 0; + currentFunction->ArgTypes[1] = 0x7; + currentFunction->ArgCounts[1] = 0; + currentFunction->ArgTypes[2] = 0x7; + currentFunction->ArgCounts[2] = 0; + currentFunction->ReturnType = 0x2; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"void Set%s (double a[3]);", + (yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x307; + currentFunction->ArgCounts[0] = 3; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature,"double *Get%s ();", (yyvsp[(3) - (4)].str)); + sprintf(temps,"Get%s",(yyvsp[(3) - (4)].str)); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x307; + currentFunction->HaveHint = 1; + currentFunction->HintSize = 3; + output_function(); + ;} + break; + + case 166: + +/* Line 1455 of yacc.c */ +#line 1013 "vtkParse.y" + { + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, "const char *GetClassName ();"); + sprintf(temps,"GetClassName"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x1303; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, + "int IsA (const char *name);"); + sprintf(temps,"IsA"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x1303; + currentFunction->ArgCounts[0] = 0; + currentFunction->ReturnType = 0x4; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, "%s *NewInstance ();", + (yyvsp[(3) - (6)].str)); + sprintf(temps,"NewInstance"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x309; + currentFunction->ReturnClass = vtkstrdup((yyvsp[(3) - (6)].str)); + output_function(); + + if ( data.IsConcrete ) + { + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, "%s *SafeDownCast (vtkObject* o);", + (yyvsp[(3) - (6)].str)); + sprintf(temps,"SafeDownCast"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x309; + currentFunction->ArgCounts[0] = 1; + currentFunction->ArgClasses[0] = vtkstrdup("vtkObject"); + currentFunction->ReturnType = 0x2309; + currentFunction->ReturnClass = vtkstrdup((yyvsp[(3) - (6)].str)); + output_function(); + } + ;} + break; + + case 167: + +/* Line 1455 of yacc.c */ +#line 1064 "vtkParse.y" + { + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, "const char *GetClassName ();"); + sprintf(temps,"GetClassName"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x1303; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, + "int IsA (const char *name);"); + sprintf(temps,"IsA"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x1303; + currentFunction->ArgCounts[0] = 0; + currentFunction->ReturnType = 0x4; + output_function(); + + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, "%s *NewInstance ();", + (yyvsp[(3) - (7)].str)); + sprintf(temps,"NewInstance"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 0; + currentFunction->ReturnType = 0x309; + currentFunction->ReturnClass = vtkstrdup((yyvsp[(3) - (7)].str)); + output_function(); + + if ( data.IsConcrete ) + { + currentFunction->Signature = (char *)malloc(2048); + sigAllocatedLength = 2048; + sprintf(currentFunction->Signature, "%s *SafeDownCast (vtkObject* o);", + (yyvsp[(3) - (7)].str)); + sprintf(temps,"SafeDownCast"); + currentFunction->Name = vtkstrdup(temps); + currentFunction->NumberOfArguments = 1; + currentFunction->ArgTypes[0] = 0x309; + currentFunction->ArgCounts[0] = 1; + currentFunction->ArgClasses[0] = vtkstrdup("vtkObject"); + currentFunction->ReturnType = 0x2309; + currentFunction->ReturnClass = vtkstrdup((yyvsp[(3) - (7)].str)); + output_function(); + } + ;} + break; + + + +/* Line 1455 of yacc.c */ +#line 3573 "vtkParse.tab.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined(yyoverflow) || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + + +/* Line 1675 of yacc.c */ +#line 1132 "vtkParse.y" + +#include +#include "lex.yy.c" + +static void vtkParseDebug(const char* s1, const char* s2) +{ + if ( getenv("DEBUG") ) + { + fprintf(stderr, " %s", s1); + if ( s2 ) + { + fprintf(stderr, " %s", s2); + } + fprintf(stderr, "\n"); + } +} + +/* initialize the structure */ +void InitFunction(FunctionInfo *func) +{ + func->Name = NULL; + func->NumberOfArguments = 0; + func->ArrayFailure = 0; + func->IsPureVirtual = 0; + func->IsPublic = 0; + func->IsOperator = 0; + func->HaveHint = 0; + func->HintSize = 0; + func->ReturnType = 0x2; + func->ReturnClass = NULL; + func->Comment = NULL; + func->Signature = NULL; + func->IsLegacy = 0; + sigAllocatedLength = 0; + openSig = 1; + invertSig = 0; +} + +/* when the cpp file doesn't have enough info use the hint file */ +void look_for_hint(void) +{ + char h_cls[80]; + char h_func[80]; + unsigned int h_type; + int h_value; + + /* reset the position */ + if (!fhint) + { + return; + } + rewind(fhint); + + /* first find a hint */ + while (fscanf(fhint,"%s %s %x %i",h_cls,h_func,&h_type,&h_value) != EOF) + { + if ((!strcmp(h_cls,data.ClassName))&& + currentFunction->Name && + (!strcmp(h_func,currentFunction->Name))&& + ((int)h_type == currentFunction->ReturnType)) + { + currentFunction->HaveHint = 1; + currentFunction->HintSize = h_value; + } + } +} + +/* a simple routine that updates a few variables */ +void output_function() +{ + int i; + + /* a void argument is the same as no arguements */ + if (currentFunction->ArgTypes[0] % 0x1000 == 0x2) + { + currentFunction->NumberOfArguments = 0; + } + + currentFunction->IsPublic = in_public; + currentFunction->IsProtected = in_protected; + + /* look for VAR FUNCTIONS */ + if (currentFunction->NumberOfArguments + && (currentFunction->ArgTypes[0] == 0x5000)) + { + if (currentFunction->NumberOfArguments == 2) + { + currentFunction->NumberOfArguments = 1; + } + else + { + currentFunction->ArrayFailure = 1; + } + } + + /* is it a delete function */ + if (currentFunction->Name && !strcmp("Delete",currentFunction->Name)) + { + data.HasDelete = 1; + } + + + /* if we need a return type hint and dont currently have one */ + /* then try to find one */ + if (!currentFunction->HaveHint) + { + switch (currentFunction->ReturnType % 0x1000) + { + case 0x301: case 0x302: case 0x307: case 0x30A: case 0x30B: case 0x30C: + case 0x304: case 0x305: case 0x306: case 0x313: + look_for_hint(); + break; + } + } + + /* reject multi-dimensional arrays from wrappers */ + for (i = 0; i < currentFunction->NumberOfArguments; i++) + { + if ((currentFunction->ArgTypes[i] % 0x1000)/0x100 == 0x6 || + (currentFunction->ArgTypes[i] % 0x1000)/0x100 == 0x9) + { + currentFunction->ArrayFailure = 1; + } + } + + if (HaveComment) + { + currentFunction->Comment = vtkstrdup(CommentText); + } + + data.NumberOfFunctions++; + currentFunction = data.Functions + data.NumberOfFunctions; + InitFunction(currentFunction); +} + +extern void vtkParseOutput(FILE *,FileInfo *); + +int main(int argc,char *argv[]) +{ + FILE *fin; + int ret; + FILE *fout; + + if (argc < 4 || argc > 5) + { + fprintf(stderr, + "Usage: %s input_file is_concrete output_file\n",argv[0]); + exit(1); + } + + if (!(fin = fopen(argv[1],"r"))) + { + fprintf(stderr,"Error opening input file %s\n",argv[1]); + exit(1); + } + + fhint = 0; + data.FileName = argv[1]; + data.NameComment = NULL; + data.Description = NULL; + data.Caveats = NULL; + data.SeeAlso = NULL; + CommentState = 0; + + if (argc == 5) + { + if (!(fhint = fopen(argv[2],"r"))) + { + fprintf(stderr,"Error opening hint file %s\n",argv[2]); + exit(1); + } + data.IsConcrete = atoi(argv[3]); + } + else + { + data.IsConcrete = atoi(argv[2]); + } + + currentFunction = data.Functions; + InitFunction(currentFunction); + + yyin = fin; + yyout = stdout; + ret = yyparse(); + if (ret) + { + fprintf(stdout, + "*** SYNTAX ERROR found in parsing the header file %s before line %d ***\n", + argv[1], yylineno); + return ret; + } + + if (argc == 5) + { + fout = fopen(argv[4],"w"); + data.OutputFileName = argv[4]; + } + else + { + fout = fopen(argv[3],"w"); + data.OutputFileName = argv[3]; + } + + if (!fout) + { + fprintf(stderr,"Error opening output file %s\n",argv[3]); + exit(1); + } + vtkParseOutput(fout,&data); + fclose (fout); + + return 0; +} + + + diff --git a/src/Plugins/Filter/CMakeLists.txt b/src/Plugins/Filter/CMakeLists.txt index 3fbab882..a5f02a5c 100755 --- a/src/Plugins/Filter/CMakeLists.txt +++ b/src/Plugins/Filter/CMakeLists.txt @@ -9,5 +9,5 @@ ADD_PARAVIEW_PLUGIN(SMSampleFilter "1.0" INSTALL( TARGETS SMSampleFilter - DESTINATION . + DESTINATION lib/paraview ) diff --git a/src/Plugins/ToolBar/CMakeLists.txt b/src/Plugins/ToolBar/CMakeLists.txt index ca0d2cb0..795ec067 100755 --- a/src/Plugins/ToolBar/CMakeLists.txt +++ b/src/Plugins/ToolBar/CMakeLists.txt @@ -14,5 +14,5 @@ ADD_PARAVIEW_PLUGIN(GUISampleToolBar "1.0" INSTALL( TARGETS GUISampleToolBar - DESTINATION . + DESTINATION lib/paraview ) diff --git a/src/Plugins/View/CMakeLists.txt b/src/Plugins/View/CMakeLists.txt index 880ebd41..1b43a3af 100755 --- a/src/Plugins/View/CMakeLists.txt +++ b/src/Plugins/View/CMakeLists.txt @@ -41,5 +41,5 @@ ADD_PARAVIEW_PLUGIN(SMSampleView "1.0" SERVER_MANAGER_XML MyViewSM.xml) INSTALL( TARGETS GUISampleView SMSampleView - DESTINATION . + DESTINATION lib/paraview ) diff --git a/wrapfiles.cmake b/wrapfiles.cmake new file mode 100644 index 00000000..1d8e276e --- /dev/null +++ b/wrapfiles.cmake @@ -0,0 +1,5 @@ +ADD_CUSTOM_COMMAND( + OUTPUT wrapfiles.txt + COMMAND pvpython ${CMAKE_SOURCE_DIR}/getwrapclasses.py + DEPENDS ${CMAKE_SOURCE_DIR}/getwrapclasses.py ${PARAVIEW_PYTHON_EXECUTABLE} +) -- 2.39.2