From 8a7b73e1cb8d42dcb9460fff0f381b75bed58503 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 9 Aug 2012 12:12:49 +0000 Subject: [PATCH] Merge from V6_main_20120808 08Aug12 --- Makefile.am | 42 +- README | 10 +- adm_local/Makefile.am | 30 +- adm_local/unix/Makefile.am | 30 +- adm_local/unix/config_files/Makefile.am | 30 +- adm_local/unix/config_files/check_PYHELLO.m4 | 31 +- adm_local/unix/make_common_starter.am | 36 +- bin/Makefile.am | 30 +- bin/VERSION.in | 4 +- bin/myrunSalome.py | 34 +- bin/runAppli.in | 30 +- build_cmake | 27 + build_cmake.bat | 20 + build_configure | 70 +- clean_configure | 39 +- configure.ac | 97 +- doc/Makefile.am | 64 +- doc/dev_guide.pdf | Bin 113825 -> 0 bytes doc/dev_guide.txt | 432 --------- doc/doxyfile.in | 81 ++ doc/images/head.png | Bin 0 -> 78545 bytes doc/index.doc | 678 ++++++++++++++ doc/static/doxygen.css | 836 ++++++++++++++++++ doc/static/footer.html | 12 + doc/static/header.html.in | 20 + idl/Makefile.am | 45 +- idl/PYHELLO_Gen.idl | 46 +- resources/Makefile.am | 35 +- resources/PYHELLOCatalog.xml.in | 2 +- resources/{SalomeApp.xml => SalomeApp.xml.in} | 16 +- resources/handshake.png | Bin 0 -> 1835 bytes resources/stop.png | Bin 0 -> 1816 bytes src/Makefile.am | 30 +- src/PYHELLO/Makefile.am | 33 +- src/PYHELLO/PYHELLO.py | 99 ++- src/PYHELLO/PYHELLO_utils.py | 199 +++++ src/PYHELLOGUI/Makefile.am | 31 +- src/PYHELLOGUI/PYHELLOGUI.py | 221 ++--- src/PYHELLOGUI/PYHELLO_icons.ts | 38 +- src/PYHELLOGUI/PYHELLO_msg_en.ts | 34 +- src/PYHELLOGUI/PYHELLO_msg_fr.ts | 11 + 41 files changed, 2510 insertions(+), 1013 deletions(-) create mode 100755 build_cmake create mode 100644 build_cmake.bat delete mode 100644 doc/dev_guide.pdf delete mode 100644 doc/dev_guide.txt create mode 100755 doc/doxyfile.in create mode 100755 doc/images/head.png create mode 100644 doc/index.doc create mode 100755 doc/static/doxygen.css create mode 100755 doc/static/footer.html create mode 100755 doc/static/header.html.in rename resources/{SalomeApp.xml => SalomeApp.xml.in} (61%) create mode 100644 resources/handshake.png create mode 100644 resources/stop.png create mode 100644 src/PYHELLO/PYHELLO_utils.py create mode 100755 src/PYHELLOGUI/PYHELLO_msg_fr.ts diff --git a/Makefile.am b/Makefile.am index 4766f40..2fdac46 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # -* Makefile *- # Author : Patrick GOLDBRONN (CEA) # Date : 28/06/2001 @@ -33,7 +31,7 @@ ACLOCAL_AMFLAGS = -I adm_local/unix/config_files \ SUBDIRS = idl adm_local resources src bin doc -DISTCLEANFILES = a.out aclocal.m4 configure +DISTCLEANFILES = a.out aclocal.m4 configure local-install.sh hack_libtool EXTRA_DIST += \ build_configure \ @@ -41,3 +39,13 @@ EXTRA_DIST += \ dist-hook: rm -rf `find $(distdir) -name CVS` + +usr_docs: + (cd doc && $(MAKE) $(AM_MAKEFLAGS) usr_docs) + +docs: usr_docs + +dev_docs: + (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs) + + diff --git a/README b/README index 14cc271..d13fa47 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -This module is a Salome example of a module that is interfaced with MED library. +This module is a Salome example of a module implemented in Python with PyQt GUI Installation and compilation is like every Salome modules : src_dir/build_configure @@ -9,10 +9,4 @@ Installation and compilation is like every Salome modules : make make install -To check Calculator component, you can use CALCULATOR_TEST.py script, -or SUPERVISION graph src_dir/CALCULATOR/graphe1.py - - -Documentation can be found in /doc directory. It was written in sxw format (openoffice) and was converted in pdf. - -Implementation is in /src/CALCULATOR directory. It was tested on redhat8 - using gcc 3.2 +Documentation can be found in /doc directory. diff --git a/adm_local/Makefile.am b/adm_local/Makefile.am index f35273f..9863d29 100644 --- a/adm_local/Makefile.am +++ b/adm_local/Makefile.am @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + include $(top_srcdir)/adm_local/unix/make_common_starter.am SUBDIRS = unix diff --git a/adm_local/unix/Makefile.am b/adm_local/unix/Makefile.am index 5f6d5f7..0d5ee76 100644 --- a/adm_local/unix/Makefile.am +++ b/adm_local/unix/Makefile.am @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + include $(top_srcdir)/adm_local/unix/make_common_starter.am SUBDIRS = config_files diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am index 54b4bc1..098cd06 100644 --- a/adm_local/unix/config_files/Makefile.am +++ b/adm_local/unix/config_files/Makefile.am @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# 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 = \ diff --git a/adm_local/unix/config_files/check_PYHELLO.m4 b/adm_local/unix/config_files/check_PYHELLO.m4 index 5da66c6..c608d55 100755 --- a/adm_local/unix/config_files/check_PYHELLO.m4 +++ b/adm_local/unix/config_files/check_PYHELLO.m4 @@ -1,24 +1,25 @@ -dnl Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +dnl Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE dnl -dnl Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +dnl Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License. +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License. dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl -dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com dnl + # Check availability of PYHELLO binary distribution # # Author : Marc Tajchman (CEA, 2002) diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am index 36ad8c3..4f70a70 100644 --- a/adm_local/unix/make_common_starter.am +++ b/adm_local/unix/make_common_starter.am @@ -1,24 +1,30 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +# ============================================================ +# The following is to avoid PACKAGE_... env variable +# redefinition compilation warnings +# ============================================================ # +AM_CXXFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h +AM_CPPFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h + # ============================================================ # This file defines the common definitions used in several # Makefile. This file must be included, if needed, by the file diff --git a/bin/Makefile.am b/bin/Makefile.am index f9eb701..1807821 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # -* Makefile *- # Author : Guillaume Boulant (CSSI) # Module : COMPONENT diff --git a/bin/VERSION.in b/bin/VERSION.in index f5741c6..011a48b 100755 --- a/bin/VERSION.in +++ b/bin/VERSION.in @@ -1 +1,3 @@ -THIS IS SALOME - PYHELLO VERSION: @VERSION@ +[SALOME PYHELLO] : @VERSION@ +[DEVELOPMENT] : @VERSION_DEV@ +[DESCRIPTION] : Sample Python SALOME module diff --git a/bin/myrunSalome.py b/bin/myrunSalome.py index bf4edf1..35e0e83 100755 --- a/bin/myrunSalome.py +++ b/bin/myrunSalome.py @@ -1,26 +1,26 @@ -# 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 +#!/usr/bin/env python +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE # -# 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. +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS # -# 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. +# 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. # -# 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 +# 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. # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# 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 # -#!/usr/bin/env python +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + def test(clt): """ Test function that creates an instance of PYHELLO component diff --git a/bin/runAppli.in b/bin/runAppli.in index 514750a..d6c6205 100755 --- a/bin/runAppli.in +++ b/bin/runAppli.in @@ -1,24 +1,24 @@ #!/bin/sh -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 +# 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 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. +# 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 +# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # if [ -z "${KERNEL_ROOT_DIR}" ] ; then diff --git a/build_cmake b/build_cmake new file mode 100755 index 0000000..e6d7a0b --- /dev/null +++ b/build_cmake @@ -0,0 +1,27 @@ +#!/bin/sh +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +CURRENT_DIR=`pwd` +CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` +cd ${CONF_DIR} +python $KERNEL_ROOT_DIR/salome_adm/cmake_files/am2cmake.py --pyhello +status=$? +cd ${CURRENT_DIR} +exit $status diff --git a/build_cmake.bat b/build_cmake.bat new file mode 100644 index 0000000..4cc9970 --- /dev/null +++ b/build_cmake.bat @@ -0,0 +1,20 @@ +@REM Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +@REM +@REM This library is free software; you can redistribute it and/or +@REM modify it under the terms of the GNU Lesser General Public +@REM License as published by the Free Software Foundation; either +@REM version 2.1 of the License. +@REM +@REM This library is distributed in the hope that it will be useful, +@REM but WITHOUT ANY WARRANTY; without even the implied warranty of +@REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +@REM Lesser General Public License for more details. +@REM +@REM You should have received a copy of the GNU Lesser General Public +@REM License along with this library; if not, write to the Free Software +@REM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +@REM +@REM See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +@REM + +%PYTHONBIN% %KERNEL_ROOT_DIR%\salome_adm\cmake_files\am2cmake.py --pyhello diff --git a/build_configure b/build_configure index 4f365ac..04717ef 100755 --- a/build_configure +++ b/build_configure @@ -1,25 +1,26 @@ #!/bin/bash -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 +# 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 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. +# 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 +# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # Tool for updating list of .in file for the SALOME project # and regenerating configure script # Author : @@ -49,31 +50,16 @@ 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 - +######################################################################## # ____________________________________________________________________ # aclocal creates the aclocal.m4 file from the standard macro and the -# custom macro embedded in the directory salome_adm/unix/config_files +# custom macro embedded in the directory adm_local/unix/config_files # and KERNEL config_files directory. # output: # aclocal.m4 # autom4te.cache (directory) -echo "====================================================== aclocal" +echo "======================================================= aclocal" aclocal -I adm_local/unix/config_files \ -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ @@ -85,10 +71,10 @@ aclocal -I adm_local/unix/config_files \ # 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" +# adm_local/unix/config_files/config.guess +# adm_local/unix/config_files/config.sub +# adm_local/unix/config_files/ltmain.sh +echo "==================================================== libtoolize" libtoolize --force --copy --automake || exit 1 @@ -108,11 +94,11 @@ autoconf # 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 +# adm_local/unix/config_files/compile +# adm_local/unix/config_files/depcomp +# adm_local/unix/config_files/install-sh +# adm_local/unix/config_files/missing +# adm_local/unix/config_files/py-compile # Makefile.in (from Makefile.am) echo "====================================================== automake" diff --git a/clean_configure b/clean_configure index f57f7b3..1f4c3ce 100755 --- a/clean_configure +++ b/clean_configure @@ -1,35 +1,28 @@ #!/bin/sh -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + 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 +find . -name Makefile.in | xargs rm -f +( cd adm_local/unix/config_files && rm -f config.* depcomp install-sh ltmain.sh missing py-compile ) diff --git a/configure.ac b/configure.ac index 3151424..023ed7f 100644 --- a/configure.ac +++ b/configure.ac @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # PLEASE DO NOT MODIFY configure.in FILE # ALL CHANGES WILL BE DISCARDED BY THE NEXT # build_configure COMMAND @@ -29,14 +27,16 @@ # Modified by : Marc Tajchman (CEA) # Created from configure.in.base # -AC_INIT([Salome2 Project PYHELLO module], [5.1.0], [webmaster.salome@opencascade.com], [SalomePYHELLO]) -AC_CONFIG_AUX_DIR(salome_adm/unix/config_files) +AC_INIT([Salome2 Project PYHELLO module], [6.5.0], [webmaster.salome@opencascade.com], [SalomePYHELLO]) +AC_CONFIG_AUX_DIR(adm_local/unix/config_files) AC_CANONICAL_HOST AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE +AM_INIT_AUTOMAKE([-Wno-portability]) XVERSION=`echo $VERSION | awk -F. '{printf("0x%02x%02x%02x",$1,$2,$3)}'` AC_SUBST(XVERSION) +VERSION_DEV=1 +AC_SUBST(VERSION_DEV) # set up MODULE_NAME variable for dynamic construction of directories (resources, etc.) MODULE_NAME=pyhello @@ -81,6 +81,7 @@ echo AC_PROG_MAKE_SET AC_PROG_INSTALL +AC_LOCAL_INSTALL dnl dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + for shared libraries @@ -102,7 +103,7 @@ 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 + INSTALL='\${KERNEL_ROOT_DIR}'/adm_local/unix/config_files/install-sh ;; esac @@ -145,6 +146,14 @@ echo CHECK_QT +echo +echo --------------------------------------------- +echo Testing html generators +echo --------------------------------------------- +echo + +CHECK_HTML_GENERATORS + echo echo --------------------------------------------- echo Testing Kernel @@ -168,13 +177,12 @@ echo --------------------------------------------- echo CHECK_CORBA_IN_GUI + if test "x${CORBA_IN_GUI}" != "xyes"; then - echo "failed : For configure PYHELLO1 module necessary full GUI !" + echo "failed : For configure PYHELLO module necessary full GUI !" exit fi - - echo echo --------------------------------------------- echo Summary @@ -182,7 +190,7 @@ echo --------------------------------------------- echo echo Configure -variables="python_ok omniORB_ok qt_ok Kernel_ok" +variables="python_ok omniORB_ok qt_ok doxygen_ok Kernel_ok" for var in $variables do @@ -211,24 +219,37 @@ AC_OUTPUT_COMMANDS([ \ chmod +x ./bin/*; \ ]) +AC_HACK_LIBTOOL +AC_CONFIG_COMMANDS([hack_libtool],[ +sed -i "s%^CC=\"\(.*\)\"%hack_libtool (){ \n\ + $(pwd)/hack_libtool \1 \"\$[@]\" \n\ +}\n\ +CC=\"hack_libtool\"%g" libtool +sed -i "s%\(\s*\)for searchdir in \$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path; do%\1searchdirs=\"\$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path\"\n\1for searchdir in \$searchdirs; do%g" libtool +sed -i "s%\(\s*\)searchdirs=\"\$newlib_search_path \$lib_search_path \(.*\)\"%\1searchdirs=\"\$newlib_search_path \$lib_search_path\"\n\1sss_beg=\"\"\n\1sss_end=\"\2\"%g" libtool +sed -i "s%\(\s*\)\(for searchdir in \$searchdirs; do\)%\1for sss in \$searchdirs; do\n\1 if ! test -d \$sss; then continue; fi\n\1 ssss=\$(cd \$sss; pwd)\n\1 if test \"\$ssss\" != \"\" \&\& test -d \$ssss; then\n\1 case \$ssss in\n\1 /usr/lib | /usr/lib64 ) ;;\n\1 * ) sss_beg=\"\$sss_beg \$ssss\" ;;\n\1 esac\n\1 fi\n\1done\n\1searchdirs=\"\$sss_beg \$sss_end\"\n\1\2%g" libtool +],[]) + # 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/runAppli \ - ./bin/Makefile \ - ./doc/Makefile \ - ./src/Makefile \ - ./src/PYHELLO/Makefile \ - ./src/PYHELLOGUI/Makefile \ - ./resources/Makefile \ - ./resources/PYHELLOCatalog.xml \ - ./idl/Makefile \ + adm_local/Makefile \ + adm_local/unix/Makefile \ + adm_local/unix/config_files/Makefile \ + bin/VERSION \ + bin/runAppli \ + bin/Makefile \ + doc/Makefile \ + doc/doxyfile \ + doc/static/header.html \ + src/Makefile \ + src/PYHELLO/Makefile \ + src/PYHELLOGUI/Makefile \ + resources/Makefile \ + resources/SalomeApp.xml \ + resources/PYHELLOCatalog.xml \ + idl/Makefile \ Makefile \ ]) diff --git a/doc/Makefile.am b/doc/Makefile.am index 6e3f6da..f30e7bb 100755 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,26 +1,54 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + include $(top_srcdir)/adm_local/unix/make_common_starter.am -dist_doc_DATA = dev_guide.pdf +EXTRA_DIST += images static/footer.html static/doxygen.css + +guidocdir = $(docdir)/gui/PYHELLO +guidoc_DATA = images/head.png + +usr_docs: doxyfile + $(DOXYGEN) doxyfile + +docs: usr_docs + +dev_docs: + +clean-local: + @for filen in `find . -maxdepth 1` ; do \ + case $${filen} in \ + ./Makefile | ./doxyfile ) ;; \ + . | .. | ./static ) ;; \ + *) echo "Removing $${filen}" ; rm -rf $${filen} ;; \ + esac ; \ + done ; + +install-data-local: usr_docs + $(INSTALL) -d $(DESTDIR)$(docdir)/gui/PYHELLO + @for filen in `find . -maxdepth 1` ; do \ + case $${filen} in \ + ./Makefile | ./doxyfile | ./doxyfile.bak ) ;; \ + . | .. | ./static ) ;; \ + *) echo "Installing $${filen}" ; cp -rp $${filen} $(DESTDIR)$(docdir)/gui/PYHELLO ;;\ + esac ; \ + done ; -EXTRA_DIST += dev_guide.txt +uninstall-local: + rm -rf $(DESTDIR)$(docdir)/gui/PYHELLO diff --git a/doc/dev_guide.pdf b/doc/dev_guide.pdf deleted file mode 100644 index 8c363922feaa4e287ff32b7da6ae32ce0295367c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113825 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

ey3@p4Y?=W27hObUXn(yRi#4+{e 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 d#4dlP1}h3Mp4d5JVDf - ./build_configure - -Aller dans ../PYHELLO1_BUILD et faire:: - - ../PYHELLO1_SRC/configure --prefix= - make - make install - -Lancement de la plate-forme -------------------------------- -Aller dans et faire:: - - ./bin/salome/runAppli - -Cette commande lance SALOME configurée pour KERNEL et le module PYHELLO1. A la fin de ce -lancement l'utilisateur est devant un interpréteur Python configuré pour SALOME et qui -donne accès aux objets CORBA de SALOME. - -runAppli est un shell qui exécute un script Python en lui passant des arguments en ligne de -commande:: - - python -i $PYHELLO_ROOT_DIR/bin/salome/runSalome.py --modules=PYHELLO --xterm --containers=cpp,python --killall - -Ces arguments indiquent que l'on prendra le script runSalome.py situé dans le module PYHELLO, que l'on -activera le composant PYHELLO, les impressions seront redirigées dans une fenêtre xterm, on lancera un -container Python et tous les processus SALOME existant avant le lancement seront tués. - -Pour que cette commande fonctionne, il faut préalablement avoir positionné les variables d'environnement -suivantes:: - - export KERNEL_ROOT_DIR= - export PYHELLO_ROOT_DIR= - -Cette méthode d'activation des modules et composants de SALOME 2 tend à confondre module et composant. -Dans ce cas (1 composant par module), il n'y a pas de difficulté à paramétrer le lancement. Il suffit d'indiquer derrière -l'option --modules la liste des composants demandés (KERNEL est inutile) et de fournir autant de variables -d'environnement qu'il y a de composants. Le nom de ces variables doit être _ROOT_DIR et doit donner le chemin -du module contenant le composant. Dans le cas où on a plusieurs composants par module, c'est un peu plus -compliqué. Ce sera présenté ultérieurement. - -Mise en garde: il est possible que le lancement de SALOME 2 n'aille pas jusqu'au bout. En effet -dans certaines circonstances, le temps de lancement des serveurs CORBA peut être long et dépasser -le timeout fixé à 21 secondes. Si la raison en est le temps de chargement important des -bibliothèques dynamiques, il est possible qu'un deuxième lancement dans la foulée aille -jusqu'au bout. - -Chargement du composant exemple ------------------------------------- -Pour avoir accès aux méthodes du composant, il faut importer le module PYHELLO_ORB avant -de demander le chargement du composant au container Python. Ce container Python -a été rendu accessible dans runSalome.py au moyen de la variable container:: - - import PYHELLO_ORB - c=container.load_impl("PYHELLO","PYHELLO") - c.makeBanner("Christian") - -La dernière instruction doit retourner 'Hello Christian'. -Pour voir les objets CORBA créés par ces actions, faire:: - - clt.showNS() - -On peut voir que le composant a été créé et enregistré dans un contexte de nommage qui peut -être incorrect en raison d'un bug identifié dans la version 1.2.1 du module KERNEL. - - -Composant SALOME déclaré -============================== -Pour le moment, le composant PYHELLO a été chargé en faisant une requête directe au container -Python. Ce n'est pas la méthode standard pour charger un composant. La voie normale passe -par le service LifeCycle qui utilise les services du catalogue pour identifier le composant -et ses propriétés puis appelle le container demandé pour charger le composant. - -Pour pouvoir utiliser cette méthode, il faut déclarer le composant dans un catalogue au format XML dont le -nom doit être Catalog.xml. Dans notre cas ce sera PYHELLOCatalog.xml. Ce catalogue sera rangé -dans le répertoire resources. Arborescence actualisée:: - - + PYHELLO1_SRC - + build_configure - + configure.in.base - + Makefile.in - + adm_local - + bin - + idl - + src - + doc - + resources - + PYHELLOCatalog.xml - -En dehors de l'ajout du répertoire resources et du fichier PYHELLOCatalog.xml, le reste des fichiers -est identique. Il faut cependant modifier le Makefile.in de tête pour que le catalogue soit bien installé -dans le répertoire d'installation. Il suffit de le spécifier dans la cible RESOURCES_FILES. - -Construction, installation ---------------------------------- -Il n'est pas nécessaire de refaire un configure pour prendre en compte cette modification. Il -suffit d'aller dans PYHELLO1_BUILD et de faire:: - - ./config.status - make - make install - -Lancement de la plate-forme -------------------------------- -Le lancement de la plate-forme se passe de la même manière que précédemment. Aller dans PYHELLO1_INSTALL et faire:: - - ./bin/salome/runAppli - -Chargement du composant exemple ------------------------------------- -La méthode de chargement du composant n'est pas très différente de la fois précédente. On -utiilise maintenant les services du module LifeCycle au lieu d'appeler directement le container. -La séquence d'appel est contenue dans la fonction test de runSalome.Py. :: - - c=test(clt) - c.makeBanner("Christian") - -La fonction test crée le LifeCycle. Puis elle demande le chargement du composant PYHELLO -dans le container FactoryServerPy:: - - def test(clt): - """ - Test function that creates an instance of PYHELLO component - usage : pyhello=test(clt) - """ - import LifeCycleCORBA - lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb) - import PYHELLO_ORB - pyhello = lcc.FindOrLoadComponent("FactoryServerPy", "PYHELLO") - return pyhello - -Chargement depuis l'interface applicative (IAPP) ----------------------------------------------------------- -Pour pouvoir charger dynamiquement un composant en utilisant la barre à composants -de l'IAPP, il faut déclarer l'icone représentative du composant dans le catalogue. -Pour la déclarer il suffit d'ajouter une ligne pour l'icone au catalogue du composant:: - - PYHELLO.png - -et de mettre le fichier correspondant dans le répertoire resources du module. - -Pour tester la bonne configuration de la barre à composants, lancer SALOME 2 comme -précédemment puis à partir de l'interpréteur Python lancer l'IAPP par:: - - startGUI() - -et charger le composant en cliquant sur l'icone de PYHELLO après avoir ouvert une étude. L'IAPP doit -signaler que le GUI du composant n'est pas correctement configuré mais le composant sera quand -même créé après un temps d'attente. On peut le constater en tapant:: - - clt.showNS() - -Ajout d'un GUI graphique -=========================== -L'étape suivante pour compléter le module consiste à ajouter au composant PYHELLO -une interface graphique qui sera écrite en Python en utilisant la bibliothèque de -widgets Qt. Cette interface graphique doit s'intégrer dans l'interface applicative -de SALOME (IAPP) et doit donc respecter certaines contraintes que nous allons voir. - -Tout d'abord, précisons le contour du GUI d'un composant. -Le comportement du GUI est -donné par un module Python dont le nom est normalisé GUI.py. Il doit -proposer des points d'entrée conventionnels qui seront utilisés par l'IAPP pour activer -ce GUI ou l'informer de certains évènements. -L'activation des commandes du GUI est réalisée au moyen d'une barre de menu et d'une barre -à boutons qui s'intègrent dans la barre à menus et dans la barre à boutons de l'IAPP. - - -Module Python implantant le comportement du GUI ------------------------------------------------------ -Le comportement du GUI du composant PYHELLO est implanté dans le module Python PYHELLOGUI.py -du sous-répertoire PYHELLOGUI. -Le Makefile.in localisé dans le répertoire src doit être actualisé pour parcourir le sous-répertoire PYHELLOGUI. -Un Makefile.in doit être ajouté dans le sous-répertoire PYHELLOGUI. Les cibles -importantes sont PO_FILES et EXPORT_PYSCRIPTS. - -La cible EXPORT_PYSCRIPTS doit être mise à jour avec le nom des modules Python à rendre visible -dans Salome, c'est à dire principalement pour qu'ils soient importables (commande import de Python). - -La cible PO_FILES doit être mise à jour avec les noms des fichiers qui sont utilisés pour le multi-linguisme. -Pour le moment le fichier PYHELLO_msg_en.po (traduction pour langue anglaise) est vide car le multi-linguisme -n'est pas mis en oeuvre dans cet exemple. - -Barre à menus et barre à boutons ----------------------------------- -Les barres à menus et à boutons du composant PYHELLO sont décrites dans un fichier au format XML -pour permettre leur chargement dynamique dans l'IAPP. Ce fichier est localisé dans le répertoire resources -du module et a un nom standardisé _en.xml pour la langue anglaise. Pour la langue française, il -faut également un fichier de nom _fr.xml. -Pour le composant PYHELLO, le fichier PYHELLO_en.xml contient un menu avec un item et un bouton. -L'icone du bouton est fournie par le fichier ExecPYHELLO.png localisé dans le répertoire resources du module. - -Etapes ultérieures restant à décrire -========================================== - - - lien avec l'étude - - lien avec la sélection - - ajout d'un popup contextuel - - comment rendre le composant supervisable - - ajout de la persistance - - avoir plusieurs composants dans le même module - -Rapides rappels sur l'architecture SALOME 2 -================================================== -Les containers --------------------- -Dans SALOME, les composants sont dynamiquement chargeables. Cette propriété est obtenu -en utilisant un mécanisme de container. - -Dans ses grandes lignes, un container est un serveur CORBA dont l'interface dispose -des méthodes nécessaires pour effectuer le chargement déchargement de l'implantation -d'un composant SALOME. Pour effectuer le chargement d'un composant, on appellera la méthode -load_impl du container. - -La mécanique de base du chargement d'un composant est dépendante du langage d'implantation choisi. - -En C++, la plate-forme utilise le chargement dynamique de bibliothèque (dlopen) et un mécanisme de fonction -factory dont le nom doit être Engine_factory (par exemple GEOMEngine_factory, pour GEOM). -Cette fonction doit retourner l'objet CORBA effectif qui est le composant SALOME. - -En Python, la plate-forme utilise le mécanisme d'import de Python (import ) et instancie -le composant SALOME Python en utilisant une classe (ou une factory) de même nom () pour -ce faire. - -Le multi-linguisme ------------------------ -A compléter - -Les logiciels prérequis ---------------------------- -A compléter - - - diff --git a/doc/doxyfile.in b/doc/doxyfile.in new file mode 100755 index 0000000..08d4b5d --- /dev/null +++ b/doc/doxyfile.in @@ -0,0 +1,81 @@ +# Copyright (C) 2007-2012 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 +# + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "PYHELLO sample module reference manual v.@VERSION@" +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +TAB_SIZE = 5 + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = @srcdir@ +FILE_PATTERNS = *.doc +EXCLUDE = +IMAGE_PATH = @srcdir@/images +EXAMPLE_PATH = + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_HEADER = @builddir@/static/header.html +HTML_FOOTER = @srcdir@/static/footer.html +HTML_STYLESHEET = @srcdir@/static/doxygen.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 + +#--------------------------------------------------------------------------- +#SORT related options +#--------------------------------------------------------------------------- +SORT_GROUP_NAMES = NO + + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO + +#--------------------------------------------------------------------------- +#External reference options +#--------------------------------------------------------------------------- +TAGFILES = +ALLEXTERNALS = NO +SEARCHENGINE = NO diff --git a/doc/images/head.png b/doc/images/head.png new file mode 100755 index 0000000000000000000000000000000000000000..307d9ef9a4c07f8fba2c8721309a978433bcf63c GIT binary patch literal 78545 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 D4zrO! literal 0 HcmV?d00001 diff --git a/doc/index.doc b/doc/index.doc new file mode 100644 index 0000000..0556276 --- /dev/null +++ b/doc/index.doc @@ -0,0 +1,678 @@ +/*! + +\mainpage Introduction to PYHELLO sample module + +The purpose of the \b PYHELLO module is to describe briefly the different +steps in the development of a SALOME module in Python. + +Contents: +- \subpage dev_steps +- \subpage tree_structure +- \subpage build_proc_files +- \subpage idl_dir +- \subpage src_dir +- \subpage bin_dir +- \subpage doc_dir +- \subpage build_procedure +- \subpage run_procedure +- \subpage load_module +- \subpage catalog_def +- \subpage load_lcc +- \subpage load_iapp + +\ref dev_steps ">> Next" + +\page dev_steps Steps in construction of the example module + +The example module chosen to illustrate the process of SALOME module +development is extremely simple. The module contains a single +component and this component provides a single service called \b +makeBanner that accepts a character string as the sole argument and +that returns a character string obtained by the concatenation of a +'Hello' and the input string. The component also provides a simple +GUI. + +The steps in the development are as follows: +- create a module tree structure +- create a SALOME component that can be loaded by a Python SALOME container +- configure the module so that the component is known to SALOME +- add a graphic GUI + +\ref main "<< Previous"
\ref tree_structure ">> Next" + +\page tree_structure Create the module tree structure + +The first step in the development process is the creation of the +module tree file structure. The typical SALOME module usually includes +some set of the configuration files (used in the build procedure of a +module), Makefiles, IDL file that provides a definition of a CORBA +services implemented in a module and a set of source Python files +which implement the module CORBA engine and (optionally) its GUI. + +The following file structure is typical for the SALOME module: + +

++ PYHELLO1_SRC
+   + build_configure
+   + configure.ac
+   + Makefile.am
+   + adm_local
+     + Makefile.am
+     + unix
+       + Makefile.am
+       + make_common_starter.am
+       + config_files
+         + Makefile.am
+         + check_PYHELLO.m4
+   + bin
+     + Makefile.am
+     + VERSION.in
+     + runAppli.in
+     + myrunSalome.py
+   + idl
+     + Makefile.am
+     + PYHELLO_Gen.idl
+   + src
+     + Makefile.am
+     + PYHELLO
+       + Makefile.am
+       + PYHELLO.py
+       + PYHELLO_utils.py
+     + PYHELLOGUI
+       + Makefile.am
+       + PYHELLOGUI.py
+       + PYHELLO_msg_en.ts
+       + PYHELLO_icons.ts
+   + resources
+     + Makefile.am
+     + PYHELLO.png
+     + PYHELLO_small.png
+     + ExecPYHELLO.png
+     + handshake.png
+     + stop.png
+     + PYHELLOCatalog.xml.in
+     + SalomeApp.xml.in
+   + doc
+     + Makefile.am
+     + doxyfile.in
+     + index.doc
+
+ +Note that other files can be optionally present. For example, in some +SALOME modules sources tree you can find such files as AUTHORS, +INSTALL, ChangeLog, COPYING, NEWS, README, etc. Some files are +specific only for this PYHELLO sample module, for example PNG images +in the resources directory which are used in the GUI dialog boxes etc. + +The usual way of the sources directory tree structure initial creation +is to copy it from the existing SALOME module. + +\warning The files of the platform base module (KERNEL) must not be +copied to initialise a module tree structure. It is usually preferable +to copy files from another module such as GEOM or MED. + +The module name is PYHELLO, the component name is PYHELLO and all the +files are put in a directory named PYHELLO1_SRC. +Below is a short description of these files. Note, that files with .in +suffix are the autoconf templates from which the actual files are +generated during the build procedure. + +- build_configure, configure.ac, Makefile.am, make_common_starter.am + +These files are a part of the build system based on GNU +automake/autoconf auto-tools. These files define the build procedure, +namely, compilation and installation rules like compiler and linker +options, installation destination folder, package version etc. + +- adm_local/unix/config_files/check_PYHELLO.m4 + +The files in this directory are also a part of the GNU auto-tools +-based build procedure. The scripts written in m4 language are usually +used to test an availability of some 3rd-party pre-requisite product, +compiler feature, different configuration options. + +- bin/VERSION.in + +This file is used to document the module, it must give its version (at +least) and (optionally) compatibilities or incompatibilities with +other modules. This file is strongly recommended but is not essential +for operation of the module. + +- bin/runAppli.in +- bin/myrunSalome.py + +These files are not essential but make the example easier to +use. These are scripts that can be used to run SALOME session with +PYHELLO module. + +- idl/PYHELLO_Gen.idl + +This is the CORBA IDL definition of the services implemented by SALOME +PYHELLO module. + +- src/PYHELLO/PYHELLO.py +- src/PYHELLO/PYHELLO_utils.py + +These files provide the implementation of a CORBA engine of the +PYHELLO module. In particular, this is an implementation of the +services defined in the PYHELLO_Gen.idl file. + +- src/PYHELLOGUI/PYHELLOGUI.py + +The src/PYHELLOGUI is an optional directory that provides an +implementation of PYHELLO module's GUI. Strictly speaking, the +GUI is optional for each SALOME module. In some cases it's +enough to implement CORBA engine only. Then, the services of the +module will be avaiable in a CORBA environment. The module can be +loaded to the SALOME container and its services can be used in the +Supervisor computation schemas, in Python scripts or/and refer to it +in other modules. A GUI is necessary in the cases if it is planned to +access to the module functionality from the SALOME GUI session via +menu actions, dialog boxes and so on. + +- src/PYHELLOGUI/PYHELLO_msg_en.ts +- src/PYHELLOGUI/PYHELLO_icons.ts + +These files provide a description (internationalization) of GUI +resources of the PYHELLO module. PYHELLO_msg_en.ts provides an English +translation of the string resources used in a module. PYHELLO_icons.ts +defines images and icons resources used within the GUI of the +PYHELLO module. Please refer to Qt linguist documentation for more +details. + +- resources/PYHELLO.png +- resources/PYHELLO_small.png +- resources/ExecPYHELLO.png +- resources/handshake.png +- resources/stop.png + +The resources folder usually includes different resource files used +within the SALOME module. For example, PYHELLO.png file provides an icon +of PYHELLO module to be shown in the SALOME GUI desktop. ExecPYHELLO.png is +an icon for the makeBanner() function used in the menu and +toolbar. The icons handshake.png and stop.png are used in the dialog +boxes and PYHELLO_small.png icon is used to display in the Object +browser for root PYHELLO entity. + +- resources/PYHELLOCatalog.xml.in + +The XML description of the CORBA services provided by the PYHELLO +module. This file is parsed by Supervisor and YACS module to generate +the list of service nodes to be used in the calculation schemas. The +simplest way to create this file is to use Catalog Generator utility +provided by the SALOME KERNEL module, that can automatically generate +XML description file from the IDL file. + +- resources/SalomeApp.xml.in + +This file is essential for the module. It provides some parameters of +the module which define module behavior in SALOME. In particular it +should provide a section with the name corresponding to the name of a +module ("PYHELLO" in this case) with the following parameters: +\code +
+ + + + +
+\endcode + +The "name" parameter defines GUI name of a module. The "icon" +parameter defines a GUI icon of a module. The parameter "library" +specifies the name of the C++ library representing the front-end of +the module in the SALOME GUI desktop. The Python modules which do not +implement its own C++ front-end GUI library should specify +"SalomePyQtGUI" value in this parameter. The "version" parameter +defines the version of the module. + +The section "resources" also specifies the directory that contains +resources of a module (icons, translation files, etc). + +\code +
+ +
+\endcode + +The section [module_name]_help provides information on the location of +the help page and the eventual sub-menu in the Help menu. + +\code +
+ + +
+\endcode + +- doc/doxyfile.in + +The Doxygen configuration file. The Doxygen is used to build this +documentation. The file doxyfile.in provides a rules for the +generation of module documentation. + +- doc/index.doc + +An input file for the Doxygen, which provides a source of this documentation. + +\ref dev_steps "<< Previous"
\ref build_proc_files ">> Next" + +\page build_proc_files Build procedure input files + +SALOME uses autoconf and automake GNU auto-tools to build the +modules. The configure script is used for the build procedure to test +the system configuration and to pre-configure the module construction +Makefile files. + +The \b build_configure script provides a procedure that uses \b +configure.ac and set of \b Makefile.am files as input and uses autoconf +to generate the configure script and automake to generate Makefile.in +files. + +The files with an .in extension are the skeletons that are the input +of the configure script (to be more precise, these files should be +listed in the end of the configure.ac file in the AC_OUTPUT() +autoconf macro) and are transformed by the configure process. + +Almost all files used for this process are located in the platform +base module KERNEL that is referenced by the KERNEL_ROOT_DIR +environment variable, namely in its salome_adm sub-folder. +Similarly, the GUI_ROOT_DIR environment variable is used for the +graphical user interface (GUI), that also provides a set of +configuration utilities (m4 files) in its adm_local folder. However, +some files must be modified as a function of the target module. This +is the case for build_configure and configure.ac files which usually +need to be adapted to the module needs. + +The file \b make_common_starter.am file in the adm_local directory of +the example module provides basic build rules to be used in other +Makefile.am files. To refer to this file in the Makefile.am it is +necessary to use "include" clause: + +\code +include $(top_srcdir)/adm_local/unix/make_common_starter.am +\endcode + +The adm_local/unix/config_files is a directory in which the m4 files +that are used to test the configuration of the system in the configure +process can be placed. If the salome_adm files are not sufficient, +additional configuration files can be put to the adm_local directory. + +\ref tree_structure "<< Previous"
\ref idl_dir ">> Next" + +\page idl_dir The idl directory + +The idl directory requires a Makefile.am that must make the +compilation of the idl PYHELLO_Gen.idl file and install all the +generated files into the correct module installation directories. The +BASEIDL_FILES target has to be modified to reach this goal. + +The idl file itself must define a CORBA module for which the name must +be different from the module name to avoid name conflicts and define a +CORBA interface that is derived at least from the EngineComponent interface +of the Engines module. The name of the CORBA module will be +\b PYHELLO_ORB and the name of the interface will be \b PYHELLO_Gen. + +\ref build_proc_files "<< Previous"
\ref src_dir ">> Next" + +\page src_dir The src directory + +The src contains all source files required to build and install CORBA +engine and (optionally) GUI of the module. Each of these entities usually +has (but this is not actually obligatory) its own directory. + +The Makefile.am simply triggers the path of sub-directories described +by the SUBDIRS target. + +- The src/PYHELLO directory + +This directory contains the Python files that implement the engine +of the module. The Makefile.am defines the rules used to install these +files to the destination folder. The name of the module +engine Python file is predefined and should be set as .py +where is a name of the module. In the case of the PYHELLO +module, the name of the engine Python script should be PYHELLO.so. + +The PYHELLO.py Python script implements PYHELLO class that is derived +from the PYHELLO_Gen interface of the PYHELLO_ORB__POA CORBA module, +the SALOME_ComponentPy_i class (base implementation of SALOME +Python module engine exported by the KERNEL module) and +SALOME_DriverPy_i class that provides base implementation of +persistence mechanism. + +In particular, PYHELLO class implements makeBanner() function that is +defined in the IDL interface PYHELLO_ORB::PYHELLO_Gen. + +\code +def makeBanner( self, name ): + banner = "Hello %s!" % name + return banner +\endcode + +Other services +defined in PYHELLO_Gen CORBA interface also should be implemented by +this class. + +- The src/PYHELLOGUI directory + +This directory contains the Python files that implement the GUI +of PYHELLO module. The name of the module GUI Python script is +predefined and should be set as GUI.py where is a +name of the module. In the case of the PYHELLO module, the name of the +GUI Python script should be PYHELLOGUI.py. + +The implementation of GUI of the PYHELLO module should be done +according to the architecture and rules specified by the SALOME GUI +module. The PYHELLO.py script should implement a set of the functions +which define the module behavior in GUI, for example, create menus, +toolbars, define context popup menus, objects selection behavior, +implement dialog boxes etc. + +Here below is a short description of these methods. For more details +please refer to the SALOME GUI module documentation. + +- initialize() - module first initialization; usually used to create + GUI actions, menus, toolbars and so on; +- activate() - module activation; perform actions which should + be done when the module is activated by the user; +- deactivate() - module deactivation; perform actions which should + be done when the module is deactivated by the user; +- windows() - get a list and a position of the windows to be + associated with the module; these windows will be automatically + opened and positioned according to the setting defined by the value + returned by this function; +- views() - get a list of the compatible viewers; these viewers + will be automatically opened/raised on the module activation; +- createPopupMenu() - create and return context popup menu according + to the current selection; +- createPreferences() - initialize module's preferences; +- preferenceChanged() - callback function that is called when some + module's preference is changed by the user; allows to perform the + corresponding actions; +- engineIOR() - to get the reference to the module CORBA engine + +Note, that some of these methods are optional and need not be +obligatory implemented because SalomePyQtGUI_Module class provides a +base implementation of these functions. It's sometimes enough to +implement only some of them, depending on the module needs. + +In the case of PYHELLO module, some of these functions are +implemented to provide a sample for the development: + +- engineIOR() that initializes PYHELLO module's eggine: + +\code +def engineIOR(): + IOR = "" + if getORB() and getEngine(): + IOR = getORB().object_to_string( getEngine() ) + pass + return IOR +\endcode + +- initialize() that sets default module preferences + +\code +def initialize(): + if not sgPyQt.hasSetting( "PYHELLO", "def_obj_name"): + sgPyQt.addSetting( "PYHELLO", "def_obj_name", GUIcontext.DEFAULT_NAME ) + if not sgPyQt.hasSetting( "PYHELLO", "creation_mode"): + sgPyQt.addSetting( "PYHELLO", "creation_mode", 0 ) +\endcode + +- createPreferences() that initializes module preferences for the + application's Preferences dialog box + +\code +def createPreferences(): + if verbose() : print "PYHELLOGUI.createPreferences() : study : %d" % _getStudyId() + gid = sgPyQt.addPreference( "General" ) + gid = sgPyQt.addPreference( "Object creation", gid ) + pid = sgPyQt.addPreference( "Default name", gid, SalomePyQt.PT_String, "PYHELLO", "def_obj_name" ) + pid = sgPyQt.addPreference( "Default creation mode", gid, SalomePyQt.PT_Selector, "PYHELLO", "creation_mode" ) + strings = QStringList() + strings.append( "Default name" ) + strings.append( "Generate name" ) + strings.append( "Ask name" ) + indexes = [] + indexes.append( QVariant(0) ) + indexes.append( QVariant(1) ) + indexes.append( QVariant(2) ) + sgPyQt.setPreferenceProperty( pid, "strings", QVariant( strings ) ) + sgPyQt.setPreferenceProperty( pid, "indexes", QVariant( indexes ) ) + pass +\endcode + +- windows() that defines dockable windows layout + +\code +def windows(): + if verbose() : print "PYHELLOGUI.windows() : study : %d" % _getStudyId() + wm = {} + wm[SalomePyQt.WT_ObjectBrowser] = Qt.LeftDockWidgetArea + wm[SalomePyQt.WT_PyConsole] = Qt.BottomDockWidgetArea + return wm +\endcode + +Please refer to PYHELLOGUI.py script for more details about +implementation of other callback functions. + +An implemention of the ShowHello() function is quite simple. It shows +the small dialog box allowing user to enter the name, and then uses +reference to the module CORBA engine to invoke its makeBanner() +service. + +Note, that GUI elements of the Python module are implemented with help +of PyQt toolkit which provides a Python wrappings of the Qt library. + +\ref idl_dir "<< Previous"
\ref bin_dir ">> Next" + +\page bin_dir The bin directory + +The file VERSION.in is used to document the module, it must define its +version and (optionally) its compatibilities or incompatibilities with +other modules. Therefore, it is strongly recommended but is not +essential for correct operation of the module. + +The runAppli.in file is the equivalent of the runSalome script +distributed by the KERNEL module but configured to start SALOME +session with PYHELLO module only. + +The myrunSalome.py file reuses part of functionality provided by the +KERNEL's runSalome.py script. It is used to run SALOME session and +start PYHELLO module in this session. + +\ref src_dir "<< Previous"
\ref doc_dir ">> Next" + +\page doc_dir The doc directory + +This directory provides documentation files of the module. The +documentation of the module can be implemented in the arbitrary +way. But if you want your documentation to appear in the SALOME GUI +desktop's Help menu, some specific actions should be done as follows. + +The documentation should be generated in the HTML format. For example, +the documentation of the PYHELLO module is generated using Doxygen +tool. It allows to generate structured set of HTML pages from the set +of input plain text files. Input source files should include Doxygen +tags and optionally direct HTML tags. For more details please refer to +the Doxygen documentation. + +The resulting documentation of a module should include at least one +file index.html. All the HTML and image files should be exported by +the build procedure to the following directory: +/share/doc/salome/gui/ +where is a module installation folder and +MODULE is its name. For example, for PYHELLO module, at least one file +should exist: +/share/doc/salome/gui/PYHELLO/index.html. + +The SALOME GUI automatically searches for the index.html file in the +mentioned module directory. If the file is found, the corresponding +menu command is automatically added to the Help menu of the SALOME GUI +desktop. + +\ref bin_dir "<< Previous"
\ref build_procedure ">> Next" + +\page build_procedure Construction, installation + +Before building PYHELLO module, please ensure that SALOME environment is +set properly. Assume that SALOME environment is set in env_products.sh +script. In order to build and install PYHELLO module, you have to +perform several steps: + +
+[bash% ] source env_products.sh
+[bash% ] mkdir PYHELLO_BUILD
+[bash% ] cd PYHELLO_BUILD
+[bash% ] ../PYHELLO1_SRC/build_configure
+[bash% ] ../PYHELLO1_SRC/configure --prefix=
+[bash% ] make
+[bash% ] make install
+
+ +The first command creates a build directory for the PYHELLO module. Then +next step is to cd to this build directory. From this directory you +sequentially invoke build_configure, configure, make and make install +commands. On each step, you have to ensure that the operation is +finished correctly (no errors raised). + +The variable above defines the +destination directory to which the PYHELLO module should be +installed. After the last step is finished, the PYHELLO module is built +and installed to the directory. + +\ref doc_dir "<< Previous"
\ref run_procedure ">> Next" + +\page run_procedure Running SALOME + +Go to the the directory and type: + +
+[bash% ] ./bin/salome/runAppli
+
+ +This command runs SALOME session configured for KERNEL and the PYHELLO +module. At the end of running, the user will be prompted by the +Python interpreter command line configured for SALOME that provides +access to SALOME Python API (including CORBA interfaces). + +The runAppli file is a shell script that executes a Python commands +running SALOME session by passing arguments to it in a command line: + +
+${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python -i $PYHELLO_ROOT_DIR/bin/salome/myrunSalome.py --modules=PYHELLO --killall
+
+ +These arguments state that the myrunSalome.py script located in the +PYHELLO module will be used, that the PYHELLO component will be +activated and all previously running SALOME sessions should be +shutdowned. + +This command will not function unless the following environment +variables have previously been set: + +
+export KERNEL_ROOT_DIR=
+export PYHELLO_ROOT_DIR=
+
+ +\warning It is possible that the SALOME run will not reach the end. +In some circumstances, the time to start CORBA servers may be long and +could exceed the timeout. If the reasons is that the time to +load dynamic libraries is long, it is possible that a second run +immediately afterwards will be successful. + +\ref build_procedure "<< Previous"
\ref load_module ">> Next" + +\page load_module Loading PYHELLO component + +The PYHELLO_ORB module has to be imported before making a request to +load the component into the container, to obtain access to methods of +the component. This container is made accessible in the myrunSalome.py +by means of the \b container variable: + +
+>> import PYHELLO_ORB
+>> c=container.load_impl("PYHELLO","PYHELLO")
+>> c.makeBanner("Christian")
+
+ +The last instruction returns a string "Hello Christian". Proceed as +follows to see the CORBA objects created by these actions: + +
+>> clt.showNS()
+
+ +\ref run_procedure "<< Previous"
\ref catalog_def ">> Next" + +\page catalog_def PYHELLO module catalog definition + +In the example from the previous chapter, the PYHELLO component was +loaded by making a direct request to the SALOME container. This is not +the standard method for loading of a component. The normal way uses +the SALOME LifeCycle service that invokes SALOME Module Catalog +services to identify the component and its properties and then calls +the requested container to load the component. + +Before this method can be used, the component must be declared in a +catalog in the XML format, for which the name must be +Catalog.xml. In our case, it will be PYHELLOCatalog.xml. +Usually this catalog is put to the resources sub-directory of the +directory tree. The simplest way to create this file is to use Catalog +Generator utility provided by the SALOME KERNEL module, that can +automatically generate XML description file from the IDL file. + +\ref load_module "<< Previous"
\ref load_lcc ">> Next" + +\page load_lcc Loading PYHELLO component via LifeCycle service + +The method of loading the component is not very different from that +is described above. The services of the LifeCycle module are used in +this case instead of calling the container directly. The call sequence +is contained in the myrunSalome.py \b test() function. + +
+    c=test(clt)
+    c.makeBanner("Christian")
+
+ +The test function creates the LifeCycle object. It then asks for the +PYHELLO component to be loaded in the FactoryServer container: + +\code +def test(clt): + """ + Test function that creates an instance of PYHELLO component + usage : hello=test(clt) + """ + import LifeCycleCORBA + lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb) + import PYHELLO_ORB + pyhello = lcc.FindOrLoadComponent("FactoryServePy", "PYHELLO") + return pyhello +\endcode + +\ref catalog_def "<< Previous"
\ref load_iapp ">> Next" + +\page load_iapp Loading from the GUI (IAPP) + +In order to activate PYHELLO module in the SALOME GUI desktop, the user +should press the PYHELLO module's button on the "Modules" toolbar or +select the name of the module in the combo box on this toolbar. + +The image file to be used as an icon of a module should be exported by +the module build procedure. The icon file name is defined in the +corresponding SalomeApp.xml configuration file: +\code +
+ + + +
+\endcode + +\ref load_lcc "<< Previous" + +*/ diff --git a/doc/static/doxygen.css b/doc/static/doxygen.css new file mode 100755 index 0000000..7a2dcbd --- /dev/null +++ b/doc/static/doxygen.css @@ -0,0 +1,836 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 12px; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.version { + border:1px solid #0000FF; + color: #CCCCCC; + font-family: Arial, Helvetica, sans-serif; + font-size: 9pt; + text-align: center; + width:100px; + -moz-border-radius: 8px; + margin: 5px; +} + +div.footer1 { + background-color: #DFE5F1; + border: 1px solid #AAAAAA; + font-family: Arial, Helvetica, sans-serif; + font-size: 11px; + padding: 10px; + margin-top: 15px; +} + + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; + margin-bottom: 10px; +} + +.memname { + white-space: nowrap; + font-weight: bold; + margin-left: 6px; +} + +.memproto { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 8px; + border-top-left-radius: 8px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + +} + +.memdoc { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 2px 5px; + background-color: #FBFCFD; + border-top-width: 0; + /* opera specific markup */ + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + border-spacing: 6px 2px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + + + + +/* @end */ + +/* @group Directory (tree) */ + +/* for the tree view */ + +.ftvtree { + font-family: sans-serif; + margin: 0px; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0px; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0px; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +dl +{ + padding: 0 0 0 10px; +} + +dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug +{ + border-left:4px solid; + padding: 0 0 0 6px; +} + +dl.note +{ + border-color: #D0D000; +} + +dl.warning, dl.attention +{ + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + border-color: #00D000; +} + +dl.deprecated +{ + border-color: #505050; +} + +dl.todo +{ + border-color: #00C0E0; +} + +dl.test +{ + border-color: #3030E0; +} + +dl.bug +{ + border-color: #C08050; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + background-color: #175783; + border: 1px solid; + height: 80px; + background-repeat: no-repeat; +/* font: 300% arial,sans-serif;*/ + margin: 0px; + padding: 0px; +} + +#projectbrief +{ + font: 120% arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + background: url("head.png"); + background-color: #175783; + border: 1px solid; + height: 80px; + background-repeat: no-repeat; + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + diff --git a/doc/static/footer.html b/doc/static/footer.html new file mode 100755 index 0000000..4c89a2b --- /dev/null +++ b/doc/static/footer.html @@ -0,0 +1,12 @@ + + + +
+
+ Copyright © 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+ Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+
+
+ + + \ No newline at end of file diff --git a/doc/static/header.html.in b/doc/static/header.html.in new file mode 100755 index 0000000..4571b43 --- /dev/null +++ b/doc/static/header.html.in @@ -0,0 +1,20 @@ + + + + + +$title + +$treeview +$search +$mathjax + + + + +
+
Version: @VERSION@
+ +
diff --git a/idl/Makefile.am b/idl/Makefile.am index 7035f61..62f3146 100644 --- a/idl/Makefile.am +++ b/idl/Makefile.am @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# 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 @@ -28,6 +26,8 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am BASEIDL_FILES = PYHELLO_Gen.idl +BASEIDL_FILES_PY=$(BASEIDL_FILES:%.idl=%_idl.py) + # This variable defines the files to be installed dist_salomeidl_DATA = $(BASEIDL_FILES) @@ -43,8 +43,7 @@ IDLCXXFLAGS = \ -bcxx \ @IDLCXXFLAGS@ \ -I$(top_builddir)/idl/salome \ - -I$(KERNEL_ROOT_DIR)/idl/salome \ - -I$(top_builddir)/salome_adm/unix + -I$(KERNEL_ROOT_DIR)/idl/salome IDLPYFLAGS = \ @IDLPYFLAGS@ \ -I$(KERNEL_ROOT_DIR)/idl/salome @@ -57,9 +56,15 @@ install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%) fi ; \ done ; -# uninstall-local removes too much, but it works in distcheck +# we want to remove only staff generated for IDL files and nothing more uninstall-local: - rm -rf $(DESTDIR)$(salomepythondir)/* + @for modulen in PYHELLO_ORB ; do \ + test -d $(DESTDIR)$(salomepythondir)/$${modulen} && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen} ; \ + test -d $(DESTDIR)$(salomepythondir)/$${modulen}__POA && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}__POA" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen}__POA ; \ + done ; \ + for filen in $(BASEIDL_FILES_PY) ; do \ + echo "Removing $(DESTDIR)$(salomepythondir)/$${filen}" && rm -f $(DESTDIR)$(salomepythondir)/$${filen}* ; \ + done mostlyclean-local: -rm -f *.py diff --git a/idl/PYHELLO_Gen.idl b/idl/PYHELLO_Gen.idl index 87cbfcc..8e852d3 100644 --- a/idl/PYHELLO_Gen.idl +++ b/idl/PYHELLO_Gen.idl @@ -1,23 +1,29 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 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 +// 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 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. +// 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 +// 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 +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// --- +// File : PYHELLOGUI.py +// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) +// --- // #ifndef __PYHELLO_GEN__ #define __PYHELLO_GEN__ @@ -28,10 +34,14 @@ module PYHELLO_ORB { - interface PYHELLO_Gen : Engines::Component, SALOMEDS::Driver + interface PYHELLO_Gen : Engines::EngineComponent, SALOMEDS::Driver { - string makeBanner(in string name) - raises (SALOME::SALOME_Exception); + string makeBanner(in string name) + raises (SALOME::SALOME_Exception); + + void createObject(in SALOMEDS::Study theStudy, + in string name) + raises (SALOME::SALOME_Exception); }; }; diff --git a/resources/Makefile.am b/resources/Makefile.am index 45755dc..f420c40 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -1,24 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2012 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 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. # -# 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 # -# 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 +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # -* Makefile *- # Author : Patrick GOLDBRONN (CEA) # Date : 28/06/2001 @@ -30,7 +28,8 @@ dist_salomeres_DATA = \ PYHELLO.png \ PYHELLO_small.png \ ExecPYHELLO.png \ - SalomeApp.xml + handshake.png \ + stop.png # VSR: little trick to avoid putting if PYHELLOCatalog.xml to the distribution archive -nodist_salomeres_SCRIPTS = PYHELLOCatalog.xml +nodist_salomeres_SCRIPTS = PYHELLOCatalog.xml SalomeApp.xml diff --git a/resources/PYHELLOCatalog.xml.in b/resources/PYHELLOCatalog.xml.in index f99af06..7f81d2a 100644 --- a/resources/PYHELLOCatalog.xml.in +++ b/resources/PYHELLOCatalog.xml.in @@ -1,6 +1,6 @@ - - - + + + + +
- + +
+
+ +
diff --git a/resources/handshake.png b/resources/handshake.png new file mode 100644 index 0000000000000000000000000000000000000000..e840a02ee3040810206b82c1eb6fb90dcaee7cf5 GIT binary patch literal 1835 zcmV+`2h{k9P)7Xv^B`^W$Q2DnK? zK~z}7otIl|ROb=LfAgKQS6{G=!FEgpaVQD*-l9+*+9aw<6qL855~3|q+7hHbwok2~ zeyEzJQQD`rQ6(fKqAF@D1&LH`l_(NO1vg4cNVrtCOF*z--1TL>7w_&l-#2|YXO}hj z0v*X~>Fl1F|J?pFBft7+e@0#Mce(k}fvNfoU{DmN4ub(e0f&GJ4H3WrR-^AhuqfL2 zef&H`P!x&(BSKX=t`@cJ$cKB59ruI4{rTO(?dJv(O4dNlDT3mOAVBn~F%So$hzb@# zfwVxvC?1MI@dOg07{C`WM)5^S3M9pm^b|v7!>Mxm81H^hS`oLnwpYE5i09_6%b)rQJ^i+$rt;d zr7yc4!9xX{M%guun$Upp+4Ee=pF%ZQQKtaDXfwr2N^fR>?`-`!YqNtTcQB{id0;;a%6+y%x0-IOwV&9hG2!zUm0uXvL4|8DaEA*rv zS~NP-)k%i``F-B`>@8}xx~Ps#-CyRLj~yoIWgY;48hSH>9N6|MJ?VkSbCH$`j+Cdo z4AzCb{n;^o_Q4@On0SxS1t^Lt@q30%tDoe>$B&ROnFbXt5O4jrHV%KOqaSs*nYRJP zU&VoKuhW(8j|+~wj7O66lBB#87pDG2H7M{&{tTC=M(9fQ(3>5=h!_9T(UTcuO?CsL zGpF!lvhoa^pU>PIfo-dwrYkepG^%JzZ!4&aYEcYd8+@MUH|$3wqVMa)F^*ms=IAFs zAwQo()gj^`V%XTTo3-hodmQoae$bWfi@c6wRjf~Qb8ei9ou}?<)Wa%)1_Z87U_`E=b$T;{%>wO6_cK!)TOI%+O_ornyfgM&&gW0#Pyz+( zAR=Bvh@&&PmLRN<@jIy6xtKYXLM_jU(O>h@j$cGkz{GQ8VMhH$x-SNygs#etHBZr< z9-yuPbr%r0fWU=>&SFf0nd&s7vmdjwcNbR*=P1>uo3roA+{a9ouhQ2xv?Sg7OVf~Y z^2%@c@Ydg=VT2H%gbJ!r={(l+1i8v}P|Laho@Q77GguceHa$XM=RqC0(tqe{e{{(< z^q1x#VO_`LSk-tMD(l*Z7@r%B#*|t{CjL%Gauu7pzd$7@aHDiF9$V24u zXxOP`J}mNw%fsB5y9DAMgoq-tj^?^>Hg^J0o*O!ZFNx*N$E$QXC~*A3Pq|*cNMePJ z*I!y&R7@gpCU=5Ty~s1`_tTYH6E{a=y^!Xr=+u%cj&pMS4JImMcp}SfV=Dk?VGTt% zH~BsvLVajdRftbu~nwrl>D zbn5uo*&E-!nO4&3Q*+VkP29(=+}?U%31C@xx;22xQg=hFAymWZxs)rBIpX)3?9015 zO1XSJ@q=<`I{=)-6SPr`BJp{?aF#g0I;9-ng&IFYp}`*ZE(lhHdC6X#bL~gYKYR4} Z{{S8^I{Kd)FF61J002ovPDHLkV1iQJY{viq literal 0 HcmV?d00001 diff --git a/resources/stop.png b/resources/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..e8968555bc7f7a17ab1f6d7792e09b79c8a4bdfa GIT binary patch literal 1816 zcmV+z2j}>SP)7ze=fBOU+%2Bk?v zK~z}7wU=v*T~!swe`}v}Uo+F0xifu?5>i1aX{Rlwn(#>qp+Kssq)kLgNc>@~AJjxJ1~n#5{2-A~LL=yeTA5*_U@Z}FXgiPFdE7bY?7f#C_PKZN zZSORGX!p&|Irn7k^q zwLAChub+JHDYJE}DQ>t9OvII5_M?xm$BxncxovOC)V3Q>`=K@KE4SQ;Bq_?3Um`*> z@gDYXZxQR<+}-+dQ#4q3*#Skx(^N-QWikW|sLQ<(li{LB<+16V*Dh3&Uee)th& za1F++pj1JSmF5f7q*s8ZOmlddP9Bwn+I z$Sh~G0;(E-8(xYc3O8-1`{|zqJ=)L{Fj}{u7*!7*a6arLL+2Nuy9b;j-hK;}#}7fV zoI6v{95MUrDCvv80dHx%hvdI#^A@^}96@^f!8vdqY1ufB0PC8^>I84esy%p!C(RKyPm&a73H8(slSS3lHu?YqRb7 zpyA#qIl5ECDaM8W(am3=`_MtCR1gtF45;E%Nq+uIvfuq4$t=cu?8~oEKl~%I_f+eY_u&mjF(#3|xHoPt+CF{tKoRJW!_uh}2I7#8An_+OU zg^U9OsyAV)5QDND32nxwV;jZbPo2WQF$x3y=+rc-9{1K5631jmU&a0E*Wf{_15_T` zM--X1#wIOy3K)-|Mo=-RM7eJ|p&KX_@n@$3U!0#us{LqGpm_Uj$iM*Z-|r(y3SubV z_YKVI)$O1ns6_cTsDSYzgh)sb(B%wn!;fR=>ko#AAl9OZrMP<+cKmJp*>kxLgIT|x z;yrh_HDXmz=bJde7{PeSOQrE}dK&ki50;xlV-@1S528qZSh_1np@^TE33P1?YM}h! z1DNifHWE`5H#XkE077@n8y%WvEIsvOu=b*|FrVLsB2D>d46GL?W?59N6Z)lr=+}Jqt_wU6|Plu<{zyU8Hr>@wM4LAfZyttXDKH!0)#JwAW?}EQLb=KX zC9be&Gvr^_Zqk8Dp>ySFV1~lZJE;8NAf{AqCRB3-YCZ|-8;NJf#+ZNLn=oAqiQ8c| zoX;$=GYW=_n@>v$rZ4>o)KhuvVd(3_2p8~$G$&y1J@(Dx)W7!#)aKAgIu51+cnmUe z-LS6ft-wm-bM6TcWUxwf!&anJT9GaN5hMAVUWQMv2Ao|&u38JV zSyV5086c^r#PkpBKQnpy$huDsl!>^kMuZy+>(;_TttGMH{Pa9agX{h%s=8|Y>-XN3 zOn!LS%+0JK9~Lj$hbSPGF2pEqv5qMCLTN6w@=T#Jc<6up24oiRRFy3N0000= 0: - _incObjToMap( seltypes, ID ) - continue - pass - pass - pass - _incObjToMap( seltypes, GUIcontext.FOREIGN_ID ) + _incObjToMap( seltypes, getObjectID( _getStudy(), sg.getSelected( i ) ) ) pass return selcount, seltypes @@ -290,6 +212,8 @@ def initialize(): sgPyQt.addSetting( "PYHELLO", "def_obj_name", GUIcontext.DEFAULT_NAME ) if not sgPyQt.hasSetting( "PYHELLO", "creation_mode"): sgPyQt.addSetting( "PYHELLO", "creation_mode", 0 ) + if not sgPyQt.hasSetting( "PYHELLO", "Password"): + sgPyQt.addSetting( "PYHELLO", "Password", GUIcontext.DEFAULT_PASSWD ) pass # called when module is initialized @@ -325,6 +249,8 @@ def createPreferences(): indexes.append( QVariant(2) ) sgPyQt.setPreferenceProperty( pid, "strings", QVariant( strings ) ) sgPyQt.setPreferenceProperty( pid, "indexes", QVariant( indexes ) ) + pid = sgPyQt.addPreference( "Password", gid, SalomePyQt.PT_String, "PYHELLO", "Password" ) + sgPyQt.setPreferenceProperty( pid, "echo", QVariant( 2 ) ) pass # called when module is activated @@ -353,13 +279,13 @@ def createPopupMenu( popup, context ): ctx = _setContext( _getStudyId() ) study = _getStudy() selcount, selected = _getSelection() - print selcount, selected + if verbose() : print selcount, selected if selcount == 1: # one object is selected - if GUIcontext.MODULE_ID in selected: + if moduleID() in selected: # menu for component popup.addAction( sgPyQt.action( GUIcontext.DELETE_ALL_ID ) ) - elif GUIcontext.OBJECT_ID in selected: + elif objectID() in selected: # menu for object popup.addAction( sgPyQt.action( GUIcontext.SHOW_ME_ID ) ) popup.addAction( sgPyQt.action( GUIcontext.RENAME_ME_ID ) ) @@ -370,10 +296,10 @@ def createPopupMenu( popup, context ): elif selcount > 1: # several objects are selected if len( selected ) == 1: - if GUIcontext.MODULE_ID in selected: + if moduleID() in selected: # menu for component popup.addAction( sgPyQt.action( GUIcontext.DELETE_ALL_ID ) ) - elif GUIcontext.OBJECT_ID in selected: + elif objectID() in selected: # menu for list of objects popup.addAction( sgPyQt.action( GUIcontext.DELETE_ME_ID ) ) pass @@ -418,6 +344,45 @@ def viewClosed( viewID ): if verbose() : print "PYHELLOGUI.viewClosed(): %d" % viewID pass +# called when study is opened +# returns engine IOR +def engineIOR(): + if verbose() : print "PYHELLOGUI.engineIOR()" + return getEngineIOR() + +# called to check if object can be dragged +# returns True if drag operation is allowed for this object +def isDraggable(what): + if verbose() : print "PYHELLOGUI.isDraggable()" + # return True if object is draggable + return False + +# called to check if object allows dropping on it +# returns True if drop operation is allowed for this object +def isDropAccepted(where): + if verbose() : print "PYHELLOGUI.isDropAccepted()" + # return True if object accept drops + return False + +# called when drag and drop operation is finished +# performs corresponding data re-arrangement if allowed +def dropObjects(what, where, row, action): + if verbose() : + print "PYHELLOGUI.dropObjects()" + # 'what' is a list of entries of objects being dropped + for i in what: print "- dropped:", i + # 'where' is a parent object's entry + print "- dropping on:", where + # 'row' is an position in the parent's children list; + # -1 if appending to the end of children list is performed + print "- dropping position:", row + # 'action' is a dropping action being performed: + # - 0x01 (Qt::CopyAction) for copy + # - 0x02 (Qt::MoveAction) for move + print "- drop action:", action + pass + pass + ################################################ # GUI actions implementation ################################################ @@ -445,12 +410,14 @@ class MyDialog( QDialog ): hb1 = QHBoxLayout( self ) bOk = QPushButton( "&OK", self ) + bOk.setIcon( sgPyQt.loadIcon( 'PYHELLO', 'ICO_HANDSHAKE' ) ) self.connect( bOk, SIGNAL( 'clicked()' ), self, SLOT( 'accept()' ) ) hb1.addWidget( bOk ) hb1.addStretch( 10 ) bCancel = QPushButton( "&Cancel", self ) + bCancel.setIcon( sgPyQt.loadIcon( 'PYHELLO', 'ICO_STOP' ) ) self.connect( bCancel, SIGNAL( 'clicked()' ), self, SLOT( 'close()' ) ) hb1.addWidget( bCancel ) @@ -461,7 +428,7 @@ class MyDialog( QDialog ): def accept( self ): name = str( self.entry.text() ) if name != "": - banner = _getEngine().makeBanner( name ) + banner = getEngine().makeBanner( name ) QMessageBox.information( self, 'Info', banner ) self.close() else: @@ -482,6 +449,7 @@ def ShowHELLO(): # Create new object ### def CreateObject(): + global __objectid__ default_name = str( sgPyQt.stringSetting( "PYHELLO", "def_obj_name", GUIcontext.DEFAULT_NAME ).trimmed() ) try: if sgPyQt.action( GUIcontext.OPTION_3_ID ).isChecked(): @@ -495,28 +463,19 @@ def CreateObject(): name = str( name.trimmed() ) elif sgPyQt.action( GUIcontext.OPTION_2_ID ).isChecked(): # generate object name - global __id__ - __id__ = __id__ + 1 - name = "%s %d" % ( default_name, __id__ ) + __objectid__ = __objectid__ + 1 + name = "%s %d" % ( default_name, __objectid__ ) else: name = default_name pass pass except: # generate object name - global __id__ - __id__ = __id__ + 1 - name = "%s %d" % ( default_name, __id__ ) + __objectid__ = __objectid__ + 1 + name = "%s %d" % ( default_name, __objectid__ ) pass if not name: return - study = _getStudy() - builder = study.NewBuilder() - father = _findOrCreateComponent() - object = builder.NewObject( father ) - attr = builder.FindOrCreateAttribute( object, "AttributeName" ) - attr.SetValue( name ) - attr = builder.FindOrCreateAttribute( object, "AttributeLocalID" ) - attr.SetValue( GUIcontext.OBJECT_ID ) + getEngine().createObject( _getStudy(), name ) sg.updateObjBrowser( True ) pass @@ -525,7 +484,7 @@ def CreateObject(): ### def DeleteAll(): study = _getStudy() - father = study.FindComponent( GUIcontext.MODULE_NAME ) + father = study.FindComponent( moduleName() ) if father: iter = study.NewChildIterator( father ) builder = study.NewBuilder() @@ -598,6 +557,15 @@ def Rename(): pass pass +### +# Display password stored in the preferences +### +def Password(): + passwd = str( sgPyQt.stringSetting( "PYHELLO", "Password", GUIcontext.DEFAULT_PASSWD ).trimmed() ) + QMessageBox.information(sgPyQt.getDesktop(), + "Password", + passwd) + ### # Commands dictionary ### @@ -608,4 +576,5 @@ dict_command = { GUIcontext.SHOW_ME_ID : ShowMe, GUIcontext.DELETE_ME_ID : Delete, GUIcontext.RENAME_ME_ID : Rename, + GUIcontext.PASSWORD_ID : Password, } diff --git a/src/PYHELLOGUI/PYHELLO_icons.ts b/src/PYHELLOGUI/PYHELLO_icons.ts index 8025ecd..f3f20a1 100644 --- a/src/PYHELLOGUI/PYHELLO_icons.ts +++ b/src/PYHELLOGUI/PYHELLO_icons.ts @@ -1,25 +1,15 @@ + - - + + + @default + + ICO_HANDSHAKE + handshake.png + + + ICO_STOP + stop.png + + + diff --git a/src/PYHELLOGUI/PYHELLO_msg_en.ts b/src/PYHELLOGUI/PYHELLO_msg_en.ts index 8025ecd..2ee4f7f 100644 --- a/src/PYHELLOGUI/PYHELLO_msg_en.ts +++ b/src/PYHELLOGUI/PYHELLO_msg_en.ts @@ -1,25 +1,11 @@ + - - + + + @default + + + + + + diff --git a/src/PYHELLOGUI/PYHELLO_msg_fr.ts b/src/PYHELLOGUI/PYHELLO_msg_fr.ts new file mode 100755 index 0000000..1e4dea3 --- /dev/null +++ b/src/PYHELLOGUI/PYHELLO_msg_fr.ts @@ -0,0 +1,11 @@ + + + + + @default + + + + + + -- 2.39.2