From 202e9749e0a4f42f18f561be5ed7f4f14d52ddf9 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 17 Feb 2009 09:50:05 +0000 Subject: [PATCH] Merge from BR_QT4 17Feb09 --- config_files/check_qt.m4 | 364 ++++++++++++--- scripts/Makefile.am | 5 +- scripts/SA_build | 4 + scripts/SA_new_cpp_component | 4 + scripts/cpp_compo_template.tgz | Bin 4569 -> 4375 bytes scripts/hxx2salome | 4 + scripts/parse0.awk | 4 + scripts/parse01.awk | 4 + scripts/parse1.awk | 4 + scripts/parse2.awk | 4 + scripts/parse3.awk | 6 +- scripts/renameSalomeModule | 4 + scripts/template_src.tgz | Bin 42473 -> 38806 bytes src/Makefile.am | 15 +- src/hxx2salome.cpp | 249 +++++++++++ src/hxx2salome.h | 29 ++ src/hxx2salome.ui | 786 ++++++++++++--------------------- src/hxx2salome.ui.h | 318 ------------- src/main.cpp | 19 +- 19 files changed, 906 insertions(+), 917 deletions(-) create mode 100644 src/hxx2salome.cpp create mode 100644 src/hxx2salome.h delete mode 100644 src/hxx2salome.ui.h diff --git a/config_files/check_qt.m4 b/config_files/check_qt.m4 index ab53483..5859b6a 100644 --- a/config_files/check_qt.m4 +++ b/config_files/check_qt.m4 @@ -1,24 +1,37 @@ -dnl Copyright (C) 2003 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 -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 -dnl See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +dnl Copyright (C) 2007-2008 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 +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 +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 +dnl OPTIONS_QT +dnl ------------------------------------------------------------------------ +dnl Adds the --with-qt=path +dnl +AC_DEFUN([OPTIONS_QT], [ + AC_ARG_WITH([qt], + [AC_HELP_STRING([--with-qt], [Possible usage: + "Qt_Install_Path" - prefix to path where Qt was installd; + "" or "yes" or "auto" - means seaching installed Qt product in the system (checking $QTDIR and then - standard system paths ); + "no" - not use Qt product (is not supported) + By default "" option is used)])], + [with_qt=$withval], [with_qt=""]) +]) AC_DEFUN([CHECK_QT],[ AC_REQUIRE([AC_PROG_CC])dnl @@ -28,6 +41,8 @@ AC_REQUIRE([AC_PROG_CXXCPP])dnl AC_REQUIRE([CHECK_OPENGL])dnl AC_REQUIRE([AC_LINKER_OPTIONS])dnl +AC_REQUIRE([OPTIONS_QT])dnl + AC_CHECKING(for Qt) if test "x$OpenGL_ok" != "xyes" ; then @@ -39,20 +54,94 @@ qt_ok=yes AC_LANG_SAVE AC_LANG_CPLUSPLUS +dnl QT install dir +if test -z $with_qt ; then + with_qt="" +fi +if test "x$with_qt" = "xyes" ; then + dnl in case user wrote --with-qt=yes + with_qt="" +fi +if test "x$with_qt" = "xauto" ; then + dnl in case user wrote --with-qt=auto + with_qt="" +fi +if test "x$with_qt" = "xno" ; then + dnl in case user wrote --with-qt=no + with_qt="" + AC_MSG_WARN(Value no, specified for option --with-qt, is not supported) +fi + +if test "x$with_qt" != "x" ; then + dnl Using "--with-qt" prefix path + QTDIR="$with_qt" +else + if test -z $QTDIR ; then + AC_MSG_WARN(undefined QTDIR variable which specify where Qt product was installed) + for d in /usr/local/lib/qt4 /usr/lib/qt4 ; do + if test -f ${d}/include/Qt/qconfig.h ; then + AC_MSG_RESULT(trying ${d}) + QTDIR="${d}" + break + else + if test -f ${d}/include/qconfig.h ; then + AC_MSG_RESULT(trying ${d}) + QTDIR="${d}" + break + fi + fi + done + else + dnl Using QTDIR environment variable + AC_MSG_RESULT(QTDIR is $QTDIR) + fi +fi + +# +# check QTDIR environment variable +# if test "x$QTDIR" = "x" then - AC_MSG_RESULT(please define QTDIR variable) + AC_MSG_RESULT(Please define correct path in "--with-qt" option or use correct $QTDIR variable) qt_ok=no -else - AC_MSG_RESULT(QTDIR is $QTDIR) +fi + +# +# check Qt version +# +if test "x$qt_ok" = "xyes" +then qt_inc_ok=no QTINC="" - AC_CHECK_FILE(${QTDIR}/include/qt3/qglobal.h,QTINC="/qt3",QTINC="") - QT_VERS=`grep "QT_VERSION_STR" ${QTDIR}/include${QTINC}/qglobal.h | sed -e 's%^#define QT_VERSION_STR\([[:space:]]*\)%%g' -e 's%\"%%g'` - AC_MSG_RESULT(Qt version is $QT_VERS) - QT_VERS="Qt_"`echo $QT_VERS | sed -e 's%\"%%g' -e 's%\.%_%g'` + AC_CHECK_FILE(${QTDIR}/include/qt4/QtCore/qglobal.h,QTINC="/qt4",QTINC="") + if test "x$QTINC" = "x" + then + AC_CHECK_FILE(${QTDIR}/include${QTINC}/QtCore/qglobal.h,qt_inc_ok=yes,qt_inc_ok=no) + else + qt_inc_ok=yes + fi + if test "x$qt_inc_ok" = "xyes" + then + AC_MSG_CHECKING(whether Qt version >= 4.0) + QT_VERSION=`grep "QT_VERSION_STR" ${QTDIR}/include${QTINC}/QtCore/qglobal.h | sed -e 's%^#define QT_VERSION_STR[[:space:]]*\"\([[:digit:]\.]*\)\"%\1%g'` + QT_VERSION_ID=`echo $QT_VERSION | awk -F. '{v=$[1]*10000+$[2]*100+$[3];print v}'` + if test $QT_VERSION_ID -ge 40000 + then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + qt_ok=no + fi + AC_MSG_CHECKING(Qt version) + AC_MSG_RESULT($QT_VERSION) + else + qt_ok=no + fi fi +# +# check moc presence (meta-object compiler) +# if test "x$qt_ok" = "xyes" then if test -f ${QTDIR}/bin/moc @@ -64,13 +153,31 @@ then if test "x$MOC" = "x" then qt_ok=no - AC_MSG_RESULT(moc qt-compiler not in PATH variable) + AC_MSG_RESULT(moc (Qt meta-object compiler) is not in the PATH variable) else qt_ok=yes - AC_MSG_RESULT(moc found) + AC_MSG_RESULT(moc (Qt meta-object compiler) is found) + fi + + if test "x$qt_ok" = "xyes" + then + dnl check moc version + AC_MSG_CHECKING(cheching equality Qt and moc tool version) + MOC_VERSION=`$MOC -v 2>&1 | awk 'BEGIN{FS="[[ ()]]"};{print $(NF-1)}'` + if test "x$QT_VERSION" = "x$MOC_VERSION" + then + AC_MSG_RESULT(yes) + qt_ok=yes + else + AC_MSG_RESULT(moc tool and Qt product are inpompatible $MOC_VERSION) + qt_ok=no + fi fi fi +# +# check uic presence (user interface compiler) +# if test "x$qt_ok" = "xyes" then if test -f ${QTDIR}/bin/uic @@ -82,94 +189,227 @@ then if test "x$UIC" = "x" then qt_ok=no - AC_MSG_RESULT(uic qt-interface compiler not in PATH variable) + AC_MSG_RESULT(uic (Qt user interface compiler) is not in the PATH variable) else qt_ok=yes - AC_MSG_RESULT(uic found) + AC_MSG_RESULT(uic (Qt user interface compiler) is found) fi fi -AC_SUBST(QTDIR) -QT_ROOT=$QTDIR +# +# check rcc presence (resources compiler) +# +if test "x$qt_ok" = "xyes" +then + if test -f ${QTDIR}/bin/rcc + then + QRCC=${QTDIR}/bin/rcc + else + AC_PATH_PROG(QRCC, rcc) + fi + if test "x$QRCC" = "x" + then + qt_ok=no + AC_MSG_RESULT(rcc (Qt resources compiler) is not in the PATH variable) + else + qt_ok=yes + AC_MSG_RESULT(rcc (Qt resources compiler) is found) + fi + + if test "x$qt_ok" = "xyes" + then + dnl check rcc version + AC_MSG_CHECKING(cheching equality Qt and rcc tool version) + QRCC_VERSION=`$QRCC -v 2>&1 | awk '{print $NF}'` + if test "x$QT_VERSION" = "x$QRCC_VERSION" + then + AC_MSG_RESULT(yes) + qt_ok=yes + else + AC_MSG_RESULT(rcc tool and Qt product are inpompatible) + qt_ok=no + fi + fi +fi +# +# check lrelease presence (translation files compiler) +# if test "x$qt_ok" = "xyes" then - CPPFLAGS_old=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$QTDIR/include${QTINC}" + if test -f ${QTDIR}/bin/lrelease + then + LRELEASE=${QTDIR}/bin/lrelease + else + AC_PATH_PROG(LRELEASE, lrelease) + fi + if test "x$LRELEASE" = "x" + then + qt_ok=no + AC_MSG_RESULT(lrelease (Qt translation files compiler) is not in the PATH variable) + else + qt_ok=yes + AC_MSG_RESULT(lrelease (Qt translation files compiler) is found) + fi + + if test "x$qt_ok" = "xyes" + then + dnl check lrelease version + AC_MSG_CHECKING( equality of Qt and lrelease tool version) + LRELEASE_VERSION=`$LRELEASE -version 2>&1 | awk '{print $NF}'` + if test "x$QT_VERSION" = "x$LRELEASE_VERSION" + then + AC_MSG_RESULT(yes) + qt_ok=yes + else + AC_MSG_RESULT(lrelease tool and Qt product are inpompatible) + qt_ok=no + fi + fi +fi - AC_LANG_CPLUSPLUS - AC_CHECK_HEADER(qaction.h,qt_ok=yes ,qt_ok=no) +QT_ROOT=$QTDIR - CPPFLAGS=$CPPFLAGS_old +# +# check Qt header files +# +if test "x$qt_ok" = "xyes" +then + AC_CHECKING(include Qt header files) - AC_MSG_CHECKING(include of qt headers) + CPPFLAGS_old=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I${QTDIR}/include${QTINC} -I${QTDIR}/include${QTINC}/QtCore" + AC_CHECK_HEADER(QObject,qt_ok=yes,qt_ok=no) + CPPFLAGS=$CPPFLAGS_old if test "x$qt_ok" = "xno" then - AC_MSG_RESULT(qt headers not found, or too old qt version, in $QTDIR/include) - AC_MSG_RESULT(QTDIR environment variable may be wrong) + AC_MSG_RESULT(qt header files are not found in $QTDIR/include${QTINC}/QtCore) + AC_MSG_RESULT(QTDIR environment variable may be wrong (probably too old Qt version)) else - AC_MSG_RESULT(yes) - QT_INCLUDES="-I${QT_ROOT}/include${QTINC} -DQT_THREAD_SUPPORT -DQT_CLEAN_NAMESPACE" - QT_MT_INCLUDES="-I${QT_ROOT}/include${QTINC} -DQT_THREAD_SUPPORT -DQT_CLEAN_NAMESPACE" + AC_MSG_RESULT(qt header files seem to be OK) + QT_INCLUDES="-I${QTDIR}/include${QTINC}" + # user header files + QT_INCLUDES="${QT_INCLUDES} -I${QTDIR}/include${QTINC}/QtCore" + QT_INCLUDES="${QT_INCLUDES} -I${QTDIR}/include${QTINC}/QtGui" + QT_INCLUDES="${QT_INCLUDES} -I${QTDIR}/include${QTINC}/QtOpenGL" + QT_INCLUDES="${QT_INCLUDES} -I${QTDIR}/include${QTINC}/QtXml" + # not used currently header files (uncomment if required) + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtAssistant" + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtDBus" + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtDesigner" + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtNetwork" + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtSql" + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtSvg" + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtTest" + #QT_INCLUDES="${QT_INCLUDES} -I$(QTDIR)/include${QTINC}/QtUiTools" + + QT_ASSISTANT_INCLUDES="${QT_ASSISTANT_INCLUDES} -I${QTDIR}/include${QTINC}/QtAssistant" + QT_ASSISTANT_INCLUDES="${QT_ASSISTANT_INCLUDES} -I${QTDIR}/include${QTINC}/QtNetwork" + + # this flag is obsolete with Qt 4 + QT_MT_INCLUDES="$QT_INCLUDES" fi fi +# +# test Qt libraries +# if test "x$qt_ok" = "xyes" then - AC_MSG_CHECKING(linking qt library) + AC_MSG_CHECKING(linking against Qt library) + + CXXFLAGS_old=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $QT_INCLUDES" + LIBS_old=$LIBS if test "x$QTDIR" = "x/usr" then - LIBS="$LIBS -lqt-mt $OGL_LIBS" + QT_LIB_DIR="" + elif test -d ${QTDIR}/lib; then + QT_LIB_DIR="-L$QTDIR/lib" + elif test -d ${QTDIR}/lib64; then + QT_LIB_DIR="-L$QTDIR/lib64" else - LIBS="$LIBS -L$QTDIR/lib${LIB_LOCATION_SUFFIX} -lqt-mt $OGL_LIBS" + AC_MSG_ERROR(Can't detect of Qt library directory ) + qt_ok=no fi - - CXXFLAGS_old=$CXXFLAGS - CXXFLAGS="$CXXFLAGS $QT_INCLUDES" + LIBS="$LIBS $QT_LIB_DIR -lQtCore" AC_CACHE_VAL(salome_cv_lib_qt,[ AC_TRY_LINK( -#include +#include , int n; char **s; - QApplication a(n, s); + QCoreApplication a(n, s); a.exec();, eval "salome_cv_lib_qt=yes",eval "salome_cv_lib_qt=no") ]) qt_ok="$salome_cv_lib_qt" + # BEGIN: for CCRT (installation of qt have only a "lib" directory) if test "x$qt_ok" = "xno" then + QT_LIB_DIR="-L$QTDIR/lib" + LIBS="$LIBS_old $QT_LIB_DIR -lQtCore" + + AC_CACHE_VAL(salome_cv_lib_qt,[ + AC_TRY_LINK( +#include +, int n; + char **s; + QCoreApplication a(n, s); + a.exec();, + eval "salome_cv_lib_qt=yes",eval "salome_cv_lib_qt=no") + ]) + qt_ok="$salome_cv_lib_qt" + fi + # END: for CCRT + + if test "x$qt_ok" = "xno" + then + AC_MSG_RESULT(no) AC_MSG_RESULT(unable to link with qt library) - AC_MSG_RESULT(QTDIR environment variable may be wrong) + AC_MSG_RESULT(QTDIR environment variable may be wrong (probably too old Qt version)) else AC_MSG_RESULT(yes) - if test "x$QTDIR" = "x/usr" - then - QT_LIBS=" -lqt-mt" - QT_MT_LIBS=" -lqt-mt" - else - QT_LIBS="-L$QTDIR/lib${LIB_LOCATION_SUFFIX} -lqt-mt" - QT_MT_LIBS="-L$QTDIR/lib${LIB_LOCATION_SUFFIX} -lqt-mt" - fi + # core libs + QT_CORE_LIBS="$QT_LIB_DIR -lQtCore -lQtXml" + # gui libs + QT_GUI_LIBS="$QT_LIB_DIR -lQtGui -lQtOpenGL" + # other libs (currently not used) + QT_OTHER_LIBS="$QT_LIB_DIR" + # other libs (can be used if necessary) + #QT_OTHER_LIBS="$QT_LIB_DIR -lQt3Support -lQtAssistantClient -lQtDesigner -lQtNetwork -lQtSql -lQtSvg -lQtTest -ltQtUiTools" + QT_ASSISTANT_LIBS="$QT_LIB_DIR -lQtAssistantClient -lQtNetwork" + # all libs + QT_LIBS="$QT_CORE_LIBS $QT_GUI_LIBS $QT_OTHER_LIBS" + # this flag is obsolete with Qt 4 + QT_MT_LIBS="$QT_LIBS" fi - LIBS=$LIBS_old CXXFLAGS=$CXXFLAGS_old - fi +AC_SUBST(QTDIR) AC_SUBST(MOC) AC_SUBST(UIC) +AC_SUBST(QRCC) +AC_SUBST(LRELEASE) AC_SUBST(QT_ROOT) AC_SUBST(QT_INCLUDES) AC_SUBST(QT_MT_INCLUDES) +AC_SUBST(QT_ASSISTANT_INCLUDES) +AC_SUBST(QT_LIB_DIR) +AC_SUBST(QT_CORE_LIBS) +AC_SUBST(QT_GUI_LIBS) +AC_SUBST(QT_OTHER_LIBS) AC_SUBST(QT_LIBS) AC_SUBST(QT_MT_LIBS) -AC_SUBST(QT_VERS) +AC_SUBST(QT_ASSISTANT_LIBS) +AC_SUBST(QT_VERSION) +AC_SUBST(QT_VERSION_ID) AC_LANG_RESTORE diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 85f034f..e0665d5 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1,4 +1,7 @@ - +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- bin_SCRIPTS = hxx2salome \ parse01.awk \ parse0.awk \ diff --git a/scripts/SA_build b/scripts/SA_build index f4238fa..84d8b2b 100755 --- a/scripts/SA_build +++ b/scripts/SA_build @@ -1,4 +1,8 @@ #!/bin/bash +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- # # Utility for building Salome Modules # diff --git a/scripts/SA_new_cpp_component b/scripts/SA_new_cpp_component index e8ef4e0..09d13fa 100755 --- a/scripts/SA_new_cpp_component +++ b/scripts/SA_new_cpp_component @@ -1,4 +1,8 @@ #!/bin/bash +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- usage() { diff --git a/scripts/cpp_compo_template.tgz b/scripts/cpp_compo_template.tgz index 01d729e9642a3f6ba0ae3006f40732c4cf90f292..9dc7659493e7f32d4986c51d20d74b67e89d4fd8 100644 GIT binary patch literal 4375 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 R2>9=Te*-kof=mFQ006z1)JgyV literal 4569 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 DNn%4p diff --git a/scripts/hxx2salome b/scripts/hxx2salome index c8a7507..0dce7f8 100755 --- a/scripts/hxx2salome +++ b/scripts/hxx2salome @@ -1,4 +1,8 @@ #!/bin/bash +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- # # # salome2 environment file (.bash or .sh) - can also be specified with -e option diff --git a/scripts/parse0.awk b/scripts/parse0.awk index ae194f4..d273814 100644 --- a/scripts/parse0.awk +++ b/scripts/parse0.awk @@ -1,4 +1,8 @@ # This awk program suppresses inline functions - but it doen't work if there is no inline function... Not used yet. +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- BEGIN { RS="\f"} { gsub(/{[^{}]*}[ \t]*;?/,";");print } diff --git a/scripts/parse01.awk b/scripts/parse01.awk index 8bec017..ca4dbb9 100644 --- a/scripts/parse01.awk +++ b/scripts/parse01.awk @@ -1,4 +1,8 @@ # This awk program deletes C like comments '*/ ... /*' +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- { if (t = index($0, "/*")) { if (t > 1) diff --git a/scripts/parse1.awk b/scripts/parse1.awk index 8d688d2..455ab95 100644 --- a/scripts/parse1.awk +++ b/scripts/parse1.awk @@ -1,4 +1,8 @@ # This awk program extract public functions of the class definition present in hxx interface +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- BEGIN { public=0 } diff --git a/scripts/parse2.awk b/scripts/parse2.awk index 2ecc2c7..82c07a6 100644 --- a/scripts/parse2.awk +++ b/scripts/parse2.awk @@ -1,4 +1,8 @@ # suppress blanks between type and indirection or reference operators (* and &) +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- { gsub(/[ \t]+&/,"\\& ") gsub(/[ \t]+\*/,"* ") print $0 } diff --git a/scripts/parse3.awk b/scripts/parse3.awk index 620587b..6bd5867 100644 --- a/scripts/parse3.awk +++ b/scripts/parse3.awk @@ -1,4 +1,8 @@ # This awk program contains the type mapping tables - and the treatments +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- # for code generation # BEGIN { @@ -248,7 +252,7 @@ BEGIN { # # # record sep is ");\n" whith blanks all around, and optional "(" at the beginning - RS="[(]?[ \t]*[)][ \t]*[;][ \t]*[\n]" + RS="[(]?[ \t]*[)][ \t]*(const)?[ \t]*[;][ \t]*[\n]" FS="[ \t]*[(,][ \t]*" # field sep is either "(" or "," surrounded by blanks } diff --git a/scripts/renameSalomeModule b/scripts/renameSalomeModule index 8e9ab33..63c90b7 100755 --- a/scripts/renameSalomeModule +++ b/scripts/renameSalomeModule @@ -1,4 +1,8 @@ #!/bin/bash +# -- +# Copyright (C) CEA, EDF +# Author : Nicolas Crouzet (CEA) +# -- usage() { diff --git a/scripts/template_src.tgz b/scripts/template_src.tgz index be9dd35b209d831e5691aec08c0147793112c65a..f83486577c733ac1eef321832d8c23d3d0d9b62a 100644 GIT binary patch literal 38806 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

_DYZS3Ba!ux#sl}_9af97 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 z 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 +#include +#include +#include +#include +#include +#include + +#include "hxx2salome.h" + +// VSR: uncomment for debug mode +// #define __DEBUG__ + +static QString quote( const QString& val ) +{ + QString v = val; + if ( !v.startsWith( "\"" ) ) v.prepend( "\"" ); + if ( !v.endsWith( "\"" ) ) v.append( "\"" ); + return v; +} + +static QString unquote( const QString& val ) +{ + QString v = val; + if ( v.startsWith( "\"" ) ) v = v.remove( 0, 1 ); + if ( v.endsWith( "\"" ) ) v = v.remove( v.length()-1, 1 ); + return v; +} + +static QString relFileNameFromDir( const QString& dir, const QString& filename ) +{ +#ifdef __DEBUG__ + printf( "0. dir: %s, filename: %s\n", qPrintable( dir ), qPrintable( filename ) ); +#endif + if ( !filename.isEmpty() ) { + QString dirpath = QFileInfo( dir.isEmpty() ? QDir::currentPath() : dir ).absoluteFilePath(); + QString filepath = QFileInfo( filename ).absoluteFilePath(); +#ifdef __DEBUG__ + printf( "1. dirpath: %s, filepath: %s\n", qPrintable( dirpath ), qPrintable( filepath ) ); +#endif + if ( filepath.startsWith( dirpath ) ) { + QString fpath = filepath.mid( dirpath.length() ); + if ( fpath.startsWith( "/" ) ) fpath.remove( 0, 1 ); +#ifdef __DEBUG__ + printf( "2. fpath: %s\n", qPrintable( fpath ) ); +#endif + return fpath; + } + } + return filename; +} + +HXX2Salome::HXX2Salome() : QDialog() +{ + setupUi( this ); + retrieve(); +} + +HXX2Salome::~HXX2Salome() +{ + dump(); +} + +void HXX2Salome::retrieve() +{ + QFile file( QDir::home().absoluteFilePath( ".hxx2salome" ) ); + if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { + QTextStream in( &file ); + while ( !in.atEnd() ) { + QString line = in.readLine(); + QRegExp re( "^(.*)\\s+(.*)$" ); + if ( re.exactMatch( line ) ) { + QString var = re.cap( 1 ).trimmed(); + QString val = unquote( re.cap( 2 ).trimmed() ); + if ( !var.isEmpty() && !val.isEmpty() ) { + if ( var == "CppDir" ) + SourceTreeText->setText( val ); + else if ( var == "CppInc" ) + IncludeText->setText( val ); + else if ( var == "CppLib" ) + LibraryText->setText( val ); + else if ( var == "EnvFile" ) + EnvFileText->setText( val ); + else if ( var == "SalomeDir" ) + OutputTreeText->setText( val ); + else if ( var == "Shell" ) + ShellChoice->setCurrentIndex( val == "csh" ? 1 : 0 ); + } + } + } + file.close(); + } +} + +void HXX2Salome::dump() +{ + QFile file( QDir::home().absoluteFilePath( ".hxx2salome" ) ); + if ( file.open( QIODevice::WriteOnly | QIODevice::Text ) ) { + file.write( QString( "CppDir %1\n" ).arg( quote( SourceTreeText->text() ) ).toLatin1() ); + file.write( QString( "CppInc %1\n" ).arg( quote( IncludeText->text() ) ).toLatin1() ); + file.write( QString( "CppLib %1\n" ).arg( quote( LibraryText->text() ) ).toLatin1() ); + file.write( QString( "SalomeDir %1\n" ).arg( quote( OutputTreeText->text() ) ).toLatin1() ); + file.write( QString( "EnvFile %1\n" ).arg( quote( EnvFileText->text() ) ).toLatin1() ); + file.write( QString( "Shell %1\n" ).arg( ShellChoice->currentIndex() == 1 ? "csh" : "bash" ).toLatin1() ); + } + file.close(); +} + +void HXX2Salome::on_CloseButton_clicked() +{ + close(); +} + +void HXX2Salome::on_SourceTreeButton_clicked() +{ + QString s = QFileDialog::getExistingDirectory( this, + tr( "Get Existing directory" ), + SourceTreeText->text() ); + if ( !s.isEmpty() ) SourceTreeText->setText( s ); +} + +void HXX2Salome::on_IncludeButton_clicked() +{ + QString s = QFileDialog::getOpenFileName( this, + tr( "Choose a file to open" ), + IncludeText->text(), + tr( "Include files (*.h *.hh *.hxx *.hpp)" ) ); + if ( !s.isEmpty() ) { + IncludeText->setText( relFileNameFromDir( SourceTreeText->text().trimmed(), s ) ); + } +} + +void HXX2Salome::on_LibraryButton_clicked() +{ + QString s = QFileDialog::getOpenFileName( this, + tr( "Choose a file to open" ), + LibraryText->text(), + tr( "Shared Libraries (*.so *.dll)" ) ); + if ( !s.isEmpty() ) { + LibraryText->setText( relFileNameFromDir( SourceTreeText->text().trimmed(), s ) ); + } +} + +void HXX2Salome::on_EnvFileButton_clicked() +{ + QString s = QFileDialog::getOpenFileName( this, + tr( "Choose a script file to open" ), + EnvFileText->text(), + tr( "Environment files (*.csh *.sh)" ) ); + if ( !s.isEmpty() ) EnvFileText->setText( s ); +} + +void HXX2Salome::on_OutputTreeButton_clicked() +{ + QString s = QFileDialog::getExistingDirectory( this, + tr( "Choose a directory" ), + OutputTreeText->text() ); + if ( !s.isEmpty() ) OutputTreeText->setText( s ); +} + +void HXX2Salome::on_GenerateButton_clicked() +{ + // check input validity + QString CppDir = SourceTreeText->text().trimmed(); + QFileInfo fid( CppDir.isEmpty() ? QString( "." ) : CppDir ); + + if ( CppDir.isEmpty() ) { + QMessageBox::StandardButton btn = + QMessageBox::warning( this, + tr( "Warning" ), + tr( "You are about to use the current directory for the C++ component tree!\nContinue?" ), + QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes ); + if ( btn != QMessageBox::Yes ) return; + } + + QString CppInc = IncludeText->text().trimmed(); + if ( CppInc.isEmpty() ) { + QMessageBox::critical( this, + tr( "Error" ), + tr( "Component C++ include file is not specified!" ) ); + return; + } + if ( QFileInfo( CppInc ).isAbsolute() ) CppInc = relFileNameFromDir( CppDir, CppInc ); + if ( QFileInfo( CppInc ).isAbsolute() ) { + QMessageBox::critical( this, + tr( "Error" ), + tr( "Component C++ include file is specified in directory other than\n%1!" ).arg( CppDir ) ); + return; + } + CppInc = QFileInfo( CppInc ).fileName(); + + QString CppLib = LibraryText->text().trimmed(); + if ( CppLib.isEmpty() ) { + QMessageBox::critical( this, + tr( "Error" ), + tr( "Component shared library is not specified!" ) ); + return; + } + if ( QFileInfo( CppLib ).isAbsolute() ) CppLib = relFileNameFromDir( CppDir, CppLib ); + if ( QFileInfo( CppLib ).isAbsolute() ) { + QMessageBox::critical( this, + tr( "Error" ), + tr( "Component shared library is specified in directory other than\n%1!" ).arg( CppDir ) ); + return; + } + CppLib = QFileInfo( CppLib ).fileName(); + + QString SalomeDir = OutputTreeText->text().trimmed(); + QFileInfo fis( SalomeDir.isEmpty() ? QString( "." ) : SalomeDir ); + + if ( SalomeDir.isEmpty() ) { + QMessageBox::StandardButton btn = + QMessageBox::warning( this, + tr( "Warning" ), + tr( "You are about to use the current directory as the Salome component tree!\nContinue?" ), + QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes ); + if ( btn != QMessageBox::Yes ) return; + } + + QString EnvFile = EnvFileText->text().trimmed(); + QFileInfo fienv( EnvFile ); + + // generate command line + QStringList cmdlist; + cmdlist << "${HXX2SALOME_ROOT_DIR}/hxx2salome"; + if ( MakeGUI->isChecked() ) + cmdlist << "-g"; + if ( Compile->isChecked() ) + cmdlist << "-c"; + if ( ShellChoice->currentIndex() == 1 ) + cmdlist << "-s csh"; + if ( !EnvFile.isEmpty() ) { + cmdlist << "-e"; + cmdlist << quote( fienv.absoluteFilePath() ); + } + cmdlist << quote( fid.absoluteFilePath() ); + cmdlist << quote( CppInc ); + cmdlist << quote( CppLib ); + cmdlist << quote( fis.absoluteFilePath() ); + QString command = cmdlist.join( " " ); + + // execute command +#ifdef __DEBUG__ + printf( "command: %s\n", qPrintable( command ) ); +#endif + QApplication::setOverrideCursor( Qt::WaitCursor ); + std::system( command.toLatin1().constData() ); + QApplication::restoreOverrideCursor(); +} diff --git a/src/hxx2salome.h b/src/hxx2salome.h new file mode 100644 index 0000000..8a56deb --- /dev/null +++ b/src/hxx2salome.h @@ -0,0 +1,29 @@ +#ifndef __HXX2SALOME_H +#define __HXX2SALOME_H + +#include +#include "hxx2salome_ui.h" + +class HXX2Salome : public QDialog, private Ui::HXX2Salome +{ + Q_OBJECT + +public: + HXX2Salome(); + ~HXX2Salome(); + +private: + void retrieve(); + void dump(); + +private slots: + void on_CloseButton_clicked(); + void on_SourceTreeButton_clicked(); + void on_IncludeButton_clicked(); + void on_LibraryButton_clicked(); + void on_EnvFileButton_clicked(); + void on_OutputTreeButton_clicked(); + void on_GenerateButton_clicked(); +}; + +#endif // __HXX2SALOME_H diff --git a/src/hxx2salome.ui b/src/hxx2salome.ui index b9f4a54..ebc362e 100644 --- a/src/hxx2salome.ui +++ b/src/hxx2salome.ui @@ -1,522 +1,282 @@ - -HXX2Salome - - - HXX2Salome - - - - 0 - 0 - 520 - 429 - - - - Form1 - - - - Input - - - - 10 - 10 - 500 - 190 - - - - Input - - - - EnvFileButton - - - - 380 - 150 - 80 - 30 - - - - Browse ... - - - - - IncludeFileLabel - - - - 60 - 70 - 110 - 30 - - - - <p align="right">C++ include file</p> - - - File containing the main C++ component class declaration - - - - - EnvFileLabel - - - - 30 - 150 - 140 - 30 - - - - <p align="right">Environment file</p> - - - shell script where specific environment variable can be initialized for the component - - - - - SourceTree - - - - 30 - 30 - 140 - 40 - - - - <p align="right">C++ component tree<br>(absolute path)</p> - - - This directory (or one ot its subdirectories) contains the main C++ include file and the main shared library of the component - - - - - LibraryText - - - - 180 - 110 - 190 - 30 - - - - - - SourceTreeText - - - - 180 - 30 - 190 - 30 - - - - - - IncludeText - - - - 180 - 70 - 190 - 30 - - - - - - SourceTreeButton - - - - 380 - 30 - 80 - 30 - - - - Browse ... - - - - - IncludeButton - - - - 380 - 70 - 80 - 30 - - - - Browse ... - - - - - LibraryButton - - - - 380 - 110 - 80 - 30 - - - - Browse ... - - - - - LibraryLabel - - - - 30 - 110 - 140 - 30 - - - - <p align="right">Shared library</p> - - - Shared library (.so file) containing the compiled C++ component - - - - - EnvFileText - - - - 180 - 150 - 190 - 30 - - - - - - - GenButton + + HXX2Salome + + + + 0 + 0 + 517 + 400 + + + + Salome interface to C++ component generator + + + + + + Input + + + + + + + 160 + 0 + + + + This directory (or one ot its subdirectories) contains the main C++ include file and the main shared library of the component + + + <p align="right">C++ component tree<br>(absolute path)</p> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + + + Browse ... + + + + + + + + 160 + 0 + + + + File containing the main C++ component class declaration + + + <p align="right">C++ include file</p> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + + + Browse ... + + + + + + + + 160 + 0 + + + + Shared library (.so file) containing the compiled C++ component + + + <p align="right">Shared library</p> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false - - - 30 - 380 - 86 - 28 - + + + + + + + + + Browse ... - - Generate + + + + + + + 160 + 0 + + + shell script where specific environment variable can be initialized for the component + + + <p align="right">Environment file</p> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + + + Browse ... + + + + - - - CloseButton + + + + + Output + + + + + + + 160 + 0 + + + + Salome component tree + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false - - - 390 - 380 - 86 - 28 - + + + + + + + + + Browse ... - - Close + + + + + + Shell + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + 0 + 0 + + + + + bash + + + + + csh + + + + + + + + Qt::Horizontal + + + + 107 + 20 + + + + + + + + Generate file structure for GUI + + + + + + + Compile Salome Component (if checked, generation can take a long time) + + + + + + + + + + Generate + - - - Output - - - - 10 - 200 - 500 - 160 - - - - Output - - - - OutputTreeLabel - - - - 30 - 30 - 140 - 30 - - - - Salome component tree - - - - - OutputTreeText - - - - 180 - 30 - 190 - 30 - - - - - - textLabel1 - - - - 230 - 120 - 259 - 30 - - - - (if checked, generation can take a long time) - - - - - OutputTreeButton - - - - 380 - 30 - 80 - 30 - - - - Browse ... - - - - - - bash - - - - - csh - - - - ShellChoice - - - - 90 - 69 - 90 - 30 - - - - - - ShellText - - - - 40 - 69 - 40 - 30 - - - - Shell - - - - - makeGUI - - - - 200 - 70 - 241 - 31 - - - - Generate file structure for GUI - - - - - Compile - - - - 200 - 100 - 210 - 30 - - - - Compile Salome Component - - + + + + + Qt::Horizontal + + + + 326 + 20 + + + + + + + + Close + - - - - CloseButton - pressed() - HXX2Salome - CloseButton_pressed() - - - SourceTreeButton - pressed() - HXX2Salome - SourceTreeButton_pressed() - - - SourceTreeText - textChanged(const QString&) - HXX2Salome - newComponentTree() - - - IncludeText - textChanged(const QString&) - HXX2Salome - newIncludeFile() - - - LibraryText - textChanged(const QString&) - HXX2Salome - newSharedLibrary() - - - EnvFileText - textChanged(const QString&) - HXX2Salome - newEnvFile() - - - OutputTreeButton - pressed() - HXX2Salome - newOutputTree() - - - OutputTreeText - textChanged(const QString&) - HXX2Salome - newOutputTree() - - - IncludeButton - pressed() - HXX2Salome - IncludeButton_pressed() - - - LibraryButton - pressed() - HXX2Salome - LibraryButton_pressed() - - - EnvFileButton - pressed() - HXX2Salome - EnvFileButton_pressed() - - - OutputTreeButton - pressed() - HXX2Salome - OutputTreeButton_pressed() - - - GenButton - pressed() - HXX2Salome - GenerateButton_pressed() - - - ShellChoice - activated(int) - HXX2Salome - ShellChoice_activated(int) - - - - QString CppLibDir; - QString SalomeDir; - QString CppDir; - QString CppInc; - QString CppLib; - QString EnvFile; - QString CppIncDir; - int shell; - - - CloseButton_pressed() - SourceTreeButton_pressed() - newComponentTree() - newIncludeFile() - newSharedLibrary() - newEnvFile() - newOutputTree() - OutputTreeButton_pressed() - IncludeButton_pressed() - LibraryButton_pressed() - EnvFileButton_pressed() - shellChanged( int n ) - GenerateButton_pressed() - ShellChoice_activated( int n ) - init() - destroy() - - - + + + + + + diff --git a/src/hxx2salome.ui.h b/src/hxx2salome.ui.h deleted file mode 100644 index 5d1cccd..0000000 --- a/src/hxx2salome.ui.h +++ /dev/null @@ -1,318 +0,0 @@ -/**************************************************************************** -** ui.h extension file, included from the uic-generated form implementation. -** -** If you want to add, delete, or rename functions or slots, use -** Qt Designer to update this file, preserving your code. -** -** You should not define a constructor or destructor in this file. -** Instead, write your code in functions called init() and destroy(). -** These will automatically be called by the form's constructor and -** destructor. -*****************************************************************************/ - -#include -#include -#include -#include -#include -#include - -static -inline void extractDirNameBaseName(const QString & name, - QString & dir, QString & base ) -{ - if (name != "") { - char *s; - s = strdup(name.latin1()); - dir = dirname(s); - dir += "/"; - strcpy(s, name.latin1()); - base = basename(s); - free(s); - } - else { - base = ""; - dir = ""; - } -} - -static -inline void extract_value( QString & Tq) -{ - std::string t = Tq.latin1(); - std::string::size_type p1, p2; - std::string spaces = " \t\n\r"; - - p1 = t.find_first_of('"'); - if (p1 == std::string::npos) p1 = 0; - else p1++; - while ((p1 < t.length()) && - (spaces.find(t[p1]) != std::string::npos)) - p1++; - - p2 = t.find_last_of('"'); - if (p2 == std::string::npos) p2 = t.length(); - else p2--; - while ((p2 >= 0) && - (spaces.find(t[p2]) != std::string::npos)) - p2--; - - if (p1 <= p2) - t = t.substr(p1, p2-p1+1); - else - t = ""; - Tq = t.c_str(); -} - -void HXX2Salome::CloseButton_pressed() -{ - close(); -} - - -void HXX2Salome::SourceTreeButton_pressed() -{ - QString s = QFileDialog::getExistingDirectory( - CppDir, - this, - "get existing directory", - "Choose a directory", - TRUE ); - if (!s.isEmpty()) { - CppDir = s; - SourceTreeText->setText(s); - } -} - - -void HXX2Salome::newComponentTree() -{ - QString s = SourceTreeText->text(); - if (!s.isEmpty()) CppDir = s; -} - - -void HXX2Salome::newIncludeFile() -{ - QString s = IncludeText->text(); - QString dir, base; - - if (!s.isEmpty()) { - extractDirNameBaseName(s, dir, base); - CppInc = base; - if (dir != "./") - CppIncDir = dir; - } -} - - -void HXX2Salome::newSharedLibrary() -{ - QString s = LibraryText->text(); - QString dir, base; - - if (!s.isEmpty()) { - extractDirNameBaseName(s, dir, base); - CppLib = base; - if (dir != "./") - CppLibDir = dir; - } -} - - -void HXX2Salome::newEnvFile() -{ - QString s = EnvFileText->text(); - if (!s.isEmpty()) EnvFile = s; -} - - -void HXX2Salome::newOutputTree() -{ - QString s = OutputTreeText->text(); - if (!s.isEmpty()) SalomeDir = s; - -} - - -void HXX2Salome::OutputTreeButton_pressed() -{ - QString s = QFileDialog::getExistingDirectory( - SalomeDir, - this, - "get directory", - "Choose a directory", - TRUE ); - if (!s.isEmpty()) { - SalomeDir = s; - OutputTreeText->setText(s); - } -} - -void HXX2Salome::IncludeButton_pressed() -{ - QString s = QFileDialog::getOpenFileName( - CppIncDir + CppInc, - "Include files (*.h *.hh *.hxx *.hpp)", - this, - "C++ include file", - "Choose a file to open" ); - if (!s.isEmpty()) { - extractDirNameBaseName(s, CppIncDir, CppInc); - IncludeText->setText(CppInc); - } -} - - -void HXX2Salome::LibraryButton_pressed() -{ - QString s = QFileDialog::getOpenFileName( - CppLibDir + CppLib, - "Shared Libraries (*.so *.dll)", - this, - "Library file", - "Choose a file to open" ); - if (!s.isEmpty()) { - extractDirNameBaseName(s, CppLibDir, CppLib); - LibraryText->setText(CppLib); - } -} - - -void HXX2Salome::EnvFileButton_pressed() -{ - QString s = QFileDialog::getSaveFileName( - EnvFile, - "Environment files (*.csh *.sh)", - this, - "Environment file", - "Choose a script file to open" ); - if (!s.isEmpty()) { - EnvFile = s; - EnvFileText->setText(s); - } - -} - - -void HXX2Salome::shellChanged(int n) -{ -} - - -void HXX2Salome::GenerateButton_pressed() -{ - QString command; - command = "$HXX2SALOME_ROOT_DIR/hxx2salome "; - if (makeGUI->isChecked()) - command += " \"-g\" "; - if (Compile->isChecked()) - command += " \"-c\" "; - if (shell == 1) - command += " -s csh "; - if (!EnvFile.isEmpty()) { - command += " -e "; - command += EnvFile; - command += " "; - } - command += CppDir; - command += " \""; - command += CppInc; - command += "\" \""; - command += CppLib; - command += "\" \""; - command += SalomeDir; - command += "\""; - - std::cerr << "command = " << command << std::endl; - QCursor QOld(Qt::ArrowCursor), QNew(Qt::WaitCursor); - this->setCursor(QNew); - std::system(command); - this->setCursor(QOld); -} - -void HXX2Salome::init() -{ - std::cerr << "HXX2Salome::init" << std::endl; - shell = 0; - CppDir = ""; - CppInc = ""; - CppLib = ""; - EnvFile = ""; - SalomeDir = ""; - - char *home = getenv("HOME"); - std::string s(home), t; - QString Tq; - s += "/.hxx2salome"; - std::ifstream f(s.c_str()); - while (f.good()) { - - f >> s; - getline(f, t); - Tq = t.c_str(); - extract_value(Tq); - if (s == "CppDir") { - CppDir = Tq; - SourceTreeText->setText(CppDir); - } - else if (s == "CppInc") { - extractDirNameBaseName(Tq, CppIncDir, CppInc); - IncludeText->setText(CppInc); - } - else if (s == "CppLib") { - extractDirNameBaseName(Tq, CppLibDir, CppLib); - LibraryText->setText(CppLib); - } - else if (s == "EnvFile") { - EnvFile = Tq; - EnvFileText->setText(EnvFile); - } - else if (s == "SalomeDir") { - SalomeDir = Tq; - OutputTreeText->setText(SalomeDir); - } - else if (s == "Shell") { - if (Tq == "bash") shell = 0; - else if (Tq == "csh") shell = 1; - ShellChoice->setCurrentItem(shell); - ShellChoice->setCurrentText(Tq); - } - if (f.eof()) break; - } - - f.close(); -} - - -void HXX2Salome::ShellChoice_activated( int n) -{ - shell = ShellChoice->currentItem(); -} - - -void HXX2Salome::destroy() -{ - std::cerr << "HXX2Salome::destroy" << std::endl; - char *home = getenv("HOME"); - std::string s(home); - s += "/.hxx2salome"; - std::ofstream f(s.c_str()); - f << "CppDir " << "\"" << CppDir << "\"" << std::endl; - f << "CppInc " << "\"" << CppIncDir << CppInc << "\"" << std::endl; - f << "CppLib " << "\"" << CppLibDir << CppLib << "\"" << std::endl; - f << "SalomeDir " << "\"" << SalomeDir << "\"" << std::endl; - f << "EnvFile " << "\"" << EnvFile << "\"" << std::endl; - f << "Shell "; - switch (shell) { - case 0 : f<< "bash"; - break; - case 1: f << "csh"; - break; - default: f << "bash"; - break; - } - f << std::endl; - f.close(); -} - diff --git a/src/main.cpp b/src/main.cpp index d6809f9..0840c60 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,20 +1,13 @@ +#include - -#include #include "hxx2salome.h" int main( int argc, char ** argv ) { - QApplication a( argc, argv ); - - HXX2Salome *mw = new HXX2Salome(); - mw->setCaption( "Salome interface to C++ component generator" ); - a.setMainWidget( mw ); - mw->show(); + QApplication a( argc, argv ); - a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) ); - int result = a.exec(); - delete mw; - return result; + HXX2Salome mw; + mw.show(); + + return a.exec(); } - -- 2.30.2