From 041af3ad6a2745320113cbf491874fc4fa379235 Mon Sep 17 00:00:00 2001 From: gdd Date: Tue, 8 Nov 2011 13:12:05 +0000 Subject: [PATCH] Merge from V6_main --- Makefile.am | 4 +- adm_local/cmake_files/FindQT4.cmake | 2 +- adm_local/cmake_files/FindSIPPYQT.cmake | 3 + adm_local/unix/config_files/check_qt.m4 | 285 +++++++----- adm_local/unix/make_common_starter.am | 4 +- configure.ac | 2 + doc/salome/gui/images/occviewer_toolbar.png | Bin 13559 -> 13901 bytes .../gui/images/plot2d_view_settings.png | Bin 30462 -> 25439 bytes doc/salome/gui/images/pref11.png | Bin 60349 -> 49996 bytes doc/salome/gui/images/pref12.png | Bin 98739 -> 79158 bytes doc/salome/gui/images/pref21.png | Bin 71930 -> 83866 bytes doc/salome/gui/images/pref22.png | Bin 40064 -> 46554 bytes doc/salome/gui/images/vtkviewer_toolbar.png | Bin 14418 -> 15471 bytes doc/salome/gui/input/mesh_preferences.doc | 19 +- doc/salome/gui/input/occ_3d_viewer.doc | 14 + doc/salome/gui/input/plot2d_viewer.doc | 3 +- doc/salome/gui/input/salome_preferences.doc | 14 +- doc/salome/gui/input/vtk_3d_viewer.doc | 23 + src/CAF/CAF_Study.cxx | 13 + src/CAM/CAM_Application.cxx | 28 +- src/CAM/CAM_Application.h | 1 + src/CAM/Makefile.am | 2 +- src/GLViewer/GLViewer_BaseObjects.cxx | 4 +- src/GLViewer/GLViewer_ViewPort2d.cxx | 2 - src/GUI_PY/Makefile.am | 36 +- src/GUI_PY/genericdialog.py | 131 ++++++ src/GUI_PY/genericdialog.ui | 89 ++++ src/GUI_PY/helper.py | 150 ++++++ src/GUI_PY/mytestdialog.py | 154 +++++++ src/GUI_PY/mytestdialog.ui | 69 +++ src/GUI_PY/selectvars.py | 2 +- src/LightApp/LightApp_Application.cxx | 332 +++++++++++--- src/LightApp/LightApp_Application.h | 11 +- src/LightApp/LightApp_DataObject.cxx | 75 ++- src/LightApp/LightApp_DataObject.h | 11 +- src/LightApp/LightApp_FullScreenHelper.cxx | 189 ++++++++ src/LightApp/LightApp_FullScreenHelper.h | 59 +++ src/LightApp/LightApp_Module.cxx | 36 +- src/LightApp/LightApp_Module.h | 19 +- src/LightApp/LightApp_Plot2dSelector.cxx | 29 +- src/LightApp/LightApp_Plot2dSelector.h | 3 +- src/LightApp/LightApp_WgViewModel.cxx | 1 - src/LightApp/Makefile.am | 6 +- src/LightApp/resources/LightApp.xml | 9 +- src/LightApp/resources/LightApp_images.ts | 8 + src/LightApp/resources/LightApp_msg_en.ts | 70 ++- src/LightApp/resources/LightApp_msg_fr.ts | 68 ++- src/OCCViewer/Makefile.am | 3 +- src/OCCViewer/OCCViewer_AxialScaleDlg.cxx | 4 +- src/OCCViewer/OCCViewer_ViewManager.cxx | 4 +- src/OCCViewer/OCCViewer_ViewModel.cxx | 105 ++++- src/OCCViewer/OCCViewer_ViewModel.h | 17 +- src/OCCViewer/OCCViewer_ViewPort.cxx | 10 + src/OCCViewer/OCCViewer_ViewPort.h | 4 + src/OCCViewer/OCCViewer_ViewPort3d.cxx | 90 +++- src/OCCViewer/OCCViewer_ViewPort3d.h | 34 +- src/OCCViewer/OCCViewer_ViewWindow.cxx | 257 +++++++++-- src/OCCViewer/OCCViewer_ViewWindow.h | 15 +- src/OCCViewer/resources/OCCViewer_images.ts | 4 + src/OCCViewer/resources/OCCViewer_msg_en.ts | 14 +- src/OCCViewer/resources/OCCViewer_msg_fr.ts | 2 +- src/OCCViewer/resources/occ_view_sync.png | Bin 0 -> 627 bytes src/ObjBrowser/OB_Browser.cxx | 11 +- src/ObjBrowser/OB_Browser.h | 15 +- src/Plot2d/Makefile.am | 3 + src/Plot2d/Plot2d_Curve.cxx | 24 +- src/Plot2d/Plot2d_Histogram.cxx | 4 +- src/Plot2d/Plot2d_Object.cxx | 99 +++- src/Plot2d/Plot2d_Object.h | 21 + src/Plot2d/Plot2d_PlotItems.cxx | 185 +++++++- src/Plot2d/Plot2d_PlotItems.h | 34 +- src/Plot2d/Plot2d_SetupCurveScaleDlg.cxx | 138 ++++++ src/Plot2d/Plot2d_SetupCurveScaleDlg.h | 58 +++ src/Plot2d/Plot2d_SetupViewDlg.cxx | 64 ++- src/Plot2d/Plot2d_SetupViewDlg.h | 7 +- src/Plot2d/Plot2d_ViewFrame.cxx | 81 +++- src/Plot2d/Plot2d_ViewFrame.h | 7 + src/Plot2d/Plot2d_ViewModel.cxx | 1 + src/Plot2d/Plot2d_ViewModel.h | 2 +- src/Plot2d/resources/Plot2d_msg_en.ts | 15 + src/PyConsole/PyConsole_Console.cxx | 8 + src/Qtx/Makefile.am | 14 +- src/Qtx/Qtx.cxx | 102 ++++ src/Qtx/Qtx.h | 3 + src/Qtx/QtxBiColorTool.cxx | 216 +++++++++ src/Qtx/QtxBiColorTool.h | 68 +++ src/Qtx/QtxMainWindow.cxx | 24 +- src/Qtx/QtxMainWindow.h | 5 + src/Qtx/QtxPagePrefMgr.cxx | 104 +++++ src/Qtx/QtxPagePrefMgr.h | 24 +- src/Qtx/QtxResourceMgr.cxx | 12 +- src/Qtx/QtxSearchTool.cxx | 26 +- src/Qtx/QtxSearchTool.h | 6 +- src/Qtx/QtxWebBrowser.cxx | 434 ++++++++++++++++++ src/Qtx/QtxWebBrowser.h | 82 ++++ src/Qtx/resources/Qtx_msg_fr.ts | 2 +- src/QxScene/resources/QxSceneViewer_msg_fr.ts | 2 +- src/ResExporter/ResourceExporter.cxx | 26 +- src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx | 15 +- src/SOCC/SOCC_ViewModel.cxx | 54 +-- src/SOCC/SOCC_ViewModel.h | 3 - src/SPlot2d/SPlot2d_ViewModel.cxx | 53 +++ src/SPlot2d/SPlot2d_ViewModel.h | 2 + src/SUIT/SUIT_Application.h | 13 +- src/SUIT/SUIT_DataObject.cxx | 11 +- src/SUIT/SUIT_DataObject.h | 15 +- src/SUIT/SUIT_PreferenceMgr.cxx | 3 + src/SUIT/SUIT_PreferenceMgr.h | 2 +- src/SUIT/SUIT_ResourceMgr.cxx | 54 ++- src/SUIT/SUIT_ResourceMgr.h | 2 +- src/SUIT/SUIT_TreeModel.cxx | 128 +++++- src/SUIT/SUIT_TreeModel.h | 15 +- src/SUITApp/SUITApp.cxx | 59 +-- src/SVTK/Makefile.am | 4 +- src/SVTK/SVTK_Event.h | 2 + src/SVTK/SVTK_InteractorStyle.cxx | 4 + src/SVTK/SVTK_Selector.cxx | 23 +- src/SVTK/SVTK_Selector.h | 8 + src/SVTK/SVTK_SelectorDef.h | 10 + src/SVTK/SVTK_ViewModel.cxx | 28 ++ src/SVTK/SVTK_ViewModel.h | 7 + src/SVTK/SVTK_ViewWindow.cxx | 334 ++++++++++++-- src/SVTK/SVTK_ViewWindow.h | 35 +- src/SVTK/resources/SVTK_images.ts | 8 + src/SVTK/resources/SVTK_msg_en.ts | 20 + src/SVTK/resources/SVTK_msg_fr.ts | 20 + src/SVTK/resources/vtk_view_highlight.png | Bin 0 -> 835 bytes src/SVTK/resources/vtk_view_sync.png | Bin 0 -> 627 bytes src/SalomeApp/SalomeApp_DataModel.cxx | 20 +- src/SalomeApp/SalomeApp_DataObject.cxx | 23 +- src/SalomeApp/SalomeApp_DataObject.h | 3 +- src/SalomeApp/SalomeApp_Module.cxx | 5 +- src/SalomeApp/SalomeApp_Module.h | 3 +- src/SalomeApp/SalomeApp_Study.cxx | 284 +++++++----- src/SalomeApp/resources/SalomeApp.xml | 2 +- src/SalomeApp/resources/SalomeApp_msg_fr.ts | 6 +- src/SalomeApp/salome_pluginsmanager.py | 8 +- src/Session/SALOME_Session_Server.cxx | 61 +-- src/VTKViewer/VTKViewer_AppendFilter.cxx | 8 +- src/VTKViewer/VTKViewer_TransformFilter.cxx | 4 +- src/VTKViewer/resources/VTKViewer_msg_fr.ts | 2 +- tools/Makefile.am | 23 + tools/dlgfactory/GenericDialog.cxx | 29 ++ tools/dlgfactory/GenericDialog.hxx | 27 ++ tools/dlgfactory/GenericDialog.ui | 89 ++++ tools/dlgfactory/Makefile.am | 104 +++++ tools/dlgfactory/README.txt | 12 + tools/dlgfactory/__GDIALOG__.cxx | 6 + tools/dlgfactory/__GDIALOG__.hxx | 20 + tools/dlgfactory/__GDIALOG__.ui | 99 ++++ tools/dlgfactory/__QDIALOG__.cxx | 20 + tools/dlgfactory/__QDIALOG__.hxx | 23 + tools/dlgfactory/__QDIALOG__.ui | 67 +++ tools/dlgfactory/dlgfactory.sh | 137 ++++++ tools/dlgfactory/gtester.cxx | 21 + tools/dlgfactory/qtester.cxx | 21 + 156 files changed, 5700 insertions(+), 829 deletions(-) create mode 100644 src/GUI_PY/genericdialog.py create mode 100644 src/GUI_PY/genericdialog.ui create mode 100644 src/GUI_PY/helper.py create mode 100644 src/GUI_PY/mytestdialog.py create mode 100644 src/GUI_PY/mytestdialog.ui create mode 100644 src/LightApp/LightApp_FullScreenHelper.cxx create mode 100644 src/LightApp/LightApp_FullScreenHelper.h create mode 100755 src/OCCViewer/resources/occ_view_sync.png create mode 100755 src/Plot2d/Plot2d_SetupCurveScaleDlg.cxx create mode 100755 src/Plot2d/Plot2d_SetupCurveScaleDlg.h create mode 100644 src/Qtx/QtxBiColorTool.cxx create mode 100644 src/Qtx/QtxBiColorTool.h create mode 100644 src/Qtx/QtxWebBrowser.cxx create mode 100644 src/Qtx/QtxWebBrowser.h create mode 100755 src/SVTK/resources/vtk_view_highlight.png create mode 100755 src/SVTK/resources/vtk_view_sync.png create mode 100644 tools/Makefile.am create mode 100644 tools/dlgfactory/GenericDialog.cxx create mode 100644 tools/dlgfactory/GenericDialog.hxx create mode 100644 tools/dlgfactory/GenericDialog.ui create mode 100644 tools/dlgfactory/Makefile.am create mode 100644 tools/dlgfactory/README.txt create mode 100644 tools/dlgfactory/__GDIALOG__.cxx create mode 100644 tools/dlgfactory/__GDIALOG__.hxx create mode 100644 tools/dlgfactory/__GDIALOG__.ui create mode 100644 tools/dlgfactory/__QDIALOG__.cxx create mode 100644 tools/dlgfactory/__QDIALOG__.hxx create mode 100644 tools/dlgfactory/__QDIALOG__.ui create mode 100755 tools/dlgfactory/dlgfactory.sh create mode 100644 tools/dlgfactory/gtester.cxx create mode 100644 tools/dlgfactory/qtester.cxx diff --git a/Makefile.am b/Makefile.am index ed1a9c004..f0ecde575 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,9 +35,9 @@ else !GUI_ENABLE_CORBA IDLDIR = endif -SUBDIRS = $(IDLDIR) adm_local resources src doc bin +SUBDIRS = $(IDLDIR) adm_local resources src doc bin tools -DIST_SUBDIRS = idl adm_local resources src doc bin +DIST_SUBDIRS = idl adm_local resources src doc bin tools DISTCLEANFILES = a.out aclocal.m4 configure local-install.sh hack_libtool adm_local/unix/config_files/config.guess adm_local/unix/config_files/config.sub adm_local/unix/config_files/depcomp adm_local/unix/config_files/install-sh adm_local/unix/config_files/libtool.m4 adm_local/unix/config_files/ltmain.sh adm_local/unix/config_files/ltoptions.m4 adm_local/unix/config_files/ltsugar.m4 adm_local/unix/config_files/ltversion.m4 adm_local/unix/config_files/lt~obsolete.m4 adm_local/unix/config_files/missing adm_local/unix/config_files/py-compile diff --git a/adm_local/cmake_files/FindQT4.cmake b/adm_local/cmake_files/FindQT4.cmake index f98055508..b5634459b 100644 --- a/adm_local/cmake_files/FindQT4.cmake +++ b/adm_local/cmake_files/FindQT4.cmake @@ -25,7 +25,7 @@ SET(DIRS ${DIRS} -I${D}) ENDFOREACH(D ${QT_INCLUDES}) SET(QT_INCLUDES ${DIRS}) SET(QT_INCLUDES ${QT_INCLUDES} -DQT_THREAD_SUPPORT) -SET(QT_MT_LIBS ${QT_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTOPENGL_LIBRARY}) +SET(QT_MT_LIBS ${QT_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${QT_QTWEBKIT_LIBRARY}) SET(QT_LIBS ${QT_MT_LIBS}) SET(qt4_ldflags ${QT_MT_LIBS}) diff --git a/adm_local/cmake_files/FindSIPPYQT.cmake b/adm_local/cmake_files/FindSIPPYQT.cmake index a8c397c80..2145885ee 100644 --- a/adm_local/cmake_files/FindSIPPYQT.cmake +++ b/adm_local/cmake_files/FindSIPPYQT.cmake @@ -26,6 +26,9 @@ GET_FILENAME_COMPONENT(SIP_ROOT ${SIP_ROOT} PATH) ENDIF(SIP_ROOT) SET(SIP_INCLUDES -I${SIP_ROOT}/include/python${PYTHON_VERSION}) +IF(WINDOWS) + SET(SIP_INCLUDES ${SIP_INCLUDES} -I${SIP_ROOT}/include) +ENDIF(WINDOWS) IF(WINDOWS) FIND_PROGRAM(PYUIC_EXECUTABLE NAMES pyuic4 pyuic4.bat) diff --git a/adm_local/unix/config_files/check_qt.m4 b/adm_local/unix/config_files/check_qt.m4 index a92f06bb5..c7413d700 100644 --- a/adm_local/unix/config_files/check_qt.m4 +++ b/adm_local/unix/config_files/check_qt.m4 @@ -41,6 +41,7 @@ AC_REQUIRE([AC_PROG_CPP])dnl AC_REQUIRE([AC_PROG_CXXCPP])dnl AC_REQUIRE([CHECK_OPENGL])dnl AC_REQUIRE([AC_LINKER_OPTIONS])dnl +AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_REQUIRE([OPTIONS_QT])dnl @@ -89,6 +90,47 @@ elif test "$QTDIR" = "/usr/lib/qt3" ; then QTDIR=/usr/lib/qt4 fi elif test -z $QTDIR ; then + AC_MSG_WARN(undefined QTDIR variable which specify where Qt product was installed, trying to guess using pkg-config) + PKG_PROG_PKG_CONFIG() + AS_IF([test "x$PKG_CONFIG" != "x"], + [ + QT_REQUIRED_VERSION=4.0.0 + if $PKG_CONFIG --exists "QtCore >= $QT_REQUIRED_VERSION" + then + QT_USING_PKGCONFIG=yes + QT_VERSION=`$PKG_CONFIG --modversion QtCore --atleast-version=$QT_REQUIRED_VERSION` + QT_VERSION_ID=`echo $QT_VERSION | awk -F. '{v=$[1]*10000+$[2]*100+$[3];print v}'` + + MOC=`$PKG_CONFIG --variable=moc_location "QtCore >= $QT_REQUIRED_VERSION"` + UIC=`$PKG_CONFIG --variable=uic_location "QtCore >= $QT_REQUIRED_VERSION"` + QRCC=`$PKG_CONFIG --variable=rcc_location "QtCore >= $QT_REQUIRED_VERSION"` + LRELEASE=`$PKG_CONFIG --variable=lrelease_location "QtCore >= $QT_REQUIRED_VERSION"` + + QTCORE_CPPFLAGS=`$PKG_CONFIG --cflags "QtCore >= $QT_REQUIRED_VERSION"` + QTGUI_CPPFLAGS=`$PKG_CONFIG --cflags "QtGui >= $QT_REQUIRED_VERSION"` + QTOPENGL_CPPFLAGS=`$PKG_CONFIG --cflags "QtOpenGL >= $QT_REQUIRED_VERSION"` + QTXML_CPPFLAGS=`$PKG_CONFIG --cflags "QtXml >= $QT_REQUIRED_VERSION"` + QTASSISTANT_CPPFLAGS=`$PKG_CONFIG --cflags "QtAssistant >= $QT_REQUIRED_VERSION"` + QTNETWORK_CPPFLAGS=`$PKG_CONFIG --cflags "QtNetwork >= $QT_REQUIRED_VERSION"` + QTWEBKIT_CPPFLAGS=`$PKG_CONFIG --cflags "QtWebKit >= $QT_REQUIRED_VERSION"` + + QTCORE_LDFLAGS=`$PKG_CONFIG --libs "QtCore >= $QT_REQUIRED_VERSION"` + QTGUI_LDFLAGS=`$PKG_CONFIG --libs "QtGui >= $QT_REQUIRED_VERSION"` + QTOPENGL_LDFLAGS=`$PKG_CONFIG --libs "QtOpenGL >= $QT_REQUIRED_VERSION"` + QTXML_LDFLAGS=`$PKG_CONFIG --libs "QtXml >= $QT_REQUIRED_VERSION"` + QTASSISTANT_LDFLAGS=`$PKG_CONFIG --libs "QtAssistant >= $QT_REQUIRED_VERSION"` + QTNETWORK_LDFLAGS=`$PKG_CONFIG --libs "QtNetwork >= $QT_REQUIRED_VERSION"` + QTWEBKIT_LDFLAGS=`$PKG_CONFIG --libs "QtWebKit >= $QT_REQUIRED_VERSION"` + else + AC_MSG_WARN(Qt not found) + fi + ], + [ + AC_MSG_WARN([pkg-config not found]) + ] + ) +fi +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 /usr ; do if test -f ${d}/lib/libQtCore.so ; then @@ -106,11 +148,10 @@ elif test -z $QTDIR ; then fi done fi - # # check QTDIR environment variable # -if test "x$QTDIR" = "x" +if test "x$QTDIR" = "x" -a "x$QT_USING_PKGCONFIG" != "xyes" then AC_MSG_RESULT(Please define correct path in "--with-qt" option or use correct $QTDIR variable) qt_ok=no @@ -121,19 +162,28 @@ fi # if test "x$qt_ok" = "xyes" then - qt_inc_ok=no - QTINC="" - AC_CHECK_FILE(${QTDIR}/include/qt4/QtCore/qglobal.h,QTINC="/qt4",QTINC="") - if test "x$QTINC" = "x" + AC_MSG_CHECKING(whether Qt version >= 4.0) + if test "x$QT_USING_PKGCONFIG" != "xyes" then - AC_CHECK_FILE(${QTDIR}/include${QTINC}/QtCore/qglobal.h,qt_inc_ok=yes,qt_inc_ok=no) - else - qt_inc_ok=yes + qt_inc_ok=no + QTINC="" + 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 + QT_VERSION=`grep "QT_VERSION_STR" ${QTDIR}/include${QTINC}/QtCore/qglobal.h | sed -e 's%^#define QT_VERSION_STR[[:space:]]*\"\([[:digit:]\.]*\)\"%\1%g'` + fi 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'` + + + if test "x$qt_inc_ok" = "xyes" -o "x$QT_USING_PKGCONFIG" = "xyes" + then QT_VERSION_ID=`echo $QT_VERSION | awk -F. '{v=$[1]*10000+$[2]*100+$[3];print v}'` if test $QT_VERSION_ID -ge 40000 then @@ -156,12 +206,16 @@ qt_add=no if test "x$qt_ok" = "xyes" then - if test -f ${QTDIR}/bin/moc + if test "x$QT_USING_PKGCONFIG" != "xyes" then - MOC=${QTDIR}/bin/moc - else - AC_PATH_PROG(MOC, moc) + if test -f ${QTDIR}/bin/moc + then + MOC=${QTDIR}/bin/moc + else + AC_PATH_PROG(MOC, moc) + fi fi + if test "x$MOC" = "x" then qt_ok=no @@ -205,25 +259,28 @@ AC_MSG_RESULT(yes) # if test "x$qt_ok" = "xyes" then - if test "x$qt_add" = "xno" + if test "x$QT_USING_PKGCONFIG" != "xyes" then - AC_MSG_CHECKING(uic) - if test -f ${QTDIR}/bin/uic - then - UIC=${QTDIR}/bin/uic - else - AC_PATH_PROG(UIC, uic) - fi - AC_MSG_RESULT(yes) - else - AC_MSG_CHECKING(uic-qt$qt_add) - if test -f ${QTDIR}/bin/uic-qt$qt_add - then - UIC=${QTDIR}/bin/uic-qt$qt_add - else - AC_PATH_PROG(UIC, uic) - fi - AC_MSG_RESULT(yes) + if test "x$qt_add" = "xno" + then + AC_MSG_CHECKING(uic) + if test -f ${QTDIR}/bin/uic + then + UIC=${QTDIR}/bin/uic + else + AC_PATH_PROG(UIC, uic) + fi + AC_MSG_RESULT(yes) + else + AC_MSG_CHECKING(uic-qt$qt_add) + if test -f ${QTDIR}/bin/uic-qt$qt_add + then + UIC=${QTDIR}/bin/uic-qt$qt_add + else + AC_PATH_PROG(UIC, uic) + fi + AC_MSG_RESULT(yes) + fi fi if test "x$UIC" = "x" @@ -256,22 +313,26 @@ fi # if test "x$qt_ok" = "xyes" then - if test "x$qt_add" = "xno" + if test "x$QT_USING_PKGONFIG" != "xyes" then - if test -f ${QTDIR}/bin/rcc - then - QRCC=${QTDIR}/bin/rcc - else - AC_PATH_PROG(QRCC, rcc) - fi - else - if test -f ${QTDIR}/bin/rcc-qt$qt_add - then - QRCC=${QTDIR}/bin/rcc-qt$qt_add - else - AC_PATH_PROG(QRCC, rcc) - fi + if test "x$qt_add" = "xno" + then + if test -f ${QTDIR}/bin/rcc + then + QRCC=${QTDIR}/bin/rcc + else + AC_PATH_PROG(QRCC, rcc) + fi + else + if test -f ${QTDIR}/bin/rcc-qt$qt_add + then + QRCC=${QTDIR}/bin/rcc-qt$qt_add + else + AC_PATH_PROG(QRCC, rcc) + fi + fi fi + if test "x$QRCC" = "x" then qt_ok=no @@ -302,22 +363,26 @@ fi # if test "x$qt_ok" = "xyes" then - if test "x$qt_add" = "xno" + if test "x$QT_USING_PKGCONFIG" != "xyes" then - if test -f ${QTDIR}/bin/lrelease - then - LRELEASE=${QTDIR}/bin/lrelease - else - AC_PATH_PROG(LRELEASE, lrelease) - fi - else - if test -f ${QTDIR}/bin/lrelease-qt$qt_add - then - LRELEASE=${QTDIR}/bin/lrelease-qt$qt_add - else - AC_PATH_PROG(LRELEASE, lrelease) - fi + if test "x$qt_add" = "xno" + then + if test -f ${QTDIR}/bin/lrelease + then + LRELEASE=${QTDIR}/bin/lrelease + else + AC_PATH_PROG(LRELEASE, lrelease) + fi + else + if test -f ${QTDIR}/bin/lrelease-qt$qt_add + then + LRELEASE=${QTDIR}/bin/lrelease-qt$qt_add + else + AC_PATH_PROG(LRELEASE, lrelease) + fi + fi fi + if test "x$LRELEASE" = "x" then qt_ok=no @@ -353,7 +418,12 @@ then AC_CHECKING(include Qt header files) CPPFLAGS_old=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I${QTDIR}/include${QTINC} -I${QTDIR}/include${QTINC}/QtCore" + if test "x$QT_USING_PKGCONFIG" != "xyes" + then + CPPFLAGS="$CPPFLAGS -I${QTDIR}/include${QTINC} -I${QTDIR}/include${QTINC}/QtCore" + else + CPPFLAGS="$CPPFLAGS $QTCORE_CPPFLAGS" + fi AC_CHECK_HEADER(QObject,qt_ok=yes,qt_ok=no) CPPFLAGS=$CPPFLAGS_old @@ -363,27 +433,24 @@ then AC_MSG_RESULT(QTDIR environment variable may be wrong (probably too old Qt version)) else 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" + if test "x$QT_USING_PKGCONFIG" != "xyes" + then + QT_BASE="-I${QTDIR}/include${QTINC}" + # user header files + QTCORE_CPPFLAGS="${QT_BASE}/QtCore" + QTGUI_CPPFLAGS="${QT_BASE}/QtGui" + QTOPENGL_CPPFLAGS="${QT_BASE}/QtOpenGL" + QTWEBKIT_CPPFLAGS="${QT_BASE}/QtWebKit" + QTXML_CPPFLAGS="${QT_BASE}/QtXml" + + QTASSISTANT_CPPFLAGS="${QT_BASE}/QtAssistant" + QTNETWORK_CPPFLAGS="${QT_BASE}/QtNetwork" + fi - # this flag is obsolete with Qt 4 - QT_MT_INCLUDES="$QT_INCLUDES" + QT_INCLUDES="$QT_BASE $QTCORE_CPPFLAGS $QTGUI_CPPFLAGS $QTOPENGL_CPPFLAGS $QTXML_CPPFLAGS $QTWEBKIT_CPPFLAGS" + + QT_ASSISANT_INCLUDES="$QTASSISTANT_CPPFLAGS $QTNETWORK_CPPFLAGS" + QT_MT_INCLUDES="${QT_INCLUDES}" fi fi @@ -398,19 +465,24 @@ then CXXFLAGS="$CXXFLAGS $QT_INCLUDES" LIBS_old=$LIBS - if test "x$QTDIR" = "x/usr" ; then - 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" - elif test "x$QTDIR" = "x/usr/lib/qt4" ; then - QT_LIB_DIR="" + if test "x$QT_USING_PKGCONFIG" = "xyes" + then + LIBS="$LIBS $QTCORE_LDFLAGS" else - AC_MSG_ERROR(Can't detect of Qt library directory ) - qt_ok=no + if test "x$QTDIR" = "x/usr" ; then + 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" + elif test "x$QTDIR" = "x/usr/lib/qt4" ; then + QT_LIB_DIR="" + else + AC_MSG_ERROR(Can't detect Qt library directory ) #' + qt_ok=no + fi + LIBS="$LIBS $QT_LIB_DIR -lQtCore" fi - LIBS="$LIBS $QT_LIB_DIR -lQtCore" AC_CACHE_VAL(salome_cv_lib_qt,[ AC_TRY_LINK( @@ -450,14 +522,21 @@ then else AC_MSG_RESULT(yes) # 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" + if test "x$QT_USING_PKGCONFIG" = "xyes" + then + QT_CORE_LIBS="$QTCORE_LDFLAGS $QTXML_LDFLAGS" + QT_GUI_LIBS="$QTGUI_LDFLAGS $QTOPENGL_LDFLAGS $QTWEBKIT_LDFLAGS" + QT_ASSISTANT_LIBS="$QTASSISTANT_LDFLAGS $QTNETWORK_LDFLAGS" + else + QT_CORE_LIBS="$QT_LIB_DIR -lQtCore -lQtXml" + # gui libs + QT_GUI_LIBS="$QT_LIB_DIR -lQtGui -lQtOpenGL -lQtWebKit" + # 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" + fi # all libs QT_LIBS="$QT_CORE_LIBS $QT_GUI_LIBS $QT_OTHER_LIBS" # this flag is obsolete with Qt 4 diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am index 6cba64b86..74420fffe 100644 --- a/adm_local/unix/make_common_starter.am +++ b/adm_local/unix/make_common_starter.am @@ -25,8 +25,8 @@ # redefinition compilation warnings # ============================================================ # -AM_CXXFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h -AM_CPPFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h +AM_CXXFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h -I$(top_builddir) +AM_CPPFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h -I$(top_builddir) # ============================================================ # This file defines the common definitions used in several diff --git a/configure.ac b/configure.ac index 98fd2a239..203158ba5 100644 --- a/configure.ac +++ b/configure.ac @@ -671,5 +671,7 @@ AC_OUTPUT([ \ src/GUI_PY/Makefile \ resources/Makefile \ idl/Makefile \ + tools/Makefile \ + tools/dlgfactory/Makefile \ Makefile ]) diff --git a/doc/salome/gui/images/occviewer_toolbar.png b/doc/salome/gui/images/occviewer_toolbar.png index db3e1e5e3051052bcd05a3a4619d613c5fc43605..3d8a919923b237188d77f3eeaeeeb4ad99256846 100644 GIT binary patch literal 13901 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 L1+hv|Bgp>&!$8#e literal 13559 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 diff --git a/doc/salome/gui/images/plot2d_view_settings.png b/doc/salome/gui/images/plot2d_view_settings.png index a9fab8866c6690e956e8cd24fbc1a98d089a4cd1..48f75d07431a8d10d456b69a31111b90317bc466 100644 GIT binary patch literal 25439 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¨F1>?PQ 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 literal 30462 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 diff --git a/doc/salome/gui/images/pref21.png b/doc/salome/gui/images/pref21.png index 8ef8ce232b694e98cde3286c8463c760580b704b..06c6145b02a41b065333e7052c956b1711ff0778 100755 GIT binary patch literal 83866 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 literal 71930 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 |= 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 diff --git a/doc/salome/gui/images/vtkviewer_toolbar.png b/doc/salome/gui/images/vtkviewer_toolbar.png index 9d74a9668242a1f0560cd827aaa0059cd1847295..460794973adcd0fc51257e24efdd993d305da502 100644 GIT binary patch literal 15471 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 G1OE@6BP+T9 literal 14418 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

  • Simple - as a plain text
  • Tree - in a tree-like form
  • - + +
  • Automatic nodes compute limit
  • - Size limit for the +mesh groups for which the number of underlying nodes is calculated +automatically. If the group size exceeds the value set in preferences, +the user will have to press \em Compute button explicitly. Zero value +means "no limit". Default value is set to 100 000 mesh elements. +
  • Automatic Parameters
    • Ratio Bounding Box Diagonal / Max Size - this parameter is @@ -99,14 +105,17 @@ dialog box.
  • Elements
    • -
    • Fill - allows to select the color of surface of elements +
    • Surface color - allows to select the color of surface of elements (seen in Shading mode). Click on the colored line to access to the \ref select_color_and_font_page "Select Color" dialog box.
    • -
    • Outline - allows to select the color of borders of +
    • Back surface color - allows to select the color of interior surface +of elements. Use slider to select this color. This color generated on base +of the Surface color by changing it's brightness and saturation.
    • +
    • Outline color - allows to select the color of borders of elements. Click on the colored line to access to the \ref select_color_and_font_page "Select Color" dialog box.
    • -
    • Back Face - allows to select the color of interior surface -of elements. Click on the colored line to access to the +
    • Wireframe color - allows to select the color of borders of +elements in the wireframe mode. Click on the colored line to access to the \ref select_color_and_font_page "Select Color" dialog box.
    • Width - allows to define the width of lines (edges and borders of elements).
    • Shrink coef. - allows to define relative space of elements diff --git a/doc/salome/gui/input/occ_3d_viewer.doc b/doc/salome/gui/input/occ_3d_viewer.doc index b9260278f..cf3b1a288 100644 --- a/doc/salome/gui/input/occ_3d_viewer.doc +++ b/doc/salome/gui/input/occ_3d_viewer.doc @@ -177,6 +177,20 @@ light" flag on/off the current view area to the minimized / maximized state.
      +\image html occ_view_sync.png +
      Synchronize view - synchronize 3d view parameters.
      +This button has two states - checked and unchecked. Clicking on this +button opens a drop-down menu listing the compatible 3d views. As soon +as user selects any view from the list, the parameters (view point, +position, zoom coefficient etc) of the current view are synchronized +to the selected view (static synchronization). + +In addition, when this button is in the "checked" state, the dynamic +synchronization of the views is performed, i.e. any zoom, pan, rotate +or other view operation done in one view is automatically applied +to the second view. +
      + \note OCC Viewer features a special Polyline Selection mechanism, which allows selecting an arbitraty part of the graphic area using a polygon frame, instead of the usual selection with a diff --git a/doc/salome/gui/input/plot2d_viewer.doc b/doc/salome/gui/input/plot2d_viewer.doc index 9ce22f89c..ab1a49cd8 100644 --- a/doc/salome/gui/input/plot2d_viewer.doc +++ b/doc/salome/gui/input/plot2d_viewer.doc @@ -97,10 +97,11 @@ The options are as follows: - Main title the title of the XY plot. By default, it will consist of the names of the tables, on the basis of which the curve lines have been constructed. -- Curve type you can select from \b Points, \b Lines and \b Spline. - Show legend here you can define the position of the +- Curve type you can select from \b Points, \b Lines and \b Spline. description table on the XY plot (to the \b Left, to the \b Right, on \b Top or on \b Bottom). +- Legend font here you can set type, face and color for the font of Legend item. - Marker size - size of the points (markers) forming curve lines. - Background color of the XY plot. - Scale mode here you can select the type of scaling (\b diff --git a/doc/salome/gui/input/salome_preferences.doc b/doc/salome/gui/input/salome_preferences.doc index d37ea6910..8e229d265 100644 --- a/doc/salome/gui/input/salome_preferences.doc +++ b/doc/salome/gui/input/salome_preferences.doc @@ -50,7 +50,8 @@ study is reopened, the GUI state is restored.
    • (separately for each component) for dumping of a study to a python script. If the option is disabled, the study is dumped to a single python script.
    -
  • External browser
  • +
  • External browser
  • - allow to define which browser will +be used to show SALOME reference manuals: internal (built-in SALOME browser) or external (IE, Netscape, Mozilla, ...).
    • \b Application - this option allows you to set an external browser (IE, Netscape) which will be used for viewing SALOME reference manuals. By @@ -90,6 +91,8 @@ dialog box press the "..." button(see the picture below). - OCC Viewer 3d - Trihedron size - this submenu allows to set the size of coordinate axes displayed in the viewer. + - Relative size - if checked in, trihedron axes scale to fit the + size of the area displayed in 3D Viewer. - Navigation - this option allows to choose one of the modes of work with mouse in OCC and VTK 3D viewers. - Salome Standard Controls - allows to manipulate objects in the @@ -112,6 +115,8 @@ dialog box press the "..." button(see the picture below). relatively to its center. - Relative to the cursor - allows to zoom the view relatively to the current cursor position. + - Show static trihedron - allows to show/hide the static trihedron + located in the bottom-left corner of the viewer. - VTK Viewer 3d - Projection mode - allows choosing between \b Orthogonal and \b Perspective projection mode. @@ -134,6 +139,7 @@ dialog box press the "..." button(see the picture below). and \b Geometrical progression used for zooming. - Show static trihedron - allows to show/hide the static trihedron located in the bottom-left corner of the viewer. + - Dynamic pre-selection - switches dynamic pre-selection on/off. - Spacemouse - a mouse-like manipulator device specially designed for working with 3D presentations, objects, etc. You can reassign the actions listed below to any of its buttons. @@ -168,6 +174,7 @@ dialog box press the "..." button(see the picture below). - Legend Position - this submenu allows to set the default position of the legend, it can be located to the left, to the right, on top or on bottom of the graph. + - Legend font - this allows to set type and face for the font of Legend item. - Curve Type - this allows to set the representation of graphs in your presentations. You can see only Points, points connected with Lines or points connected with smooth Splines. @@ -180,9 +187,12 @@ dialog box press the "..." button(see the picture below). of all points displayed in the viewer is greater than zero. If this condition is not met, the scale is switched to Linear automatically, even if it is set to Logarithmic. - - Background Color - this submenu allows to select the background + - Background color - this submenu allows to select the background color. Click on the colored line to access to the \ref select_color_and_font_page "Select Color" dialog box. + - Legend font color - this allows to select the color of the font of the legend item. + - Highlighted legend font color - this submenu allows to select the color of the font of the selected legend item. + - Selection color - this submenu allows to select the color of selected object in the viewer.

      Directories Preferences

      diff --git a/doc/salome/gui/input/vtk_3d_viewer.doc b/doc/salome/gui/input/vtk_3d_viewer.doc index c0d249d2b..325a32314 100644 --- a/doc/salome/gui/input/vtk_3d_viewer.doc +++ b/doc/salome/gui/input/vtk_3d_viewer.doc @@ -31,6 +31,15 @@ position) zooming styles. The second mode is available only for parallel (non-perspective) view's mode.
      +\image html vtk_view_highlight.png +
      Dynamic pre-selection switch - allows to switch +on/off dynamic pre-selection of the objects. When the dynamic +pre-selection is switched on, the objects can be selected by clicking +of the point/cell belonging to this object, with some performance +loss. Switch dynamic pre-selection off to have good performance on the +big objects (like huge meshes).
      +
      + \image html vtk_view_triedre.png
      Show/Hide Trihedron - shows or hides coordinate axes.

      @@ -186,6 +195,20 @@ of the view:
      mode
      only)
      +\image html vtk_view_sync.png +
      Synchronize view - synchronize 3d view parameters.
      +This button has two states - checked and unchecked. Clicking on this +button opens a drop-down menu listing the compatible 3d views. As soon +as user selects any view from the list, the parameters (view point, +position, zoom coefficient etc) of the current view are synchronized +to the selected view (static synchronization). + +In addition, when this button is in the "checked" state, the dynamic +synchronization of the views is performed, i.e. any zoom, pan, rotate +or other view operation done in one view is automatically applied +to the second view. +
      + \image html vtk_view_parallel.png
      Orthogonal mode - Switches the view to the orthogonal mode.

      diff --git a/src/CAF/CAF_Study.cxx b/src/CAF/CAF_Study.cxx index 20238d7cf..c5afd3d7f 100755 --- a/src/CAF/CAF_Study.cxx +++ b/src/CAF/CAF_Study.cxx @@ -151,7 +151,12 @@ bool CAF_Study::openDocument( const QString& fname ) #if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; #endif + +#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version + status = app->Open( CAF_Tools::toExtString( fname ), myStdDoc ) == PCDM_RS_OK; +#else status = app->Open( CAF_Tools::toExtString( fname ), myStdDoc ) == CDF_RS_OK; +#endif } catch ( Standard_Failure ) { status = false; @@ -183,7 +188,11 @@ bool CAF_Study::saveDocumentAs( const QString& fname ) OCC_CATCH_SIGNALS; #endif if ( save ) +#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version + status = app->Save( stdDoc() ) == PCDM_SS_OK; +#else status = app->Save( stdDoc() ) == CDF_SS_OK; +#endif else { TCollection_ExtendedString format, path( CAF_Tools::toExtString( fname ) ); @@ -192,7 +201,11 @@ bool CAF_Study::saveDocumentAs( const QString& fname ) if ( format.Length() ) stdDoc()->ChangeStorageFormat( format ); +#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version + status = app->SaveAs( stdDoc(), path ) == PCDM_SS_OK; +#else status = app->SaveAs( stdDoc(), path ) == CDF_SS_OK; +#endif } } catch ( Standard_Failure ) { diff --git a/src/CAM/CAM_Application.cxx b/src/CAM/CAM_Application.cxx index 117c2878d..7993d9f94 100755 --- a/src/CAM/CAM_Application.cxx +++ b/src/CAM/CAM_Application.cxx @@ -45,6 +45,16 @@ #include +class BusyLocker +{ +public: + BusyLocker( bool& busy ) : myPrev( busy ), myBusy( busy ) { myBusy = true; } + ~BusyLocker() { myBusy = myPrev; } +private: + bool myPrev; + bool& myBusy; +}; + /*! \brief Create new instance of CAM_Application. \return new instance of CAM_Application class @@ -82,7 +92,8 @@ extern "C" CAM_EXPORT SUIT_Application* createApplication() CAM_Application::CAM_Application( const bool autoLoad ) : STD_Application(), myModule( 0 ), - myAutoLoad( autoLoad ) + myAutoLoad( autoLoad ), + myBlocked( false ) { readModuleList(); } @@ -368,9 +379,13 @@ CAM_Module* CAM_Application::loadModule( const QString& modName, const bool show */ bool CAM_Application::activateModule( const QString& modName ) { - if ( !modName.isEmpty() && !activeStudy() ) + if ( !modName.isEmpty() && !activeStudy() || myBlocked ) return false; + // VSR 25/10/2011: prevent nested activation/deactivation + // See issues 0021307, 0021373 + BusyLocker lock( myBlocked ); + bool res = false; if ( !modName.isEmpty() ) { @@ -408,15 +423,10 @@ bool CAM_Application::activateModule( CAM_Module* mod ) if ( myModule ) { - // VSR: 26/06/2011 bug 0021307: temporarily disable desktop's signals to prevent false module activation - bool signalsBlocked = desktop() && desktop()->signalsBlocked(); - if ( desktop() ) desktop()->blockSignals( true ); if ( !myModule->deactivateModule( activeStudy() ) ) { // .... } - // VSR: 26/06/2011 bug 0021307: enable desktop's signals back - if ( desktop() ) desktop()->blockSignals( signalsBlocked ); } myModule = mod; @@ -712,7 +722,7 @@ void CAM_Application::readModuleList() bool aIsSingleton = resMgr->booleanValue(*it, "singleton", false); - QString ver = resMgr->stringValue(*it, modName + "_VERSION", QString()); + QString ver = resMgr->stringValue(*it, "version", QString()); ModuleInfo inf; inf.name = modName; @@ -770,7 +780,7 @@ CAM_Application::ModuleShortInfoList CAM_Application::getVersionInfo() const { ModuleShortInfo kernel; kernel.name = "KERNEL"; - kernel.version = GUI_VERSION_STR; + kernel.version = KERNEL_VERSION_STR; info.append(kernel); ModuleShortInfo gui; diff --git a/src/CAM/CAM_Application.h b/src/CAM/CAM_Application.h index 6471b9730..d56ef88db 100755 --- a/src/CAM/CAM_Application.h +++ b/src/CAM/CAM_Application.h @@ -100,6 +100,7 @@ private: ModuleList myModules; //!< loaded modules list ModuleInfoList myInfoList; //!< modules info list bool myAutoLoad; //!< auto loading flag + bool myBlocked; //!< "blocked" flag, internal usage }; #ifdef WIN32 diff --git a/src/CAM/Makefile.am b/src/CAM/Makefile.am index da4c90977..e78ce0a93 100755 --- a/src/CAM/Makefile.am +++ b/src/CAM/Makefile.am @@ -53,6 +53,6 @@ nodist_libCAM_la_SOURCES = $(MOC_FILES) nodist_salomeres_DATA = CAM_msg_en.qm CAM_msg_fr.qm -libCAM_la_CPPFLAGS = $(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../STD -I$(srcdir)/../Qtx -I$(top_builddir) +libCAM_la_CPPFLAGS = $(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../STD -I$(srcdir)/../Qtx libCAM_la_LDFLAGS = $(QT_MT_LIBS) libCAM_la_LIBADD = ../Qtx/libqtx.la ../SUIT/libsuit.la ../STD/libstd.la diff --git a/src/GLViewer/GLViewer_BaseObjects.cxx b/src/GLViewer/GLViewer_BaseObjects.cxx index 6fc9f8781..c45df4157 100644 --- a/src/GLViewer/GLViewer_BaseObjects.cxx +++ b/src/GLViewer/GLViewer_BaseObjects.cxx @@ -1102,7 +1102,7 @@ GLboolean GLViewer_Polyline::select( GLfloat x, GLfloat y, GLfloat tol, GLViewer return false; GLfloat xa, xb, ya, yb, l; GLfloat rsin, rcos, r, ra, rb; - GLboolean update; + // GLboolean update; GLboolean selected = myIsSel; myIsSel = GL_FALSE; @@ -1147,7 +1147,7 @@ GLboolean GLViewer_Polyline::select( GLfloat x, GLfloat y, GLfloat tol, GLViewer else myHighFlag = GL_TRUE; - update = ( GLboolean )( myIsSel != selected ); + // update = ( GLboolean )( myIsSel != selected ); // cout << "GLViewer_Polyline::select complete with " << (int)myIsSel << endl; diff --git a/src/GLViewer/GLViewer_ViewPort2d.cxx b/src/GLViewer/GLViewer_ViewPort2d.cxx index e8552f2d3..8e9a13dfa 100644 --- a/src/GLViewer/GLViewer_ViewPort2d.cxx +++ b/src/GLViewer/GLViewer_ViewPort2d.cxx @@ -1381,13 +1381,11 @@ void GLViewer_ViewPort2d::onMaybeTip( QPoint thePoint, QString& theText, QFont& if( !aList.isEmpty() ) { - int index = 0; int str_size = aList.first().length(); for( int i = 1, size = aList.count(); i < size; i++ ) { if ( str_size < (int)aList[i].length() ) { - index = i; str_size = aList[i].length(); } } diff --git a/src/GUI_PY/Makefile.am b/src/GUI_PY/Makefile.am index 85a48cc12..7cbe52f47 100644 --- a/src/GUI_PY/Makefile.am +++ b/src/GUI_PY/Makefile.am @@ -25,12 +25,34 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am mypkgpythondir = $(salomepythondir)/salome/gui # Python modules to be installed -mypkgpython_PYTHON = __init__.py \ - selectvars.py +mypkgpython_PYTHON = \ + __init__.py \ + SelectVarsDialog_ui.py \ + selectvars.py \ + genericdialog_ui.py \ + genericdialog.py \ + mytestdialog_ui.py \ + mytestdialog.py \ + helper.py -nodist_mypkgpython_PYTHON = SelectVarsDialog.py -CLEANFILES = $(nodist_mypkgpython_PYTHON) -EXTRA_DIST += SelectVarsDialog.ui +PYUIC_FILES = \ + SelectVarsDialog_ui.py \ + genericdialog_ui.py \ + mytestdialog_ui.py -%.py:%.ui - $(PYUIC) $< -o $@ +nodist_mypkgpython_PYTHON = $(PYUIC_FILES) +CLEANFILES = $(PYUIC_FILES) + +EXTRA_DIST += \ + SelectVarsDialog.ui \ + genericdialog.ui \ + mytestdialog.ui + +# This rule indicates that some python files are generated from ui +# files using the PYUIC utility. The convention is to create a file +# name _ui.py when the ui file name is .ui. When +# implementing the dialog, you generally create a third file named +# .py that uses the UI_ classe defined in the +# generated file _ui.py. +%_ui.py:%.ui + $(PYUIC) -x $< -o $@ diff --git a/src/GUI_PY/genericdialog.py b/src/GUI_PY/genericdialog.py new file mode 100644 index 000000000..4ece825e6 --- /dev/null +++ b/src/GUI_PY/genericdialog.py @@ -0,0 +1,131 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2010 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# + +__author__="gboulant" +__date__ ="$31 mars 2010 17:09:53$" + +from PyQt4.QtGui import QDialog, QMessageBox + +from genericdialog_ui import Ui_GenericDialog + +class GenericDialog(QDialog): + """ + This is an abstract generic dialog box for implementing default and + generic behaviour of dialog windows. + Note that this class can be instantiated but can't be used because the + OK behaviour is a default one indicating that the checkData function should + be implemented in a derived class. The general interface that should be + implemented in derived class is the MVC pattern: + + - setData(): + to initiate the values of the dialog windows from a given data model. + + - boolean checkData(): + to verify that the data are valid and notify user if not. + + - getData(): + to get the valid data model from values read in the dialog window. + """ + + __wasOk = False + checkDataMessage = "" + + def __init__(self,parent = None,name = None,modal = 0,fl = 0): + QDialog.__init__(self,parent) + # Set up the user interface from Designer. + self.__ui = Ui_GenericDialog() + self.__ui.setupUi(self) + + def getPanel(self): + ''' + This returns the central panel where to draw the custom dialog + widgets. + ''' + return self.__ui.myCenterPanel + + def getButtonBox(self): + return self.__ui.buttonBox + + def accept(self): + """ + Slot function connected to the button OK + """ + if not self.checkData(): + QMessageBox.warning( self, "Alerte", self.checkDataMessage) + return + self.__wasOk = True + self.hide() + + def displayAndWait(self): + """ + This function can be used to display the dialog in the case + where the dialog is modal and does not need interactivity with + parent windows and other part of the application. When called, + the dialog is raised visible and keep waiting until the button + OK or the button CANCEL is pressed. Then the flow can go on + (see an example of implementation in the tests functions at + the end of this file). + In the general case, in particular if you need interaction + with the graphical framework (clic on widgets embedded in + other dialogs), you should used instead the show() command + (for a non modal dialog) or the open() command (for a window + modal dialog, i.e. a dialog that can not interact with its + direct parent but can interact with the other parts). + """ + self.__wasOk = False + self.exec_() + + def wasOk(self): + """ + Return True if the button OK was pressed to close the dialog windows. + """ + return self.__wasOk + + def checkData(self): + """ + This function should be implemented in a derived class. It should return + True in the case where the data are estimated to be valid data. + """ + self.checkDataMessage = "The checkData() function is not implemented yet" + return True + +# +# ============================================================================== +# Basic use cases and unit test functions +# ============================================================================== +# +def TEST_GenericDialog(): + import sys + from PyQt4.QtGui import QApplication + from PyQt4.QtCore import QObject, SIGNAL, SLOT + app = QApplication(sys.argv) + QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + + dlg=GenericDialog() + dlg.displayAndWait() + if dlg.wasOk(): + print "OK has been pressed" + else: + print "Cancel has been pressed" + +if __name__ == "__main__": + TEST_GenericDialog() diff --git a/src/GUI_PY/genericdialog.ui b/src/GUI_PY/genericdialog.ui new file mode 100644 index 000000000..3b151e58a --- /dev/null +++ b/src/GUI_PY/genericdialog.ui @@ -0,0 +1,89 @@ + + GenericDialog + + + + 0 + 0 + 498 + 352 + + + + Dialog + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + GenericDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + GenericDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/GUI_PY/helper.py b/src/GUI_PY/helper.py new file mode 100644 index 000000000..8508f2790 --- /dev/null +++ b/src/GUI_PY/helper.py @@ -0,0 +1,150 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2011 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 +# + +# Author: Guillaume Boulant (EDF/R&D) + +# ================================================================== +# This file provides helper functions to drive some gui features of a +# SALOME Application (the selection in the object browser for now, +# further development coming soon). Note that some of these helper +# functions are specialized for a GEOM or SMESH context (see the +# guihelper.py modules comming with the packages salome.geom and +# salome.smesh. +# ================================================================== + +# +# ================================================================== +# Definition of usefull objects and functions to deal with the SALOME +# technical context. +# ================================================================== +# + +from salome.kernel import services + +# +# Get SALOME PyQt interface to manipulate the GUI context +# (Get the active study for example. Note that the active study is a +# GUI concept only: it is the study that is currently active in the +# desktop) +# +import SalomePyQt +sgPyQt=SalomePyQt.SalomePyQt() + +# +# Get SALOME Swig interface to manipulate the GUI widget +# +import libSALOME_Swig +SalomeGUI = libSALOME_Swig.SALOMEGUI_Swig() + +# +# ================================================================== +# General helper function for GUI programming actions +# ================================================================== +# +# Get the active study +# +def getActiveStudy(): + """ + This returns a study object that corresponds to the active + study. The active study is a GUI concept: it's the study currently + active on the desktop. + """ + studyId = sgPyQt.getStudyId() + study = services.getStudyManager().GetStudyByID( studyId ) + return study + +# +# ================================================================== +# Functions to manipulate the objects in the browser (generic) +# ================================================================== +# +def getSObjectSelected(): + ''' + Returns the sobject and the entry of the item currently selected + in the objects browser. Returns "None, None" if no item is + selected. If several objects are selected, it returns the first + one of the list. + ''' + sobj = None + entry = None + study = getActiveStudy() + if SalomeGUI.SelectedCount() == 1: + # We only considere the first element of the list. If you need + # something else, create another function in your own context. + entry = SalomeGUI.getSelected( 0 ) + if entry != '': + sobj = study.FindObjectID( entry ) + return sobj, entry + +def showSObjectSelected(): + ''' + This function print the attributes of the selected object. + (this function is only for test purpose) + ''' + sobj, entry = getSObjectSelected() + if ( sobj ): + test, attr = sobj.FindAttribute( "AttributeName" ) + if test: + message = "My name is '%s'" % attr.Value() + print message + pass + +def deleteSObjectSelected(): + ''' + This function deletes the selected object. + ''' + sobj, entry = getSObjectSelected() + if ( sobj ): + study = getActiveStudy() + builder = study.NewBuilder() + builder.RemoveObject( sobj ) + SalomeGUI.updateObjBrowser(True) + pass + +# +# ================================================================== +# Use cases and demo functions +# ================================================================== +# + +# CAUTION: Before running this test functions, you first have to +# create (or import) an object and select this object in the objects +# browser. + +# +# Definitions: +# - the SObject is an item in the active study (Study Object). +# - the entry is the identifier of an item. +# - the object (geom object or smesh object) is a CORBA servant +# embedded in the SALOME component container and with a reference in +# the SALOME study, so that it can be retrieved. +# + +def TEST_getSObjectSelected(): + mySObject, myEntry = getSObjectSelected() + myName = mySObject.GetName() + print "The name of the selected object is %s"%myName + +def TEST_showSObjectSelected(): + showSObjectSelected() + +if __name__ == "__main__": + TEST_getSObjectSelected() + TEST_showSObjectSelected() diff --git a/src/GUI_PY/mytestdialog.py b/src/GUI_PY/mytestdialog.py new file mode 100644 index 000000000..2aa9e08e0 --- /dev/null +++ b/src/GUI_PY/mytestdialog.py @@ -0,0 +1,154 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2010 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# + +__author__="gboulant" +__date__ ="$31 mars 2010 17:09:53$" + +from mytestdialog_ui import Ui_MyTestDialog +from genericdialog import GenericDialog + +class MyTestDialog(GenericDialog): + """ + This class is to illustrate the usage of the GenericDialog to implement + the dialog windows of the application with a common design template provided + by the generic class GenericDialog. + """ + def __init__(self, parent=None, name="MyTestDialog"): + GenericDialog.__init__(self, parent, name) + # Set up the user interface from Designer. + self.ui = Ui_MyTestDialog() + # BE CAREFULL HERE, the ui form is NOT put in the global dialog (already + # containing some generic widgets) but in the center panel created in the + # GenericDialog as a void container for the form. The MyTestDialog form + # is supposed here to create only the widgets to be placed in the center + # panel + self.ui.setupUi(self.getPanel()) + + # + # We implement here the interface of the MVC pattern + # + def setData(self, name): + """ + This function implements the mapping from the data model to the widgets + """ + self.ui.txtName.setText(name) + + def checkData(self): + """ + This function implements the control to be done on the values contained + in the widgets when trying to validate the dialog window (click OK first + trigs this function). + """ + if ( self.ui.txtName.text().trimmed() == "" ): + self.checkDataMessage = "The name can't be void" + return False + return True + + def getData(self): + """ + This function implements the mapping from the widgets to the data model + """ + name = str(self.ui.txtName.text().trimmed().toUtf8()) + # _MEM_: note here that (i) the utf8 format is used and (ii) we must not + # forget to convert to a standard python string (instead of a QString). + return name + + +from PyQt4.QtCore import SIGNAL +class MyTestDialogWithSignals(MyTestDialog): + """ + This class is to illustrate the usage of the GenericDialog in the + case where the dialog windows is not modal. In such a case, the + controller must be warn of close events using Qt signals. + """ + def __init__(self, parent=None, name="MyTestDialogWithSignals"): + MyTestDialog.__init__(self, parent, name) + + def accept(self): + """ + This function is the slot connected to the the OK button + (click event of the OK button). + """ + # The dialog is raised in a non modal mode (for example, to + # get interactivity with the parents windows. Then we have to + # emit a signal to warn the parent observer that the dialog + # has been validated so that it can process the event + MyTestDialog.accept(self) + if self.wasOk(): + self.emit(SIGNAL('inputValidated()')) + + + +# +# ============================================================================== +# Basic use case +# ============================================================================== +# + +def TEST_MyTestDialog_modal(): + import sys + from PyQt4.QtCore import QObject, SIGNAL, SLOT + from PyQt4.QtGui import QApplication + app = QApplication(sys.argv) + QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + + dlg=MyTestDialog() + dlg.setData("A default name") + dlg.displayAndWait() + if dlg.wasOk(): + name = dlg.getData() + print "The name has been modified to",name + + +class DialogListener: + def onProcessEvent(self): + print "onProcessEvent(): OK has been pressed" + import sys + sys.exit(0) + + +def TEST_MyTestDialog_non_modal(): + import sys + from PyQt4.QtCore import QObject, SIGNAL, SLOT + from PyQt4.QtGui import QApplication + app = QApplication(sys.argv) + QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + + dlg=MyTestDialogWithSignals() + # This dialog window will emit a inputValidated() signal when the + # OK button is pressed and the data are validated. Then, we + # connect this signal to a local slot so that the event can be + # processed. + dlgListener = DialogListener() + app.connect(dlg, SIGNAL('inputValidated()'), dlgListener.onProcessEvent) + # This connect instruction means that the signal inputValidated() + # emited by the dlg Qt object will raise a call to the slot + # dlgListener.onProcessEvent + + dlg.setData("A default name") + dlg.show() + + app.exec_() + +if __name__ == "__main__": + #TEST_MyTestDialog_modal() + TEST_MyTestDialog_non_modal() diff --git a/src/GUI_PY/mytestdialog.ui b/src/GUI_PY/mytestdialog.ui new file mode 100644 index 000000000..ca89393fb --- /dev/null +++ b/src/GUI_PY/mytestdialog.ui @@ -0,0 +1,69 @@ + + MyTestDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + TextLabel + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + diff --git a/src/GUI_PY/selectvars.py b/src/GUI_PY/selectvars.py index d6e511681..e3a741402 100644 --- a/src/GUI_PY/selectvars.py +++ b/src/GUI_PY/selectvars.py @@ -31,7 +31,7 @@ from salome.kernel.parametric import study_exchange_vars # Dialog box for variables selection # # ---------------------------------- # -from SelectVarsDialog import Ui_SelectVarsDialog +from SelectVarsDialog_ui import Ui_SelectVarsDialog class MySelectVarsDialog(Ui_SelectVarsDialog, QtGui.QDialog): diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index db79e0ded..828e31f81 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -54,6 +54,7 @@ #include "LightApp_SelectionMgr.h" #include "LightApp_DataObject.h" #include "LightApp_WgViewModel.h" +#include "LightApp_FullScreenHelper.h" #include @@ -88,6 +89,7 @@ #include #include #include +#include #include @@ -173,6 +175,8 @@ #include #include #include +#include +#include #include @@ -231,6 +235,16 @@ extern "C" LIGHTAPP_EXPORT SUIT_Application* createApplication() /*! \var global preferences of LightApp */ LightApp_Preferences* LightApp_Application::_prefs_ = 0; + +static inline QString getFile(){ +#ifdef WIN32 + return QString( "file://" ); +#else + return QString( "file:" ); +#endif +} + + /*! \class LightApp_Application Application containing LightApp module @@ -239,11 +253,13 @@ LightApp_Preferences* LightApp_Application::_prefs_ = 0; /*!Constructor.*/ LightApp_Application::LightApp_Application() : CAM_Application( false ), - myPrefs( 0 ) + myPrefs( 0 ), + myScreenHelper(new LightApp_FullScreenHelper()) { Q_INIT_RESOURCE( LightApp ); STD_TabDesktop* desk = new STD_TabDesktop(); + desk->setFullScreenAllowed(false); setDesktop( desk ); @@ -255,6 +271,18 @@ LightApp_Application::LightApp_Application() SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); QPixmap aLogo = aResMgr->loadPixmap( "LightApp", tr( "APP_DEFAULT_ICO" ), false ); + QtxWebBrowser::setData("browser:icon", aResMgr->loadPixmap( "LightApp", tr( "BROWSER_ICON" ) ) ); + QtxWebBrowser::setData("browser:title", tr( "BROWSER_TITLE" ) ); + QtxWebBrowser::setData("toolbar:title", tr( "BROWSER_TOOLBAR_TITLE" ) ); + QtxWebBrowser::setData("menu:file:title", tr( "BROWSER_FILEMENU" ) ); + QtxWebBrowser::setData("action:close:title", tr( "BROWSER_CLOSE" ) ); + QtxWebBrowser::setData("action:close:icon", aResMgr->loadPixmap( "LightApp", tr( "BROWSER_CLOSE_ICON" ) ) ); + QtxWebBrowser::setData("action:back:title", tr( "BROWSER_BACK" ) ); + QtxWebBrowser::setData("action:forward:title", tr( "BROWSER_FORWARD" ) ); + QtxWebBrowser::setData("action:find:title", tr( "BROWSER_FIND" ) ); + QtxWebBrowser::setData("action:findnext:title", tr( "BROWSER_FINDNEXT" ) ); + QtxWebBrowser::setData("action:findprev:title", tr( "BROWSER_FINDPREV" ) ); + desktop()->setWindowIcon( aLogo ); desktop()->setDockableMenuBar( false ); desktop()->setDockableStatusBar( false ); @@ -342,6 +370,7 @@ LightApp_Application::LightApp_Application() LightApp_Application::~LightApp_Application() { delete mySelMgr; + delete myScreenHelper; } /*!Start application.*/ @@ -529,7 +558,7 @@ void LightApp_Application::createActions() if ( QFile::exists( indexFile ) ) helpData.insert( tr( "%1 module Users's Guide" ).arg( aModule ), indexFile ); } - + IMapConstIterator fileIt; for ( fileIt = helpData.begin(); fileIt != helpData.end(); fileIt++ ) { QString helpFileName = fileIt.key(); @@ -540,7 +569,7 @@ void LightApp_Application::createActions() a->setData( fileIt.value() ); if ( !helpSubMenu.isEmpty() ){ int helpSubMenuId = createMenu( helpSubMenu, helpMenu, -1, 0 ); - createMenu( a, helpSubMenuId, -1 ); + createMenu( a, helpSubMenuId, -1 ); } else createMenu( a, helpMenu, -1, 0 ); @@ -552,17 +581,17 @@ void LightApp_Application::createActions() static QtxMRUAction* mru = new QtxMRUAction( tr( "TOT_DESK_MRU" ), tr( "MEN_DESK_MRU" ), 0 ); connect( mru, SIGNAL( activated( const QString& ) ), this, SLOT( onMRUActivated( const QString& ) ) ); registerAction( MRUId, mru ); - + // default icon for neutral point ('SALOME' module) QPixmap defIcon = resMgr->loadPixmap( "LightApp", tr( "APP_DEFAULT_ICO" ), false ); if ( defIcon.isNull() ) defIcon = QPixmap( imageEmptyIcon ); - + //! default icon for any module QPixmap modIcon = resMgr->loadPixmap( "LightApp", tr( "APP_MODULE_ICO" ), false ); if ( modIcon.isNull() ) modIcon = QPixmap( imageEmptyIcon ); - + QStringList modList; modules( modList, false ); @@ -581,7 +610,7 @@ void LightApp_Application::createActions() { if ( !isLibExists( *it ) ) continue; - + QString modName = moduleName( *it ); if ( !isModuleAccessible( *it ) ) @@ -596,7 +625,7 @@ void LightApp_Application::createActions() { icon = modIcon; INFOS ( "****************************************************************" << std::endl - << "* Icon for " << (*it).toLatin1().constData() + << "* Icon for " << (*it).toLatin1().constData() << " not found. Using the default one." << std::endl << "****************************************************************" << std::endl ); } @@ -606,7 +635,7 @@ void LightApp_Application::createActions() moduleAction->insertModule( *it, icon ); } - connect( moduleAction, SIGNAL( moduleActivated( const QString& ) ), + connect( moduleAction, SIGNAL( moduleActivated( const QString& ) ), this, SLOT( onModuleActivation( const QString& ) ) ); registerAction( ModulesListId, moduleAction ); } @@ -660,9 +689,14 @@ void LightApp_Application::createActions() createAction( StyleId, tr( "TOT_THEME" ), QIcon(), tr( "MEN_DESK_THEME" ), tr( "PRP_THEME" ), 0, desk, false, this, SLOT( onStylePreferences() ) ); + createAction( FullScreenId, tr( "TOT_FULLSCREEN" ), QIcon(), tr( "MEN_DESK_FULLSCREEN" ), tr( "PRP_FULLSCREEN" ), + Qt::Key_F11, desk, false, this, SLOT( onFullScreen() ) ); + + int viewMenu = createMenu( tr( "MEN_DESK_VIEW" ), -1 ); createMenu( separator(), viewMenu, -1, 20, -1 ); createMenu( StyleId, viewMenu, 20, -1 ); + createMenu( FullScreenId, viewMenu, 20, -1 ); int modTBar = createTool( tr( "INF_TOOLBAR_MODULES" ) ); createTool( ModulesListId, modTBar ); @@ -898,15 +932,11 @@ public: const QString& theContext = QString() ) : myApp( theApp ), myParams( theParams ), -#ifdef WIN32 - myHelpFile( "file://" + theHelpFile ), -#else - myHelpFile( "file:" + theHelpFile ), -#endif myContext( theContext ), myStatus(0), myLApp( app ) { + myHelpFile = QString("%1%2").arg( getFile() ).arg( QFileInfo( theHelpFile ).canonicalFilePath() ); } virtual void run() @@ -960,19 +990,23 @@ void LightApp_Application::onHelpContentsModule() anApp.append( quote ); #endif QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); + bool useExtBrowser = resMgr->booleanValue("ExternalBrowser", "use_external_browser", false ); - if ( !anApp.isEmpty() ) - { - RunBrowser* rs = new RunBrowser( this, anApp, aParams, helpFile ); - rs->start(); - } - else - { - if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ), - SUIT_MessageBox::Yes | SUIT_MessageBox::No, - SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes ) + if( useExtBrowser ) { + if ( !anApp.isEmpty() ) { + RunBrowser* rs = new RunBrowser( this, anApp, aParams, helpFile ); + rs->start(); + } + else { + if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ), + SUIT_MessageBox::Yes | SUIT_MessageBox::No, + SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes ) - showPreferences( tr( "PREF_APP" ) ); + showPreferences( tr( "PREF_APP" ) ); + } + } + else { + QtxWebBrowser::loadUrl(getFile() + helpFile); } } @@ -1009,19 +1043,25 @@ void LightApp_Application::onHelpContextModule( const QString& theComponentName, anApp.prepend( quote ); anApp.append( quote ); #endif - QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); - if ( !anApp.isEmpty() ) - { - RunBrowser* rs = new RunBrowser( this, anApp, aParams, helpFile, theContext ); - rs->start(); + bool useExtBrowser = resMgr->booleanValue("ExternalBrowser", "use_external_browser", false ); + + if(useExtBrowser) { + QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); + + if ( !anApp.isEmpty() ) { + RunBrowser* rs = new RunBrowser( this, anApp, aParams, helpFile, theContext ); + rs->start(); + } + else { + if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ), + SUIT_MessageBox::Yes | SUIT_MessageBox::No, + SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes ) + showPreferences( tr( "PREF_APP" ) ); + } } - else - { - if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ), - SUIT_MessageBox::Yes | SUIT_MessageBox::No, - SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes ) - showPreferences( tr( "PREF_APP" ) ); + else { + QtxWebBrowser::loadUrl(getFile() + helpFile, theContext ); } } @@ -1361,19 +1401,20 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType #ifndef DISABLE_SALOMEOBJECT vm = new SOCC_Viewer(); #else - vm = new OCCViewer_Viewer( true, resMgr->booleanValue( "OCCViewer", "static_trihedron", true ) ); + vm = new OCCViewer_Viewer( true ); #endif - vm->setBackgroundColor( OCCViewer_ViewFrame::TOP_LEFT, + vm->setBackgroundColor( OCCViewer_ViewFrame::TOP_LEFT, resMgr->colorValue( "OCCViewer", "xz_background", vm->backgroundColor() ) ); - vm->setBackgroundColor( OCCViewer_ViewFrame::TOP_RIGHT, - resMgr->colorValue( "OCCViewer", "yz_background", vm->backgroundColor() ) ); - + vm->setBackgroundColor( OCCViewer_ViewFrame::TOP_RIGHT, + resMgr->colorValue( "OCCViewer", "yz_background", vm->backgroundColor() ) ); + vm->setBackgroundColor( OCCViewer_ViewFrame::BOTTOM_LEFT, resMgr->colorValue( "OCCViewer", "xy_background", vm->backgroundColor() ) ); - vm->setBackgroundColor( OCCViewer_ViewFrame::BOTTOM_RIGHT, - resMgr->colorValue( "OCCViewer", "background", vm->backgroundColor() ) ); - - vm->setTrihedronSize( resMgr->doubleValue( "OCCViewer", "trihedron_size", vm->trihedronSize() ) ); + vm->setBackgroundColor( OCCViewer_ViewFrame::BOTTOM_RIGHT, + resMgr->colorValue( "OCCViewer", "background", vm->backgroundColor() ) ); + + vm->setTrihedronSize( resMgr->doubleValue( "OCCViewer", "trihedron_size", vm->trihedronSize() ), + resMgr->booleanValue( "OCCViewer", "relative_size", vm->trihedronRelative() )); int u( 1 ), v( 1 ); vm->isos( u, v ); u = resMgr->integerValue( "OCCViewer", "iso_number_u", u ); @@ -1404,6 +1445,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType vm->setStaticTrihedronVisible( resMgr->booleanValue( "VTKViewer", "show_static_trihedron", vm->isStaticTrihedronVisible() ) ); vm->setInteractionStyle( resMgr->integerValue( "VTKViewer", "navigation_mode", vm->interactionStyle() ) ); vm->setZoomingStyle( resMgr->integerValue( "VTKViewer", "zooming_mode", vm->zoomingStyle() ) ); + vm->setDynamicPreSelection( resMgr->booleanValue( "VTKViewer", "dynamic_preselection", vm->dynamicPreSelection() ) ); vm->setIncrementalSpeed( resMgr->integerValue( "VTKViewer", "speed_value", vm->incrementalSpeed() ), resMgr->integerValue( "VTKViewer", "speed_mode", vm->incrementalSpeedMode() ) ); vm->setSpacemouseButtons( resMgr->integerValue( "VTKViewer", "spacemouse_func1_btn", vm->spacemouseBtn(1) ), @@ -1438,11 +1480,11 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType { SUIT_ResourceMgr* resMgr = resourceMgr(); - SUIT_ViewManager* vm = new SUIT_ViewManager( activeStudy(), - desktop(), - new LightApp_WgViewModel( vmType, w ) ); + SUIT_ViewManager* vm = new SUIT_ViewManager( activeStudy(), + desktop(), + new LightApp_WgViewModel( vmType, w ) ); vm->setTitle( QString( "%1: %M - viewer %V" ).arg( vmType ) ); - + addViewManager( vm ); SUIT_ViewWindow* vw = vm->createViewWindow(); if ( vw && desktop() ) { @@ -1624,6 +1666,60 @@ void LightApp_Application::onRefresh() updateObjectBrowser( true ); } +/*!Private SLOT. Support drag-and-drop operation.*/ +void LightApp_Application::onDropped (const QMimeData *data, Qt::DropAction action, + int row, int column, const QModelIndex& parent) +{ + if (action == Qt::IgnoreAction) + return; + + if (!data->hasFormat("application/vnd.text.list")) + return; + + if (column > 0) + return; + + if (!parent.isValid()) + // dropping into the top level of the model is not allowed + return; + + SUIT_AbstractModel* treeModel = dynamic_cast(objectBrowser()->model()); + + SUIT_DataObject* obj = treeModel->object(parent); + if (!obj) + return; + + LightApp_DataObject* parentObj = dynamic_cast(obj); + if (!parentObj) + return; + + // decode mime data + QByteArray encodedData = data->data("application/vnd.text.list"); + QDataStream stream (&encodedData, QIODevice::ReadOnly); + QStringList newItems; + + while (!stream.atEnd()) { + QString text; + stream >> text; + if (!text.isEmpty()) + newItems << text; + } + + DataObjectList listObjs; + foreach (QString text, newItems) { + SUIT_DataObject* anObji = findObject(text); + if (anObji) + listObjs.append(anObji); + } + + // tmp: clear selection to avoid problem with persistent data model indexes + //mySelMgr->clearSelected(); + + LightApp_Module* aModule = dynamic_cast(parentObj->module()); + if (aModule) + aModule->dropObjects(listObjs, action, parentObj, row); +} + /*!Private SLOT. On preferences.*/ void LightApp_Application::onPreferences() { @@ -1731,6 +1827,11 @@ QWidget* LightApp_Application::createWindow( const int flag ) treeModel->registerColumn( 0, EntryCol, LightApp_DataObject::EntryId ); treeModel->setAppropriate( EntryCol, Qtx::Toggled ); + // Mantis issue 0020136: Drag&Drop in OB + SUIT_ProxyModel* proxyModel = dynamic_cast(treeModel); + connect( proxyModel, SIGNAL(dropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&)), + this, SLOT(onDropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&)) ); + // temporary commented /* OB_ListView* ob_list = dynamic_cast( const_cast( ob->listView() ) ); @@ -1942,13 +2043,13 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->addPreference( tr( "PREF_ASCII_FILE" ), studyGroup, LightApp_Preferences::Bool, "Study", "ascii_file" ); pref->addPreference( tr( "PREF_STORE_POS" ), studyGroup, LightApp_Preferences::Bool, "Study", "store_positions" ); - int autoSaveInterval = pref->addPreference( tr( "PREF_AUTO_SAVE" ), studyGroup, + int autoSaveInterval = pref->addPreference( tr( "PREF_AUTO_SAVE" ), studyGroup, LightApp_Preferences::IntSpin, "Study", "auto_save_interval" ); pref->setItemProperty( "min", 0, autoSaveInterval ); pref->setItemProperty( "max", 1440, autoSaveInterval ); pref->setItemProperty( "special", tr( "PREF_AUTO_SAVE_DISABLED" ), autoSaveInterval ); - int extgroup = pref->addPreference( tr( "PREF_GROUP_EXT_BROWSER" ), genTab ); + int extgroup = pref->addPreference( tr( "PREF_GROUP_EXT_BROWSER" ), genTab, LightApp_Preferences::Auto, "ExternalBrowser", "use_external_browser"); QString platform; #ifdef WIN32 platform = "winapplication"; @@ -1969,8 +2070,8 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) int genGroup = pref->addPreference( tr( "PREF_GROUP_COMMON" ), viewTab ); pref->addPreference( tr( "PREF_DROP_DOWN_BUTTONS" ), genGroup, - LightApp_Preferences::Bool, "viewers", "drop_down_buttons" ); - + LightApp_Preferences::Bool, "viewers", "drop_down_buttons" ); + int occGroup = pref->addPreference( tr( "PREF_GROUP_OCCVIEWER" ), viewTab ); int vtkGroup = pref->addPreference( tr( "PREF_GROUP_VTKVIEWER" ), viewTab ); @@ -1991,6 +2092,8 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "min", 1.0E-06, occTS ); pref->setItemProperty( "max", 1000, occTS ); + pref->addPreference( tr( "PREF_RELATIVE_SIZE" ), occGroup, LightApp_Preferences::Bool, "OCCViewer", "relative_size" ); + int occStyleMode = pref->addPreference( tr( "PREF_NAVIGATION" ), occGroup, LightApp_Preferences::Selector, "OCCViewer", "navigation_mode" ); @@ -2039,6 +2142,8 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "indexes", aModeIndexesList, occZoomingStyleMode ); #endif + pref->addPreference( tr( "PREF_SHOW_STATIC_TRIHEDRON" ), occGroup, LightApp_Preferences::Bool, "OCCViewer", "show_static_trihedron" ); + // VTK Viewer int vtkGen = pref->addPreference( "", vtkGroup, LightApp_Preferences::Frame ); pref->setItemProperty( "columns", 2, vtkGen ); @@ -2095,6 +2200,7 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "indexes", aModeIndexesList, vtkSpeedMode ); pref->addPreference( tr( "PREF_SHOW_STATIC_TRIHEDRON" ), vtkGen, LightApp_Preferences::Bool, "VTKViewer", "show_static_trihedron" ); + pref->addPreference( tr( "PREF_DYNAMIC_PRESELECTION" ), vtkGen, LightApp_Preferences::Bool, "VTKViewer", "dynamic_preselection" ); int vtkSM = pref->addPreference( tr( "PREF_FRAME_SPACEMOUSE" ), vtkGroup, LightApp_Preferences::GroupBox ); pref->setItemProperty( "columns", 2, vtkSM ); @@ -2193,6 +2299,8 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "strings", aValuesList, legendPosition ); pref->setItemProperty( "indexes", anIndicesList, legendPosition ); + pref->addPreference( tr( "PREF_LEGEND_FONT" ), plot2dGroup, LightApp_Preferences::Font, "Plot2d", "LegendFont" ); + int curveType = pref->addPreference( tr( "PREF_CURVE_TYPE" ), plot2dGroup, LightApp_Preferences::Selector, "Plot2d", "CurveType" ); aValuesList.clear(); @@ -2229,6 +2337,14 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "Background" ); + pref->addPreference( tr( "PREF_FONT_COLOR" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "LegendFontColor" ); + + pref->addPreference( tr( "PREF_SELECTED_FONT_COLOR" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "SelectedLegendFontColor" ); + + pref->addPreference( tr( "PREF_VIEWER_SELECTION" ), plot2dGroup, + LightApp_Preferences::Color, "Plot2d", "SelectionColor" ); + + int dirTab = pref->addPreference( tr( "PREF_TAB_DIRECTORIES" ), salomeCat ); int dirGroup = pref->addPreference( tr( "PREF_GROUP_DIRECTORIES" ), dirTab ); pref->addPreference( tr( "" ), dirGroup, @@ -2302,21 +2418,22 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString if ( !resMgr ) return; - if ( sec == "viewers" && param == "drop_down_buttons" ) + if ( sec == "viewers" && param == "drop_down_buttons" ) { ViewManagerList vmlist = viewManagers(); foreach( SUIT_ViewManager* vm, vmlist ) { QVector vwlist = vm->getViews(); foreach( SUIT_ViewWindow* vw, vwlist ) - if ( vw ) vw->setDropDownButtons( resMgr->booleanValue( "viewers", "drop_down_buttons", true ) ); + if ( vw ) vw->setDropDownButtons( resMgr->booleanValue( "viewers", "drop_down_buttons", true ) ); } } #ifndef DISABLE_OCCVIEWER - if ( sec == QString( "OCCViewer" ) && param == QString( "trihedron_size" ) ) + if ( sec == QString( "OCCViewer" ) && (param == QString( "trihedron_size" ) || param == QString( "relative_size" ))) { - double sz = resMgr->doubleValue( sec, param, -1 ); + double sz = resMgr->doubleValue( sec, "trihedron_size", -1 ); + bool relative = resMgr->booleanValue( sec, "relative_size", true ); QList lst; viewManagers( OCCViewer_Viewer::Type(), lst ); QListIterator it( lst ); @@ -2327,12 +2444,34 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString continue; OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm; - occVM->setTrihedronSize( sz ); + occVM->setTrihedronSize( sz, relative ); occVM->getAISContext()->UpdateCurrentViewer(); } } #endif +#ifndef DISABLE_OCCVIEWER + if ( sec == QString( "OCCViewer" ) && param == QString( "show_static_trihedron" ) ) + { + bool isVisible = resMgr->booleanValue( "OCCViewer", "show_static_trihedron", true ); + QList lst; + viewManagers( OCCViewer_Viewer::Type(), lst ); + QListIterator it( lst ); + while ( it.hasNext() ) + { + SUIT_ViewModel* vm = it.next()->getViewModel(); + if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) ) + continue; + + OCCViewer_Viewer* occVM = dynamic_cast( vm ); + if( occVM ) + { + occVM->setStaticTrihedronDisplayed( isVisible ); + } + } + } +#endif + #ifndef DISABLE_OCCVIEWER if ( sec == QString( "OCCViewer" ) && param == QString( "navigation_mode" ) ) { @@ -2482,6 +2621,27 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } #endif +#ifndef DISABLE_VTKVIEWER + if ( sec == QString( "VTKViewer" ) && param == QString( "dynamic_preselection" ) ) + { + bool mode = resMgr->booleanValue( "VTKViewer", "dynamic_preselection", true ); + QList lst; +#ifndef DISABLE_SALOMEOBJECT + viewManagers( SVTK_Viewer::Type(), lst ); + QListIterator it( lst ); + while ( it.hasNext() ) + { + SUIT_ViewModel* vm = it.next()->getViewModel(); + if ( !vm || !vm->inherits( "SVTK_Viewer" ) ) + continue; + + SVTK_Viewer* vtkVM = dynamic_cast( vm ); + if( vtkVM ) vtkVM->setDynamicPreSelection( mode ); + } +#endif + } +#endif + #ifndef DISABLE_VTKVIEWER if ( sec == QString( "VTKViewer" ) && param == QString( "show_static_trihedron" ) ) { @@ -2632,6 +2792,27 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString if ( dynamic_cast( desktop() ) ) dynamic_cast( desktop() )->workstack()->setOpaqueResize( opaqueResize ); } + + if ( sec == "ExternalBrowser" && param == "use_external_browser" ) { + if ( resMgr->booleanValue("ExternalBrowser", "use_external_browser", false ) ) + { + if(QtxWebBrowser::webBrowser()) + QtxWebBrowser::webBrowser()->close(); + } + } + +#ifndef DISABLE_PLOT2DVIEWER + if ( sec == "Plot2d" ) { + if( param == "SelectionColor" ) { + QColor c = resMgr->colorValue( sec, param ); + Plot2d_Object::setSelectionColor(c); + } + else if (param == "SelectedLegendFontColor") { + QColor c = resMgr->colorValue( sec, param ); + Plot2d_Object::setHighlightedLegendTextColor(c); + } + } +#endif } /*! @@ -3099,7 +3280,7 @@ void LightApp_Application::moduleIconNames( QMap& iconMap ) co */ void LightApp_Application::contextMenuPopup( const QString& type, QMenu* thePopup, QString& title ) { - //Add "Rename" item + //Add "Rename" item LightApp_SelectionMgr* selMgr = LightApp_Application::selectionMgr(); bool cacheIsOn = selMgr->isSelectionCacheEnabled(); selMgr->setSelectionCacheEnabled( true ); @@ -3114,7 +3295,7 @@ void LightApp_Application::contextMenuPopup( const QString& type, QMenu* thePopu if ( ob->shortcutKey(SUIT_DataBrowser::UpdateShortcut) ) a->setShortcut( ob->shortcutKey(SUIT_DataBrowser::UpdateShortcut) ); } - + if ( selMgr && ob ) { SALOME_ListIO selected; selMgr->selectedObjects( selected ); @@ -3122,14 +3303,14 @@ void LightApp_Application::contextMenuPopup( const QString& type, QMenu* thePopu Handle(SALOME_InteractiveObject) anIObject = selected.First(); SUIT_DataObject* obj = findObject(anIObject->getEntry()); if(obj && obj->renameAllowed()) { - QAction* a = new QAction(tr("MEN_RENAME_OBJ"), thePopup); - connect( a, SIGNAL( triggered(bool) ), ob, SLOT( onStartEditing() ) ); - if ( ob->shortcutKey(SUIT_DataBrowser::RenameShortcut) ) - a->setShortcut( ob->shortcutKey(SUIT_DataBrowser::RenameShortcut) ); - - QList acts = thePopup->actions(); - QAction* firstAction = acts.count() > 0 ? acts.first() : 0; - thePopup->insertAction(firstAction,a); + QAction* a = new QAction(tr("MEN_RENAME_OBJ"), thePopup); + connect( a, SIGNAL( triggered(bool) ), ob, SLOT( onStartEditing() ) ); + if ( ob->shortcutKey(SUIT_DataBrowser::RenameShortcut) ) + a->setShortcut( ob->shortcutKey(SUIT_DataBrowser::RenameShortcut) ); + + QList acts = thePopup->actions(); + QAction* firstAction = acts.count() > 0 ? acts.first() : 0; + thePopup->insertAction(firstAction,a); } } } @@ -3146,7 +3327,7 @@ void LightApp_Application::createEmptyStudy() if ( objectBrowser() ) objectBrowser()->updateTree(); - + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); if ( aResMgr && activeStudy() ) { int autoSaveInterval = aResMgr->integerValue( "Study", "auto_save_interval", 0 ); @@ -3208,6 +3389,15 @@ void LightApp_Application::onStylePreferences() resourceMgr()->setValue( "Style", "use_salome_style", Style_Salome::isActive() ); } +void LightApp_Application::onFullScreen(){ + if(myScreenHelper) { + if(desktop()->isFullScreen()) + myScreenHelper->switchToNormalScreen(); + else + myScreenHelper->switchToFullScreen(); + } +} + /*! Connects just added view manager */ @@ -3228,7 +3418,7 @@ void LightApp_Application::removeViewManager( SUIT_ViewManager* vm ) LightApp_Study* aStudy = dynamic_cast(activeStudy()); if (aStudy ) aStudy->removeViewMgr(vm->getGlobalId()); - + STD_Application::removeViewManager( vm ); delete vm; } @@ -3529,7 +3719,7 @@ void LightApp_Application::clearKnownViewManagers() } /*! - Copy of current selection + Copy of current selection */ void LightApp_Application::onCopy() { diff --git a/src/LightApp/LightApp_Application.h b/src/LightApp/LightApp_Application.h index 2feae74ab..f758aad1d 100644 --- a/src/LightApp/LightApp_Application.h +++ b/src/LightApp/LightApp_Application.h @@ -18,12 +18,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: LightApp_Application.h // Created: 6/20/2005 18:39:25 PM // Author: OCC team -// + #ifndef LIGHTAPP_APPLICATION_H #define LIGHTAPP_APPLICATION_H @@ -45,6 +44,7 @@ class PyConsole_Console; class LightApp_WidgetContainer; class LightApp_Preferences; class LightApp_SelectionMgr; +class LightApp_FullScreenHelper; class LightApp_DataObject; class SUIT_DataBrowser; class SUIT_Study; @@ -84,7 +84,7 @@ public: CloseId, CloseAllId, GroupAllId, PreferencesId, MRUId, ModulesListId, NewGLViewId, NewPlot2dId, NewOCCViewId, NewVTKViewId, NewQxGraphViewId, - NewQxSceneViewId = NewQxGraphViewId, StyleId, + NewQxSceneViewId = NewQxGraphViewId, StyleId, FullScreenId, UserID }; protected: @@ -232,10 +232,13 @@ protected slots: void onMRUActivated( const QString& ); void onStylePreferences(); + void onFullScreen(); private slots: void onSelection(); void onRefresh(); + void onDropped( const QMimeData*, Qt::DropAction, + int, int, const QModelIndex& ); void onPreferences(); void onPreferenceChanged( QString&, QString&, QString& ); void onRenameWindow(); @@ -289,6 +292,8 @@ protected: LightApp_Preferences* myPrefs; LightApp_SelectionMgr* mySelMgr; + LightApp_FullScreenHelper* myScreenHelper; + WinMap myWin; WinVis myWinVis; WinGeom myWinGeom; diff --git a/src/LightApp/LightApp_DataObject.cxx b/src/LightApp/LightApp_DataObject.cxx index 39a932e29..6dd9f06dc 100644 --- a/src/LightApp/LightApp_DataObject.cxx +++ b/src/LightApp/LightApp_DataObject.cxx @@ -18,11 +18,10 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File : LightApp_DataObject.cxx // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #include "LightApp_DataObject.h" #include "LightApp_Study.h" #include "LightApp_DataModel.h" @@ -30,10 +29,12 @@ #include "LightApp_Application.h" #include -#include +#include #include +#include + /*! \class LightApp_DataObject::Key \brief Represents unique data object key for the LightApp_DataObject @@ -103,12 +104,12 @@ bool LightApp_DataObject::Key::isEqual( const SUIT_DataObjectKey* other ) const */ /*! - \brief Constructor. + \brief Constructor. \param parent parent data object */ LightApp_DataObject::LightApp_DataObject( SUIT_DataObject* parent ) -: CAM_DataObject( parent ), - myCompObject( 0 ), +: CAM_DataObject( parent ), + myCompObject( 0 ), myCompDataType( "" ) { } @@ -131,7 +132,7 @@ int LightApp_DataObject::groupId() const */ QVariant LightApp_DataObject::customData(Qtx::CustomDataType type) { switch(type) { - case Qtx::IdType: + case Qtx::IdType: return EntryId; break; default: @@ -150,6 +151,39 @@ bool LightApp_DataObject::isVisible() const return r && r->study() && componentDataType() != r->study()->getVisualComponentName(); } +/*! + \brief Check if the object is dragable. + + This method can be re-implemented in the subclasses. + + \return \c true if it is possible to drag this object +*/ +bool LightApp_DataObject::isDragable() const +{ + LightApp_Module* aModule = dynamic_cast(module()); + if (aModule) { + return aModule->isDragable(this); + } + return false; +} + +/*! + \brief Check if the drop operation fo this object is possible. + + This method can be re-implemented in the subclasses. + + \param obj object being dropped + \return \c true if it is possible to drop an object \c obj + to this object +*/ +bool LightApp_DataObject::isDropAccepted() +{ + LightApp_Module* aModule = dynamic_cast(module()); + if (aModule) { + return aModule->isDropAccepted(this); + } + return false; +} /*! \brief Check if this object is can't be renamed in place @@ -168,7 +202,7 @@ bool LightApp_DataObject::renameAllowed( const int id ) const LightApp_RootObject* r = dynamic_cast( root() ); if(r && r->study()) app = dynamic_cast(r->study()->application()); - + return ( m && m->renameAllowed( entry() ) ) || ( app && app->renameAllowed( entry() ) ); } @@ -188,7 +222,8 @@ bool LightApp_DataObject::setName(const QString& name) { LightApp_Module* m = dynamic_cast( module() ); LightApp_RootObject* r = dynamic_cast( root() ); - LightApp_Application* app = (r && r->study()) ? dynamic_cast(r->study()->application()) : 0; + LightApp_Application* app = + (r && r->study()) ? dynamic_cast(r->study()->application()) : 0; return ( m && m->renameObject( entry(), name ) ) || ( app && app->renameObject( entry(), name ) ); @@ -326,7 +361,7 @@ bool LightApp_DataObject::compare( const QVariant& left, const QVariant& right, } else { // both not integer ID - int r = QString::localeAwareCompare( idsLeft[i], idsRight[i] ); + int r = QString::localeAwareCompare( idsLeft[i], idsRight[i] ); if ( !calculated && r != 0 ) { result = r < 0; calculated = true; @@ -334,7 +369,7 @@ bool LightApp_DataObject::compare( const QVariant& left, const QVariant& right, } } // we should reach this if the entries are exactly equal - return result; + return result; } return QString::localeAwareCompare( leftStr, rightStr ) < 0; } @@ -408,9 +443,9 @@ QString LightApp_ModuleObject::toolTip( const int id ) const /*! \brief Insert new child object to the children list at specified position. - + Adds component in the study for this module object if it is not done yet. - + \param obj object to be inserted \param pos position at which data object should be inserted */ @@ -442,8 +477,8 @@ void LightApp_ModuleObject::insertChild( SUIT_DataObject* obj, int pos ) */ LightApp_RootObject::LightApp_RootObject( LightApp_Study* study ) : CAM_DataObject( 0 ), - LightApp_DataObject( 0 ), - myStudy( study ) + LightApp_DataObject( 0 ), + myStudy( study ) { } @@ -459,8 +494,8 @@ LightApp_RootObject::~LightApp_RootObject() \param study pointer to the study */ void LightApp_RootObject::setStudy( LightApp_Study* study ) -{ - myStudy = study; +{ + myStudy = study; } /* @@ -468,6 +503,6 @@ void LightApp_RootObject::setStudy( LightApp_Study* study ) \return pointer to the study */ LightApp_Study* LightApp_RootObject::study() const -{ - return myStudy; -} +{ + return myStudy; +} diff --git a/src/LightApp/LightApp_DataObject.h b/src/LightApp/LightApp_DataObject.h index f87d97d63..6af26dcc8 100644 --- a/src/LightApp/LightApp_DataObject.h +++ b/src/LightApp/LightApp_DataObject.h @@ -18,11 +18,10 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File : LightApp_DataObject.h // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #ifndef LIGHTAPP_DATAOBJECT_H #define LIGHTAPP_DATAOBJECT_H @@ -38,7 +37,7 @@ class LIGHTAPP_EXPORT LightApp_DataObject : public virtual CAM_DataObject public: //! Column id - enum { + enum { EntryId = VisibilityId + 1 //!< entry column }; @@ -60,6 +59,8 @@ public: virtual QVariant customData(Qtx::CustomDataType type); virtual bool isVisible() const; + virtual bool isDragable() const; + virtual bool isDropAccepted(); virtual bool renameAllowed( const int = NameId ) const; virtual bool setName( const QString& ); @@ -90,10 +91,10 @@ public: LightApp_RootObject( LightApp_Study* ); virtual ~LightApp_RootObject(); - + void setStudy( LightApp_Study* ); LightApp_Study* study() const; - + private: LightApp_Study* myStudy; }; diff --git a/src/LightApp/LightApp_FullScreenHelper.cxx b/src/LightApp/LightApp_FullScreenHelper.cxx new file mode 100644 index 000000000..780729c07 --- /dev/null +++ b/src/LightApp/LightApp_FullScreenHelper.cxx @@ -0,0 +1,189 @@ +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File: LightApp_FullScreenHelper.h +// Created: 04/10/2011 18:44:25 PM +// Author: OCC team +// +#include +#include +#include + +#include + +#include + +#include +#include +#include + +#include "LightApp_FullScreenHelper.h" +#include "LightApp_Application.h" + + +/*! + * Constructor + */ +LightApp_FullScreenHelper::LightApp_FullScreenHelper() +{ + myStatusBarVisibility = false; +} + +/*! + * Destructor + */ +LightApp_FullScreenHelper::~LightApp_FullScreenHelper() +{ + +} + + +/*! + * Switch application to the full screen mode. + */ +void LightApp_FullScreenHelper::switchToFullScreen() { + + SUIT_Session* session = SUIT_Session::session(); + if(!session) + return; + + LightApp_Application* app = dynamic_cast( session->activeApplication() ); + + if(!app) + return; + + SUIT_Desktop* desktop = app->desktop(); + + if(!desktop) + return; + + desktop->setWindowState(desktop->windowState() ^ Qt::WindowFullScreen); + + if(desktop->menuBar()) + desktop->menuBar()->hide(); + + if(desktop->statusBar()) { + myStatusBarVisibility = desktop->statusBar()->isVisible(); + desktop->statusBar()->hide(); + QAction *act = app->action(STD_Application::ViewStatusBarId); + if(act) + act->setEnabled(false); + } + + + QList aDocWidgets = desktop->findChildren(); + myDocWidgetMap.clear(); + + QWidget* ob = app->objectBrowser(); + QObject* obParent = ob ? ob->parent() : 0; + + foreach(QDockWidget* aWidget, aDocWidgets) { + if(aWidget && aWidget->parent() == desktop) { + if( aWidget->isVisible() && aWidget != obParent ) { + aWidget->hide(); + QAction* act = aWidget->toggleViewAction(); + bool isActionEnabled = false; + if(act) { + isActionEnabled = act->isEnabled(); + if( isActionEnabled ) { + act->setEnabled(false); + } + } + + myDocWidgetMap.insert(aWidget, isActionEnabled); + } + } + } + + QList aToolBars = desktop->findChildren(); + myToolBarMap.clear(); + foreach(QToolBar* aWidget, aToolBars ) { + if( aWidget && aWidget->parent() == desktop ) { + if( aWidget->isVisible()) { + aWidget->hide(); + QAction* act = aWidget->toggleViewAction(); + bool isActionEnabled = false; + if(act) { + isActionEnabled = act->isEnabled(); + if( isActionEnabled ) { + act->setEnabled(false); + } + } + myToolBarMap.insert(aWidget, isActionEnabled); + } + } + } +} + +/*! + * Switch application to the normal screen mode. + */ +void LightApp_FullScreenHelper::switchToNormalScreen() { + + SUIT_Session* session = SUIT_Session::session(); + if(!session) + return; + + LightApp_Application* app = dynamic_cast( session->activeApplication() ); + + if(!app) + return; + + SUIT_Desktop* desktop = app->desktop(); + + if(!desktop) + return; + + desktop->setWindowState(desktop->windowState() ^ Qt::WindowFullScreen); + + + DocWidgetMap::iterator it = myDocWidgetMap.begin(); + for( ;it != myDocWidgetMap.end() ; it++ ) { + QDockWidget* aWidget = it.key(); + bool state = it.value(); + aWidget->show(); + QAction* act = aWidget->toggleViewAction(); + if(act && state) + act->setEnabled(true); + } + + ToolBarMap::iterator it1 = myToolBarMap.begin(); + for( ;it1 != myToolBarMap.end() ; it1++ ) { + QToolBar* aWidget = it1.key(); + bool state = it1.value(); + aWidget->show(); + QAction* act = aWidget->toggleViewAction(); + if(act && state) + act->setEnabled(true); + } + + if(desktop->menuBar()) + desktop->menuBar()->show(); + + if(desktop->statusBar() && myStatusBarVisibility) { + desktop->statusBar()->show(); + QAction *act = app->action(STD_Application::ViewStatusBarId); + if(act) + act->setEnabled(true); + } + +} diff --git a/src/LightApp/LightApp_FullScreenHelper.h b/src/LightApp/LightApp_FullScreenHelper.h new file mode 100644 index 000000000..a50c2c732 --- /dev/null +++ b/src/LightApp/LightApp_FullScreenHelper.h @@ -0,0 +1,59 @@ +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File: LightApp_FullScreenHelper.h +// Created: 04/10/2011 18:39:25 PM +// Author: OCC team +// +#ifndef LIGHTAPP_FULLSCREEN_H +#define LIGHTAPP_FULLSCREEN_H + +#include "LightApp.h" + +#include +#include +#include + + +class LIGHTAPP_EXPORT LightApp_FullScreenHelper { + public: + + LightApp_FullScreenHelper(); + ~LightApp_FullScreenHelper(); + + void switchToFullScreen(); + void switchToNormalScreen(); + + private: + typedef QMap DocWidgetMap; + DocWidgetMap myDocWidgetMap; + + typedef QMap ToolBarMap; + ToolBarMap myToolBarMap; + + + bool myStatusBarVisibility; + +}; + + +#endif //LIGHTAPP_FULLSCREEN_H diff --git a/src/LightApp/LightApp_Module.cxx b/src/LightApp/LightApp_Module.cxx index 811d4990c..857807f17 100644 --- a/src/LightApp/LightApp_Module.cxx +++ b/src/LightApp/LightApp_Module.cxx @@ -18,12 +18,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: LightApp_Module.cxx // Created: 6/20/2005 16:30:56 AM // Author: OCC team -// + #include "LightApp_Module.h" #include "CAM_Application.h" @@ -93,6 +92,7 @@ #include #include +#include /*!Constructor.*/ LightApp_Module::LightApp_Module( const QString& name ) @@ -156,9 +156,9 @@ void LightApp_Module::updateObjBrowser( bool theIsUpdateDataModel, if( theIsUpdateDataModel ){ if( CAM_DataModel* aDataModel = dataModel() ){ if ( LightApp_DataModel* aModel = dynamic_cast( aDataModel ) ) { - SUIT_DataObject* aParent = NULL; - if(theDataObject && theDataObject != aDataModel->root()) - aParent = theDataObject->parent(); + //SUIT_DataObject* aParent = NULL; + //if(theDataObject && theDataObject != aDataModel->root()) + // aParent = theDataObject->parent(); LightApp_DataObject* anObject = dynamic_cast(theDataObject); LightApp_Study* aStudy = dynamic_cast(getApp()->activeStudy()); @@ -703,6 +703,32 @@ void LightApp_Module::paste() { } +/*! + virtual method + \return true if module allows dragging the given object +*/ +bool LightApp_Module::isDragable(const SUIT_DataObject* /*what*/) const +{ + return false; +} + +/*! + virtual method + \return true if module allows dropping one or more objects (currently selected) on the object \c where +*/ +bool LightApp_Module::isDropAccepted(const SUIT_DataObject* /*where*/) const +{ + return false; +} + +/*! + virtual method +*/ +void LightApp_Module::dropObjects(const DataObjectList& what, Qt::DropAction action, + const SUIT_DataObject* parent, const int row) +{ +} + /*! \brief Return \c true if object can be renamed */ diff --git a/src/LightApp/LightApp_Module.h b/src/LightApp/LightApp_Module.h index b71e4622e..2d82ad2d6 100644 --- a/src/LightApp/LightApp_Module.h +++ b/src/LightApp/LightApp_Module.h @@ -18,12 +18,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: LightApp_Module.h // Created: 6/20/2005 16:25:06 AM // Author: OCC team -// + #ifndef LIGHTAPP_MODULE_H #define LIGHTAPP_MODULE_H @@ -31,6 +30,8 @@ #include "LightApp_Preferences.h" #include +#include + class LightApp_Application; class LightApp_Selection; class LightApp_Operation; @@ -39,7 +40,7 @@ class LightApp_Displayer; class LightApp_SelectionMgr; class SUIT_Study; -class SUIT_DataObject; +//class SUIT_DataObject; class SUIT_Operation; class SUIT_ViewManager; class CAM_Application; @@ -78,12 +79,11 @@ public: virtual void update( const int ); // Update viewer or/and object browser etc. in accordance with update flags - // ( see SalomeApp_UpdateFlags enumeration ). Derived modules can redefine this method + // (see SalomeApp_UpdateFlags enumeration). Derived modules can redefine this method // for their own purposes virtual void updateObjBrowser( bool = true, SUIT_DataObject* = 0 ); - // Update object bropwser ( for updating model or whole object browser use update() method - // can be used ) + // Update object browser (for updating model or whole object browser use update() method) virtual void selectionChanged(); virtual void preferencesChanged( const QString&, const QString& ); @@ -95,6 +95,10 @@ public: virtual bool canCopy() const; virtual bool canPaste() const; + virtual bool isDragable(const SUIT_DataObject* what) const; + virtual bool isDropAccepted(const SUIT_DataObject* where) const; + virtual void dropObjects(const DataObjectList& what, Qt::DropAction action, + const SUIT_DataObject* parent, const int row); virtual void copy(); virtual void paste(); virtual bool renameAllowed( const QString& ) const; @@ -133,7 +137,8 @@ protected: virtual bool reusableOperation( const int id ); int addPreference( const QString& label ); - int addPreference( const QString& label, const int pId, const int = LightApp_Preferences::Auto, + int addPreference( const QString& label, const int pId, + const int type = LightApp_Preferences::Auto, const QString& section = QString(), const QString& param = QString() ); QVariant preferenceProperty( const int, const QString& ) const; diff --git a/src/LightApp/LightApp_Plot2dSelector.cxx b/src/LightApp/LightApp_Plot2dSelector.cxx index 79b8dcd9c..05b7c514d 100755 --- a/src/LightApp/LightApp_Plot2dSelector.cxx +++ b/src/LightApp/LightApp_Plot2dSelector.cxx @@ -23,11 +23,16 @@ #include "LightApp_DataObject.h" #include "LightApp_Application.h" +#include + +#include + /*! Constructor */ LightApp_Plot2dSelector::LightApp_Plot2dSelector( Plot2d_Viewer* v, SUIT_SelectionMgr* mgr ) -: SUIT_Selector( mgr, v ) + : SUIT_Selector( mgr, v ), + myViewer(v) { if ( v ) connect( v, SIGNAL( legendSelected( const QString& ) ), this, SLOT( onSelectionChanged( const QString& ) ) ); @@ -46,16 +51,27 @@ LightApp_Plot2dSelector::~LightApp_Plot2dSelector() void LightApp_Plot2dSelector::getSelection( SUIT_DataOwnerPtrList& theList ) const { if( !myCurEntry.isNull() ) - theList.append( new LightApp_DataOwner( myCurEntry ) ); + theList.append( new LightApp_DataOwner( new SALOME_InteractiveObject(qPrintable(myCurEntry),"","") ) ); } /*!Sets selection.*/ void LightApp_Plot2dSelector::setSelection( const SUIT_DataOwnerPtrList& theList ) { - /* if( theList.count()>0 ) - myCurEntry = theList.first()->getEntry(); - else*/ - myCurEntry = QString::null; + SALOME_ListIO anIOList; + for ( SUIT_DataOwnerPtrList::const_iterator it = theList.begin(); it != theList.end(); ++it ) { + const LightApp_DataOwner* owner = dynamic_cast( (*it).operator->() ); + if ( owner ) { + if( !owner->IO().IsNull() ) { + anIOList.Append(owner->IO()); + } else if ( !owner->entry().isEmpty() ) { + anIOList.Append( new SALOME_InteractiveObject(qPrintable(owner->entry()),"","") ); + } + } + } + SPlot2d_Viewer* v = dynamic_cast(myViewer); + + if(v) + v->setObjectsSelected(anIOList); } /*!On selection changed.*/ @@ -63,4 +79,5 @@ void LightApp_Plot2dSelector::onSelectionChanged( const QString& entry ) { myCurEntry = entry; selectionChanged(); + myCurEntry = QString(); } diff --git a/src/LightApp/LightApp_Plot2dSelector.h b/src/LightApp/LightApp_Plot2dSelector.h index afe970a46..4032fa8ed 100755 --- a/src/LightApp/LightApp_Plot2dSelector.h +++ b/src/LightApp/LightApp_Plot2dSelector.h @@ -51,7 +51,8 @@ protected: virtual void setSelection( const SUIT_DataOwnerPtrList& ); private: - QString myCurEntry; + QString myCurEntry; + Plot2d_Viewer* myViewer; }; #endif diff --git a/src/LightApp/LightApp_WgViewModel.cxx b/src/LightApp/LightApp_WgViewModel.cxx index cd4d7abb7..3b6a89e82 100644 --- a/src/LightApp/LightApp_WgViewModel.cxx +++ b/src/LightApp/LightApp_WgViewModel.cxx @@ -44,7 +44,6 @@ SUIT_ViewWindow* LightApp_WgViewModel::createView( SUIT_Desktop* d ) vw = new SUIT_ViewWindow( d ); vw->setCentralWidget( myWidget ); myCreated = true; - vw->setClosable( false );/////////////////// } return vw; } diff --git a/src/LightApp/Makefile.am b/src/LightApp/Makefile.am index 4ffc98a3f..1f032bed8 100755 --- a/src/LightApp/Makefile.am +++ b/src/LightApp/Makefile.am @@ -59,7 +59,8 @@ salomeinclude_HEADERS = \ LightApp_Preferences.h \ LightApp_PreferencesDlg.h \ LightApp_UpdateFlags.h \ - LightApp_WgViewModel.h + LightApp_WgViewModel.h \ + LightApp_FullScreenHelper.h if ENABLE_PYCONSOLE salomeinclude_HEADERS += LightApp_PyInterp.h @@ -107,7 +108,8 @@ dist_libLightApp_la_SOURCES = \ LightApp_SwitchOp.cxx \ LightApp_Preferences.cxx \ LightApp_PreferencesDlg.cxx \ - LightApp_WgViewModel.cxx + LightApp_WgViewModel.cxx \ + LightApp_FullScreenHelper.cxx if ENABLE_PYCONSOLE dist_libLightApp_la_SOURCES += LightApp_PyInterp.cxx diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index a2e7e17a6..fa09126ea 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -139,6 +139,8 @@ + +
      @@ -146,7 +148,7 @@ - + @@ -166,9 +168,13 @@
      + + + + @@ -227,6 +233,7 @@
      +
      diff --git a/src/LightApp/resources/LightApp_images.ts b/src/LightApp/resources/LightApp_images.ts index 98d12bcfc..dae481992 100644 --- a/src/LightApp/resources/LightApp_images.ts +++ b/src/LightApp/resources/LightApp_images.ts @@ -31,5 +31,13 @@ APP_MODULE_ICO icon_module.png + + BROWSER_ICON + icon_default.png + + + BROWSER_CLOSE_ICON + close.png + diff --git a/src/LightApp/resources/LightApp_msg_en.ts b/src/LightApp/resources/LightApp_msg_en.ts index 574878f81..9ee4fcba3 100644 --- a/src/LightApp/resources/LightApp_msg_en.ts +++ b/src/LightApp/resources/LightApp_msg_en.ts @@ -50,6 +50,42 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASENTRY_COLUMN Entry + + BROWSER_TITLE + SALOME Help Browser + + + BROWSER_TOOLBAR_TITLE + Navigation + + + BROWSER_FILEMENU + &File + + + BROWSER_CLOSE + &Close + + + BROWSER_BACK + Go Back + + + BROWSER_FORWARD + Go Forward + + + BROWSER_FIND + &Find... + + + BROWSER_FINDNEXT + Find &next + + + BROWSER_FINDPREV + Find &previous + LightApp_Application @@ -70,6 +106,18 @@ The changes will be applied on the next application session. PRP_THEME Change style properties + + TOT_FULLSCREEN + Full screen + + + MEN_DESK_FULLSCREEN + Full screen + + + PRP_FULLSCREEN + Switch to full screen mode + INF_TOOLBAR_MODULES Modules @@ -400,7 +448,7 @@ The changes will be applied on the next application session. PREF_AUTO_SIZE_FIRST - Auto size for first column + Auto size for "Name" column PREF_RESIZE_ON_EXPAND_ITEM @@ -474,6 +522,10 @@ The changes will be applied on the next application session. PREF_VIEWER_BACKGROUND Background color + + PREF_VIEWER_SELECTION + Selection color + PREF_XYVIEWER_BACKGROUND XY View background color @@ -494,6 +546,18 @@ The changes will be applied on the next application session. PREF_FONT Font + + PREF_LEGEND_FONT + Legend font + + + PREF_FONT_COLOR + Legend font color + + + PREF_SELECTED_FONT_COLOR + Highlighted legend font color + PREF_LEFT Left @@ -627,8 +691,8 @@ The changes will be applied on the next application session. Python Console - PREF_USE_ADVANCED_SELECTION_ALGORITHM - Use Advanced Selection Algorithm + PREF_DYNAMIC_PRESELECTION + Dynamic pre-selection TOT_CLOSE diff --git a/src/LightApp/resources/LightApp_msg_fr.ts b/src/LightApp/resources/LightApp_msg_fr.ts index 3f6e03d88..786cbea35 100755 --- a/src/LightApp/resources/LightApp_msg_fr.ts +++ b/src/LightApp/resources/LightApp_msg_fr.ts @@ -18,6 +18,22 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASABOUT_CAPTION A propos de %1 + + ABOUT_BASE + Informations générales + + + ABOUT_MODULE_INFOS + Modules + + + ABOUT_UNKNOWN_VERSION + Inconnue + + + ABOUT_CLOSE + &Fermer + APP_NAME SALOME @@ -34,6 +50,42 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASENTRY_COLUMN Entrée + + BROWSER_TITLE + Aide de SALOME + + + BROWSER_TOOLBAR_TITLE + Navigation + + + BROWSER_FILEMENU + &Fichier + + + BROWSER_CLOSE + &Fermer + + + BROWSER_BACK + Reculer + + + BROWSER_FORWARD + Avancer + + + BROWSER_FIND + &Chercher... + + + BROWSER_FINDNEXT + Chercher &suivant + + + BROWSER_FINDPREV + Chercher &précédent + LightApp_Application @@ -54,6 +106,18 @@ Les modifications seront appliquées à la prochaine session. PRP_THEME Changer les propriétés du style + + TOT_FULLSCREEN + Plein écran + + + MEN_DESK_FULLSCREEN + Plein écran + + + PRP_FULLSCREEN + Basculer en mode plein écran + INF_TOOLBAR_MODULES Modules @@ -384,7 +448,7 @@ Les modifications seront appliquées à la prochaine session. PREF_AUTO_SIZE_FIRST - Taille automatique pour la première colonne + Taille automatique pour la colonne "Nom" PREF_RESIZE_ON_EXPAND_ITEM @@ -611,7 +675,7 @@ Les modifications seront appliquées à la prochaine session. Console Python - PREF_USE_ADVANCED_SELECTION_ALGORITHM + PREF_DYNAMIC_PRESELECTION Utiliser l'algorithme de sélection avancée diff --git a/src/OCCViewer/Makefile.am b/src/OCCViewer/Makefile.am index 7597a2b16..993692633 100755 --- a/src/OCCViewer/Makefile.am +++ b/src/OCCViewer/Makefile.am @@ -117,7 +117,8 @@ dist_salomeres_DATA = \ resources/occ_view_style_switch.png \ resources/occ_view_zooming_style_switch.png \ resources/occ_view_maximized.png \ - resources/occ_view_minimized.png + resources/occ_view_minimized.png \ + resources/occ_view_sync.png nodist_salomeres_DATA = \ OCCViewer_images.qm \ diff --git a/src/OCCViewer/OCCViewer_AxialScaleDlg.cxx b/src/OCCViewer/OCCViewer_AxialScaleDlg.cxx index cbe928988..fcb674f40 100644 --- a/src/OCCViewer/OCCViewer_AxialScaleDlg.cxx +++ b/src/OCCViewer/OCCViewer_AxialScaleDlg.cxx @@ -141,7 +141,7 @@ void OCCViewer_AxialScaleDlg::Update() { // Get values from the OCC view double aScaleFactor[3]; - myView->getViewPort()->getView()->AxialScale( aScaleFactor[0], aScaleFactor[1], aScaleFactor[2] ); + myView->getViewPort()->getAxialScale( aScaleFactor[0], aScaleFactor[1], aScaleFactor[2] ); m_sbXcoeff->setValue( aScaleFactor[0] ); m_sbYcoeff->setValue( aScaleFactor[1] ); m_sbZcoeff->setValue( aScaleFactor[2] ); @@ -162,7 +162,7 @@ void OCCViewer_AxialScaleDlg::accept() bool OCCViewer_AxialScaleDlg::apply() { double aScaleFactor[3] = { m_sbXcoeff->value(), m_sbYcoeff->value(), m_sbZcoeff->value() }; - myView->getViewPort()->getView()->SetAxialScale( aScaleFactor[0], aScaleFactor[1], aScaleFactor[2] ); + myView->getViewPort()->setAxialScale( aScaleFactor[0], aScaleFactor[1], aScaleFactor[2] ); return true; } diff --git a/src/OCCViewer/OCCViewer_ViewManager.cxx b/src/OCCViewer/OCCViewer_ViewManager.cxx index 9e186e87c..f8344d108 100755 --- a/src/OCCViewer/OCCViewer_ViewManager.cxx +++ b/src/OCCViewer/OCCViewer_ViewManager.cxx @@ -28,8 +28,8 @@ Constructor */ OCCViewer_ViewManager::OCCViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop, bool DisplayTrihedron ) -: SUIT_ViewManager( study, theDesktop, new OCCViewer_Viewer( DisplayTrihedron, false ) ) -{ +: SUIT_ViewManager( study, theDesktop, new OCCViewer_Viewer( DisplayTrihedron ) ) +{ setTitle( tr( "OCC_VIEW_TITLE" ) ); } diff --git a/src/OCCViewer/OCCViewer_ViewModel.cxx b/src/OCCViewer/OCCViewer_ViewModel.cxx index 52b3521d5..240277c31 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.cxx +++ b/src/OCCViewer/OCCViewer_ViewModel.cxx @@ -30,6 +30,7 @@ #include "SUIT_ViewManager.h" #include "SUIT_Desktop.h" #include "SUIT_Session.h" +#include "SUIT_ResourceMgr.h" #include "QtxActionToolMgr.h" @@ -57,16 +58,17 @@ #include #include -#include "utilities.h" +#include /*! Constructor \param DisplayTrihedron - is trihedron displayed */ -OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron, bool DisplayStaticTrihedron ) +OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron) : SUIT_ViewModel(), - myShowStaticTrihedron( DisplayStaticTrihedron ), - myColors(4, Qt::black) + myColors(4, Qt::black), + myIsRelative(true), + myTrihedronSize(100) { // init CasCade viewers myV3dViewer = OCCViewer_VService::Viewer3d( "", (short*) "Viewer3d", "", 1000., @@ -127,6 +129,11 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron, bool DisplayStaticTri // selection mySelectionEnabled = true; myMultiSelectionEnabled = true; + + + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if(resMgr) + myShowStaticTrihedron = resMgr->booleanValue( "OCCViewer", "show_static_trihedron", true ); } /*! @@ -719,10 +726,13 @@ double OCCViewer_Viewer::trihedronSize() const Changes trihedron size \param sz - new size */ -void OCCViewer_Viewer::setTrihedronSize( const double sz ) +void OCCViewer_Viewer::setTrihedronSize( const double sz, bool isRelative ) { - if ( !myTrihedron.IsNull() ) - myTrihedron->SetSize( sz ); + if ( myTrihedronSize != sz || isRelative != myIsRelative) { + myTrihedronSize = sz; + myIsRelative = isRelative; + updateTrihedron(); + } } /*! @@ -773,3 +783,84 @@ void OCCViewer_Viewer::setBackgroundColor( int theViewId, const QColor& theColor if ( theColor.isValid() && theViewId >= 0 && theViewId < myColors.count() ) myColors[theViewId] = theColor; } + + +/*! + Set the show static trihedron flag +*/ +void OCCViewer_Viewer::setStaticTrihedronDisplayed(const bool on) { + if(myShowStaticTrihedron != on) { + OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView()); + if(!aView) + return; + + OCCViewer_ViewPort3d* vp3d = aView->getViewPort(); + if(vp3d) { + myShowStaticTrihedron = on; + vp3d->updateStaticTriedronVisibility(); + } + } +} + +/*! + Get new and current trihedron size corresponding to the current model size +*/ +bool OCCViewer_Viewer::computeTrihedronSize( double& theNewSize, double& theSize ) +{ + theNewSize = 100; + theSize = 100; + + //SRN: BUG IPAL8996, a usage of method ActiveView without an initialization + Handle(V3d_Viewer) viewer = getViewer3d(); + viewer->InitActiveViews(); + if(!viewer->MoreActiveViews()) return false; + + Handle(V3d_View) view3d = viewer->ActiveView(); + //SRN: END of fix + + if ( view3d.IsNull() ) + return false; + + double Xmin = 0, Ymin = 0, Zmin = 0, Xmax = 0, Ymax = 0, Zmax = 0; + double aMaxSide; + + view3d->View()->MinMaxValues( Xmin, Ymin, Zmin, Xmax, Ymax, Zmax ); + + if ( Xmin == RealFirst() || Ymin == RealFirst() || Zmin == RealFirst() || + Xmax == RealLast() || Ymax == RealLast() || Zmax == RealLast() ) + return false; + + aMaxSide = Xmax - Xmin; + if ( aMaxSide < Ymax -Ymin ) aMaxSide = Ymax -Ymin; + if ( aMaxSide < Zmax -Zmin ) aMaxSide = Zmax -Zmin; + + // IPAL21687 + // The boundary box of the view may be initialized but nullified + // (case of infinite objects) + if ( aMaxSide < Precision::Confusion() ) + return false; + + float aSizeInPercents = SUIT_Session::session()->resourceMgr()->doubleValue("OCCViewer","trihedron_size", 100.); + + static float EPS = 5.0E-3; + theSize = getTrihedron()->Size(); + theNewSize = aMaxSide*aSizeInPercents / 100.0; + + return fabs( theNewSize - theSize ) > theSize * EPS || + fabs( theNewSize - theSize) > theNewSize * EPS; +} + +/*! + * Update the size of the trihedron + */ +void OCCViewer_Viewer::updateTrihedron() { + if(myIsRelative){ + double newSz, oldSz; + + if(computeTrihedronSize(newSz, oldSz)) + myTrihedron->SetSize(newSz); + + } else if(myTrihedron->Size() != myTrihedronSize) { + myTrihedron->SetSize(myTrihedronSize); + } +} diff --git a/src/OCCViewer/OCCViewer_ViewModel.h b/src/OCCViewer/OCCViewer_ViewModel.h index 4e27361ee..8f08f28c6 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.h +++ b/src/OCCViewer/OCCViewer_ViewModel.h @@ -55,7 +55,7 @@ class OCCVIEWER_EXPORT OCCViewer_Viewer: public SUIT_ViewModel public: static QString Type() { return "OCCViewer"; } - OCCViewer_Viewer( bool DisplayTrihedron = true, bool DisplayStaticTrihedron = true ); + OCCViewer_Viewer( bool DisplayTrihedron = true); virtual ~OCCViewer_Viewer(); void update(); @@ -88,7 +88,15 @@ public: virtual void setTrihedronShown( const bool ); double trihedronSize() const; - virtual void setTrihedronSize( const double ); + virtual void setTrihedronSize( const double , bool isRelative = true); + + bool trihedronRelative() const {return myIsRelative; } + + // a utility function, used by SALOME_View_s methods + bool computeTrihedronSize( double& theNewSize, double& theSize ); + + void updateTrihedron(); + virtual OCCViewer_ViewWindow* createSubWindow(); @@ -111,7 +119,9 @@ public: bool isMultiSelectionEnabled() const { return myMultiSelectionEnabled; } int getSelectionCount() const { return (!myAISContext.IsNull())? myAISContext->NbSelected():0; } + bool isStaticTrihedronDisplayed() { return myShowStaticTrihedron; } + void setStaticTrihedronDisplayed(const bool on); /* Selection management */ bool highlight( const Handle(AIS_InteractiveObject)&, bool, bool=true ); @@ -157,12 +167,15 @@ private: bool mySelectionEnabled; bool myMultiSelectionEnabled; + bool myIsRelative; //QColor myBgColor; QPoint myStartPnt, myEndPnt; bool myShowStaticTrihedron; + double myTrihedronSize; + QVector myColors; }; diff --git a/src/OCCViewer/OCCViewer_ViewPort.cxx b/src/OCCViewer/OCCViewer_ViewPort.cxx index 1c7917b72..ea81421cb 100755 --- a/src/OCCViewer/OCCViewer_ViewPort.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort.cxx @@ -490,6 +490,16 @@ QPaintEngine* OCCViewer_ViewPort::paintEngine() const } }*/ +/*! + Performs synchronization of view parameters with the specified view. + Returns \c true if synchronization is done successfully or \c false otherwise. + Default implementation does nothing (return \c false) +*/ +bool OCCViewer_ViewPort::synchronize( OCCViewer_ViewPort* ) +{ + return false; +} + /*! Sets the background color with color selection dialog. [ virtual protected slot ] */ diff --git a/src/OCCViewer/OCCViewer_ViewPort.h b/src/OCCViewer/OCCViewer_ViewPort.h index ba3938b32..69b80490b 100755 --- a/src/OCCViewer/OCCViewer_ViewPort.h +++ b/src/OCCViewer/OCCViewer_ViewPort.h @@ -95,6 +95,9 @@ protected: // void onCreatePopup( QPopupMenu* ); // void onDestroyPopup( QPopupMenu* ); +public slots: + virtual bool synchronize( OCCViewer_ViewPort* ); + protected slots: virtual void onChangeBgColor(); @@ -103,6 +106,7 @@ signals: void vpMouseEvent( QMouseEvent* ); void vpDrawExternal( QPainter* ); void vpChangeBGColor( QColor ); + void vpTransformed( OCCViewer_ViewPort* ); private: void initialize(); diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.cxx b/src/OCCViewer/OCCViewer_ViewPort3d.cxx index 7a8ef22ec..7419c10a7 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort3d.cxx @@ -143,6 +143,8 @@ bool OCCViewer_ViewPort3d::mapView( const Handle(V3d_View)& view ) return true; } + + /*! Sets new CASCADE view on viewport. Returns the previous active view. [ public ] */ @@ -263,6 +265,17 @@ void OCCViewer_ViewPort3d::setZSize( double zsize ) myPerspView->SetZSize( zsize );*/ } +/*! + Get axial scale to the view +*/ +void OCCViewer_ViewPort3d::getAxialScale( double& xScale, double& yScale, double& zScale ) +{ + xScale = yScale = zScale = 1.; + + if ( !activeView().IsNull() ) + activeView()->AxialScale( xScale, yScale, zScale ); +} + /*! Returns the background color [ virtual public ] */ @@ -338,8 +351,10 @@ void OCCViewer_ViewPort3d::onUpdate() */ void OCCViewer_ViewPort3d::fitRect( const QRect& rect ) { - if ( !activeView().IsNull() ) + if ( !activeView().IsNull() ) { activeView()->WindowFit( rect.left(), rect.top(), rect.right(), rect.bottom() ); + emit vpTransformed( this ); + } } /*! @@ -368,6 +383,7 @@ void OCCViewer_ViewPort3d::zoom( int x0, int y0, int x, int y ) else #endif activeView()->Zoom( x0 + y0, 0, x + y, 0 ); + emit vpTransformed( this ); } } @@ -376,8 +392,10 @@ void OCCViewer_ViewPort3d::zoom( int x0, int y0, int x, int y ) */ void OCCViewer_ViewPort3d::setCenter( int x, int y ) { - if ( !activeView().IsNull() ) + if ( !activeView().IsNull() ) { activeView()->Place( x, y, myScale ); + emit vpTransformed( this ); + } } /*! @@ -385,8 +403,10 @@ void OCCViewer_ViewPort3d::setCenter( int x, int y ) */ void OCCViewer_ViewPort3d::pan( int dx, int dy ) { - if ( !activeView().IsNull() ) + if ( !activeView().IsNull() ) { activeView()->Pan( dx, dy, 1.0 ); + emit vpTransformed( this ); + } } /*! @@ -470,6 +490,7 @@ void OCCViewer_ViewPort3d::rotate( int x, int y, default: break; } + emit vpTransformed( this ); } // setZSize( getZSize() ); } @@ -486,6 +507,7 @@ void OCCViewer_ViewPort3d::endRotation() activeView()->ZFitAll(1.); activeView()->SetZSize(0.); activeView()->Update(); + emit vpTransformed( this ); } } @@ -538,6 +560,7 @@ void OCCViewer_ViewPort3d::fitAll( bool keepScale, bool withZ, bool upd ) Standard_Real margin = 0.01; activeView()->FitAll( margin, withZ, upd ); activeView()->SetZSize(0.); + emit vpTransformed( this ); } /*! @@ -546,9 +569,11 @@ void OCCViewer_ViewPort3d::fitAll( bool keepScale, bool withZ, bool upd ) void OCCViewer_ViewPort3d::reset() { // double zsize = getZSize(); - if ( !activeView().IsNull() ) + if ( !activeView().IsNull() ) { activeView()->Reset(); + emit vpTransformed( this ); // setZSize( zsize ); + } } /*! @@ -563,8 +588,21 @@ void OCCViewer_ViewPort3d::rotateXY( double degrees ) double X, Y, Z; activeView()->Convert( x, y, X, Y, Z ); activeView()->Rotate( 0, 0, degrees * Standard_PI180, X, Y, Z ); + emit vpTransformed( this ); } +/*! + Set axial scale to the view +*/ +void OCCViewer_ViewPort3d::setAxialScale( double xScale, double yScale, double zScale ) +{ + if ( activeView().IsNull() ) + return; + + activeView()->SetAxialScale( xScale, yScale, zScale ); + emit vpTransformed( this ); +} + /*! Passed the handle of native window of the component to CASCADE view. [ private ] */ @@ -620,3 +658,47 @@ bool OCCViewer_ViewPort3d::mapped( const Handle(V3d_View)& view ) const { return ( !view.IsNull() && view->View()->IsDefined() ); } + +/*! + Performs synchronization of view parameters with the specified view. + Returns \c true if synchronization is done successfully or \c false otherwise. + Default implementation does nothing (return \c false) +*/ +bool OCCViewer_ViewPort3d::synchronize( OCCViewer_ViewPort* view ) +{ + bool ok = false; + OCCViewer_ViewPort3d* vp3d = qobject_cast( view ); + if ( vp3d ) { + bool blocked = blockSignals( false ); + Handle(V3d_View) aView3d = getView(); + Handle(V3d_View) aRefView3d = vp3d->getView(); + aView3d->SetImmediateUpdate( Standard_False ); + aView3d->SetViewMapping( aRefView3d->ViewMapping() ); + aView3d->SetViewOrientation( aRefView3d->ViewOrientation() ); + aView3d->ZFitAll(); + aView3d->SetImmediateUpdate( Standard_True ); + aView3d->Update(); + blockSignals( blocked ); + ok = true; + } + return ok; +} + +/* + * Show/Hide static triedron + */ +void OCCViewer_ViewPort3d::updateStaticTriedronVisibility() { + OCCViewer_ViewWindow* aVW = dynamic_cast( parentWidget()->parentWidget()->parentWidget() ); + if ( aVW ) { + OCCViewer_Viewer* aViewModel = dynamic_cast( aVW->getViewManager()->getViewModel() ); + Handle(V3d_View) aView = activeView(); + if ( aViewModel ){ + if(aViewModel->isStaticTrihedronDisplayed()) { + aView->TriedronDisplay( Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.05, V3d_ZBUFFER ); + } else { + aView->TriedronErase(); + } + aView->Update(); + } + } +} diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.h b/src/OCCViewer/OCCViewer_ViewPort3d.h index 72fc74de2..ea977007b 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.h +++ b/src/OCCViewer/OCCViewer_ViewPort3d.h @@ -48,11 +48,11 @@ public: virtual ~OCCViewer_ViewPort3d(); public: - Handle(V3d_View) getView() const; - Handle(V3d_View) setView( const Handle(V3d_View)& ); - Handle(V3d_Viewer) getViewer() const; + Handle(V3d_View) getView() const; + Handle(V3d_View) setView( const Handle(V3d_View)& ); + Handle(V3d_Viewer) getViewer() const; - void setAnimationMode(bool theDegenerated); + void setAnimationMode(bool theDegenerated); virtual void setBackgroundColor( const QColor& color); virtual QColor backgroundColor() const; @@ -63,13 +63,17 @@ public: virtual int getBgImgHeight(){return myBgImgHeight; }; virtual int getBgImgWidth() {return myBgImgWidth; }; + virtual void updateStaticTriedronVisibility(); + // void setActive( V3d_TypeOfView ); - virtual bool syncronize( const OCCViewer_ViewPort3d* ); + virtual bool syncronize( const OCCViewer_ViewPort3d* ); + + double getZSize() const; + void setZSize( double ); - double getZSize() const; - void setZSize( double ); + void getAxialScale( double&, double&, double& ); - virtual void onUpdate(); + virtual void onUpdate(); // TRANSFORMATIONS virtual void reset(); @@ -80,6 +84,7 @@ public: virtual void zoom( int, int, int, int ); virtual void fitAll( bool keepScale = false, bool withZ = true, bool upd = true ); virtual void rotateXY( double ); + virtual void setAxialScale( double, double, double ); virtual void startRotation( int, int, int, const gp_Pnt& ); virtual void rotate( int, int, int, const gp_Pnt& ); @@ -89,6 +94,9 @@ public: void setAdvancedZoomingEnabled( const bool theState ) { myIsAdvancedZoomingEnabled = theState; } bool isAdvancedZoomingEnabled() const { return myIsAdvancedZoomingEnabled; } +public slots: + virtual bool synchronize( OCCViewer_ViewPort* ); + protected: // EVENTS virtual void paintEvent( QPaintEvent* ); @@ -98,11 +106,11 @@ protected: virtual void attachWindow( const Handle(V3d_View)&, const Handle(Aspect_Window)& ); private: - Handle(V3d_View) activeView() const; - Handle(V3d_View) inactiveView() const; - bool mapView( const Handle(V3d_View)& ); - bool setWindow( const Handle(V3d_View)& ); - bool mapped( const Handle(V3d_View)& ) const; + Handle(V3d_View) activeView() const; + Handle(V3d_View) inactiveView() const; + bool mapView( const Handle(V3d_View)& ); + bool setWindow( const Handle(V3d_View)& ); + bool mapped( const Handle(V3d_View)& ) const; private: Handle(V3d_View) myOrthoView; diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx index a412cbc7e..c6d6ef54e 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ b/src/OCCViewer/OCCViewer_ViewWindow.cxx @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,7 @@ #include #include #include +#include #include #include @@ -284,6 +286,11 @@ void OCCViewer_ViewWindow::initLayout() myCubeAxesDlg->initialize(); } +OCCViewer_ViewWindow* OCCViewer_ViewWindow::getView( const int mode ) const +{ + return mode == get2dMode() ? const_cast( this ) : 0; +} + /*! \brief Detect viewer operation according the the mouse button pressed and key modifiers used. @@ -1227,6 +1234,16 @@ void OCCViewer_ViewWindow::createActions() aAction->setStatusTip(tr("DSC_MINIMIZE_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onMaximizedView())); toolMgr()->registerAction( aAction, MaximizedId ); + + // Synchronize view + aAction = new QtxAction(tr("MNU_SYNCHRONIZE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_SYNC" ) ), + tr( "MNU_SYNCHRONIZE_VIEW" ), 0, this ); + aAction->setStatusTip(tr("DSC_SYNCHRONIZE_VIEW")); + aAction->setMenu( new QMenu( this ) ); + aAction->setCheckable(true); + connect(aAction->menu(), SIGNAL(aboutToShow()), this, SLOT(updateSyncViews())); + connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onSynchronizeView(bool))); + toolMgr()->registerAction( aAction, SynchronizeId ); } /*! @@ -1305,7 +1322,8 @@ void OCCViewer_ViewWindow::createToolBar() #endif toolMgr()->append( AmbientId, tid ); - toolMgr()->append( MaximizedId, tid); + toolMgr()->append( MaximizedId, tid ); + toolMgr()->append( SynchronizeId, tid ); } /*! @@ -1579,7 +1597,7 @@ void OCCViewer_ViewWindow::onRestoreView() \brief Restore view parameters. \param anItem view parameters */ -void OCCViewer_ViewWindow::performRestoring( const viewAspect& anItem ) +void OCCViewer_ViewWindow::performRestoring( const viewAspect& anItem, bool baseParamsOnly ) { Handle(V3d_View) aView3d = myViewPort->getView(); @@ -1592,57 +1610,62 @@ void OCCViewer_ViewWindow::performRestoring( const viewAspect& anItem ) aView3d->SetEye( anItem.eyeX, anItem.eyeY, anItem.eyeZ ); aView3d->SetProj( anItem.projX, anItem.projY, anItem.projZ ); aView3d->SetAxialScale( anItem.scaleX, anItem.scaleY, anItem.scaleZ ); - myModel->setTrihedronShown( anItem.isVisible ); - myModel->setTrihedronSize( anItem.size ); + + if ( !baseParamsOnly ) { + + myModel->setTrihedronShown( anItem.isVisible ); + myModel->setTrihedronSize( anItem.size ); #if OCC_VERSION_LARGE > 0x06030009 // available only with OCC-6.3-sp10 and higher version - // graduated trihedron - bool anIsVisible = anItem.gtIsVisible; - OCCViewer_AxisWidget::AxisData anAxisData[3]; - anAxisData[0].DrawName = anItem.gtDrawNameX; - anAxisData[1].DrawName = anItem.gtDrawNameZ; - anAxisData[2].DrawName = anItem.gtDrawNameZ; - anAxisData[0].Name = anItem.gtNameX; - anAxisData[1].Name = anItem.gtNameZ; - anAxisData[2].Name = anItem.gtNameZ; - anAxisData[0].NameColor = QColor( anItem.gtNameColorRX, - anItem.gtNameColorGX, - anItem.gtNameColorBX ); - anAxisData[1].NameColor = QColor( anItem.gtNameColorRY, - anItem.gtNameColorGY, - anItem.gtNameColorBY ); - anAxisData[2].NameColor = QColor( anItem.gtNameColorRZ, - anItem.gtNameColorGZ, - anItem.gtNameColorBZ ); - anAxisData[0].DrawValues = anItem.gtDrawValuesX; - anAxisData[1].DrawValues = anItem.gtDrawValuesY; - anAxisData[2].DrawValues = anItem.gtDrawValuesZ; - anAxisData[0].NbValues = anItem.gtNbValuesX; - anAxisData[1].NbValues = anItem.gtNbValuesY; - anAxisData[2].NbValues = anItem.gtNbValuesZ; - anAxisData[0].Offset = anItem.gtOffsetX; - anAxisData[1].Offset = anItem.gtOffsetY; - anAxisData[2].Offset = anItem.gtOffsetZ; - anAxisData[0].Color = QColor( anItem.gtColorRX, - anItem.gtColorGX, - anItem.gtColorBX ); - anAxisData[1].Color = QColor( anItem.gtColorRY, - anItem.gtColorGY, - anItem.gtColorBY ); - anAxisData[2].Color = QColor( anItem.gtColorRZ, - anItem.gtColorGZ, - anItem.gtColorBZ ); - anAxisData[0].DrawTickmarks = anItem.gtDrawTickmarksX; - anAxisData[1].DrawTickmarks = anItem.gtDrawTickmarksY; - anAxisData[2].DrawTickmarks = anItem.gtDrawTickmarksZ; - anAxisData[0].TickmarkLength = anItem.gtTickmarkLengthX; - anAxisData[1].TickmarkLength = anItem.gtTickmarkLengthY; - anAxisData[2].TickmarkLength = anItem.gtTickmarkLengthZ; - - myCubeAxesDlg->SetData( anIsVisible, anAxisData ); - myCubeAxesDlg->ApplyData( aView3d ); + // graduated trihedron + bool anIsVisible = anItem.gtIsVisible; + OCCViewer_AxisWidget::AxisData anAxisData[3]; + anAxisData[0].DrawName = anItem.gtDrawNameX; + anAxisData[1].DrawName = anItem.gtDrawNameZ; + anAxisData[2].DrawName = anItem.gtDrawNameZ; + anAxisData[0].Name = anItem.gtNameX; + anAxisData[1].Name = anItem.gtNameZ; + anAxisData[2].Name = anItem.gtNameZ; + anAxisData[0].NameColor = QColor( anItem.gtNameColorRX, + anItem.gtNameColorGX, + anItem.gtNameColorBX ); + anAxisData[1].NameColor = QColor( anItem.gtNameColorRY, + anItem.gtNameColorGY, + anItem.gtNameColorBY ); + anAxisData[2].NameColor = QColor( anItem.gtNameColorRZ, + anItem.gtNameColorGZ, + anItem.gtNameColorBZ ); + anAxisData[0].DrawValues = anItem.gtDrawValuesX; + anAxisData[1].DrawValues = anItem.gtDrawValuesY; + anAxisData[2].DrawValues = anItem.gtDrawValuesZ; + anAxisData[0].NbValues = anItem.gtNbValuesX; + anAxisData[1].NbValues = anItem.gtNbValuesY; + anAxisData[2].NbValues = anItem.gtNbValuesZ; + anAxisData[0].Offset = anItem.gtOffsetX; + anAxisData[1].Offset = anItem.gtOffsetY; + anAxisData[2].Offset = anItem.gtOffsetZ; + anAxisData[0].Color = QColor( anItem.gtColorRX, + anItem.gtColorGX, + anItem.gtColorBX ); + anAxisData[1].Color = QColor( anItem.gtColorRY, + anItem.gtColorGY, + anItem.gtColorBY ); + anAxisData[2].Color = QColor( anItem.gtColorRZ, + anItem.gtColorGZ, + anItem.gtColorBZ ); + anAxisData[0].DrawTickmarks = anItem.gtDrawTickmarksX; + anAxisData[1].DrawTickmarks = anItem.gtDrawTickmarksY; + anAxisData[2].DrawTickmarks = anItem.gtDrawTickmarksZ; + anAxisData[0].TickmarkLength = anItem.gtTickmarkLengthX; + anAxisData[1].TickmarkLength = anItem.gtTickmarkLengthY; + anAxisData[2].TickmarkLength = anItem.gtTickmarkLengthZ; + + myCubeAxesDlg->SetData( anIsVisible, anAxisData ); + myCubeAxesDlg->ApplyData( aView3d ); #endif + } // if ( !baseParamsOnly ) + myRestoreFlag = 0; } @@ -2445,3 +2468,139 @@ void OCCViewer_ViewWindow::updateViewAspects( const viewAspectList& aViewList ) { myViewAspects = aViewList; } + +void OCCViewer_ViewWindow::synchronizeView( OCCViewer_ViewWindow* viewWindow, int id ) +{ + OCCViewer_ViewWindow* otherViewWindow = 0; + QList compatibleViews; + + bool isSync = viewWindow->toolMgr()->action( SynchronizeId )->isChecked(); + + int vwid = viewWindow->getId(); + + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) return; + + QList wmlist; + app->viewManagers( viewWindow->getViewManager()->getType(), wmlist ); + + foreach( SUIT_ViewManager* wm, wmlist ) { + QVector vwlist = wm->getViews(); + + foreach( SUIT_ViewWindow* vw, vwlist ) { + OCCViewer_ViewWindow* occVW = dynamic_cast( vw ); + if ( !occVW ) continue; + + // check only compatible types + occVW = occVW->getView( viewWindow->get2dMode() ); + if ( occVW ) { + if ( occVW->getId() == id ) + otherViewWindow = occVW; + else if ( occVW != viewWindow ) + compatibleViews.append( occVW ); + } + } + } + + if ( isSync && id ) { + // remove all possible disconnections + foreach( OCCViewer_ViewWindow* vw, compatibleViews ) { + // disconnect target view + vw->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), viewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + viewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), vw->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + if ( otherViewWindow ) { + // disconnect source view + vw->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), otherViewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + otherViewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), vw->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + } + QAction* a = vw->toolMgr()->action( SynchronizeId ); + if ( a ) { + int anid = a->data().toInt(); + if ( a->isChecked() && ( anid == id || anid == vwid ) ) { + bool blocked = a->blockSignals( true ); + a->setChecked( false ); + a->blockSignals( blocked ); + } + } + } + if ( otherViewWindow ) { + // reconnect source and target view + otherViewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), viewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + viewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), otherViewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + otherViewWindow->getViewPort()->connect( viewWindow->getViewPort(), SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + viewWindow->getViewPort()->connect( otherViewWindow->getViewPort(), SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + // synchronize target view with source view + viewWindow->getViewPort()->synchronize( otherViewWindow->getViewPort() ); + viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); + otherViewWindow->toolMgr()->action( SynchronizeId )->setData( viewWindow->getId() ); + if ( !otherViewWindow->toolMgr()->action( SynchronizeId )->isChecked() ) { + bool blocked = otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( true ); + otherViewWindow->toolMgr()->action( SynchronizeId )->setChecked( true ); + otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( blocked ); + } + } + } + else if ( otherViewWindow ) { + // reconnect source and target view + otherViewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), viewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + viewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), otherViewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); + viewWindow->getViewPort()->synchronize( otherViewWindow->getViewPort() ); + viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); + if ( otherViewWindow->toolMgr()->action( SynchronizeId )->data().toInt() == viewWindow->getId() && otherViewWindow->toolMgr()->action( SynchronizeId )->isChecked() ) { + bool blocked = otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( true ); + otherViewWindow->toolMgr()->action( SynchronizeId )->setChecked( false ); + otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( blocked ); + } + } +} + +/*! + "Synchronize View" action slot. +*/ +void OCCViewer_ViewWindow::onSynchronizeView(bool checked) +{ + QAction* a = qobject_cast( sender() ); + if ( a ) { + synchronizeView( this, a->data().toInt() ); + } +} + +/*! + Update list of available view for the "Synchronize View" action +*/ +void OCCViewer_ViewWindow::updateSyncViews() +{ + QAction* anAction = toolMgr()->action( SynchronizeId ); + if ( anAction && anAction->menu() ) { + int currentId = anAction->data().toInt(); + anAction->menu()->clear(); + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( app ) { + QList wmlist; + app->viewManagers( getViewManager()->getType(), wmlist ); + foreach( SUIT_ViewManager* wm, wmlist ) { + QVector vwlist = wm->getViews(); + foreach ( SUIT_ViewWindow* vw, vwlist ) { + OCCViewer_ViewWindow* occVW = dynamic_cast( vw ); + if ( !occVW || occVW == this ) continue; + // list only compatible types + OCCViewer_ViewWindow* subWindow = occVW->getView( get2dMode() ); + if ( subWindow && subWindow != this ) { + QAction* a = anAction->menu()->addAction( occVW->windowTitle() ); + if ( subWindow->getId() == currentId ) { + QFont f = a->font(); + f.setBold( true ); + a->setFont( f ); + } + a->setData( subWindow->getId() ); + connect( a, SIGNAL( triggered(bool) ), this, SLOT( onSynchronizeView(bool) ) ); + } + } + } + } + if ( anAction->menu()->actions().isEmpty() ) { + anAction->setData( 0 ); + anAction->menu()->addAction( tr( "MNU_SYNC_NO_VIEW" ) ); + } + } +} diff --git a/src/OCCViewer/OCCViewer_ViewWindow.h b/src/OCCViewer/OCCViewer_ViewWindow.h index 7eb3f87f8..bb91bc1e1 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.h +++ b/src/OCCViewer/OCCViewer_ViewWindow.h @@ -120,7 +120,7 @@ public: FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId, CloneId, ClippingId, MemId, RestoreId, TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId, - SwitchInteractionStyleId, SwitchZoomingStyleId, MaximizedId, UserId }; + SwitchInteractionStyleId, SwitchZoomingStyleId, MaximizedId, SynchronizeId, UserId }; enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW, @@ -137,11 +137,13 @@ public: OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel); virtual ~OCCViewer_ViewWindow(); + virtual OCCViewer_ViewWindow* getView( const int ) const; + virtual OCCViewer_ViewPort3d* getViewPort(); virtual bool eventFilter(QObject* watched, QEvent* e); - virtual void performRestoring( const viewAspect& ); + virtual void performRestoring( const viewAspect&, bool = false ); virtual void initLayout(); @@ -184,7 +186,7 @@ public: virtual QString backgroundImageFilename() const; virtual void setBackgroundImage( const QString& ,const Aspect_FillMethod& theFillMethod); - virtual const viewAspectList& getViewAspects(); + virtual const viewAspectList& getViewAspects(); virtual void appendViewAspect( const viewAspect& ); virtual void updateViewAspects( const viewAspectList& ); virtual void clearViewAspects(); @@ -308,6 +310,13 @@ protected: double myCurScale; +private slots: + void onSynchronizeView(bool); + void updateSyncViews(); + +private: + static void synchronizeView( OCCViewer_ViewWindow*, int ); + private: OCCViewer_ClippingDlg* myClippingDlg; QtxAction* myClippingAction; diff --git a/src/OCCViewer/resources/OCCViewer_images.ts b/src/OCCViewer/resources/OCCViewer_images.ts index 40bb07511..21c1ae705 100644 --- a/src/OCCViewer/resources/OCCViewer_images.ts +++ b/src/OCCViewer/resources/OCCViewer_images.ts @@ -123,5 +123,9 @@ ICON_OCCVIEWER_MINIMIZE occ_view_minimized.png + + ICON_OCCVIEWER_SYNC + occ_view_sync.png + diff --git a/src/OCCViewer/resources/OCCViewer_msg_en.ts b/src/OCCViewer/resources/OCCViewer_msg_en.ts index 6b065ead4..1fe32ce8e 100644 --- a/src/OCCViewer/resources/OCCViewer_msg_en.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_en.ts @@ -269,7 +269,7 @@ OCC_IMAGE_FILES - Images Files (*.bmp *.png *.jpg *.jpeg) + Images Files (*.bmp *.png *.jpg *.jpeg *.eps *.ps) OCC_BG_IMAGE_FILES @@ -283,6 +283,10 @@ DSC_MINIMIZE_VIEW Minimize view + + DSC_SYNCHRONIZE_VIEW + Synchronize view + MNU_MAXIMIZE_VIEW Maximize @@ -291,6 +295,14 @@ MNU_MINIMIZE_VIEW Minimize + + MNU_SYNCHRONIZE_VIEW + Synchronize + + + MNU_SYNC_NO_VIEW + [ No appropriate view ] + OCCViewer_CreateRestoreViewDlg diff --git a/src/OCCViewer/resources/OCCViewer_msg_fr.ts b/src/OCCViewer/resources/OCCViewer_msg_fr.ts index 00ce5c0d0..746f58327 100755 --- a/src/OCCViewer/resources/OCCViewer_msg_fr.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_fr.ts @@ -269,7 +269,7 @@ OCC_IMAGE_FILES - Fichiers images (*.bmp *.png *.jpg *.jpeg) + Fichiers images (*.bmp *.png *.jpg *.jpeg *.eps *.ps) DSC_MAXIMIZE_VIEW diff --git a/src/OCCViewer/resources/occ_view_sync.png b/src/OCCViewer/resources/occ_view_sync.png new file mode 100755 index 0000000000000000000000000000000000000000..32b95228a8b97c791405a2b82d9a472aecf37c1b GIT binary patch literal 627 zcmV-(0*w8MP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipl4 z3JE46$lxyk00Hw!L_t(I%axR|Yuiu|hrcs|q>D9Vh|v%-G{c)ab#!py(IJZ|9ZL-{ zT?!Gz7(=1zR7?UIv;-Fn?XJZ`2qaW<|A643OX;AxLnshQR>$Nc0wC)uoT|!)0R%9aLf=&G|T-TmeK{i{-N-Eru*LP^!6(1GJI z@L~WeWuM>gon^2xwZ5;YJ5CD4_f>WeR$BDr^*gqA_cC=UEdTDhV*{Yn7=Tfl&p9Cj zZtw2#`^Wc!l00mYUuV5)EjnBlTU$GGxxt?ua9)7tL8?&eU?ra{^Q+bY79bZFZ?j|+ z$Aw#+7Mgs`>}>NsetSelectionMode( QAbstractItemView::ExtendedSelection ); myView->setAllColumnsShowFocus( true ); + // Mantis issue 0020136: Drag&Drop in OB + myView->setDragEnabled(TRUE); + myView->setAcceptDrops(TRUE); + myView->setDropIndicatorShown(TRUE); + myView->setDragDropMode(QAbstractItemView::DragDrop); + //myView->setDragDropMode(QAbstractItemView::InternalMove); + mySearchTool = new QtxSearchTool( this, myView ); mySearchTool->setFrameStyle( QFrame::NoFrame | QFrame::Plain ); mySearchTool->setActivators( QtxSearchTool::StandardKey | QtxSearchTool::SlashKey ); @@ -165,7 +171,6 @@ OB_Browser::OB_Browser( QWidget* parent, QAbstractItemModel* model ) connect( myView, SIGNAL( selectionChanged() ), this, SIGNAL( selectionChanged() ) ); - } /*! diff --git a/src/ObjBrowser/OB_Browser.h b/src/ObjBrowser/OB_Browser.h index 6713a9ac1..252914b4c 100755 --- a/src/ObjBrowser/OB_Browser.h +++ b/src/ObjBrowser/OB_Browser.h @@ -18,11 +18,10 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File : OB_Browser.h // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #ifndef OB_BROWSER_H #define OB_BROWSER_H @@ -70,7 +69,7 @@ public: QtxSearchTool* searchTool() const; bool isSearchToolEnabled() const; void setSearchToolEnabled( const bool ); - + int autoOpenLevel() const; void setAutoOpenLevel( const int ); void openLevels( const int = -1 ); @@ -105,7 +104,7 @@ public: unsigned long getModifiedTime() const; void setModified(); - + // san - moved to SUIT_TreeModel //OB_Updater* getUpdater() const; //virtual void setUpdater( OB_Updater* theUpdate = 0 ); @@ -120,10 +119,10 @@ signals: private slots: void onExpandAll(); void onCollapseAll(); - //void onDestroyed( SUIT_DataObject* ); - //void onDoubleClicked ( QListViewItem* ); - //void onDropped( QPtrList, QListViewItem*, int ); - + //void onDestroyed( SUIT_DataObject* ); + //void onDoubleClicked ( QListViewItem* ); + //void onDropped( QPtrList, QListViewItem*, int ); + protected: //void adjustWidth( QListViewItem* ); //virtual void updateText(); diff --git a/src/Plot2d/Makefile.am b/src/Plot2d/Makefile.am index 350af593e..7281b669d 100755 --- a/src/Plot2d/Makefile.am +++ b/src/Plot2d/Makefile.am @@ -44,6 +44,7 @@ salomeinclude_HEADERS = \ Plot2d_ViewModel.h \ Plot2d_ViewWindow.h \ Plot2d_SetupCurveDlg.h \ + Plot2d_SetupCurveScaleDlg.h \ Plot2d_ToolTip.h dist_libPlot2d_la_SOURCES = \ @@ -60,6 +61,7 @@ dist_libPlot2d_la_SOURCES = \ Plot2d_ViewModel.cxx \ Plot2d_ViewWindow.cxx \ Plot2d_SetupCurveDlg.cxx \ + Plot2d_SetupCurveScaleDlg.cxx \ Plot2d_ToolTip.cxx MOC_FILES = \ @@ -70,6 +72,7 @@ MOC_FILES = \ Plot2d_ViewModel_moc.cxx \ Plot2d_ViewWindow_moc.cxx \ Plot2d_SetupCurveDlg_moc.cxx \ + Plot2d_SetupCurveScaleDlg_moc.cxx \ Plot2d_ToolTip_moc.cxx nodist_libPlot2d_la_SOURCES = $(MOC_FILES) diff --git a/src/Plot2d/Plot2d_Curve.cxx b/src/Plot2d/Plot2d_Curve.cxx index 26285b3e8..c225716a2 100755 --- a/src/Plot2d/Plot2d_Curve.cxx +++ b/src/Plot2d/Plot2d_Curve.cxx @@ -118,7 +118,7 @@ void Plot2d_Curve::updatePlotItem( QwtPlotItem* theItem ) if ( theItem->rtti() != rtti() ) return; - QwtPlotCurve* aCurve = dynamic_cast( theItem ); + Plot2d_QwtPlotCurve* aCurve = dynamic_cast( theItem ); if ( !aCurve ) return; @@ -126,11 +126,25 @@ void Plot2d_Curve::updatePlotItem( QwtPlotItem* theItem ) Qt::PenStyle ps = Plot2d::plot2qwtLine( getLine() ); QwtSymbol::Style ms = Plot2d::plot2qwtMarker( getMarker() ); + + QColor aColor = isSelected() ? Plot2d_Object::selectionColor() : getColor(); + int lineW = getLineWidth(); + if ( isSelected() ) lineW += (lineW == 0 ? 3 : 2); - aCurve->setPen( QPen( getColor(), getLineWidth(), ps ) ); - aCurve->setSymbol( QwtSymbol( ms, QBrush( getColor() ), - QPen( getColor() ), - QSize( getMarkerSize(), getMarkerSize() ) ) ); + int markerS = isSelected() ? getMarkerSize() + 2 : getMarkerSize(); + + aCurve->setSelected(isSelected()); + + aCurve->setPen( QPen(aColor , lineW, ps ) ); + aCurve->setSymbol( QwtSymbol( ms, QBrush( aColor ), + QPen( aColor ), + QSize( markerS , markerS ) ) ); + + aCurve->setLegendPen(QPen(getColor(), getLineWidth(), ps )); + aCurve->setLegendSymbol( QwtSymbol( ms, QBrush( getColor() ), + QPen( getColor() ), + QSize( getMarkerSize() , getMarkerSize() ))); + double *x, *y; long nb = getData( &x, &y ); aCurve->setData( x, y, nb ); diff --git a/src/Plot2d/Plot2d_Histogram.cxx b/src/Plot2d/Plot2d_Histogram.cxx index df75e41b8..f2832fdf1 100644 --- a/src/Plot2d/Plot2d_Histogram.cxx +++ b/src/Plot2d/Plot2d_Histogram.cxx @@ -111,7 +111,9 @@ void Plot2d_Histogram::updatePlotItem( QwtPlotItem* theItem ) Plot2d_Object::updatePlotItem( theItem ); anItem->setData( getData() ); - anItem->setColor( getColor() ); + anItem->setLegendPen(getColor()); + anItem->setSelected(isSelected()); + anItem->setColor( isSelected() ? Plot2d_Object::selectionColor() : getColor() ); } /*! diff --git a/src/Plot2d/Plot2d_Object.cxx b/src/Plot2d/Plot2d_Object.cxx index 85b2480cb..6f07e7042 100755 --- a/src/Plot2d/Plot2d_Object.cxx +++ b/src/Plot2d/Plot2d_Object.cxx @@ -25,9 +25,33 @@ #include "Plot2d_Object.h" + +#include +#include + // color tolerance (used to compare color values) const long COLOR_DISTANCE = 100; + +// Static members +QColor Plot2d_Object::mySelectionColor; +QColor Plot2d_Object::myHighlightedLegendTextColor; + +/* + * Read colors from the resource manager. +*/ +void Plot2d_Object::initColors() { + SUIT_Session* session = SUIT_Session::session(); + if(!session) + return; + + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if(resMgr) { + mySelectionColor = resMgr->colorValue( "Plot2d", "SelectionColor", QColor(80,80,80) ); + myHighlightedLegendTextColor = resMgr->colorValue( "Plot2d", "SelectedLegendFontColor", QColor(255,255,255) ); + } +} + /*! Constructor */ @@ -53,7 +77,9 @@ Plot2d_Object::Plot2d_Object() myHorUnits( "" ), myVerUnits( "" ), myName( "" ), myXAxis( QwtPlot::xBottom ), - myYAxis( QwtPlot::yLeft ) + myYAxis( QwtPlot::yLeft ), + myIsSelected(false), + myScale ( 1.0 ) { } @@ -78,6 +104,7 @@ Plot2d_Object::Plot2d_Object( const Plot2d_Object& object ) myXAxis = object.getXAxis(); myYAxis = object.getYAxis(); myPoints = object.getPointList(); + myScale = object.getScale(); } /*! @@ -94,6 +121,7 @@ Plot2d_Object& Plot2d_Object::operator=( const Plot2d_Object& object ) myXAxis = object.getXAxis(); myYAxis = object.getYAxis(); myPoints = object.getPointList(); + myScale = object.getScale(); return *this; } @@ -121,7 +149,10 @@ void Plot2d_Object::updatePlotItem( QwtPlotItem* theItem ) theItem->attach( aPlot ); } } - theItem->setTitle( !getName().isEmpty() ? getName() : getVerTitle() ); + QString name = !getName().isEmpty() ? getName() : getVerTitle(); + if( myScale != 1.0 ) + name = name + QString("( *%1 )").arg(myScale); + theItem->setTitle( name ); } /*! @@ -211,6 +242,21 @@ QString Plot2d_Object::getName() const return myName; } +/*! + Sets object's scale factor + */ +void Plot2d_Object::setScale( double theScale ) +{ + myScale = theScale; +} +/*! + Gets object's scale factor + */ +double Plot2d_Object::getScale() const +{ + return myScale; +} + /*! Adds one point for object. */ @@ -312,7 +358,7 @@ double* Plot2d_Object::verData() const int aNPoints = nbPoints(); double* aY = new double[aNPoints]; for (int i = 0; i < aNPoints; i++) { - aY[i] = myPoints[i].y; + aY[i] = myScale * myPoints[i].y; } return aY; } @@ -327,7 +373,7 @@ long Plot2d_Object::getData( double** theX, double** theY ) const *theY = new double[aNPoints]; for (int i = 0; i < aNPoints; i++) { (*theX)[i] = myPoints[i].x; - (*theY)[i] = myPoints[i].y; + (*theY)[i] = myScale * myPoints[i].y; } return aNPoints; } @@ -450,7 +496,7 @@ double Plot2d_Object::getMinY() const double aMinY = 1e150; pointList::const_iterator aIt; for (aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) - aMinY = qMin( aMinY, (*aIt).y ); + aMinY = qMin( aMinY, myScale * (*aIt).y ); return aMinY; } @@ -462,7 +508,7 @@ double Plot2d_Object::getMaxY() const double aMaxY = -1e150; pointList::const_iterator aIt; for (aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) - aMaxY = qMax( aMaxY, (*aIt).y ); + aMaxY = qMax( aMaxY, myScale * (*aIt).y ); return aMaxY; } @@ -484,3 +530,44 @@ bool Plot2d_Object::closeColors( const QColor& color1, return tol <= 0; } +/*! + Sets object's selected property +*/ +void Plot2d_Object::setSelected(const bool on) { + myIsSelected = on; +} + +/*! + Gets object's selected property +*/ +bool Plot2d_Object::isSelected() const { + return myIsSelected; +} + +/*! + * Sets selection color of the object. +*/ +void Plot2d_Object::setSelectionColor(const QColor& c) { + mySelectionColor = c; +} + +/*! + * Return selection color of the object. +*/ +QColor Plot2d_Object::selectionColor() { + return mySelectionColor; +} + +/*! + * Sets font color of the selected legend item. +*/ +void Plot2d_Object::setHighlightedLegendTextColor(const QColor& c) { + myHighlightedLegendTextColor = c; +} + +/*! + * Sets font color of the selected legend item. +*/ +QColor Plot2d_Object::highlightedLegendTextColor() { + return myHighlightedLegendTextColor; +} diff --git a/src/Plot2d/Plot2d_Object.h b/src/Plot2d/Plot2d_Object.h index a35b8625f..bc7a5babc 100755 --- a/src/Plot2d/Plot2d_Object.h +++ b/src/Plot2d/Plot2d_Object.h @@ -71,6 +71,9 @@ public: void setName( const QString& ); QString getName() const; + void setScale( double ); + double getScale() const; + void addPoint( double, double, const QString& = QString() ); void addPoint( const Plot2d_Point& ); void insertPoint( int, double, double, const QString& = QString() ); @@ -107,8 +110,19 @@ public: double getMaxX() const; double getMinY() const; double getMaxY() const; + + void setSelected(const bool); + bool isSelected() const; static bool closeColors( const QColor&, const QColor&, int distance = -1 ); + + static void initColors(); + + static void setSelectionColor(const QColor& c); + static QColor selectionColor(); + + static void setHighlightedLegendTextColor(const QColor& c); + static QColor highlightedLegendTextColor(); protected: bool myAutoAssign; @@ -120,7 +134,14 @@ protected: QwtPlot::Axis myXAxis; QwtPlot::Axis myYAxis; + double myScale; + pointList myPoints; + bool myIsSelected; + + private: + static QColor mySelectionColor; //!< Color of the selected curve or histogram + static QColor myHighlightedLegendTextColor; //!< Color of the selected legend item font }; typedef QList objectList; diff --git a/src/Plot2d/Plot2d_PlotItems.cxx b/src/Plot2d/Plot2d_PlotItems.cxx index e86168eaf..5e23d88c4 100644 --- a/src/Plot2d/Plot2d_PlotItems.cxx +++ b/src/Plot2d/Plot2d_PlotItems.cxx @@ -23,8 +23,11 @@ // Author : Natalia ERMOLAEVA, Open CASCADE S.A.S. (natalia.donis@opencascade.com) #include "Plot2d_PlotItems.h" +#include "Plot2d_Object.h" #include +#include +#include #include #include #include @@ -71,7 +74,8 @@ const char* yAxisRight[] = { */ Plot2d_QwtLegendItem::Plot2d_QwtLegendItem( QWidget* parent ) : QwtLegendItem( parent ), - myYAxisIdentifierMode( IM_None ) + myYAxisIdentifierMode( IM_None ), + myIsSelected(false) { myYAxisLeftIcon = yAxisLeft; myYAxisRightIcon = yAxisRight; @@ -112,14 +116,76 @@ void Plot2d_QwtLegendItem::drawIdentifier( QPainter* painter, const QRect& rect } } +/*! + Update highliting on the item. +*/ +void Plot2d_QwtLegendItem::updateHighlit() { + QwtText txt = text(); + if(isSelected()) { + QColor highlightColor = Plot2d_Object::selectionColor(); + if(highlightColor != txt.backgroundBrush().color()) { + txt.setBackgroundBrush(highlightColor); + setText(txt); + } + } else if( QWidget* parent = qobject_cast(this->parent()->parent()) ) { + QPalette aPal = parent->palette(); + if(aPal.color(QPalette::Background) != txt.backgroundBrush().color()) { + txt.setBackgroundBrush(aPal.color(QPalette::Background)); + setText(txt); + } + } +} + +/*! + Sets selected property. +*/ +void Plot2d_QwtLegendItem::setSelected(const bool on) { + myIsSelected = on; +} + +/*! + Gets selected property. +*/ +bool Plot2d_QwtLegendItem::isSelected() const { + return myIsSelected; +} + + +/* + Draw text of the item. +*/ +void Plot2d_QwtLegendItem::drawText(QPainter * painter, const QRect &rect) { + painter->setPen( isSelected() ? Plot2d_Object::highlightedLegendTextColor() : + getColorFromPalette( QPalette::Text) ); + + QwtLegendItem::drawText( painter, rect ); +} + +/* + Get color from the legend pallete by 'role' flag. +*/ +QColor Plot2d_QwtLegendItem::getColorFromPalette(QPalette::ColorRole role) { + QWidget* pw = parentWidget(); + QColor col = palette().color( role ); + while( pw ) { + if ( qobject_cast( pw ) ) { + col = pw->palette().color(role ); + break; + } + pw = pw->parentWidget(); + } + return col; +} + /*! Constructor of Plot2d_QwtPlotCurve */ Plot2d_QwtPlotCurve::Plot2d_QwtPlotCurve( const QString& title, QwtPlot::Axis yAxis /*const int index*/ ) : + Plot2d_SelectableItem(), QwtPlotCurve( title ), myYAxis( yAxis ), - myYAxisIdentifierEnabled( false ) + myYAxisIdentifierEnabled( false ) { } @@ -143,10 +209,35 @@ void Plot2d_QwtPlotCurve::setYAxisIdentifierEnabled( const bool on ) */ void Plot2d_QwtPlotCurve::updateLegend( QwtLegend* legend ) const { - QwtPlotCurve::updateLegend( legend ); - - if ( legend ) { - QWidget* widget = legend->find( this ); + if ( !legend ) + return; + + QWidget* widget = legend->find( this ); + + if ( testItemAttribute(QwtPlotItem::Legend)) { + + if ( widget == NULL ) { + widget = legendItem(); + if ( widget ) { + if ( widget->inherits("QwtLegendItem") ) { + QwtLegendItem *label = (QwtLegendItem *)widget; + label->setItemMode(legend->itemMode()); + + if ( plot() ) { + QObject::connect(label, SIGNAL(clicked()), + plot(), SLOT(legendItemClicked())); + QObject::connect(label, SIGNAL(checked(bool)), + plot(), SLOT(legendItemChecked(bool))); + } + } + legend->contentsWidget()->layout()->addWidget(widget); + legend->insert(this, widget); + } + } + + QwtPlotCurve::updateLegend( legend ); + + if( Plot2d_QwtLegendItem* anItem = dynamic_cast( widget ) ) { int aMode = Plot2d_QwtLegendItem::IM_None; if( myYAxisIdentifierEnabled ) @@ -154,6 +245,12 @@ void Plot2d_QwtPlotCurve::updateLegend( QwtLegend* legend ) const Plot2d_QwtLegendItem::IM_Right : Plot2d_QwtLegendItem::IM_Left; anItem->setYAxisIdentifierMode( aMode ); + if(isSelected()) { + anItem->setCurvePen(legendPen()); + anItem->setSymbol(legendSymbol()); + } + anItem->setSelected(isSelected()); + anItem->updateHighlit(); } } } @@ -165,6 +262,62 @@ QWidget* Plot2d_QwtPlotCurve::legendItem() const { return new Plot2d_QwtLegendItem; } +/*! + Constructor. +*/ +Plot2d_SelectableItem::Plot2d_SelectableItem(): + myIsSelected(false) +{ +} + +/*! + Destructor. +*/ +Plot2d_SelectableItem::~Plot2d_SelectableItem() +{ +} + +/*! + Sets selected property. +*/ +void Plot2d_SelectableItem::setSelected( const bool on) { + myIsSelected = on; +} + +/*! + Return selected property. +*/ +bool Plot2d_SelectableItem::isSelected() const { + return myIsSelected; +} + +/*! + Sets legend pen property. +*/ +void Plot2d_SelectableItem::setLegendPen( const QPen & p) { + myLegendPen = p; +} + +/*! + Return legend pen property. +*/ +QPen Plot2d_SelectableItem::legendPen() const { + return myLegendPen; +} + +/*! + Sets legend symbol property. +*/ +void Plot2d_SelectableItem::setLegendSymbol(const QwtSymbol& s) { + myLegendSymbol = s; +} + +/*! + Sets legend symbol property. +*/ +QwtSymbol Plot2d_SelectableItem::legendSymbol() const { + return myLegendSymbol; +} /*! Constructor @@ -430,7 +583,8 @@ void Plot2d_HistogramQwtItem::drawBar( QPainter* thePainter, Constructor */ Plot2d_HistogramItem::Plot2d_HistogramItem( const QwtText& theTitle ) -: Plot2d_HistogramQwtItem( theTitle ), +: Plot2d_HistogramQwtItem( theTitle ), + Plot2d_SelectableItem(), myCrossed( true ) { } @@ -473,14 +627,16 @@ void Plot2d_HistogramItem::updateLegend( QwtLegend* theLegend ) const if ( !theWidget || !theWidget->inherits( "QwtLegendItem" ) ) return; - QwtLegendItem* anItem = ( QwtLegendItem* )theWidget; + Plot2d_QwtLegendItem* anItem = ( Plot2d_QwtLegendItem* )theWidget; QFontMetrics aFMetrics( anItem->font() ); int aSize = aFMetrics.height(); - QwtSymbol aSymbol( QwtSymbol::Rect, QBrush( color() ), - QPen( color() ), QSize( aSize, aSize ) ); + QwtSymbol aSymbol( QwtSymbol::Rect, QBrush( legendPen().color() ), + QPen( legendPen().color() ), QSize( aSize, aSize ) ); anItem->setSymbol( aSymbol ); anItem->setIdentifierMode( theLegend->identifierMode() | QwtLegendItem::ShowSymbol ); + anItem->setSelected(isSelected()); + anItem->updateHighlit(); anItem->update(); } @@ -574,6 +730,15 @@ bool Plot2d_HistogramItem::isCrossItems() const return myCrossed; } +/*! + Redefined method, which creates and returns legend item of the curve +*/ +QWidget* Plot2d_HistogramItem::legendItem() const +{ + return new Plot2d_QwtLegendItem; +} + + /*! Draws bar of histogram and on it bars of histograms with lower height. */ diff --git a/src/Plot2d/Plot2d_PlotItems.h b/src/Plot2d/Plot2d_PlotItems.h index dc7f9d89e..9ae278acc 100644 --- a/src/Plot2d/Plot2d_PlotItems.h +++ b/src/Plot2d/Plot2d_PlotItems.h @@ -44,9 +44,16 @@ public: public: void setYAxisIdentifierMode( const int ); + void updateHighlit(); + void setSelected(const bool on); + bool isSelected() const; + QColor getColorFromPalette(QPalette::ColorRole role); protected: virtual void drawIdentifier( QPainter*, const QRect& ) const; + virtual void drawText(QPainter *, const QRect &); + +private: private: int myYAxisIdentifierMode; @@ -54,9 +61,30 @@ private: QPixmap myYAxisRightIcon; int mySpacingCollapsed; int mySpacingExpanded; + bool myIsSelected; }; -class PLOT2D_EXPORT Plot2d_QwtPlotCurve : public QwtPlotCurve +class PLOT2D_EXPORT Plot2d_SelectableItem { +public: + Plot2d_SelectableItem(); + ~Plot2d_SelectableItem(); + + void setSelected( const bool ); + bool isSelected() const; + + void setLegendPen( const QPen & ); + QPen legendPen() const; + + void setLegendSymbol( const QwtSymbol& ); + QwtSymbol legendSymbol() const; + +private: + bool myIsSelected; + QPen myLegendPen; + QwtSymbol myLegendSymbol; +}; + +class PLOT2D_EXPORT Plot2d_QwtPlotCurve : public QwtPlotCurve, public Plot2d_SelectableItem { public: Plot2d_QwtPlotCurve( const QString&, QwtPlot::Axis = QwtPlot::yLeft ); @@ -117,7 +145,7 @@ private: double myReference; }; -class PLOT2D_EXPORT Plot2d_HistogramItem : public Plot2d_HistogramQwtItem +class PLOT2D_EXPORT Plot2d_HistogramItem : public Plot2d_HistogramQwtItem, public Plot2d_SelectableItem { public: explicit Plot2d_HistogramItem( const QString& = QString() ); @@ -138,6 +166,8 @@ protected: const QRect& ) const; int getCrossedTop( const QRect& ) const; + virtual QWidget* legendItem() const; + protected: QList myBarItems; bool myCrossed; diff --git a/src/Plot2d/Plot2d_SetupCurveScaleDlg.cxx b/src/Plot2d/Plot2d_SetupCurveScaleDlg.cxx new file mode 100755 index 000000000..903af1a38 --- /dev/null +++ b/src/Plot2d/Plot2d_SetupCurveScaleDlg.cxx @@ -0,0 +1,138 @@ +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : Plot2d_SetupCurveScaleDlg.cxx +// +#include "Plot2d_SetupCurveScaleDlg.h" + +#include + +#include +#include +#include +#include +#include + +#include + +const int MARGIN_SIZE = 11; +const int SPACING_SIZE = 6; +const int MIN_COMBO_WIDTH = 100; +const int MIN_SPIN_WIDTH = 50; + +/*! + \class Plot2d_SetupCurveScaleDlg + \brief Dialog box for modifying 2d curve scale factor. +*/ + +/*! + \brief Constructor. + \param parent parent widget +*/ +Plot2d_SetupCurveScaleDlg::Plot2d_SetupCurveScaleDlg( /*curveList lst, */QWidget* parent ) +: QDialog( parent ) +{ + setModal( true ); + setWindowTitle( tr("TLT_SETUP_CURVE_SCALE") ); + setSizeGripEnabled( true ); + + /************************************************************************/ + QGroupBox* GroupC1 = new QGroupBox( this ); + QHBoxLayout* GroupC1Layout = new QHBoxLayout( GroupC1 ); + GroupC1Layout->setSpacing( SPACING_SIZE ); + GroupC1Layout->setMargin( MARGIN_SIZE ); + + QLabel* aScaleLab = new QLabel( tr( "CURVE_SCALE_FACTOR" ), GroupC1 ); + myValueSpin = new QtxDoubleSpinBox( GroupC1 ); + myValueSpin->setMinimum( 0.01 ); + myValueSpin->setSingleStep( 0.1 ); + myValueSpin->setMinimumWidth( MIN_SPIN_WIDTH ); + + GroupC1Layout->addWidget( aScaleLab ); + GroupC1Layout->addWidget( myValueSpin ); + + /************************************************************************/ + QGroupBox* GroupButtons = new QGroupBox( this ); + QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons ); + GroupButtonsLayout->setSpacing( SPACING_SIZE ); + GroupButtonsLayout->setMargin( MARGIN_SIZE ); + + myOkBtn = new QPushButton( tr( "BUT_OK" ), this ); + myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this ); + + GroupButtonsLayout->addWidget( myOkBtn ); + GroupButtonsLayout->addSpacing( 10 ); + GroupButtonsLayout->addWidget( myCancelBtn ); + + /************************************************************************/ + QVBoxLayout* topLayout = new QVBoxLayout( this ); + topLayout->setSpacing( SPACING_SIZE ); + topLayout->setMargin( MARGIN_SIZE ); + topLayout->addWidget( GroupC1 ); + topLayout->addWidget( GroupButtons ); + + // default settings + setScale( 1.0 ); // no scale + + // connections + connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) ); + connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); + + SUIT_Tools::centerWidget( this, parent ); +} + +/*! + \brief Destructor. +*/ +Plot2d_SetupCurveScaleDlg::~Plot2d_SetupCurveScaleDlg() +{ +} + +/*! + \brief Set scale factor. + \param coef scale factor + \sa getScale() +*/ +void Plot2d_SetupCurveScaleDlg::setScale( const double coef ) +{ + if ( coef > myValueSpin->maximum() ){ + myValueSpin->setMaximum( coef ); + } + myValueSpin->setValue( coef ); +} + +/*! + \brief Get scale factor. + \return chosen scale factor + \sa setScale() +*/ +double Plot2d_SetupCurveScaleDlg::getScale() const +{ + return myValueSpin->value(); +} +/*! + \brief Clear value in the "Scale factor" spinbox. +*/ +void Plot2d_SetupCurveScaleDlg::setUndefinedValue() { + myValueSpin->setCleared(true); + myValueSpin->setSpecialValueText(""); +} \ No newline at end of file diff --git a/src/Plot2d/Plot2d_SetupCurveScaleDlg.h b/src/Plot2d/Plot2d_SetupCurveScaleDlg.h new file mode 100755 index 000000000..5575c4f17 --- /dev/null +++ b/src/Plot2d/Plot2d_SetupCurveScaleDlg.h @@ -0,0 +1,58 @@ +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : Plot2d_SetupCurveScaleDlg.h +// +#ifndef PLOT2D_SETUPCURVESCALEDLG_H +#define PLOT2D_SETUPCURVESCALEDLG_H + +#include "Plot2d.h" + +#include + +class QPushButton; +class QLabel; + +class QtxDoubleSpinBox; + +class PLOT2D_EXPORT Plot2d_SetupCurveScaleDlg : public QDialog +{ + Q_OBJECT + +public: + Plot2d_SetupCurveScaleDlg( /*curveList,*/ QWidget* = 0 ); + ~Plot2d_SetupCurveScaleDlg(); + +public: + void setScale( const double ); + double getScale() const; + + void setUndefinedValue(); + +private: + QPushButton* myOkBtn; + QPushButton* myCancelBtn; + QtxDoubleSpinBox* myValueSpin; +}; + +#endif // PLOT2D_SETUPCURVESCALEDLG_H + diff --git a/src/Plot2d/Plot2d_SetupViewDlg.cxx b/src/Plot2d/Plot2d_SetupViewDlg.cxx index 44f18aa0f..b5770fa90 100755 --- a/src/Plot2d/Plot2d_SetupViewDlg.cxx +++ b/src/Plot2d/Plot2d_SetupViewDlg.cxx @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -89,6 +90,9 @@ Plot2d_SetupViewDlg::Plot2d_SetupViewDlg( QWidget* parent, // legend myLegendCheck = new QCheckBox( tr( "PLOT2D_ENABLE_LEGEND" ), this ); myLegendCombo = new QComboBox( this ); + myLegendFont = new QtxFontEdit( this ); + myLegendColor = new QtxColorButton( this ); + QLabel* aLegendFontLab = new QLabel( tr( "PLOT2D_LEGEND_FONT" ), this ); myLegendCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); myLegendCombo->setMinimumWidth( MIN_COMBO_WIDTH ); myLegendCombo->addItem( tr( "PLOT2D_LEGEND_POSITION_LEFT" ) ); @@ -321,22 +325,26 @@ Plot2d_SetupViewDlg::Plot2d_SetupViewDlg( QWidget* parent, // layout widgets topLayout->addWidget( myTitleCheck, 0, 0 ); topLayout->addWidget( myTitleEdit, 0, 1, 1, 3 ); - topLayout->addWidget( aCurveLab, 1, 0 ); - topLayout->addWidget( myCurveCombo, 1, 1 ); - topLayout->addWidget( myLegendCheck, 1, 2 ); - topLayout->addWidget( myLegendCombo, 1, 3 ); - topLayout->addWidget( aMarkerLab, 2, 0 ); - topLayout->addWidget( myMarkerSpin, 2, 1 ); + topLayout->addWidget( myLegendCheck, 1, 0 ); + topLayout->addWidget( myLegendCombo, 1, 1 ); + topLayout->addWidget( aCurveLab, 1, 2 ); + topLayout->addWidget( myCurveCombo, 1, 3 ); + topLayout->addWidget( aLegendFontLab,2, 0 ); + topLayout->addWidget( myLegendFont, 2, 1 ); + topLayout->addWidget( myLegendColor, 2, 2 ); + + topLayout->addWidget( aMarkerLab, 3, 0 ); + topLayout->addWidget( myMarkerSpin, 3, 1 ); QHBoxLayout* bgLayout = new QHBoxLayout; bgLayout->addWidget( myBackgroundBtn ); bgLayout->addStretch(); - topLayout->addWidget( aBGLab, 2, 2 ); - topLayout->addLayout( bgLayout, 2, 3 ); - topLayout->addWidget( aScaleGrp, 3, 0, 1, 4 ); - topLayout->addWidget( aTabWidget, 4, 0, 1, 4 ); - topLayout->addWidget( myDefCheck, 5, 0, 1, 4 ); - topLayout->setRowStretch( 5, 5 ); - - topLayout->addLayout( btnLayout, 6, 0, 1, 4 ); + topLayout->addWidget( aBGLab, 3, 2 ); + topLayout->addLayout( bgLayout, 3, 3 ); + topLayout->addWidget( aScaleGrp, 4, 0, 1, 4 ); + topLayout->addWidget( aTabWidget, 5, 0, 1, 4 ); + topLayout->addWidget( myDefCheck, 6, 0, 1, 4 ); + topLayout->setRowStretch( 6, 5 ); + + topLayout->addLayout( btnLayout, 7, 0, 1, 4 ); if ( !showDefCheck ) myDefCheck->hide(); @@ -543,12 +551,16 @@ int Plot2d_SetupViewDlg::getCurveType() \brief Set legend attribute. \param if \c true legend is shown \param pos legend position: 0 (left), 1 (right), 2 (top), 3 (bottom) - \sa isLegendEnabled(), getLegendPos() + \param fnt legend font + \param col legend font color + \sa isLegendEnabled(), getLegendPos(), getLegendFont() */ -void Plot2d_SetupViewDlg::setLegend( bool enable, int pos ) +void Plot2d_SetupViewDlg::setLegend( bool enable, int pos, const QFont& fnt, const QColor& col ) { myLegendCheck->setChecked( enable ); myLegendCombo->setCurrentIndex( pos ); + myLegendFont->setCurrentFont( fnt ); + myLegendColor->setColor( col ); onLegendChecked(); } @@ -572,6 +584,26 @@ int Plot2d_SetupViewDlg::getLegendPos() return myLegendCombo->currentIndex(); } +/*! + \brief Get legend font. + \return legend font + \sa setLegend() +*/ +QFont Plot2d_SetupViewDlg::getLegendFont() +{ + return myLegendFont->currentFont(); +} + +/*! + \brief Get legend font color. + \return legend font color + \sa setLegend() +*/ +QColor Plot2d_SetupViewDlg::getLegendColor() +{ + return myLegendColor->color(); +} + /*! \brief Set marker size. \param size marker size diff --git a/src/Plot2d/Plot2d_SetupViewDlg.h b/src/Plot2d/Plot2d_SetupViewDlg.h index c36385964..50c7e8c37 100755 --- a/src/Plot2d/Plot2d_SetupViewDlg.h +++ b/src/Plot2d/Plot2d_SetupViewDlg.h @@ -36,6 +36,7 @@ class QLineEdit; class QComboBox; class QPushButton; class QtxColorButton; +class QtxFontEdit; class PLOT2D_EXPORT Plot2d_SetupViewDlg : public QDialog { @@ -63,9 +64,11 @@ public: void setCurveType( const int ); int getCurveType(); - void setLegend( bool, int ); + void setLegend( bool, int, const QFont&, const QColor& ); bool isLegendEnabled(); int getLegendPos(); + QFont getLegendFont(); + QColor getLegendColor(); void setMarkerSize( const int ); int getMarkerSize(); @@ -108,6 +111,8 @@ private: QLineEdit* myTitleYEdit; QLineEdit* myTitleY2Edit; QtxColorButton* myBackgroundBtn; + QtxColorButton* myLegendColor; + QtxFontEdit* myLegendFont; QCheckBox* myXGridCheck; QSpinBox* myXGridSpin; QCheckBox* myYGridCheck; diff --git a/src/Plot2d/Plot2d_ViewFrame.cxx b/src/Plot2d/Plot2d_ViewFrame.cxx index 09ddbcc12..1a231a758 100755 --- a/src/Plot2d/Plot2d_ViewFrame.cxx +++ b/src/Plot2d/Plot2d_ViewFrame.cxx @@ -157,7 +157,8 @@ Plot2d_ViewFrame::Plot2d_ViewFrame( QWidget* parent, const QString& title ) : QWidget (parent, 0), myOperation( NoOpId ), myCurveType( 1 ), - myShowLegend( true ), myLegendPos( 1 ), + myShowLegend( true ), myLegendPos( 1 ), myLegendFont("Helvetic",12), + myLegendColor(Qt::black), myMarkerSize( DEFAULT_MARKER_SIZE ), myBackground( Qt::white ), myTitle( "" ), myXTitle( "" ), myYTitle( "" ), myY2Title( "" ), @@ -209,6 +210,8 @@ Plot2d_ViewFrame::Plot2d_ViewFrame( QWidget* parent, const QString& title ) setVerScaleMode( myYMode, false ); setBackgroundColor( myBackground ); setLegendPos( myLegendPos ); + setLegendFont( myLegendFont ); + setLegendFontColor( myLegendColor ); showLegend( myShowLegend, false ); myPlot->replot(); @@ -374,6 +377,8 @@ void Plot2d_ViewFrame::readPreferences() myShowLegend = resMgr->booleanValue( "Plot2d", "ShowLegend", myShowLegend ); myLegendPos = resMgr->integerValue( "Plot2d", "LegendPos", myLegendPos ); + myLegendFont = resMgr->fontValue( "Plot2d", "LegendFont", myLegendFont ); + myLegendColor = resMgr->colorValue( "Plot2d", "LegendFontColor", myLegendColor ); myMarkerSize = resMgr->integerValue( "Plot2d", "MarkerSize", myMarkerSize ); myBackground = resMgr->colorValue( "Plot2d", "Background", myBackground ); @@ -414,6 +419,8 @@ void Plot2d_ViewFrame::writePreferences() resMgr->setValue( "Plot2d", "CurveType", myCurveType ); resMgr->setValue( "Plot2d", "ShowLegend", myShowLegend ); resMgr->setValue( "Plot2d", "LegendPos", myLegendPos ); + resMgr->setValue( "Plot2d", "LegendFont", myLegendFont ); + resMgr->setValue( "Plot2d", "LegendFontColor", myLegendColor ); resMgr->setValue( "Plot2d", "MarkerSize", myMarkerSize ); resMgr->setValue( "Plot2d", "Background", myBackground ); resMgr->setValue( "Plot2d", "ShowTitle", myTitleEnabled ); @@ -632,7 +639,7 @@ void Plot2d_ViewFrame::displayObject( Plot2d_Object* object, bool update ) { if ( !object ) return; - + if ( object->getYAxis() == QwtPlot::yRight ) mySecondY = true; @@ -780,6 +787,18 @@ void Plot2d_ViewFrame::updateLegend( const Plot2d_Prs* prs ) } } +/*! + update legend +*/ +void Plot2d_ViewFrame::updateLegend() { + if ( myPlot->getLegend() ) { + ObjectDict::iterator it = myObjects.begin(); + for( ; it != myObjects.end(); ++it ) + it.key()->updateLegend(myPlot->getLegend()); + } +} + + /*! Fits the view to see all data */ @@ -1028,7 +1047,7 @@ void Plot2d_ViewFrame::onSettings() if (mySecondY) dlg->setY2Title( myY2TitleEnabled, myY2Title ); dlg->setCurveType( myCurveType ); - dlg->setLegend( myShowLegend, myLegendPos ); + dlg->setLegend( myShowLegend, myLegendPos, myLegendFont, myLegendColor ); dlg->setMarkerSize( myMarkerSize ); dlg->setBackgroundColor( myBackground ); dlg->setScaleMode(myXMode, myYMode); @@ -1062,6 +1081,13 @@ void Plot2d_ViewFrame::onSettings() if ( myLegendPos != dlg->getLegendPos() ) { setLegendPos( dlg->getLegendPos() ); } + if ( myLegendFont != dlg->getLegendFont() ) { + setLegendFont( dlg->getLegendFont() ); + } + if ( myLegendColor != dlg->getLegendColor() ) { + setLegendFontColor( dlg->getLegendColor() ); + } + // marker size if ( myMarkerSize != dlg->getMarkerSize() ) { setMarkerSize( dlg->getMarkerSize(), false ); @@ -1182,11 +1208,13 @@ void Plot2d_ViewFrame::showLegend( bool show, bool update ) QwtLegend* legend = myPlot->legend(); if ( !legend ) { legend = new QwtLegend( myPlot ); - legend->setFrameStyle( QFrame::Box | QFrame::Sunken ); + legend->setFrameStyle( QFrame::Box | QFrame::Sunken ); } legend->setItemMode( QwtLegend::ClickableItem ); myPlot->insertLegend( legend ); setLegendPos( myLegendPos ); + setLegendFont( myLegendFont ); + setLegendFontColor( myLegendColor ); } else myPlot->insertLegend( 0 ); @@ -1227,6 +1255,48 @@ int Plot2d_ViewFrame::getLegendPos() const return myLegendPos; } +/*! + Sets legend font +*/ +void Plot2d_ViewFrame::setLegendFont( const QFont& fnt ) +{ + myLegendFont = fnt; + QwtLegend* legend = myPlot->legend(); + if ( legend ) { + legend->setFont(fnt); + } +} + +/*! + Gets legend font +*/ +QFont Plot2d_ViewFrame::getLegendFont() const +{ + return myLegendFont; +} + +/*! + Gets legend font color +*/ +QColor Plot2d_ViewFrame::getLegendFontColor() const +{ + return myLegendColor; +} + +/*! + Sets legend font color +*/ +void Plot2d_ViewFrame::setLegendFontColor( const QColor& col ) +{ + myLegendColor = col; + QwtLegend* legend = myPlot->legend(); + if ( legend ) { + QPalette pal = legend->palette(); + pal.setColor( QPalette::Text, col ); + legend->setPalette( pal ); + } +} + /*! Sets new marker size */ @@ -1244,6 +1314,8 @@ void Plot2d_ViewFrame::setMarkerSize( const int size, bool update ) QwtSymbol aSymbol = crv->symbol(); aSymbol.setSize( myMarkerSize, myMarkerSize ); crv->setSymbol( aSymbol ); + if(it.value()) + it.value()->setMarkerSize( myMarkerSize ); } } if ( update ) @@ -1274,6 +1346,7 @@ void Plot2d_ViewFrame::setBackgroundColor( const QColor& color ) aPal.setColor( QPalette::Background, myBackground ); } myPlot->getLegend()->setPalette( aPal ); + updateLegend(); } Repaint(); } diff --git a/src/Plot2d/Plot2d_ViewFrame.h b/src/Plot2d/Plot2d_ViewFrame.h index e35b2ce71..874188919 100755 --- a/src/Plot2d/Plot2d_ViewFrame.h +++ b/src/Plot2d/Plot2d_ViewFrame.h @@ -96,6 +96,7 @@ public: void updateObject( Plot2d_Object*, bool = false ); void updateLegend( const Plot2d_Prs* ); + void updateLegend(); void fitAll(); void fitArea( const QRect& ); void fitData( const int, const double, const double, @@ -117,6 +118,10 @@ public: void showLegend( bool, bool = true ); void setLegendPos( int ); int getLegendPos() const; + void setLegendFont( const QFont& ); + QFont getLegendFont() const; + void setLegendFontColor( const QColor& ); + QColor getLegendFontColor() const; void setMarkerSize( const int, bool = true ); int getMarkerSize() const; void setBackgroundColor( const QColor& ); @@ -212,6 +217,8 @@ protected: int myCurveType; bool myShowLegend; int myLegendPos; + QFont myLegendFont; + QColor myLegendColor; int myMarkerSize; QColor myBackground; QString myTitle, myXTitle, myYTitle, myY2Title; diff --git a/src/Plot2d/Plot2d_ViewModel.cxx b/src/Plot2d/Plot2d_ViewModel.cxx index 0caefe4ea..c2fd139cf 100755 --- a/src/Plot2d/Plot2d_ViewModel.cxx +++ b/src/Plot2d/Plot2d_ViewModel.cxx @@ -40,6 +40,7 @@ Plot2d_Viewer::Plot2d_Viewer(bool theAutoDel) { myPrs = 0; myAutoDel = theAutoDel; + Plot2d_Object::initColors(); } /*! diff --git a/src/Plot2d/Plot2d_ViewModel.h b/src/Plot2d/Plot2d_ViewModel.h index 205f93c60..f120c988c 100755 --- a/src/Plot2d/Plot2d_ViewModel.h +++ b/src/Plot2d/Plot2d_ViewModel.h @@ -40,7 +40,7 @@ class PLOT2D_EXPORT Plot2d_Viewer: public SUIT_ViewModel public: static QString Type() { return "Plot2d"; } - + Plot2d_Viewer(bool theAutoDel = false); ~Plot2d_Viewer(); diff --git a/src/Plot2d/resources/Plot2d_msg_en.ts b/src/Plot2d/resources/Plot2d_msg_en.ts index 20d717d6c..81a5ede48 100644 --- a/src/Plot2d/resources/Plot2d_msg_en.ts +++ b/src/Plot2d/resources/Plot2d_msg_en.ts @@ -341,6 +341,10 @@ Logarithmic scale for ordinate axis is not allowed. PLOT2D_ENABLE_LEGEND Show legend + + PLOT2D_LEGEND_FONT + Legend font + DSC_ZOOM_VIEW Zoom the view @@ -584,4 +588,15 @@ Logarithmic scale for ordinate axis is not allowed. Background color + + Plot2d_SetupCurveScaleDlg + + TLT_SETUP_CURVE_SCALE + Curve(s) scale + + + CURVE_SCALE_FACTOR + Scale factor + + diff --git a/src/PyConsole/PyConsole_Console.cxx b/src/PyConsole/PyConsole_Console.cxx index d8fdf13f5..afba1a711 100644 --- a/src/PyConsole/PyConsole_Console.cxx +++ b/src/PyConsole/PyConsole_Console.cxx @@ -41,6 +41,8 @@ #include #include +#include + /*! \brief Constructor. @@ -64,6 +66,12 @@ PyConsole_Console::PyConsole_Console( QWidget* parent, PyConsole_Interp* interp QVBoxLayout* lay = new QVBoxLayout( this ); lay->setMargin( 0 ); myEditor = new PyConsole_Editor( myInterp, this ); + char* synchronous = getenv("PYTHON_CONSOLE_SYNC"); + if (synchronous && atoi(synchronous)) + { + MESSAGE("Python console is synchronous"); + myEditor->setIsSync(true); + } myEditor->viewport()->installEventFilter( this ); lay->addWidget( myEditor ); diff --git a/src/Qtx/Makefile.am b/src/Qtx/Makefile.am index 7d86c1c29..2c58c840d 100755 --- a/src/Qtx/Makefile.am +++ b/src/Qtx/Makefile.am @@ -38,6 +38,7 @@ salomeinclude_HEADERS = \ QtxActionMgr.h \ QtxActionSet.h \ QtxActionToolMgr.h \ + QtxBiColorTool.h \ QtxColorButton.h \ QtxColorScale.h \ QtxComboBox.h \ @@ -76,7 +77,8 @@ salomeinclude_HEADERS = \ QtxWorkspace.h \ QtxWorkspaceAction.h \ QtxWorkstack.h \ - QtxWorkstackAction.h + QtxWorkstackAction.h \ + QtxWebBrowser.h #VSR: not yet migrated to Qt4 files # \ @@ -96,6 +98,7 @@ dist_libqtx_la_SOURCES = \ QtxActionMgr.cxx \ QtxActionSet.cxx \ QtxActionToolMgr.cxx \ + QtxBiColorTool.cxx \ QtxColorButton.cxx \ QtxColorScale.cxx \ QtxComboBox.cxx \ @@ -133,7 +136,8 @@ dist_libqtx_la_SOURCES = \ QtxWorkspace.cxx \ QtxWorkspaceAction.cxx \ QtxWorkstack.cxx \ - QtxWorkstackAction.cxx + QtxWorkstackAction.cxx \ + QtxWebBrowser.cxx #VSR: not yet migrated to Qt4 files # \ @@ -148,6 +152,7 @@ MOC_FILES = \ QtxActionMgr_moc.cxx \ QtxActionSet_moc.cxx \ QtxActionToolMgr_moc.cxx \ + QtxBiColorTool_moc.cxx \ QtxColorButton_moc.cxx \ QtxColorScale_moc.cxx \ QtxComboBox_moc.cxx \ @@ -181,7 +186,8 @@ MOC_FILES = \ QtxWorkspace_moc.cxx \ QtxWorkspaceAction_moc.cxx \ QtxWorkstack_moc.cxx \ - QtxWorkstackAction_moc.cxx + QtxWorkstackAction_moc.cxx \ + QtxWebBrowser_moc.cxx #VSR: not yet migrated to Qt4 files # \ @@ -191,7 +197,7 @@ MOC_FILES = \ nodist_libqtx_la_SOURCES = $(MOC_FILES) libqtx_la_CPPFLAGS = $(QT_INCLUDES) -libqtx_la_LDFLAGS = $(QT_MT_LIBS) +libqtx_la_LDFLAGS = $(QT_MT_LIBS) $(OGL_LIBS) nodist_salomeres_DATA = \ Qtx_msg_fr.qm diff --git a/src/Qtx/Qtx.cxx b/src/Qtx/Qtx.cxx index 9d0f92e36..fd1993b3e 100755 --- a/src/Qtx/Qtx.cxx +++ b/src/Qtx/Qtx.cxx @@ -47,6 +47,8 @@ #include #include +#define BICOLOR_CHANGE_HUE + /*! \class Qtx \brief A set of helpful utility functions. @@ -1112,6 +1114,106 @@ bool Qtx::stringToColor( const QString& str, QColor& color ) return res; } +/*! + \brief Convert bi-color value to the string representation. + + Bi-color value is specified as main color and integer delta + value that is used to calculate secondary color by changing + paremeters of the main color ("saturation" and "value" + components in HSV notation). + + The resulting string consists of two sub-strings separated by + '|' symbol. The first part represents main color + (see colorToString() for more details), the second part is a + delta value. + + Backward conversion can be done with stringToBiColor() method. + + \param color color to be converted + \param delta delta value + \return string representation of the bi-color value + + \sa stringToBiColor(), stringToColor() +*/ +QString Qtx::biColorToString( const QColor& color, const int delta ) +{ + return QString("%1|%2").arg( Qtx::colorToString( color ) ).arg( delta ); +} + +/*! + \brief Restore bi-color value from the string representation. + + Bi-color value is specified as main color and integer delta + value that is used to calculate secondary color by changing + paremeters of the main color ("saturation" and "value" + components in HSV notation). + + The parameter \a str should consist of two sub-strings separated + by '|' symbol. The first part represents main color + (see stringToColor() for more details), the second part is a + delta value. + + Backward conversion can be done with biColorToString() method. + + \param str string representation of the bi-color value + \param color resulting color value + \param delta resulting delta value + \return \c true if the conversion is successful and \c false otherwise + + \sa biColorToString(), stringToColor(), rgbSet() +*/ +bool Qtx::stringToBiColor( const QString& str, QColor& color, int& delta ) +{ + QStringList data = str.split( "|", QString::KeepEmptyParts ); + QColor c; + int d = 0; + bool ok = data.count() > 0 && Qtx::stringToColor( data[0], c ); + bool dok = false; + if ( data.count() > 1 ) d = data[1].toInt( &dok ); + ok = ok && dok; + color = ok ? c : QColor(); + delta = ok ? d : 0; + return ok; +} + +/*! + \brief Compute secondary color value from specified main color + and delta. + + Secondary color is calculated by changing paremeters of the main + color ("saturation" and "value" components in HSV notation) using + specified delta. + + If main color is invalid, result of the function is also invalid color. + + \param color source main color + \param delta delta value + \return resulting secondary color + + \sa biColorToString(), stringToBiColor() +*/ +QColor Qtx::mainColorToSecondary( const QColor& color, int delta ) +{ + QColor cs = color; + if ( cs.isValid() ) { + int val = qMin( 255, qMax( cs.value() + delta, 0 ) ); + int sat = qMin( 255, qMax( cs.saturation() + delta-(val-cs.value()), 0 ) ); +#ifdef BICOLOR_CHANGE_HUE + const int BICOLOR_HUE_MAXDELTA = 40; + int dh = delta-(val-cs.value())-(sat-cs.saturation()); + dh = qMin( BICOLOR_HUE_MAXDELTA, qAbs( dh ) ) * ( dh > 0 ? 1 : -1 ); + //int hue = qMin( 359, qMax( cs.hue() + delta-(val-cs.value())-(sat-cs.saturation()), 0 ) ); + //int hue = qMin( 359, qMax( cs.hue() + delta-(val-cs.value())-ds, 0 ) ); + int hue = cs.hue() + dh; + if ( hue < 0 ) hue = 360 - hue; +#else + int hue = cs.hue(); +#endif + cs.setHsv( hue, sat, val ); + } + return cs; +} + /*! \brief Dump linear gradient to the string description. \param gradient linear gradient to be converted diff --git a/src/Qtx/Qtx.h b/src/Qtx/Qtx.h index 2f7fda280..4d1b49efd 100755 --- a/src/Qtx/Qtx.h +++ b/src/Qtx/Qtx.h @@ -191,6 +191,9 @@ public: static QString colorToString( const QColor& ); static bool stringToColor( const QString&, QColor& ); + static QString biColorToString( const QColor&, const int ); + static bool stringToBiColor( const QString&, QColor&, int& ); + static QColor mainColorToSecondary( const QColor&, int ); static QString gradientToString( const QLinearGradient& ); static QString gradientToString( const QRadialGradient& ); diff --git a/src/Qtx/QtxBiColorTool.cxx b/src/Qtx/QtxBiColorTool.cxx new file mode 100644 index 000000000..1352ea520 --- /dev/null +++ b/src/Qtx/QtxBiColorTool.cxx @@ -0,0 +1,216 @@ +// Copyright (C) 2007-2011 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 +// + +// File: QtxBiColorTool.cxx +// Author: Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) + +#include "QtxBiColorTool.h" +#include "QtxColorButton.h" + +#include +#include +#include +#include +#include + +const int BICOLOR_MAX_DELTA = 100; + +/*! + \class QtxBiColorTool::ColorLabel + \brief Draw colored label (for secondary color) + \internal +*/ +class QtxBiColorTool::ColorLabel: public QFrame +{ +public: + ColorLabel( QWidget* parent) : QFrame( parent ) + { + setFrameStyle( QFrame::Box | QFrame::Plain ); + setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + } + ~ColorLabel() {} + QSize sizeHint() const + { + return minimumSizeHint(); + } + QSize minimumSizeHint() const + { + int pm = style()->pixelMetric(QStyle::PM_ButtonMargin); + QFontMetrics fm ( font() ); + return QSize( fm.height() + pm, fm.height() + pm ); + } + void paintEvent( QPaintEvent* e ) + { + QPainter p( this ); + drawFrame( &p ); + QRect r = contentsRect(); + if ( myColor.isValid() ) { + p.fillRect( r, QBrush( myColor ) ); + } + else { + p.fillRect( r, QBrush( palette().color( foregroundRole() ), Qt::BDiagPattern ) ); + } + p.end(); + } + void setColor( const QColor& c ) + { + myColor = c; + update(); + } + +private: + QColor myColor; +}; + +/*! + \class QtxBiColorTool + \brief Implementation of the widget managing a couple of colors. + + The main color is specified explicitly. The secondary color is calculated + by changing "value" of the main color in HSV notation to the specified delta. +*/ + +/*! + \brief Constructor. + \param parent parent widget +*/ +QtxBiColorTool::QtxBiColorTool( QWidget* parent ) + : QWidget( parent ) +{ + QHBoxLayout* l = new QHBoxLayout( this ); + l->setMargin( 0 ); + l->setSpacing( 5 ); + + myMainColor = new QtxColorButton( this ); + myMainColor->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + myExtraText = new QLabel( this ); + myRuler = new QSlider( Qt::Horizontal, this ); + myRuler->setMinimum( -BICOLOR_MAX_DELTA ); + myRuler->setMaximum( +BICOLOR_MAX_DELTA ); + myRuler->setSingleStep( 1 ); + myRuler->setPageStep( 10 ); + myRuler->setValue( 0 ); + myRuler->setTickPosition( QSlider::NoTicks ); + myDelta = new ColorLabel( this ); + + l->addWidget( myMainColor ); + l->addWidget( myExtraText ); + l->addWidget( myRuler ); + l->addWidget( myDelta ); + + connect( myMainColor, SIGNAL( changed( QColor ) ), this, SLOT( updateState() ) ); + connect( myRuler, SIGNAL( valueChanged( int ) ), this, SLOT( updateState() ) ); + + updateState(); +} + +/*! + \brief Destructor. +*/ +QtxBiColorTool::~QtxBiColorTool() +{ +} + +/*! + \brief Get currently selected main color + + Returns invalid QColor if no color is selected. + + \return selected main color + \sa setMainColor() +*/ +QColor QtxBiColorTool::mainColor() const +{ + return myMainColor->color(); +} + +/*! + \brief Set main color. + \param c color to be set as current main color + \sa mainColor() +*/ +void QtxBiColorTool::setMainColor( const QColor& c ) +{ + myMainColor->setColor( c ); + updateState(); +} + +/*! + \brief Get current value delta for the secondary color + \return curent color value delta + \sa setDelta(), secondaryColor() +*/ +int QtxBiColorTool::delta() const +{ + return myRuler->value(); +} + +/*! + \brief Set value delta for the secondary color + \param d new color value delta + \sa delta(), secondaryColor() +*/ +void QtxBiColorTool::setDelta( int d ) +{ + myRuler->setValue( d ); + updateState(); +} + +/*! + \brief Get secondary color. + + Returns invalid QColor if no main color is selected. + Secondary color is calculated by changing "value" of the main color + in HSV notation to the specified delta. + + \return secondary color + \sa mainColor(), setMainColor(), delta(), setDelta() +*/ +QColor QtxBiColorTool::secondaryColor() const +{ + return Qtx::mainColorToSecondary( mainColor(), delta() ); +} + +/*! + \brief Returns auxiliary text assigned to the widget + \return current widget text + \sa setText() +*/ +QString QtxBiColorTool::text() const +{ + return myExtraText->text(); +} + +/*! + \brief Assign auxiliary text to the widet + \param txt new widget text + \sa text() +*/ +void QtxBiColorTool::setText( const QString& txt ) +{ + myExtraText->setText( txt ); +} + +/*! + \brief Update widget state +*/ +void QtxBiColorTool::updateState() +{ + myDelta->setColor( secondaryColor() ); +} diff --git a/src/Qtx/QtxBiColorTool.h b/src/Qtx/QtxBiColorTool.h new file mode 100644 index 000000000..d0053dbaa --- /dev/null +++ b/src/Qtx/QtxBiColorTool.h @@ -0,0 +1,68 @@ +// Copyright (C) 2007-2011 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 +// + +// File: QtxBiColorTool.h +// Author: Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) + +#ifndef QTXBICOLORTOOL_H +#define QTXBICOLORTOOL_H + +#include "Qtx.h" + +#include +#include + +class QLabel; +class QSlider; +class QtxColorButton; + +class QTX_EXPORT QtxBiColorTool : public QWidget +{ + class ColorLabel; + + Q_OBJECT + +public: + QtxBiColorTool( QWidget* = 0 ); + virtual ~QtxBiColorTool(); + + QColor mainColor() const; + void setMainColor( const QColor& ); + + int delta() const; + void setDelta( int ); + + QColor secondaryColor() const; + + QString text() const; + void setText( const QString& ); + + static QColor mainColorToSecondary( const QColor&, int ); + +private slots: + void updateState(); + +private: + QtxColorButton* myMainColor; + QLabel* myExtraText; + QSlider* myRuler; + ColorLabel* myDelta; +}; + +#endif // QTXBICOLORTOOL_H diff --git a/src/Qtx/QtxMainWindow.cxx b/src/Qtx/QtxMainWindow.cxx index 99da876f0..615311344 100644 --- a/src/Qtx/QtxMainWindow.cxx +++ b/src/Qtx/QtxMainWindow.cxx @@ -241,7 +241,8 @@ QtxMainWindow::QtxMainWindow( QWidget* parent, Qt::WindowFlags f ) myStatusBar( 0 ), myOpaque( true ), myResizer( 0 ), - myMouseMove( 0 ) + myMouseMove( 0 ), + myFullScreenAllowed(true) { //rnv: Enables tooltips for inactive windows. //rnv: For details see http://bugtracker.opencascade.com/show_bug.cgi?id=20893 @@ -400,7 +401,7 @@ QString QtxMainWindow::storeGeometry() const state = QString( "min" ); break; case Qt::WindowFullScreen: - state = QString( "full" ); + state = isFullScreenAllowed() ? QString( "full" ) : QString( "max" ); break; } @@ -624,3 +625,22 @@ bool QtxMainWindow::event( QEvent* e ) return ok; } + +/*! + \brief FullScreenAllowed flag allowed dump in the main window geometry + Qt::WindowFullScreen parameter. + \return \c fullScreenAllowed flag. +*/ +bool QtxMainWindow::isFullScreenAllowed() const { + return myFullScreenAllowed; +} + + +/*! + \brief Set FullScreenAllowed flag. + The default value is true. + \param f value of the fullScreenAllowed flag. +*/ +void QtxMainWindow::setFullScreenAllowed( const bool f ) { + myFullScreenAllowed = f; +} diff --git a/src/Qtx/QtxMainWindow.h b/src/Qtx/QtxMainWindow.h index 64dd5abf6..4ace2d282 100644 --- a/src/Qtx/QtxMainWindow.h +++ b/src/Qtx/QtxMainWindow.h @@ -54,6 +54,9 @@ public: QString storeGeometry() const; void retrieveGeometry( const QString& ); + bool isFullScreenAllowed() const; + void setFullScreenAllowed( const bool ); + protected: virtual bool event( QEvent* ); @@ -67,6 +70,8 @@ private: QToolBar* myMenuBar; //!< dockable menu bar QToolBar* myStatusBar; //!< dockable status bar + bool myFullScreenAllowed; + bool myOpaque; Resizer* myResizer; QMouseEvent* myMouseMove; diff --git a/src/Qtx/QtxPagePrefMgr.cxx b/src/Qtx/QtxPagePrefMgr.cxx index 873ce5d8b..5a768e43c 100644 --- a/src/Qtx/QtxPagePrefMgr.cxx +++ b/src/Qtx/QtxPagePrefMgr.cxx @@ -28,6 +28,7 @@ #include "QtxComboBox.h" #include "QtxIntSpinBox.h" #include "QtxColorButton.h" +#include "QtxBiColorTool.h" #include "QtxDoubleSpinBox.h" #include "QtxShortcutEdit.h" #include "QtxResourceMgr.h" @@ -3506,6 +3507,109 @@ void QtxPagePrefColorItem::retrieve() myColor->setColor( getColor() ); } +/*! + \class QtxPagePrefBiColorItem + \brief GUI implementation of the resources item to store a bi-color value. + + The main color is specified explicitly. The secondary color is calculated + by changing "value" and "saturation" parameters of the main color in the + HSV notation using specified delta. +*/ + +/*! + \brief Constructor. + \param title preference item title + \param parent parent preference item + \param sect resource file section associated with the preference item + \param param resource file parameter associated with the preference item +*/ +QtxPagePrefBiColorItem::QtxPagePrefBiColorItem( const QString& title, QtxPreferenceItem* parent, + const QString& sect, const QString& param ) +: QtxPageNamedPrefItem( title, parent, sect, param ) +{ + setControl( myColors = new QtxBiColorTool( 0 ) ); +} + +/*! + \brief Destructor. +*/ +QtxPagePrefBiColorItem::~QtxPagePrefBiColorItem() +{ +} + +/*! + \bried Get auxiliary text + \return text assigned to the item + \sa setText() +*/ +QString QtxPagePrefBiColorItem::text() const +{ + return myColors->text(); +} + +/*! + \bried Set auxiliary text + \param t text being assigned to the item + \sa text() +*/ +void QtxPagePrefBiColorItem::setText( const QString& t ) +{ + myColors->setText( t ); +} + +/*! + \brief Store preference item to the resource manager. + \sa retrieve() +*/ +void QtxPagePrefBiColorItem::store() +{ + setString( Qtx::biColorToString( myColors->mainColor(), myColors->delta() ) ); +} + +/*! + \brief Retrieve preference item from the resource manager. + \sa store() +*/ +void QtxPagePrefBiColorItem::retrieve() +{ + QColor c; + int d; + Qtx::stringToBiColor( getString(), c, d ); + myColors->setMainColor( c ); + myColors->setDelta( d ); +} + +/*! + \brief Get preference item option value. + \param name option name + \return property value or null QVariant if option is not set + \sa setOptionValue() +*/ +QVariant QtxPagePrefBiColorItem::optionValue( const QString& name ) const +{ + if ( name == "text" ) + return text(); + else + return QtxPageNamedPrefItem::optionValue( name ); +} + +/*! + \brief Set preference item option value. + \param name option name + \param val new property value + \sa optionValue() +*/ +void QtxPagePrefBiColorItem::setOptionValue( const QString& name, const QVariant& val ) +{ + if ( name == "text" ) + { + if ( val.canConvert( QVariant::String ) ) + setText( val.toString() ); + } + else + QtxPageNamedPrefItem::setOptionValue( name, val ); +} + /*! \class QtxPagePrefFontItem \brief GUI implementation of the resources font item. diff --git a/src/Qtx/QtxPagePrefMgr.h b/src/Qtx/QtxPagePrefMgr.h index 55c7334d5..db472ada6 100644 --- a/src/Qtx/QtxPagePrefMgr.h +++ b/src/Qtx/QtxPagePrefMgr.h @@ -38,6 +38,7 @@ class QtxFontEdit; class QtxGroupBox; class QtxComboBox; class QtxColorButton; +class QtxBiColorTool; class QtxShortcutEdit; class QtxShortcutTree; @@ -457,7 +458,7 @@ protected: virtual void setOptionValue( const QString&, const QVariant& ); private slots: - void setIcon( int ); + void setIcon( int ); private: void updateSlider(); @@ -587,6 +588,27 @@ private: QtxColorButton* myColor; }; +class QTX_EXPORT QtxPagePrefBiColorItem : public QtxPageNamedPrefItem +{ +public: + QtxPagePrefBiColorItem( const QString&, QtxPreferenceItem* = 0, + const QString& = QString(), const QString& = QString() ); + virtual ~QtxPagePrefBiColorItem(); + + virtual QString text() const; + virtual void setText( const QString& ); + + virtual void store(); + virtual void retrieve(); + +protected: + virtual QVariant optionValue( const QString& ) const; + virtual void setOptionValue( const QString&, const QVariant& ); + +private: + QtxBiColorTool* myColors; +}; + class QTX_EXPORT QtxPagePrefFontItem : public QObject, public QtxPageNamedPrefItem { Q_OBJECT diff --git a/src/Qtx/QtxResourceMgr.cxx b/src/Qtx/QtxResourceMgr.cxx index 801593c4d..a9656564c 100644 --- a/src/Qtx/QtxResourceMgr.cxx +++ b/src/Qtx/QtxResourceMgr.cxx @@ -635,6 +635,9 @@ bool QtxResourceMgr::IniFormat::load( const QString& fname, QMap& secMap ) { + if ( !Qtx::mkDir( QFileInfo( fname ).absolutePath() ) ) + return false; + QFile file( fname ); if ( !file.open( QFile::WriteOnly ) ) return false; @@ -877,6 +880,9 @@ bool QtxResourceMgr::XmlFormat::save( const QString& fname, const QMap( layout() ); + QBoxLayout* vbox = qobject_cast( layout() ); w->setParent( this ); vbox->addWidget( w ); myWidgets.insert( wid, w ); @@ -871,25 +871,19 @@ void QtxSearchTool::modifierSwitched() \brief Initialize the search tool widget. \internal */ -void QtxSearchTool::init() +void QtxSearchTool::init( Qt::Orientation orientation ) { setFrameStyle( QFrame::StyledPanel | QFrame::Plain ); - QVBoxLayout* vbox = new QVBoxLayout(); - vbox->setSpacing( 0 ); - vbox->setMargin( 5 ); - setLayout( vbox ); myBtnWidget = new QWidget( this ); QHBoxLayout* myBtnWidget_layout = new QHBoxLayout( myBtnWidget ); myBtnWidget_layout->setSpacing( 0 ); myBtnWidget_layout->setMargin( 0 ); - vbox->addWidget( myBtnWidget ); myModWidget = new QWidget( this ); QHBoxLayout* myModWidget_layout = new QHBoxLayout( myModWidget ); myModWidget_layout->setSpacing( 0 ); myModWidget_layout->setMargin( 0 ); - vbox->addWidget( myModWidget ); myClose = new QToolButton( myBtnWidget ); myClose->setIcon( QIcon( close_xpm ) ); @@ -951,6 +945,14 @@ void QtxSearchTool::init() setShortcuts( QKeySequence( "Ctrl+S" ) ); setActivators( Any ); + + QBoxLayout* box = orientation == Qt::Vertical ? (QBoxLayout*)( new QVBoxLayout ) : (QBoxLayout*)( new QHBoxLayout ); + box->setSpacing( 0 ); + box->setMargin( 5 ); + box->addWidget( myBtnWidget ); + box->addWidget( myModWidget ); + setLayout( box ); + updateControls(); } diff --git a/src/Qtx/QtxSearchTool.h b/src/Qtx/QtxSearchTool.h index 7a293fe59..a7cc07123 100644 --- a/src/Qtx/QtxSearchTool.h +++ b/src/Qtx/QtxSearchTool.h @@ -79,8 +79,8 @@ public: Any = HotKey | SlashKey | StandardKey | PrintKey //!< search tool is activated by any of above mentioned ways } Activator; - QtxSearchTool( QWidget*, QWidget* = 0, int = All ); - QtxSearchTool( QWidget*, int = All ); + QtxSearchTool( QWidget*, QWidget* = 0, int = All, Qt::Orientation = Qt::Vertical ); + QtxSearchTool( QWidget*, int = All, Qt::Orientation = Qt::Vertical ); virtual ~QtxSearchTool(); QWidget* watchedWidget() const; @@ -129,7 +129,7 @@ private slots: void modifierSwitched(); private: - void init(); + void init( Qt::Orientation ); bool focused() const; void clearShortcuts(); void initShortcuts( const QList& ); diff --git a/src/Qtx/QtxWebBrowser.cxx b/src/Qtx/QtxWebBrowser.cxx new file mode 100644 index 000000000..f88be64b5 --- /dev/null +++ b/src/Qtx/QtxWebBrowser.cxx @@ -0,0 +1,434 @@ +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File: QtxWebBrowser.cxx +// Author: Roman NIKOLAEV +// +#include "QtxWebBrowser.h" +#include "QtxSearchTool.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +/*! + \class WebViewSearcher + \brief A class is used with QtxSearchTool in order to search text within the web page + \internal +*/ +class WebViewSearcher : public QtxSearchTool::Searcher +{ +public: + WebViewSearcher( QWebView* ); + ~WebViewSearcher(); + + bool find( const QString&, QtxSearchTool* ); + bool findNext( const QString&, QtxSearchTool* ); + bool findPrevious( const QString&, QtxSearchTool* ); + bool findFirst( const QString&, QtxSearchTool* ); + bool findLast( const QString&, QtxSearchTool* ); + +private: + QWebView* myView; +}; + +WebViewSearcher::WebViewSearcher( QWebView* view ) : myView( view ) +{ +} + +WebViewSearcher::~WebViewSearcher() +{ +} + +bool WebViewSearcher::find( const QString& text, QtxSearchTool* st ) +{ + QWebPage::FindFlags fl = 0; + if ( st->isCaseSensitive() ) fl = fl | QWebPage::FindCaseSensitively; + if ( st->isSearchWrapped() ) fl = fl | QWebPage::FindWrapsAroundDocument; + return myView->findText( text, fl ); +} + +bool WebViewSearcher::findNext( const QString& text, QtxSearchTool* st ) +{ + return find( text, st ); +} + +bool WebViewSearcher::findPrevious( const QString& text, QtxSearchTool* st ) +{ + QWebPage::FindFlags fl = QWebPage::FindBackward; + if ( st->isCaseSensitive() ) fl = fl | QWebPage::FindCaseSensitively; + if ( st->isSearchWrapped() ) fl = fl | QWebPage::FindWrapsAroundDocument; + return myView->findText( text, fl ); +} + +bool WebViewSearcher::findFirst( const QString&, QtxSearchTool* ) +{ + return false; +} + +bool WebViewSearcher::findLast( const QString&, QtxSearchTool* ) +{ + return false; +} + +/*! + \class QtxWebBrowser + + \brief The QtxWebBrowser provides a window that can display html pages. + + Only one instance of the QtxWebBrowser class can be created. To access the browser + window, use static method QtxWebBrowser::webBrowser(), which creates an + instance of the QtxWebBrowser widget (if it is not yet created) and returns a + pointer to it. + + You should not destroy this instance - it is done automatically after + closing of the browser window. To close window programmatically use + method close(). + + To set visual properties of the browser use static method setData(). + + The following sample demonstrates how to use web browser. + In this code the browser window is created, /data/index.html file is opened + and scrolled to the "anchor1" anchor on this page. + + \code + int main(int argc, char *argv[]) + { + QApplication app(argc, argv); + + // set icon, title and menu items. + QtxWebBrowser::setData("browser:title", tr("Web Browser")); + QtxWebBrowser::setData("browser:icon", QPixmap(":/icon.png")); + QtxWebBrowser::setData("menu:file:title", tr("&File")); + QtxWebBrowser::setData("action:close:title", tr("&Close")); + + // show HTML page + QtxWebBrowser::loadUrl("file:///data/index.html", "anchor1"); + + return app.exec(); + } + \endcode + +*/ + +//! The only one instance of web browser +QtxWebBrowser* QtxWebBrowser::myBrowser = 0; + +//! Internal data map to store resources of the browser. +QMap QtxWebBrowser::myData; + +/*! + \brief Constructor. + + Construct the web browser. +*/ +QtxWebBrowser::QtxWebBrowser() : QMainWindow( 0 ) +{ + setAttribute( Qt::WA_DeleteOnClose ); + statusBar(); + + QWidget* frame = new QWidget( this ); + + myWebView = new QWebView( frame ); + myWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks ); + myFindPanel = new QtxSearchTool( frame, myWebView, + QtxSearchTool::Basic | QtxSearchTool::Case | QtxSearchTool::Wrap, + Qt::Horizontal ); + myFindPanel->setFrameStyle( QFrame::NoFrame | QFrame::Plain ); + myFindPanel->setActivators( QtxSearchTool::SlashKey ); + myFindPanel->setSearcher( new WebViewSearcher( myWebView ) ); + myFindPanel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + + myToolbar = addToolBar( tr( "Navigation" ) ); + myToolbar->addAction( myWebView->pageAction( QWebPage::Back ) ); + myToolbar->addAction( myWebView->pageAction( QWebPage::Forward ) ); + + myMenus[ File ] = menuBar()->addMenu( tr( "&File" ) ); + myActions[ Find ] = myMenus[ File ]->addAction( tr( "&Find in text..." ), myFindPanel, SLOT( find() ), QKeySequence( QKeySequence::Find ) ); + myActions[ FindNext ] = myMenus[ File ]->addAction( tr( "&Find next" ), myFindPanel, SLOT( findNext() ), QKeySequence( QKeySequence::FindNext ) ); + myActions[ FindPrev ] = myMenus[ File ]->addAction( tr( "&Find previous" ), myFindPanel, SLOT( findPrevious() ), QKeySequence( QKeySequence::FindPrevious ) ); + myMenus[ File ]->addSeparator(); + myActions[ Close ] = myMenus[ File ]->addAction( tr( "&Close" ), this, SLOT( close() ) ); + + QVBoxLayout* main = new QVBoxLayout( frame ); + main->addWidget( myWebView ); + main->addWidget( myFindPanel ); + main->setMargin( 0 ); + main->setSpacing( 3 ); + + connect( myWebView, SIGNAL( titleChanged( QString ) ), SLOT( adjustTitle() ) ); + connect( myWebView, SIGNAL( linkClicked( QUrl ) ), SLOT( linkClicked( QUrl ) ) ); + connect( myWebView->page(), SIGNAL( linkHovered( QString, QString, QString ) ), SLOT( linkHovered( QString, QString, QString ) ) ); + + setCentralWidget( frame ); + setFocusProxy( myWebView ); + updateData(); + qAddPostRoutine( QtxWebBrowser::clearData ); +} + +/*! + \brief Destructor. +*/ +QtxWebBrowser::~QtxWebBrowser() +{ + myBrowser = 0; +} + +/*! + \brief Return the only instance of the QtxWebBrowser + \return instance of the QtxWebBrowser +*/ +QtxWebBrowser* QtxWebBrowser::webBrowser() +{ + if ( !myBrowser ) + myBrowser = new QtxWebBrowser(); + return myBrowser; +} + +/*! + \brief Load given url address and optional scroll to the specified anchor + \param url an url address to load + \param anchor an anchor to scroll page to +*/ +void QtxWebBrowser::loadUrl( const QString& url, const QString& anchor ) +{ + QString anUrl = url; + if( !anchor.isEmpty() ) anUrl += "#" + anchor; + + Qtx::alignWidget( webBrowser(), (QWidget*)QApplication::desktop(), Qtx::AlignCenter ); + + webBrowser()->show(); + webBrowser()->myWebView->load( QUrl( anUrl ) ); + webBrowser()->setFocus(); + webBrowser()->activateWindow(); + webBrowser()->raise(); +} + +/*! + \brief Set browser settings from. + + This method can be used to setup the browser properties. + - \c "browser:title" : title of the browser window + - \c "browser:icon" : icon of the browser window + - \c "toolbar:title" : title of the toolbar + - \c "menu:file:title" : File menu of the browser + - \c "action:close:title" : File/Close menu item title + - \c "action:close:icon" : File/Close menu item icon + - \c "action:back:title" : Navigation/Back menu item title + - \c "action:back:icon" : Navigation/Back menu item icon + - \c "action:forward:title" : Navigation/Forward menu item title + - \c "action:forward:icon" : Navigation/Forward menu item icon + - \c "action:find:title" : File/Find menu item title + - \c "action:find:icon" : File/Find menu item icon + - \c "action:findnext:title" : File/Find Next menu item title + - \c "action:findnext:icon" : File/Find Next menu item icon + - \c "action:findprev:title" : File/Find Previous menu item title + - \c "action:findprev:icon" : File/Find Previous menu item icon + + \param key name of the property + \param val value of the property + +*/ +void QtxWebBrowser::setData( const QString& key, const QVariant& val ) +{ + myData.insert( key, val ); + if ( myBrowser ) myBrowser->updateData(); +} + +/*! + \brief Get string value by key from the internal data map + \param key data key identifier + \return string value assigned to the key (null string if data is not assigned to the key) + \internal +*/ +QString QtxWebBrowser::getStringValue( const QString& key ) +{ + QString val; + if ( myData.contains( key ) && myData[key].canConvert( QVariant::String ) ) + val = myData[key].toString(); + return val; +} + +/*! + \brief Get icon value by key from the internal data map + \param key data key identifier + \return icon assigned to the key (null icon if data is not assigned to the key) + \internal +*/ +QIcon QtxWebBrowser::getIconValue(const QString& key) +{ + QIcon val; + if ( myData.contains( key ) ) { + if ( myData[key].canConvert( QVariant::Pixmap ) ) + val = myData[key].value(); + else if ( myData[key].canConvert( QVariant::Icon ) ) + val = myData[key].value(); + } + return val; +} + +/*! + \brief Update web browser properties from internal data map +*/ +void QtxWebBrowser::updateData() +{ + // main title + adjustTitle(); + + // window icon + QIcon icon = getIconValue( "browser:icon" ); + if ( !icon.isNull() ) + setWindowIcon( icon ); + + // toolbar title + QString tbTitle = getStringValue( "toolbar:title" ); + if ( myToolbar && !tbTitle.isEmpty() ) + myToolbar->setWindowTitle( tbTitle ); + + // File menu + QString fmenu = getStringValue( "menu:file:title" ); + if ( myMenus.contains( File ) && !fmenu.isEmpty() ) + myMenus[ File ]->setTitle( fmenu ); + + // File/Close menu + QString closeTlt = getStringValue( "action:close:title" ); + QIcon closeIco = getIconValue( "action:close:icon" ); + if ( myActions.contains( Close ) ) { + if ( !closeTlt.isEmpty() ) + myActions[ Close ]->setText( closeTlt ); + if ( !closeIco.isNull() ) + myActions[ Close ]->setIcon( closeIco ); + } + + // Navigation/Go Back menu + QString backTlt = getStringValue( "action:back:title" ); + QIcon backIco = getIconValue( "action:back:icon" ); + if ( !backTlt.isEmpty() ) + myWebView->pageAction( QWebPage::Back )->setText( backTlt ); + if ( !backIco.isNull() ) + myWebView->pageAction( QWebPage::Back )->setIcon( backIco ); + + // Navigation/Go Forward menu + QString fwdTlt = getStringValue( "action:forward:title" ); + QIcon fwdIco = getIconValue( "action:forward:icon" ); + if ( !fwdTlt.isEmpty() ) + myWebView->pageAction( QWebPage::Forward )->setText( fwdTlt ); + if ( !fwdIco.isNull() ) + myWebView->pageAction( QWebPage::Forward )->setIcon( fwdIco ); + + // File/Find menu + QString findTlt = getStringValue( "action:find:title" ); + QIcon findIco = getIconValue( "action:find:icon" ); + if ( myActions.contains( Find ) ) { + if ( !findTlt.isEmpty() ) + myActions[ Find ]->setText( findTlt ); + if ( !findIco.isNull() ) + myActions[ Find ]->setIcon( findIco ); + } + + // File/Find Next menu + QString findNextTlt = getStringValue( "action:findnext:title" ); + QIcon findNextIco = getIconValue( "action:findnext:icon" ); + if ( myActions.contains( FindNext ) ) { + if ( !findNextTlt.isEmpty() ) + myActions[ FindNext ]->setText( findNextTlt ); + if ( !findNextIco.isNull() ) + myActions[ FindNext ]->setIcon( findNextIco ); + } + + // File/Find Previous menu + QString findPrevTlt = getStringValue( "action:findprev:title" ); + QIcon findPrevIco = getIconValue( "action:findprev:icon" ); + if ( myActions.contains( FindPrev ) ) { + if ( !findPrevTlt.isEmpty() ) + myActions[ FindPrev ]->setText( findPrevTlt ); + if ( !findPrevIco.isNull() ) + myActions[ FindPrev ]->setIcon( findPrevIco ); + } +} + +/*! + \brief Clear internal data map + \internal +*/ +void QtxWebBrowser::clearData() +{ + myData.clear(); +} + +/*! + \brief Called when users activated any link at the page + \param url URL being clicked + \internal +*/ +void QtxWebBrowser::linkClicked( const QUrl& url ) +{ + myWebView->page()->setLinkDelegationPolicy( QWebPage::DontDelegateLinks ); + myWebView->load( url ); + if ( url.scheme() == "file" ) { + QString filename = url.toLocalFile(); + if ( QFileInfo( filename ).suffix().toLower() == "pdf" ) { +#ifdef WIN32 + ::system( QString( "start %2" ).arg( filename ).toLatin1().constData() ); +#else + // special processing of PDF files + QStringList readers; + readers << "xdg-open" << "acroread" << "kpdf" << "kghostview" << "xpdf"; + foreach ( QString r, readers ) { + QString reader = QString( "/usr/bin/%1" ).arg( r ); + if ( QFileInfo( reader ).exists() ) { + ::system( QString( "unset LD_LIBRARY_PATH; %1 %2 &" ).arg( reader ).arg( url.toLocalFile() ).toLatin1().constData() ); + break; + } + } +#endif // WIN32 + } + } + myWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks ); +} + +/*! + \brief Called when link is hovered + \param link link being hovered + \param title link title (if it is specified in the markup) + \param content provides text within the link element, e.g., text inside an HTML anchor tag + \internal +*/ +void QtxWebBrowser::linkHovered( const QString& link, const QString& /*title*/, const QString& /*context*/ ) +{ + statusBar()->showMessage( link ); +} + +/*! + \brief Update title of the window + \internal +*/ +void QtxWebBrowser::adjustTitle() +{ + QString title = getStringValue( "browser:title" ); + setWindowTitle( title.isEmpty() ? myWebView->title() : title + QString( " [%1]" ).arg( myWebView->title() ) ); +} diff --git a/src/Qtx/QtxWebBrowser.h b/src/Qtx/QtxWebBrowser.h new file mode 100644 index 000000000..5e34175a6 --- /dev/null +++ b/src/Qtx/QtxWebBrowser.h @@ -0,0 +1,82 @@ +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File: QtxWebBrowser.h +// Author: Roman NIKOLAEV +// + +#ifndef QTXWEBBROWSER_H +#define QTXWEBBROWSER_H + +#include "Qtx.h" + +#include +#include + +class QAction; +class QMenu; +class QToolBar; +class QWebView; +class QUrl; +class QtxSearchTool; + +class QTX_EXPORT QtxWebBrowser : public QMainWindow +{ + Q_OBJECT + + enum { File }; + enum { Find, FindNext, FindPrev, Close }; + +private: + QtxWebBrowser(); + +public: + virtual ~QtxWebBrowser(); + + static QtxWebBrowser* webBrowser(); + static void loadUrl( const QString&, const QString& = QString() ); + static void setData( const QString&, const QVariant& ); + +private: + static QString getStringValue( const QString& ); + static QIcon getIconValue( const QString& ); + void updateData(); + static void clearData(); + +protected slots: + virtual void linkClicked( const QUrl& ); + virtual void linkHovered( const QString&, const QString&, const QString& ); + +private slots: + void adjustTitle(); + +private: + static QMap myData; + static QtxWebBrowser* myBrowser; + QWebView* myWebView; + QToolBar* myToolbar; + QMap myMenus; + QMap myActions; + QtxSearchTool* myFindPanel; +}; + +#endif // QTXWEBBROWSER_H diff --git a/src/Qtx/resources/Qtx_msg_fr.ts b/src/Qtx/resources/Qtx_msg_fr.ts index 5981c3c1e..2f41db988 100644 --- a/src/Qtx/resources/Qtx_msg_fr.ts +++ b/src/Qtx/resources/Qtx_msg_fr.ts @@ -209,7 +209,7 @@ Wrap search - Terminer la recherche + Continuer la recherche diff --git a/src/QxScene/resources/QxSceneViewer_msg_fr.ts b/src/QxScene/resources/QxSceneViewer_msg_fr.ts index a69b81928..e122d7078 100755 --- a/src/QxScene/resources/QxSceneViewer_msg_fr.ts +++ b/src/QxScene/resources/QxSceneViewer_msg_fr.ts @@ -32,7 +32,7 @@ QxScene_ViewManager QXSCENE_VIEW_TITLE - QGraphics scène:%M - visualisateur:%V + Scène QGraphics:%M - visualisateur:%V diff --git a/src/ResExporter/ResourceExporter.cxx b/src/ResExporter/ResourceExporter.cxx index 8f342455b..56854cf34 100644 --- a/src/ResExporter/ResourceExporter.cxx +++ b/src/ResExporter/ResourceExporter.cxx @@ -43,6 +43,7 @@ The number of parameters is limeted only by maximum possible length of the command line. */ +#include "GUI_version.h" #include "SUIT_ResourceMgr.h" #include #include @@ -55,30 +56,7 @@ */ static QString salomeVersion() { - QString path( ::getenv( "GUI_ROOT_DIR" ) ); - if ( !path.isEmpty() ) - path += QDir::separator(); - path += QString( "bin/salome/VERSION" ); - - QFile vf( path ); - if ( !vf.open( QIODevice::ReadOnly ) ) - return QString(); - - QString line( vf.readLine( 1024 ) ); - vf.close(); - - if ( line.isEmpty() ) - return QString(); - - while ( !line.isEmpty() && line.at( line.length() - 1 ) == QChar( '\n' ) ) - line.remove( line.length() - 1, 1 ); - - QString ver; - int idx = line.lastIndexOf( ":" ); - if ( idx != -1 ) - ver = line.mid( idx + 1 ).trimmed(); - - return ver; + return GUI_VERSION_STR; } /*! diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx index 31de3fd94..023840207 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx @@ -2107,19 +2107,18 @@ static SUIT_ViewWindow* getWnd( const int id ) { SUIT_ViewWindow* resWnd = 0; - LightApp_Application* app = getApplication(); + LightApp_Application* app = getApplication(); if ( app ) { - STD_TabDesktop* tabDesk = dynamic_cast( app->desktop() ); - if ( tabDesk ) + ViewManagerList vmlist = app->viewManagers(); + foreach( SUIT_ViewManager* vm, vmlist ) { - QList wndlist = tabDesk->windows(); - SUIT_ViewWindow* wnd; - foreach ( wnd, wndlist ) + QVector vwlist = vm->getViews(); + foreach ( SUIT_ViewWindow* vw, vwlist ) { - if ( id == wnd->getId() ) + if ( id == vw->getId() ) { - resWnd = wnd; + resWnd = vw; break; } } diff --git a/src/SOCC/SOCC_ViewModel.cxx b/src/SOCC/SOCC_ViewModel.cxx index e921d2165..89beb3b1c 100755 --- a/src/SOCC/SOCC_ViewModel.cxx +++ b/src/SOCC/SOCC_ViewModel.cxx @@ -385,7 +385,7 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs ) { Handle(AIS_Trihedron) aTrh = Handle(AIS_Trihedron)::DownCast( anAIS ); double aNewSize = 100, aSize = 100; - getTrihedronSize( aNewSize, aSize ); + computeTrihedronSize( aNewSize, aSize ); aTrh->SetSize( aTrh == getTrihedron() ? aNewSize : 0.5 * aNewSize ); } @@ -428,6 +428,7 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs ) ic->Deactivate( anAIS ); } } + updateTrihedron(); } @@ -479,6 +480,7 @@ void SOCC_Viewer::Erase( const SALOME_OCCPrs* prs, const bool forced ) //} } } + updateTrihedron(); } @@ -527,8 +529,9 @@ void SOCC_Viewer::EraseAll( const bool forced ) // } //} } - + Repaint(); + updateTrihedron(); } /*! @@ -619,53 +622,6 @@ void SOCC_Viewer::GlobalSelection( const bool update ) const } } -/*! - Get new and current trihedron size corresponding to the current model size -*/ -bool SOCC_Viewer::getTrihedronSize( double& theNewSize, double& theSize ) -{ - theNewSize = 100; - theSize = 100; - - //SRN: BUG IPAL8996, a usage of method ActiveView without an initialization - Handle(V3d_Viewer) viewer = getViewer3d(); - viewer->InitActiveViews(); - if(!viewer->MoreActiveViews()) return false; - - Handle(V3d_View) view3d = viewer->ActiveView(); - //SRN: END of fix - - if ( view3d.IsNull() ) - return false; - - double Xmin = 0, Ymin = 0, Zmin = 0, Xmax = 0, Ymax = 0, Zmax = 0; - double aMaxSide; - - view3d->View()->MinMaxValues( Xmin, Ymin, Zmin, Xmax, Ymax, Zmax ); - - if ( Xmin == RealFirst() || Ymin == RealFirst() || Zmin == RealFirst() || - Xmax == RealLast() || Ymax == RealLast() || Zmax == RealLast() ) - return false; - - aMaxSide = Xmax - Xmin; - if ( aMaxSide < Ymax -Ymin ) aMaxSide = Ymax -Ymin; - if ( aMaxSide < Zmax -Zmin ) aMaxSide = Zmax -Zmin; - - // IPAL21687 - // The boundary box of the view may be initialized but nullified - // (case of infinite objects) - if ( aMaxSide < Precision::Confusion() ) - return false; - - float aSizeInPercents = SUIT_Session::session()->resourceMgr()->doubleValue("Viewer","TrihedronSize", 105.); - - static float EPS = 5.0E-3; - theSize = getTrihedron()->Size(); - theNewSize = aMaxSide*aSizeInPercents / 100.0; - - return fabs( theNewSize - theSize ) > theSize * EPS || - fabs( theNewSize - theSize) > theNewSize * EPS; -} /*! \Collect objects visible in viewer diff --git a/src/SOCC/SOCC_ViewModel.h b/src/SOCC/SOCC_ViewModel.h index c089dfcf6..0d77fcb03 100755 --- a/src/SOCC/SOCC_ViewModel.h +++ b/src/SOCC/SOCC_ViewModel.h @@ -67,9 +67,6 @@ public: virtual void GetVisible( SALOME_ListIO& ); virtual void Repaint(); - // a utility function, used by SALOME_View_s methods - bool getTrihedronSize( double& theNewSize, double& theSize ); - //a map to store AIS objects associated to a SALOME entry std::map< std::string , std::vector > entry2aisobjects; }; diff --git a/src/SPlot2d/SPlot2d_ViewModel.cxx b/src/SPlot2d/SPlot2d_ViewModel.cxx index 51381cf08..0c4d53a9b 100644 --- a/src/SPlot2d/SPlot2d_ViewModel.cxx +++ b/src/SPlot2d/SPlot2d_ViewModel.cxx @@ -35,6 +35,7 @@ #include "SUIT_ViewManager.h" #include "SALOME_ListIO.hxx" +#include "SALOME_ListIteratorOfListIO.hxx" #include #include @@ -424,3 +425,55 @@ void SPlot2d_Viewer::onLegendClicked( QwtPlotItem* plotItem ) emit legendSelected( anEntry ); } } + +/*! + +*/ +void SPlot2d_Viewer::setObjectsSelected( SALOME_ListIO& theList ) { + Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); + if(aViewFrame) { + + objectList allObjects; + aViewFrame->getObjects( allObjects ); + + bool isSelected = false; + SPlot2d_Histogram* h = 0; + SPlot2d_Curve* c =0; + + foreach ( Plot2d_Object* o, allObjects ) { + isSelected = false; + + Handle(SALOME_InteractiveObject) io; + if( (h = dynamic_cast(o)) && h->hasIO() ) { + io = h->getIO(); + } else if((c = dynamic_cast(o)) && c->hasIO()) { + io = c->getIO(); + } else { + continue; + } + + SALOME_ListIteratorOfListIO anIter( theList ); + + for( ; anIter.More(); anIter.Next() ) { + if ( anIter.Value()->hasEntry() ) { + if( io->isSame(anIter.Value()) ) { + isSelected = o->isSelected(); + if( !isSelected ) { + o->setSelected(true); + aViewFrame->updateObject(o); + theList.Remove(anIter); + isSelected = true; + break; + } else + break; + } + } + } + if( !isSelected && o->isSelected() != false ) { + o->setSelected(false); + aViewFrame->updateObject(o); + } + } + aViewFrame->Repaint(); + } +} diff --git a/src/SPlot2d/SPlot2d_ViewModel.h b/src/SPlot2d/SPlot2d_ViewModel.h index d5033b272..f29904fd8 100644 --- a/src/SPlot2d/SPlot2d_ViewModel.h +++ b/src/SPlot2d/SPlot2d_ViewModel.h @@ -75,6 +75,8 @@ public: virtual bool isVisible( const Handle(SALOME_InteractiveObject)& IObject ); virtual void GetVisible( SALOME_ListIO& theList ); + virtual void setObjectsSelected( SALOME_ListIO& theList ); + /* operations */ SPlot2d_Curve* getCurveByIO( const Handle(SALOME_InteractiveObject)&, Plot2d_ViewFrame* = 0 ); diff --git a/src/SUIT/SUIT_Application.h b/src/SUIT/SUIT_Application.h index 9b156f90b..8b9a30611 100755 --- a/src/SUIT/SUIT_Application.h +++ b/src/SUIT/SUIT_Application.h @@ -101,17 +101,19 @@ public: SUIT_ShortcutMgr* shortcutMgr() const; //! Puts the message to the status bar - void putInfo ( const QString&, const int = 0 ); + void putInfo ( const QString&, const int = 0 ); //! Invokes application-specific "Open/Save File" dialog and returns the selected file name. - virtual QString getFileName( bool open, const QString& initial, const QString& filters, - const QString& caption, QWidget* parent ) = 0; + virtual QString getFileName( bool open, const QString& initial, const QString& filters, + const QString& caption, QWidget* parent ) = 0; //! Invokes application-specific "Select Directory" dialog and returns the selected directory name. - virtual QString getDirectory( const QString& initial, const QString& caption, QWidget* parent ) = 0; + virtual QString getDirectory( const QString& initial, const QString& caption, QWidget* parent ) = 0; - virtual int viewManagerId ( const SUIT_ViewManager* ) const = 0; + virtual int viewManagerId ( const SUIT_ViewManager* ) const = 0; + virtual void viewManagers( const QString&, QList& ) const = 0; + QAction* action( const int ) const; signals: void applicationClosed( SUIT_Application* ); @@ -161,7 +163,6 @@ protected: void setActionShown( const int, const bool ); static QAction* separator(); - QAction* action( const int ) const; int actionId( const QAction* ) const; QList actions() const; diff --git a/src/SUIT/SUIT_DataObject.cxx b/src/SUIT/SUIT_DataObject.cxx index 1d1b4ec9e..aa6e2bd29 100755 --- a/src/SUIT/SUIT_DataObject.cxx +++ b/src/SUIT/SUIT_DataObject.cxx @@ -18,11 +18,9 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File : SUIT_DataObject.cxx // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// #include @@ -579,17 +577,14 @@ bool SUIT_DataObject::isDragable() const } /*! - \brief Check if the drop operation fo this object is possible. + \brief Check if the drop operation for this object is possible. This method can be re-implemented in the subclasses. Default implementation returns \c false (drop operation is not allowed). - \param obj object being dropped - \return \c true if it is possible to drop an object \c obj - to this object + \return \c true if it is possible to drop one or more objects (currently selected) to this object */ - -bool SUIT_DataObject::isDropAccepted( SUIT_DataObject* /*obj*/ ) +bool SUIT_DataObject::isDropAccepted() { return false; } diff --git a/src/SUIT/SUIT_DataObject.h b/src/SUIT/SUIT_DataObject.h index 62e95bc71..8f35fb66e 100755 --- a/src/SUIT/SUIT_DataObject.h +++ b/src/SUIT/SUIT_DataObject.h @@ -18,11 +18,10 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File : SUIT_DataObject.h // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #ifndef SUIT_DATAOBJECT_H #define SUIT_DATAOBJECT_H @@ -45,13 +44,13 @@ typedef QList DataObjectList; #pragma warning( disable:4251 ) #endif -class SUIT_EXPORT SUIT_DataObject +class SUIT_EXPORT SUIT_DataObject { public: class Signal; //! Color role - typedef enum { + typedef enum { Text, //!< editor foreground (text) color Base, //!< editor background color Foreground, //!< foreground (text) color @@ -62,7 +61,7 @@ public: //! Column id enum - { + { NameId, //!< name column VisibilityId //!< visibility state column }; @@ -88,7 +87,7 @@ public: virtual void children( DataObjectList&, const bool = false ) const; virtual DataObjectList children( const bool = false ); - + void appendChild( SUIT_DataObject* ); virtual void insertChild( SUIT_DataObject*, int ); virtual void removeChild( SUIT_DataObject*, const bool = false ); @@ -116,7 +115,7 @@ public: virtual bool expandable() const; virtual bool isVisible() const; virtual bool isDragable() const; - virtual bool isDropAccepted( SUIT_DataObject* obj ); + virtual bool isDropAccepted(); virtual bool isEnabled() const; virtual bool isSelectable() const; @@ -135,7 +134,7 @@ public: virtual bool compare( const QVariant&, const QVariant&, const int = NameId ) const; virtual SUIT_DataObjectKey* key() const; - virtual int groupId() const; + virtual int groupId() const; virtual QVariant customData(Qtx::CustomDataType /*type*/); static Signal* signal(); diff --git a/src/SUIT/SUIT_PreferenceMgr.cxx b/src/SUIT/SUIT_PreferenceMgr.cxx index eaa30e747..bf43e57d6 100644 --- a/src/SUIT/SUIT_PreferenceMgr.cxx +++ b/src/SUIT/SUIT_PreferenceMgr.cxx @@ -157,6 +157,9 @@ int SUIT_PreferenceMgr::addItem( const QString& title, const int pId, case ShortcutTree: item = new QtxPagePrefShortcutTreeItem( title, parent, sect, param ); break; + case BiColor: + item = new QtxPagePrefBiColorItem( title, parent, sect, param ); + break; case UserDefined: item = new QtxUserDefinedItem(parent); break; diff --git a/src/SUIT/SUIT_PreferenceMgr.h b/src/SUIT/SUIT_PreferenceMgr.h index e15319e5e..5a196f7f4 100644 --- a/src/SUIT/SUIT_PreferenceMgr.h +++ b/src/SUIT/SUIT_PreferenceMgr.h @@ -37,7 +37,7 @@ class SUIT_EXPORT SUIT_PreferenceMgr : public QtxPagePrefMgr public: typedef enum { Auto, Space, Bool, Color, String, Selector, DblSpin, IntSpin, Double, Integer, - GroupBox, Tab, Frame, Font, DirList, File, Slider, Shortcut, ShortcutTree, + GroupBox, Tab, Frame, Font, DirList, File, Slider, Shortcut, ShortcutTree, BiColor, UserDefined = 1000 } PrefItemType; public: diff --git a/src/SUIT/SUIT_ResourceMgr.cxx b/src/SUIT/SUIT_ResourceMgr.cxx index 801d744ca..3e93ea734 100755 --- a/src/SUIT/SUIT_ResourceMgr.cxx +++ b/src/SUIT/SUIT_ResourceMgr.cxx @@ -116,33 +116,59 @@ QString SUIT_ResourceMgr::userFileName( const QString& appName, const bool for_l */ QString SUIT_ResourceMgr::findAppropriateUserFile( const QString& fname ) const { - QDir d( QFileInfo( fname ).dir() ); - d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); - QStringList l = d.entryList(); QString appr_file; - int id0 = userFileId( fname ), id, appr=-1; - if( id0<0 ) + + // calculate default file id from user file name + long id0 = userFileId( fname ); + if ( id0 < 0 ) // can't calculate file id from user file name, no further processing return appr_file; - for( QStringList::const_iterator anIt = l.begin(), aLast = l.end(); anIt!=aLast; anIt++ ) - { - id = userFileId( *anIt ); - if( id<0 ) - continue; + long id, appr = -1; + + // get all files from the same dir where use file is (should be) situated + QDir d( QFileInfo( fname ).dir() ); + if ( d.exists() ) { + d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); + QStringList l = d.entryList(); + for( QStringList::const_iterator anIt = l.begin(), aLast = l.end(); anIt!=aLast; anIt++ ) + { + id = userFileId( *anIt ); + if ( id < 0 ) + continue; + if( appr < 0 || qAbs( id-id0 ) < qAbs( appr-id0 ) ) + { + appr = id; + appr_file = d.absoluteFilePath( *anIt ); + } + } + } + + // backward compatibility: check also user's home directory (if it differs from above one) + QDir home = QDir::home(); + if ( home.exists() && d.canonicalPath() != home.canonicalPath() ) { + home.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); + QStringList l = home.entryList(); - if( appr < 0 || abs( id-id0 ) < abs( appr-id0 ) ) + for( QStringList::const_iterator anIt = l.begin(), aLast = l.end(); anIt!=aLast; anIt++ ) { - appr = id; - appr_file = d.absoluteFilePath( *anIt ); + id = userFileId( *anIt ); + if ( id < 0 ) + continue; + if( appr < 0 || qAbs( id-id0 ) < qAbs( appr-id0 ) ) + { + appr = id; + appr_file = home.absoluteFilePath( *anIt ); + } } } + return appr_file; } /*! Calculates integer extended version number by user file name for comparing */ -int SUIT_ResourceMgr::userFileId( const QString& ) const +long SUIT_ResourceMgr::userFileId( const QString& ) const { return -1; } diff --git a/src/SUIT/SUIT_ResourceMgr.h b/src/SUIT/SUIT_ResourceMgr.h index 74440dde5..ee85fc924 100755 --- a/src/SUIT/SUIT_ResourceMgr.h +++ b/src/SUIT/SUIT_ResourceMgr.h @@ -41,7 +41,7 @@ public: protected: virtual QString userFileName( const QString&, const bool = true ) const; virtual QString findAppropriateUserFile( const QString& ) const; - virtual int userFileId( const QString& ) const; + virtual long userFileId( const QString& ) const; private: QString myVersion; diff --git a/src/SUIT/SUIT_TreeModel.cxx b/src/SUIT/SUIT_TreeModel.cxx index 6ee08e2b0..a6ff0c455 100755 --- a/src/SUIT/SUIT_TreeModel.cxx +++ b/src/SUIT/SUIT_TreeModel.cxx @@ -15,20 +15,19 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: SUIT_TreeModel.cxx // Author: Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #include "SUIT_Session.h" #include "SUIT_TreeModel.h" #include "SUIT_TreeSync.h" #include "SUIT_DataObject.h" #include "SUIT_ResourceMgr.h" - #include #include +#include SUIT_AbstractModel::SUIT_AbstractModel() : mySearcher( 0 ) { @@ -798,6 +797,8 @@ QVariant SUIT_TreeModel::data( const QModelIndex& index, int role ) const return QVariant(); SUIT_DataObject* obj = object( index ); + if ( !obj ) + return QVariant(); QColor c; QVariant val; @@ -970,6 +971,7 @@ bool SUIT_TreeModel::setData( const QModelIndex& index, */ Qt::ItemFlags SUIT_TreeModel::flags( const QModelIndex& index ) const { + /* if ( !index.isValid() ) return 0; @@ -993,7 +995,67 @@ Qt::ItemFlags SUIT_TreeModel::flags( const QModelIndex& index ) const if ( obj->renameAllowed( index.column() ) ) f = f | Qt::ItemIsEditable; } + return f; + */ + + Qt::ItemFlags f = 0; + + if (!index.isValid()) + //return Qt::ItemIsDropEnabled; // items can be dropped into the top level of the model + return f; + + SUIT_DataObject* obj = object(index); + + if (obj) { + // data object is enabled + if (obj->isEnabled()) + f = f | Qt::ItemIsEnabled; + + // data object is selectable + if (obj->isSelectable()) + f = f | Qt::ItemIsSelectable; + + // data object is checkable + if (obj->isCheckable(index.column())) + f = f | Qt::ItemIsUserCheckable; + + // data object can be renamed + if (obj->renameAllowed(index.column())) + f = f | Qt::ItemIsEditable; + + // data object can be dragged + if (obj->isDragable()) + f = f | Qt::ItemIsDragEnabled; + + // another data object(s) can be dropped on this one + if (obj->isDropAccepted()) + f = f | Qt::ItemIsDropEnabled; + } + + return f; +} + +Qt::DropActions SUIT_TreeModel::supportedDropActions() const +{ + return Qt::CopyAction | Qt::MoveAction; +} + +//This function is never called +bool SUIT_TreeModel::removeRows(int row, int count, const QModelIndex &parent) +{ + qDebug("Remove"); + if (parent.isValid()) + return FALSE; + + beginRemoveRows(parent, row, row + count - 1); + + for (int i = 0; i < count; ++i){ + //delete m_pAllData->takeAt(row); + } + + endRemoveRows(); + return TRUE; } /*! @@ -1612,9 +1674,52 @@ void SUIT_TreeModel::onRemoved( SUIT_DataObject* /*object*/, SUIT_DataObject* pa updateTree( parent ); } +/*! + \brief Drag and Drop support. +*/ +QStringList SUIT_TreeModel::mimeTypes() const +{ + QStringList types; + types << "application/vnd.text.list"; + return types; +} + +/*! + \brief Called when the data objects are exported(dragged) from the tree. + \param indexes the list of exported objects +*/ +QMimeData* SUIT_TreeModel::mimeData (const QModelIndexList &indexes) const +{ + QMimeData *mimeData = new QMimeData(); + QByteArray encodedData; + + QDataStream stream (&encodedData, QIODevice::WriteOnly); + + foreach (QModelIndex index, indexes) { + if (index.isValid()) { + if (index.column() == 0) { + SUIT_DataObject* aDObj = object(index); + QString anEntry = aDObj->text(SUIT_DataObject::VisibilityId + 1); + stream << anEntry; + } + } + } + + mimeData->setData("application/vnd.text.list", encodedData); + return mimeData; +} + +bool SUIT_TreeModel::dropMimeData (const QMimeData* data, Qt::DropAction action, + int row, int column, const QModelIndex& parent) +{ + emit dropped(data, action, row, column, parent); + + return true; +} + /*! \class SUIT_ProxyModel - \brief Proxy model which can be used above the SUIT_TreeMovel class + \brief Proxy model which can be used above the SUIT_TreeModel class to enable custom sorting/filtering of the data. The SUIT_TreeModel class does not support custom sorting/filtering of the data. @@ -1633,6 +1738,9 @@ SUIT_ProxyModel::SUIT_ProxyModel( QObject* parent ) SUIT_TreeModel* model = new SUIT_TreeModel( this ); connect( model, SIGNAL( modelUpdated() ), this, SIGNAL( modelUpdated() ) ); connect( model, SIGNAL( clicked(SUIT_DataObject*, int) ), this, SIGNAL(clicked(SUIT_DataObject*, int) ) ); + connect( model, SIGNAL( dropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) ), + //this, SIGNAL( dropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) )); + this, SLOT( onDropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) )); setSourceModel( model ); setDynamicSortFilter( true ); } @@ -1649,6 +1757,9 @@ SUIT_ProxyModel::SUIT_ProxyModel( SUIT_DataObject* root, QObject* parent ) SUIT_TreeModel* model = new SUIT_TreeModel( root, this ); connect( model, SIGNAL( modelUpdated() ), this, SIGNAL( modelUpdated() ) ); connect( model, SIGNAL( clicked(SUIT_DataObject*, int) ), this, SIGNAL(clicked(SUIT_DataObject*, int) ) ); + connect( model, SIGNAL( dropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) ), + //this, SIGNAL( dropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) )); + this, SLOT( onDropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) )); setSourceModel( model ); setDynamicSortFilter( true ); } @@ -1664,6 +1775,9 @@ SUIT_ProxyModel::SUIT_ProxyModel( SUIT_AbstractModel* model, QObject* parent ) { connect( *model, SIGNAL( modelUpdated() ), this, SIGNAL( modelUpdated() ) ); connect( *model, SIGNAL( clicked(SUIT_DataObject*, int) ), this, SIGNAL(clicked(SUIT_DataObject*, int) ) ); + connect( *model, SIGNAL( dropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) ), + //this, SIGNAL( dropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) )); + this, SLOT( onDropped(const QMimeData*, Qt::DropAction, int, int, const QModelIndex&) )); setSourceModel( *model ); setDynamicSortFilter( true ); } @@ -2061,6 +2175,12 @@ void SUIT_ProxyModel::emitClicked( SUIT_DataObject* obj, const QModelIndex& inde treeModel()->emitClicked(obj,index); } +void SUIT_ProxyModel::onDropped (const QMimeData* data, Qt::DropAction action, + int row, int column, const QModelIndex& parent) +{ + emit dropped(data, action, row, column, mapFromSource(parent)); +} + /*! \class SUIT_ItemDelegate \brief An SUIT_DataObject-based item delegate class. diff --git a/src/SUIT/SUIT_TreeModel.h b/src/SUIT/SUIT_TreeModel.h index 0a54db529..8a259da3b 100755 --- a/src/SUIT/SUIT_TreeModel.h +++ b/src/SUIT/SUIT_TreeModel.h @@ -15,11 +15,10 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: SUIT_TreeModel.h // Author: Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #ifndef SUIT_TREEMODEL_H #define SUIT_TREEMODEL_H @@ -40,6 +39,7 @@ class SUIT_DataObject; class SUIT_TreeModel; +class QMimeData; class SUIT_EXPORT SUIT_DataSearcher { @@ -137,6 +137,9 @@ public: virtual Qt::ItemFlags flags( const QModelIndex& ) const; virtual QVariant headerData( int, Qt::Orientation, int = Qt::DisplayRole ) const; + virtual Qt::DropActions supportedDropActions() const; + virtual bool removeRows(int row, int count, const QModelIndex &parent); + virtual QModelIndex index( int, int, const QModelIndex& = QModelIndex() ) const; virtual QModelIndex parent( const QModelIndex& ) const; @@ -176,6 +179,11 @@ public: virtual void updateTreeModel(SUIT_DataObject*,TreeItem*); + virtual QStringList mimeTypes() const; + virtual QMimeData* mimeData (const QModelIndexList& indexes) const; + virtual bool dropMimeData (const QMimeData *data, Qt::DropAction action, + int row, int column, const QModelIndex &parent); + public slots: virtual void updateTree( const QModelIndex& ); virtual void updateTree( SUIT_DataObject* = 0 ); @@ -183,6 +191,7 @@ public slots: signals: void modelUpdated(); void clicked( SUIT_DataObject*, int ); + void dropped( const QMimeData*, Qt::DropAction, int, int, const QModelIndex& ); private: void initialize(); @@ -278,10 +287,12 @@ public slots: virtual void updateTree( const QModelIndex& ); virtual void updateTree( SUIT_DataObject* = 0 ); void setSortingEnabled( bool ); + void onDropped( const QMimeData*, Qt::DropAction, int, int, const QModelIndex& ); signals: void modelUpdated(); void clicked( SUIT_DataObject*, int ); + void dropped( const QMimeData*, Qt::DropAction, int, int, const QModelIndex& ); protected: SUIT_AbstractModel* treeModel() const; diff --git a/src/SUITApp/SUITApp.cxx b/src/SUITApp/SUITApp.cxx index e47dc0993..f0c7d6cd8 100644 --- a/src/SUITApp/SUITApp.cxx +++ b/src/SUITApp/SUITApp.cxx @@ -40,15 +40,14 @@ //#endif //#if defined WIN32 +#include "GUI_version.h" #include "SUITApp_Application.h" - -#include -#include -#include -#include -#include - -#include +#include "SUIT_Desktop.h" +#include "SUIT_LicenseDlg.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" +#include "Style_Salome.h" +#include "QtxSplash.h" #include #include @@ -64,31 +63,14 @@ static QString salomeVersion() { - QString path( ::getenv( "GUI_ROOT_DIR" ) ); - if ( !path.isEmpty() ) - path += QDir::separator(); - - path += QString( "bin/salome/VERSION" ); - - QFile vf( path ); - if ( !vf.open( QFile::ReadOnly ) ) - return QString(); - - QString line = vf.readLine( 1024 ); - vf.close(); - - if ( line.isEmpty() ) - return QString(); - - while ( !line.isEmpty() && line.at( line.length() - 1 ) == QChar( '\n' ) ) - line.remove( line.length() - 1, 1 ); - - QString ver; - int idx = line.lastIndexOf( ":" ); - if ( idx != -1 ) - ver = line.mid( idx + 1 ).trimmed(); + return GUI_VERSION_STR; +} - return ver; +static QString getAppName( const QString& libName ) +{ + QString appName = QFileInfo( libName ).baseName(); + if ( appName.startsWith( "lib" ) ) appName = appName.mid( 3 ); + return appName; } // static void MessageOutput( QtMsgType type, const char* msg ) @@ -191,7 +173,7 @@ int main( int argc, char* argv[] ) bool iniFormat = false; bool noSplash = false; bool useLicense = false; - for ( int i = 1; i < argc /*&& !noExceptHandling*/; i++ ) + for ( int i = 1; i < argc; i++ ) { if ( !strcmp( argv[i], "--noexcepthandling" ) ) noExceptHandling = true; @@ -199,9 +181,9 @@ int main( int argc, char* argv[] ) iniFormat = true; else if ( !strcmp( argv[i], "--nosplash") ) noSplash = true; - else if ( !strcmp( argv[i], "--uselicense" ) ) + else if ( !strcmp( argv[i], "--uselicense" ) ) useLicense = true; - else + else argList.append( QString( argv[i] ) ); } @@ -211,6 +193,13 @@ int main( int argc, char* argv[] ) QApplication::addLibraryPath( QDir( qtdir ).absoluteFilePath( "plugins" ) ); SUITApp_Application app( argc, argv ); + QString cfgAppName = getAppName( argList.isEmpty() ? QString() : argList.first() ); + // hard-coding for LightApp :( no other way to this for the moment + if ( cfgAppName == "LightApp" ) { + app.setOrganizationName( "salome" ); + app.setApplicationName( "salome" ); + app.setApplicationVersion( salomeVersion() ); + } int result = -1; diff --git a/src/SVTK/Makefile.am b/src/SVTK/Makefile.am index 6a3f71fcf..57556cdf7 100755 --- a/src/SVTK/Makefile.am +++ b/src/SVTK/Makefile.am @@ -132,7 +132,9 @@ dist_salomeres_DATA=\ resources/vtk_view_recording_start.png \ resources/vtk_view_recording_play.png \ resources/vtk_view_recording_pause.png \ - resources/vtk_view_recording_stop.png + resources/vtk_view_recording_stop.png \ + resources/vtk_view_sync.png \ + resources/vtk_view_highlight.png nodist_salomeres_DATA = \ SVTK_msg_en.qm \ diff --git a/src/SVTK/SVTK_Event.h b/src/SVTK/SVTK_Event.h index 77e9e4875..4785d794c 100644 --- a/src/SVTK/SVTK_Event.h +++ b/src/SVTK/SVTK_Event.h @@ -73,6 +73,8 @@ namespace SVTK SetFocalPointSelected, StartFocalPointSelection, FocalPointChanged, + + OperationFinished, // rnv: invoked then SpinXY, RotateXY, DollyXY or PanXY operation is finished. LastEvent }; diff --git a/src/SVTK/SVTK_InteractorStyle.cxx b/src/SVTK/SVTK_InteractorStyle.cxx index 994b85570..5346d0981 100644 --- a/src/SVTK/SVTK_InteractorStyle.cxx +++ b/src/SVTK/SVTK_InteractorStyle.cxx @@ -271,12 +271,14 @@ void SVTK_InteractorStyle::RotateXY(int dx, int dy) GetCurrentRenderer()->ResetCameraClippingRange(); this->Render(); + this->InvokeEvent(SVTK::OperationFinished,NULL); } void SVTK_InteractorStyle::PanXY(int x, int y, int oldX, int oldY) { TranslateView(x, y, oldX, oldY); this->Render(); + this->InvokeEvent(SVTK::OperationFinished,NULL); } void SVTK_InteractorStyle::DollyXY(int dx, int dy) @@ -312,6 +314,7 @@ void SVTK_InteractorStyle::DollyXY(int dx, int dy) } this->Render(); + this->InvokeEvent(SVTK::OperationFinished,NULL); } void SVTK_InteractorStyle::SpinXY(int x, int y, int oldX, int oldY) @@ -334,6 +337,7 @@ void SVTK_InteractorStyle::SpinXY(int x, int y, int oldX, int oldY) cam->OrthogonalizeViewUp(); this->Render(); + this->InvokeEvent(SVTK::OperationFinished,NULL); } diff --git a/src/SVTK/SVTK_Selector.cxx b/src/SVTK/SVTK_Selector.cxx index ea681eccc..c5b039a51 100644 --- a/src/SVTK/SVTK_Selector.cxx +++ b/src/SVTK/SVTK_Selector.cxx @@ -62,6 +62,7 @@ SVTK_SelectorDef myCellPicker(vtkCellPicker::New()) { mySelectionMode = ActorSelection; + myDynamicPreselection = true; myPicker->Delete(); myCellPicker->Delete(); @@ -531,13 +532,9 @@ vtkActorCollection* SVTK_SelectorDef ::Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const { - bool anAdvancedSelectionAlgorithm = true; - SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); - if ( aResourceMgr ) - anAdvancedSelectionAlgorithm = aResourceMgr->booleanValue( "VTKViewer", "use_advanced_selection_algorithm", true ); - vtkActorCollection* aListActors = NULL; - if ( anAdvancedSelectionAlgorithm ) { + + if ( GetDynamicPreSelection() ) { myCellPicker->Pick(theEvent->myX, theEvent->myY, 0.0, @@ -564,3 +561,17 @@ SVTK_SelectorDef myPicker->SetTolerance(theTolerance); myCellPicker->SetTolerance(theTolerance); } + +void +SVTK_SelectorDef +::SetDynamicPreSelection( bool theIsDynPreselect ) +{ + myDynamicPreselection = theIsDynPreselect; +} + +bool +SVTK_SelectorDef +::GetDynamicPreSelection() const +{ + return myDynamicPreselection; +} diff --git a/src/SVTK/SVTK_Selector.h b/src/SVTK/SVTK_Selector.h index 4e1114b8b..15b1678fc 100644 --- a/src/SVTK/SVTK_Selector.h +++ b/src/SVTK/SVTK_Selector.h @@ -218,6 +218,14 @@ public: virtual void SetTolerance(const double& theTolerance) = 0; + + virtual + void + SetDynamicPreSelection( bool theIsDynPreselect ) = 0; + + virtual + bool + GetDynamicPreSelection() const = 0; }; diff --git a/src/SVTK/SVTK_SelectorDef.h b/src/SVTK/SVTK_SelectorDef.h index b4768e74f..bb78d3f89 100644 --- a/src/SVTK/SVTK_SelectorDef.h +++ b/src/SVTK/SVTK_SelectorDef.h @@ -178,9 +178,19 @@ public: void SetTolerance(const double& theTolerance); + virtual + void + SetDynamicPreSelection( bool theIsDynPreselect ); + + virtual + bool + GetDynamicPreSelection() const; + private: int mySelectionMode; + bool myDynamicPreselection; + struct TIOLessThan { bool diff --git a/src/SVTK/SVTK_ViewModel.cxx b/src/SVTK/SVTK_ViewModel.cxx index aa9edc2a8..10ac9944c 100644 --- a/src/SVTK/SVTK_ViewModel.cxx +++ b/src/SVTK/SVTK_ViewModel.cxx @@ -81,6 +81,7 @@ SVTK_Viewer::SVTK_Viewer() myProjMode = 0; myStyle = 0; myZoomingStyle = 0; + myDynamicPreSelection = false; mySpaceBtn[0] = 1; mySpaceBtn[1] = 2; mySpaceBtn[2] = 9; @@ -136,6 +137,7 @@ SUIT_ViewWindow* SVTK_Viewer::createView( SUIT_Desktop* theDesktop ) aViewWindow->SetProjectionMode( projectionMode() ); aViewWindow->SetInteractionStyle( interactionStyle() ); aViewWindow->SetZoomingStyle( zoomingStyle() ); + aViewWindow->SetDynamicPreSelection( dynamicPreSelection() ); aViewWindow->SetIncrementalSpeed( incrementalSpeed(), incrementalSpeedMode() ); aViewWindow->SetSpacemouseButtons( spacemouseBtn(1), spacemouseBtn(2), spacemouseBtn(3) ); @@ -290,6 +292,32 @@ void SVTK_Viewer::setZoomingStyle( const int theStyle ) } } +/*! + \return dynamic preselection +*/ +bool SVTK_Viewer::dynamicPreSelection() const +{ + return myDynamicPreSelection; +} + +/*! + Sets dynamic preselection + \param theMode - new dynamic preselection mode +*/ +void SVTK_Viewer::setDynamicPreSelection( const bool theMode ) +{ + myDynamicPreSelection = theMode; + + if (SUIT_ViewManager* aViewManager = getViewManager()) { + QVector aViews = aViewManager->getViews(); + for ( uint i = 0; i < aViews.count(); i++ ) + { + if ( TViewWindow* aView = dynamic_cast(aViews.at( i )) ) + aView->SetDynamicPreSelection( theMode ); + } + } +} + /*! \return incremental speed value */ diff --git a/src/SVTK/SVTK_ViewModel.h b/src/SVTK/SVTK_ViewModel.h index a3755764c..c0313279e 100644 --- a/src/SVTK/SVTK_ViewModel.h +++ b/src/SVTK/SVTK_ViewModel.h @@ -103,6 +103,12 @@ public: //! Sets zooming style void setZoomingStyle( const int ); + //! Gets dynamic preselection + bool dynamicPreSelection() const; + + //! Sets dynamic preselection + void setDynamicPreSelection( const bool ); + //! Get incremental speed (see #SVTK_InteractorStyle::ControllerIncrement) int incrementalSpeed() const; @@ -180,6 +186,7 @@ private: int myProjMode; int myStyle; int myZoomingStyle; + bool myDynamicPreSelection; int mySpaceBtn[3]; }; diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index dab457576..0a84e834a 100755 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -28,6 +28,7 @@ #include "SALOME_Actor.h" +#include #include #include #include @@ -45,6 +46,7 @@ #include #include #include +#include #include "QtxAction.h" @@ -55,6 +57,7 @@ #include "SUIT_ResourceMgr.h" #include "SUIT_Accel.h" #include "SUIT_OverrideCursor.h" +#include "SUIT_ViewManager.h" #include "QtxActionToolMgr.h" #include "QtxMultiAction.h" @@ -121,7 +124,8 @@ SVTK_ViewWindow::SVTK_ViewWindow(SUIT_Desktop* theDesktop): SUIT_ViewWindow(theDesktop), myView(NULL), myDumpImage(QImage()), - myKeyFreeInteractorStyle(SVTK_KeyFreeInteractorStyle::New()) + myKeyFreeInteractorStyle(SVTK_KeyFreeInteractorStyle::New()), + myEventCallbackCommand(vtkCallbackCommand::New()) { setWindowFlags( windowFlags() & ~Qt::Window ); // specific of vtkSmartPointer @@ -135,7 +139,9 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) { myInteractor = new SVTK_RenderWindowInteractor(this,"SVTK_RenderWindowInteractor"); - SVTK_Selector* aSelector = SVTK_Selector::New(); + SVTK_Selector* aSelector = SVTK_Selector::New(); + aSelector->SetDynamicPreSelection( SUIT_Session::session()->resourceMgr()-> + booleanValue( "VTKViewer", "dynamic_preselection", true ) ); SVTK_GenericRenderWindowInteractor* aDevice = SVTK_GenericRenderWindowInteractor::New(); aDevice->SetRenderWidget(myInteractor); @@ -153,7 +159,7 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) myToolBar = toolMgr()->createToolBar( tr("LBL_TOOLBAR_LABEL"), false, Qt::AllToolBarAreas, -1, this ); myRecordingToolBar = toolMgr()->createToolBar( tr("LBL_TOOLBAR_RECORD_LABEL"), false, Qt::AllToolBarAreas, -1, this ); - createActions( SUIT_Session::session()->activeApplication()->resourceMgr() ); + createActions( SUIT_Session::session()->resourceMgr() ); createToolBar(); SetEventDispatcher(myInteractor->GetDevice()); @@ -205,6 +211,16 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) myView = new SVTK_View(this); Initialize(myView,theModel); + + + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(SVTK_ViewWindow::ProcessEvents); + myEventCallbackCommand->Delete(); + + GetInteractor()->GetInteractorStyle()->AddObserver(SVTK::OperationFinished, + myEventCallbackCommand.GetPointer(), 0.0); + + myInteractor->getRenderWindow()->Render(); onResetView(); @@ -307,6 +323,7 @@ void SVTK_ViewWindow::onFrontView() { GetRenderer()->OnFrontView(); Repaint(); + emit transformed( this ); } /*! @@ -316,6 +333,7 @@ void SVTK_ViewWindow::onBackView() { GetRenderer()->OnBackView(); Repaint(); + emit transformed( this ); } /*! @@ -325,6 +343,7 @@ void SVTK_ViewWindow::onTopView() { GetRenderer()->OnTopView(); Repaint(); + emit transformed( this ); } /*! @@ -334,6 +353,7 @@ void SVTK_ViewWindow::onBottomView() { GetRenderer()->OnBottomView(); Repaint(); + emit transformed( this ); } /*! @@ -343,6 +363,7 @@ void SVTK_ViewWindow::onLeftView() { GetRenderer()->OnLeftView(); Repaint(); + emit transformed( this ); } /*! @@ -352,6 +373,7 @@ void SVTK_ViewWindow::onRightView() { GetRenderer()->OnRightView(); Repaint(); + emit transformed( this ); } /*! @@ -361,6 +383,7 @@ void SVTK_ViewWindow::onClockWiseView() { GetRenderer()->onClockWiseView(); Repaint(); + emit transformed( this ); } /*! @@ -370,6 +393,7 @@ void SVTK_ViewWindow::onAntiClockWiseView() { GetRenderer()->onAntiClockWiseView(); Repaint(); + emit transformed( this ); } /*! @@ -379,6 +403,7 @@ void SVTK_ViewWindow::onResetView() { GetRenderer()->OnResetView(); Repaint(); + emit transformed( this ); } /*! @@ -388,6 +413,7 @@ void SVTK_ViewWindow::onFitAll() { GetRenderer()->OnFitAll(); Repaint(); + emit transformed( this ); } /*! @@ -588,6 +614,7 @@ void SVTK_ViewWindow::SetScale( double theScale[3] ) { GetRenderer()->SetScale( theScale ); Repaint(); + emit transformed( this ); } /*! @@ -708,6 +735,15 @@ void SVTK_ViewWindow::SetZoomingStyle(const int theStyle) onSwitchZoomingStyle( theStyle==1 ); } +/*! + Switch dynamic preselection on / off + \param theDynPreselection - dynamic pre-selection mode +*/ +void SVTK_ViewWindow::SetDynamicPreSelection( bool theDynPreselection ) +{ + onSwitchDynamicPreSelection( theDynPreselection ); +} + /*! Switches "keyboard free" interaction style on/off */ @@ -754,6 +790,19 @@ void SVTK_ViewWindow::onSwitchZoomingStyle( bool theOn ) a->setChecked( theOn ); } +/*! + Toogles dynamic preselection on/off +*/ +void SVTK_ViewWindow::onSwitchDynamicPreSelection( bool theOn ) +{ + GetSelector()->SetDynamicPreSelection( theOn ); + + // update action state if method is called outside + QtxAction* a = getAction( SwitchDynamicPreselectionId ); + if ( a->isChecked() != theOn ) + a->setChecked( theOn ); +} + /*! Sets incremental speed \param theValue - new incremental speed @@ -819,6 +868,15 @@ void SVTK_ViewWindow::onAdjustCubeAxes() GetRenderer()->OnAdjustCubeAxes(); } +void SVTK_ViewWindow::synchronize(SVTK_ViewWindow* otherViewWindow ) +{ + if ( otherViewWindow ) { + bool blocked = blockSignals( true ); + doSetVisualParameters( otherViewWindow->getVisualParameters(), true ); + blockSignals( blocked ); + } +} + /*! Emits key pressed */ @@ -1422,8 +1480,9 @@ void SVTK_ViewWindow::setVisualParameters( const QString& parameters ) /*! The method restores visual parameters of this view from a formated string */ -void SVTK_ViewWindow::doSetVisualParameters( const QString& parameters ) +void SVTK_ViewWindow::doSetVisualParameters( const QString& parameters, bool baseParamsOnly ) { + double pos[3], focalPnt[3], viewUp[3], parScale, scale[3]; QXmlStreamReader aReader(parameters); @@ -1455,24 +1514,33 @@ void SVTK_ViewWindow::doSetVisualParameters( const QString& parameters ) scale[1] = aAttr.value("Y").toString().toDouble(); scale[2] = aAttr.value("Z").toString().toDouble(); //printf("#### ViewScale %f; %f; %f\n", scale[0], scale[1], scale[2]); - } else if (aReader.name() == "DisplayCubeAxis") { - if (aAttr.value("Show") == "0") - gradAxesActor->VisibilityOff(); - else - gradAxesActor->VisibilityOn(); - } else if (aReader.name() == "GraduatedAxis") { - if(aAttr.value("Axis") == "X") - setGradAxisVisualParams(aReader, gradAxesActor->GetXAxisActor2D()); - else if(aAttr.value("Axis") == "Y") - setGradAxisVisualParams(aReader, gradAxesActor->GetYAxisActor2D()); - else if(aAttr.value("Axis") == "Z") - setGradAxisVisualParams(aReader, gradAxesActor->GetZAxisActor2D()); - } else if (aReader.name() == "Trihedron") { - if (aAttr.value("isShown") == "0") - GetTrihedron()->VisibilityOff(); - else - GetTrihedron()->VisibilityOn(); - SetTrihedronSize(aAttr.value("Size").toString().toDouble()); + } + else if (aReader.name() == "DisplayCubeAxis") { + if ( !baseParamsOnly ) { + if (aAttr.value("Show") == "0") + gradAxesActor->VisibilityOff(); + else + gradAxesActor->VisibilityOn(); + } + } + else if (aReader.name() == "GraduatedAxis") { + if ( !baseParamsOnly ) { + if(aAttr.value("Axis") == "X") + setGradAxisVisualParams(aReader, gradAxesActor->GetXAxisActor2D()); + else if(aAttr.value("Axis") == "Y") + setGradAxisVisualParams(aReader, gradAxesActor->GetYAxisActor2D()); + else if(aAttr.value("Axis") == "Z") + setGradAxisVisualParams(aReader, gradAxesActor->GetZAxisActor2D()); + } + } + else if (aReader.name() == "Trihedron") { + if ( !baseParamsOnly ) { + if (aAttr.value("isShown") == "0") + GetTrihedron()->VisibilityOff(); + else + GetTrihedron()->VisibilityOn(); + SetTrihedronSize(aAttr.value("Size").toString().toDouble()); + } } } } @@ -1482,8 +1550,10 @@ void SVTK_ViewWindow::doSetVisualParameters( const QString& parameters ) camera->SetFocalPoint( focalPnt ); camera->SetViewUp( viewUp ); camera->SetParallelScale( parScale ); - SetScale( scale ); - } else { + GetRenderer()->SetScale( scale ); + //SetScale( scale ); + } + else { QStringList paramsLst = parameters.split( '*' ); if ( paramsLst.size() >= nNormalParams ) { // 'reading' list of parameters @@ -1507,32 +1577,37 @@ void SVTK_ViewWindow::doSetVisualParameters( const QString& parameters ) camera->SetFocalPoint( focalPnt ); camera->SetViewUp( viewUp ); camera->SetParallelScale( parScale ); - SetScale( scale ); + GetRenderer()->SetScale( scale ); + //SetScale( scale ); // apply graduated axes parameters - SVTK_CubeAxesActor2D* gradAxesActor = GetCubeAxes(); - if ( gradAxesActor && paramsLst.size() == nAllParams ) { - int i = nNormalParams+1, j = i + nGradAxisParams - 1; - ::setGradAxisVisualParams( gradAxesActor->GetXAxisActor2D(), parameters.section( '*', i, j ) ); - i = j + 1; j += nGradAxisParams; - ::setGradAxisVisualParams( gradAxesActor->GetYAxisActor2D(), parameters.section( '*', i, j ) ); - i = j + 1; j += nGradAxisParams; - ::setGradAxisVisualParams( gradAxesActor->GetZAxisActor2D(), parameters.section( '*', i, j ) ); + if ( !baseParamsOnly ) { + SVTK_CubeAxesActor2D* gradAxesActor = GetCubeAxes(); + if ( gradAxesActor && paramsLst.size() == nAllParams ) { + int i = nNormalParams+1, j = i + nGradAxisParams - 1; + ::setGradAxisVisualParams( gradAxesActor->GetXAxisActor2D(), parameters.section( '*', i, j ) ); + i = j + 1; j += nGradAxisParams; + ::setGradAxisVisualParams( gradAxesActor->GetYAxisActor2D(), parameters.section( '*', i, j ) ); + i = j + 1; j += nGradAxisParams; + ::setGradAxisVisualParams( gradAxesActor->GetZAxisActor2D(), parameters.section( '*', i, j ) ); - if ( paramsLst[13].toUShort() ) - gradAxesActor->VisibilityOn(); - else - gradAxesActor->VisibilityOff(); - } else if ( paramsLst.size() == nAllParams ) { - if ( paramsLst[90].toUShort() ) - GetTrihedron()->VisibilityOn(); - else - GetTrihedron()->VisibilityOff(); + if ( paramsLst[13].toUShort() ) + gradAxesActor->VisibilityOn(); + else + gradAxesActor->VisibilityOff(); + } + else if ( paramsLst.size() == nAllParams ) { + if ( paramsLst[90].toUShort() ) + GetTrihedron()->VisibilityOn(); + else + GetTrihedron()->VisibilityOff(); - SetTrihedronSize(paramsLst[91].toDouble()); + SetTrihedronSize(paramsLst[91].toDouble()); + } } } } + Repaint(); } @@ -1825,6 +1900,17 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onViewParameters(bool))); mgr->registerAction( anAction, ViewParametersId ); + // Synchronize View + anAction = new QtxAction(tr("MNU_SYNCHRONIZE_VIEW"), + theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_SYNCHRONIZE" ) ), + tr( "MNU_SYNCHRONIZE_VIEW" ), 0, this); + anAction->setStatusTip(tr("DSC_SYNCHRONIZE_VIEW")); + anAction->setMenu( new QMenu( this ) ); + anAction->setCheckable(true); + connect(anAction->menu(), SIGNAL(aboutToShow()), this, SLOT(updateSyncViews())); + connect(anAction, SIGNAL(triggered(bool)), this, SLOT(onSynchronizeView(bool))); + mgr->registerAction( anAction, SynchronizeId ); + // Switch between interaction styles anAction = new QtxAction(tr("MNU_SVTK_STYLE_SWITCH"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_STYLE_SWITCH" ) ), @@ -1834,7 +1920,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchInteractionStyle(bool))); mgr->registerAction( anAction, SwitchInteractionStyleId ); - // Switch between zomming styles + // Switch between zooming styles anAction = new QtxAction(tr("MNU_SVTK_ZOOMING_STYLE_SWITCH"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_ZOOMING_STYLE_SWITCH" ) ), tr( "MNU_SVTK_ZOOMING_STYLE_SWITCH" ), 0, this); @@ -1843,6 +1929,15 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchZoomingStyle(bool))); mgr->registerAction( anAction, SwitchZoomingStyleId ); + // Turn on/off dynamic pre-selection + anAction = new QtxAction(tr("MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH"), + theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_DYNAMIC_PRESLECTION_SWITCH" ) ), + tr( "MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH" ), 0, this); + anAction->setStatusTip(tr("DSC_SVTK_DYNAMIC_PRESLECTION_SWITCH")); + anAction->setCheckable(true); + connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchDynamicPreSelection(bool))); + mgr->registerAction( anAction, SwitchDynamicPreselectionId ); + // Start recording myStartAction = new QtxAction(tr("MNU_SVTK_RECORDING_START"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_RECORDING_START" ) ), @@ -1889,6 +1984,7 @@ void SVTK_ViewWindow::createToolBar() mgr->append( DumpId, myToolBar ); mgr->append( SwitchInteractionStyleId, myToolBar ); mgr->append( SwitchZoomingStyleId, myToolBar ); + mgr->append( SwitchDynamicPreselectionId, myToolBar ); mgr->append( ViewTrihedronId, myToolBar ); QtxMultiAction* aScaleAction = new QtxMultiAction( this ); @@ -1925,7 +2021,10 @@ void SVTK_ViewWindow::createToolBar() mgr->append( GraduatedAxes, myToolBar ); mgr->append( ViewParametersId, myToolBar ); + mgr->append( SynchronizeId, myToolBar ); + mgr->append( toolMgr()->separator(), myToolBar ); + mgr->append( ParallelModeId, myToolBar ); mgr->append( ProjectionModeId, myToolBar ); @@ -2098,3 +2197,150 @@ void SVTK_ViewWindow::hideEvent( QHideEvent * theEvent ) emit Hide( theEvent ); } +void SVTK_ViewWindow::synchronizeView( SVTK_ViewWindow* viewWindow, int id ) +{ + SVTK_ViewWindow* otherViewWindow = 0; + QList compatibleViews; + + bool isSync = viewWindow->toolMgr()->action( SynchronizeId )->isChecked(); + + int vwid = viewWindow->getId(); + + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) return; + + QList wmlist; + app->viewManagers( viewWindow->getViewManager()->getType(), wmlist ); + + foreach( SUIT_ViewManager* wm, wmlist ) { + QVector vwlist = wm->getViews(); + + foreach( SUIT_ViewWindow* vw, vwlist ) { + SVTK_ViewWindow* vtkVW = dynamic_cast( vw ); + if ( !vtkVW ) continue; + if ( vtkVW->getId() == id ) + otherViewWindow = vtkVW; + else if ( vtkVW != viewWindow ) + compatibleViews.append( vtkVW ); + } + } + + if ( isSync && id ) { + // remove all possible disconnections + foreach( SVTK_ViewWindow* vw, compatibleViews ) { + // disconnect target view + vw->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), viewWindow, SLOT( synchronize( SVTK_ViewPort* ) ) ); + viewWindow->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), vw, SLOT( synchronize( SVTK_ViewPort* ) ) ); + if ( otherViewWindow ) { + // disconnect source view + vw->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), otherViewWindow, SLOT( synchronize( SVTK_ViewPort* ) ) ); + otherViewWindow->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), vw, SLOT( synchronize( SVTK_ViewPort* ) ) ); + } + QAction* a = vw->toolMgr()->action( SynchronizeId ); + if ( a ) { + int anid = a->data().toInt(); + if ( a->isChecked() && ( anid == id || anid == vwid ) ) { + bool blocked = a->blockSignals( true ); + a->setChecked( false ); + a->blockSignals( blocked ); + } + } + } + if ( otherViewWindow ) { + // reconnect source and target view + otherViewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), viewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); + viewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), otherViewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); + otherViewWindow->connect( viewWindow, SIGNAL( transformed( SVTK_ViewWindow* ) ), SLOT( synchronize( SVTK_ViewWindow* ) ) ); + viewWindow->connect( otherViewWindow, SIGNAL( transformed( SVTK_ViewWindow* ) ), SLOT( synchronize( SVTK_ViewWindow* ) ) ); + // synchronize target view with source view + viewWindow->doSetVisualParameters( otherViewWindow->getVisualParameters(), true ); + viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); + otherViewWindow->toolMgr()->action( SynchronizeId )->setData( viewWindow->getId() ); + if ( !otherViewWindow->toolMgr()->action( SynchronizeId )->isChecked() ) { + bool blocked = otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( true ); + otherViewWindow->toolMgr()->action( SynchronizeId )->setChecked( true ); + otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( blocked ); + } + } + } + else if ( otherViewWindow ) { + // reconnect source and target view + otherViewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), viewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); + viewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), otherViewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); + viewWindow->doSetVisualParameters( otherViewWindow->getVisualParameters(), true ); + viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); + if ( otherViewWindow->toolMgr()->action( SynchronizeId )->data().toInt() == viewWindow->getId() && otherViewWindow->toolMgr()->action( SynchronizeId )->isChecked() ) { + bool blocked = otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( true ); + otherViewWindow->toolMgr()->action( SynchronizeId )->setChecked( false ); + otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( blocked ); + } + } +} + +/*! + "Synchronize View" action slot. +*/ +void SVTK_ViewWindow::onSynchronizeView(bool checked) +{ + QAction* a = qobject_cast( sender() ); + if ( a ) { + synchronizeView( this, a->data().toInt() ); + } +} + +/*! + Update list of available view for the "Synchronize View" action +*/ +void SVTK_ViewWindow::updateSyncViews() +{ + QAction* anAction = toolMgr()->action( SynchronizeId ); + if ( anAction && anAction->menu() ) { + int currentId = anAction->data().toInt(); + anAction->menu()->clear(); + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( app ) { + QList wmlist; + app->viewManagers( getViewManager()->getType(), wmlist ); + foreach( SUIT_ViewManager* wm, wmlist ) { + QVector vwlist = wm->getViews(); + foreach ( SUIT_ViewWindow* vw, vwlist ) { + SVTK_ViewWindow* vtkVW = dynamic_cast( vw ); + if ( !vtkVW || vtkVW == this ) continue; + QAction* a = anAction->menu()->addAction( vtkVW->windowTitle() ); + if ( vtkVW->getId() == currentId ) { + QFont f = a->font(); + f.setBold( true ); + a->setFont( f ); + } + a->setData( vtkVW->getId() ); + connect( a, SIGNAL( triggered(bool) ), this, SLOT( onSynchronizeView(bool) ) ); + } + } + } + if ( anAction->menu()->actions().isEmpty() ) { + anAction->setData( 0 ); + anAction->menu()->addAction( tr( "MNU_SYNC_NO_VIEW" ) ); + } + } +} + + +/*! + Emit transformed signal. +*/ +void SVTK_ViewWindow::emitTransformed() { + transformed(this); +} + +/*! + Processes events +*/ +void SVTK_ViewWindow::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* theCallData) +{ + SVTK_ViewWindow* self = reinterpret_cast(theClientData); + if(self) + self->emitTransformed(); +} diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h index fddddef2e..0e713d57a 100755 --- a/src/SVTK/SVTK_ViewWindow.h +++ b/src/SVTK/SVTK_ViewWindow.h @@ -53,6 +53,8 @@ class vtkRenderer; class vtkRenderWindow; class vtkRenderWindowInteractor; class vtkInteractorStyle; +class vtkCallbackCommand; + class SVTK_RenderWindowInteractor; class SVTK_Renderer; class SVTK_NonIsometricDlg; @@ -226,6 +228,8 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow //! Redirect the request to #SVTK_MainWindow::SetZoomingStyle virtual void SetZoomingStyle( const int ); + virtual void SetDynamicPreSelection( bool ); + //! Redirect the request to #SVTK_MainWindow::SetSpacemouseButtons virtual void SetSpacemouseButtons( const int, const int, const int ); @@ -261,6 +265,8 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow virtual void RefreshDumpImage(); + void emitTransformed(); + //! To invoke a VTK event on #SVTK_RenderWindowInteractor instance void InvokeEvent(unsigned long theEvent, void* theCallData); @@ -301,6 +307,7 @@ public slots: void onSwitchInteractionStyle(bool theOn); void onSwitchZoomingStyle(bool theOn); + void onSwitchDynamicPreSelection(bool theOn); void onStartRecording(); void onPlayRecording(); @@ -311,6 +318,7 @@ signals: void selectionChanged(); void actorAdded(VTKViewer_Actor*); void actorRemoved(VTKViewer_Actor*); + void transformed(SVTK_ViewWindow*); public slots: //! Redirect the request to #SVTK_Renderer::OnFrontView @@ -354,7 +362,9 @@ public slots: //! Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes virtual void onAdjustCubeAxes(); - + + virtual void synchronize(SVTK_ViewWindow*); + protected slots: void onKeyPressed(QKeyEvent* event); void onKeyReleased(QKeyEvent* event); @@ -367,7 +377,13 @@ protected: virtual void Initialize(SVTK_View* theView, SVTK_ViewModelBase* theModel); - void doSetVisualParameters( const QString& ); + // Main process event method + static void ProcessEvents(vtkObject* object, + unsigned long event, + void* clientdata, + void* calldata); + + void doSetVisualParameters( const QString&, bool = false ); void SetEventDispatcher(vtkObject* theDispatcher); QImage dumpViewContent(); @@ -385,11 +401,10 @@ protected: ChangeRotationPointId, RotationId, FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId, ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate, - ParallelModeId, ProjectionModeId, ViewParametersId, SwitchInteractionStyleId, - SwitchZoomingStyleId, + ParallelModeId, ProjectionModeId, ViewParametersId, SynchronizeId, SwitchInteractionStyleId, + SwitchZoomingStyleId,SwitchDynamicPreselectionId, StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId }; - SVTK_View* myView; //SVTK_MainWindow* myMainWindow; SVTK_ViewModelBase* myModel; @@ -402,6 +417,9 @@ protected: vtkSmartPointer myEventDispatcher; + // Used to process events + vtkSmartPointer myEventCallbackCommand; + SVTK_NonIsometricDlg* myNonIsometricDlg; SVTK_UpdateRateDlg* myUpdateRateDlg; SVTK_CubeAxesDlg* myCubeAxesDlg; @@ -422,6 +440,13 @@ protected: vtkPVAxesWidget* myAxesWidget; +private slots: + void onSynchronizeView(bool); + void updateSyncViews(); + +private: + static void synchronizeView( SVTK_ViewWindow*, int ); + private: QImage myDumpImage; }; diff --git a/src/SVTK/resources/SVTK_images.ts b/src/SVTK/resources/SVTK_images.ts index 8ac1e43a1..362ffef6e 100644 --- a/src/SVTK/resources/SVTK_images.ts +++ b/src/SVTK/resources/SVTK_images.ts @@ -55,5 +55,13 @@ ICON_SVTK_RECORDING_STOP vtk_view_recording_stop.png + + ICON_SVTK_SYNCHRONIZE + vtk_view_sync.png + + + ICON_SVTK_DYNAMIC_PRESLECTION_SWITCH + vtk_view_highlight.png + diff --git a/src/SVTK/resources/SVTK_msg_en.ts b/src/SVTK/resources/SVTK_msg_en.ts index d76686531..ad4d257bf 100644 --- a/src/SVTK/resources/SVTK_msg_en.ts +++ b/src/SVTK/resources/SVTK_msg_en.ts @@ -179,6 +179,18 @@ DSC_VIEWPARAMETERS_VIEW Change the parameters of the view + + MNU_SYNCHRONIZE_VIEW + Synchronize + + + DSC_SYNCHRONIZE_VIEW + Synchronize view + + + MNU_SYNC_NO_VIEW + [ No appropriate view ] + MNU_SVTK_PARALLEL_MODE Orthogonal Mode @@ -211,6 +223,14 @@ MNU_SVTK_ZOOMING_STYLE_SWITCH Zomming style switch + + DSC_SVTK_DYNAMIC_PRESLECTION_SWITCH + Dynamic preselection switch + + + MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH + Dynamic preselection switch + SVTK_FontWidget diff --git a/src/SVTK/resources/SVTK_msg_fr.ts b/src/SVTK/resources/SVTK_msg_fr.ts index bf09be213..dad722885 100755 --- a/src/SVTK/resources/SVTK_msg_fr.ts +++ b/src/SVTK/resources/SVTK_msg_fr.ts @@ -179,6 +179,18 @@ DSC_VIEWPARAMETERS_VIEW Changer les paramètres de la vue + + MNU_SYNCHRONIZE_VIEW + Synchroniser + + + DSC_SYNCHRONIZE_VIEW + Synchroniser la vue + + + MNU_SYNC_NO_VIEW + [ Pas de vue appropriée ] + MNU_SVTK_PARALLEL_MODE Mode orthogonal @@ -211,6 +223,14 @@ MNU_SVTK_ZOOMING_STYLE_SWITCH Changer le style de zoom + + DSC_SVTK_DYNAMIC_PRESLECTION_SWITCH + Pré-sélection dynamique + + + MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH + Pré-sélection dynamique + SVTK_FontWidget diff --git a/src/SVTK/resources/vtk_view_highlight.png b/src/SVTK/resources/vtk_view_highlight.png new file mode 100755 index 0000000000000000000000000000000000000000..0aa1d6f9c6624693ee049035e8551d882e557438 GIT binary patch literal 835 zcmV-J1HAl+P)Px#24YJ`L;ykni2&i^nL@V!000SaNLh0L01m_e01m_fl`9S#00007bV*G`2ipl4 z5ds^DCplyQ00P5FL_t(I%dM2pOH@%5$3OR++cZwoPqQ2$E3=%0Hd;hc|3JH`Re`%A z`awjZ3kRVeN?B2sL|8!)LW^h-L{WiJk_9yov}hKg4T+VaNx!T{=e2lm#u;(SMHepb z@ZRHdzUQ3py(SzE^S@R+9>;pI^B-Vqf&Mg*^U*$xC@P8(!5Brv-8&m*(Z8k%D~eb_ z)uJM(wTK7>Pxb*+0~v*g2u1`lFqwDNF!UL3*mAR#+K`L(9)>WFlG7T`I6Wa*MMMV9jB?ejpjW&XluJnEEWS` z+}p`Xe#`(T`%FZc6)Xbd=l;WI1Oh&4Yimg)5=0`A-T4fj0Z#UrF+xFLKE8s*d>;A0 z&0Dt_Oa34ltxEv0X#qvWou*YBCq*(jia+SXT0bL$BV4<7m7(EJOXKnQ%ZiGMN@L8M z$v~L^=K3tz4p$LW03&9Y^s zUB=9~l&^sxn;|?ZIPqa7hq-}SW{X&uVbqJ{s8y$zKYI`L1zE} N002ovPDHLkV1n7(bgcjY literal 0 HcmV?d00001 diff --git a/src/SVTK/resources/vtk_view_sync.png b/src/SVTK/resources/vtk_view_sync.png new file mode 100755 index 0000000000000000000000000000000000000000..32b95228a8b97c791405a2b82d9a472aecf37c1b GIT binary patch literal 627 zcmV-(0*w8MP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipl4 z3JE46$lxyk00Hw!L_t(I%axR|Yuiu|hrcs|q>D9Vh|v%-G{c)ab#!py(IJZ|9ZL-{ zT?!Gz7(=1zR7?UIv;-Fn?XJZ`2qaW<|A643OX;AxLnshQR>$Nc0wC)uoT|!)0R%9aLf=&G|T-TmeK{i{-N-Eru*LP^!6(1GJI z@L~WeWuM>gon^2xwZ5;YJ5CD4_f>WeR$BDr^*gqA_cC=UEdTDhV*{Yn7=Tfl&p9Cj zZtw2#`^Wc!l00mYUuV5)EjnBlTU$GGxxt?ua9)7tL8?&eU?ra{^Q+bY79bZFZ?j|+ z$Aw#+7Mgs`>}>N SalomeApp_DataModelSync::children( const kerPtr& obj ) const _PTR(AttributeExpandable) aAttrExp = anAttr; expandable = aAttrExp->IsExpandable(); } - + if ( expandable ) { - _PTR(ChildIterator) it ( myStudy->NewChildIterator( obj ) ); - for ( ; it->More(); it->Next() ) - ch.append( it->Value() ); + // tmp?? + _PTR(UseCaseBuilder) aUseCaseBuilder = myStudy->GetUseCaseBuilder(); + if (aUseCaseBuilder->HasChildren(obj)) { + _PTR(UseCaseIterator) it ( aUseCaseBuilder->GetUseCaseIterator( obj ) ); + for ( ; it->More(); it->Next() ) + ch.append( it->Value() ); + } + else { + _PTR(ChildIterator) it ( myStudy->NewChildIterator( obj ) ); + for ( ; it->More(); it->Next() ) + ch.append( it->Value() ); + } } return ch; diff --git a/src/SalomeApp/SalomeApp_DataObject.cxx b/src/SalomeApp/SalomeApp_DataObject.cxx index e04a29232..fa5cd5a52 100644 --- a/src/SalomeApp/SalomeApp_DataObject.cxx +++ b/src/SalomeApp/SalomeApp_DataObject.cxx @@ -365,13 +365,22 @@ _PTR(SObject) SalomeApp_DataObject::referencedObject() const bool SalomeApp_DataObject::hasChildren() const { bool ok = false; - _PTR(ChildIterator) it ( myObject->GetStudy()->NewChildIterator( myObject ) ); - for ( ; it->More() && !ok; it->Next() ) { - _PTR(SObject) obj = it->Value(); - if ( obj ) { - _PTR(SObject) refObj; - //if ( obj->ReferencedObject( refObj ) ) continue; // omit references - if ( obj->GetName() != "" ) ok = true; + + // tmp?? + _PTR(UseCaseBuilder) aUseCaseBuilder = myObject->GetStudy()->GetUseCaseBuilder(); + if (aUseCaseBuilder->IsUseCaseNode(myObject)) { + ok = aUseCaseBuilder->HasChildren(myObject); + // TODO: check name as below? + } + else { + _PTR(ChildIterator) it ( myObject->GetStudy()->NewChildIterator( myObject ) ); + for ( ; it->More() && !ok; it->Next() ) { + _PTR(SObject) obj = it->Value(); + if ( obj ) { + _PTR(SObject) refObj; + //if ( obj->ReferencedObject( refObj ) ) continue; // omit references + if ( obj->GetName() != "" ) ok = true; + } } } return ok; diff --git a/src/SalomeApp/SalomeApp_DataObject.h b/src/SalomeApp/SalomeApp_DataObject.h index c9e23bc3d..dc4f28984 100644 --- a/src/SalomeApp/SalomeApp_DataObject.h +++ b/src/SalomeApp/SalomeApp_DataObject.h @@ -18,11 +18,10 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File : SalomeApp_DataObject.h // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #ifndef SALOMEAPP_DATAOBJECT_H #define SALOMEAPP_DATAOBJECT_H diff --git a/src/SalomeApp/SalomeApp_Module.cxx b/src/SalomeApp/SalomeApp_Module.cxx index cd88200d8..59efa951b 100644 --- a/src/SalomeApp/SalomeApp_Module.cxx +++ b/src/SalomeApp/SalomeApp_Module.cxx @@ -18,12 +18,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: SalomeApp_Module.cxx // Created: 10/25/2004 11:39:56 AM // Author: Sergey LITONIN -// + #include "SalomeApp_Module.h" #include "SalomeApp_DataModel.h" #include "SalomeApp_Application.h" @@ -294,4 +293,4 @@ void SalomeApp_Module::updateModuleVisibilityState() { if ( SUIT_ViewManager* vman = app->activeViewManager() ) vmod = vman->getViewModel(); app->updateVisibilityState( listObj, vmod ); -} \ No newline at end of file +} diff --git a/src/SalomeApp/SalomeApp_Module.h b/src/SalomeApp/SalomeApp_Module.h index cfe8f0933..307bf04c1 100644 --- a/src/SalomeApp/SalomeApp_Module.h +++ b/src/SalomeApp/SalomeApp_Module.h @@ -18,12 +18,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: SalomeApp_Module.h // Created: 10/25/2004 11:33:06 AM // Author: Sergey LITONIN -// + #ifndef SALOMEAPP_MODULE_H #define SALOMEAPP_MODULE_H diff --git a/src/SalomeApp/SalomeApp_Study.cxx b/src/SalomeApp/SalomeApp_Study.cxx index 6f11cdaf5..c0bd439b4 100644 --- a/src/SalomeApp/SalomeApp_Study.cxx +++ b/src/SalomeApp/SalomeApp_Study.cxx @@ -18,7 +18,6 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include "SalomeApp_Study.h" @@ -80,7 +79,7 @@ public: myStudy=aStudy; fillEntryMap(); } - + SUIT_DataObject* findObject( const char* theID ) const { EntryMap::const_iterator it = entry2SuitObject.find( theID ); @@ -98,7 +97,7 @@ public: virtual bool event(QEvent *event) { - if (event->type() == QEvent::User ) + if (event->type() == QEvent::User ) { //START_TIMING(notify); notifyObserverID_real(static_cast(event)->_anID.c_str(),static_cast(event)->_event); @@ -110,96 +109,164 @@ public: void notifyObserverID_real(const std::string& theID, long event) { SalomeApp_DataObject* suit_obj = 0; - - switch(event) { - case 1: + + switch(event) { + case 1: { //Add sobject - EntryMapIter it = entry2SuitObject.find( theID ); - if ( it != entry2SuitObject.end() ) - { - MESSAGE("Entry " << theID << " is already added. Problem ??"); + _PTR(SObject) aSObj = myStudyDS->FindObjectID(theID); + _PTR(SComponent) aSComp = aSObj->GetFatherComponent(); + + if (!aSComp || aSComp->IsNull()) { + MESSAGE("Entry " << theID << " has not father component. Problem ??"); return; } - _PTR(SObject) obj = myStudyDS->FindObjectID( theID ); - int last2Pnt_pos = theID.rfind( ":" ); - std::string parent_id = theID.substr( 0, last2Pnt_pos ); - int tag = atoi( theID.substr( last2Pnt_pos+1 ).c_str() ); - - if ( parent_id.length() == 3 ) // "0:1" - root item? - { - // It's probably a SComponent - _PTR(SComponent) aSComp = obj->GetFatherComponent(); - if ( aSComp && !aSComp->IsNull() && aSComp->GetID() == theID ) - suit_obj = new SalomeApp_ModuleObject( aSComp ); - else - suit_obj = new SalomeApp_DataObject( obj ); - } - else - { - suit_obj = new SalomeApp_DataObject( obj ); - } - - it = entry2SuitObject.find( parent_id ); - if ( it != entry2SuitObject.end() ) - { - SalomeApp_DataObject* father = it->second; - father->insertChildAtTag( suit_obj, tag ); - } - else - { + + // Mantis issue 0020136: Drag&Drop in OB + _PTR(UseCaseBuilder) aUseCaseBuilder = myStudyDS->GetUseCaseBuilder(); + if (aUseCaseBuilder->IsUseCaseNode(aSComp)) { // BEGIN: work with tree nodes structure + if (!aUseCaseBuilder->IsUseCaseNode(aSObj)) { + // tree node is not yet set, it is a normal situation + return; + } + + _PTR(SObject) aFatherSO = aUseCaseBuilder->GetFather(aSObj); + if (!aFatherSO || aFatherSO->IsNull()) { + MESSAGE("Father SObject is not found. Problem ??"); + return; + } + + std::string parent_id = aFatherSO->GetID(); + EntryMapIter it = entry2SuitObject.find(parent_id.c_str()); + + if (it == entry2SuitObject.end()) { + MESSAGE("Father data object is not found. Problem ??"); + return; + } + + SalomeApp_DataObject* aFatherDO = it->second; + + it = entry2SuitObject.find(theID); + if (it != entry2SuitObject.end()) { // this SOobject is already added somethere + // tmp?? + suit_obj = it->second; + SUIT_DataObject* oldFather = suit_obj->parent(); + if (oldFather) { + oldFather->removeChild(suit_obj, false); + + suit_obj->updateItem(); // tmp?? + if (SalomeApp_DataObject* oldFatherSA = dynamic_cast(oldFather)) { + oldFatherSA->updateItem(); // tmp?? + } + + //entry2SuitObject.erase(it); + ////delete suit_obj; + //suit_obj = new SalomeApp_DataObject(aSObj); + //entry2SuitObject[theID] = suit_obj; + } + } + else { + suit_obj = new SalomeApp_DataObject(aSObj); + entry2SuitObject[theID] = suit_obj; + } + + // define position in the data tree (in aFatherDO) to insert the aSObj + int pos = -1; + //int childDataObjCount = aFatherDO->childCount(); + _PTR(UseCaseIterator) aUseCaseIter = aUseCaseBuilder->GetUseCaseIterator(aFatherSO); + for (int cur = 0; aUseCaseIter->More() && pos < 0; cur++, aUseCaseIter->Next()) { + if (aUseCaseIter->Value()->GetID() == theID) { + pos = cur; + break; + } + } + + //aFatherDO->insertChildAtPos(suit_obj, pos); + aFatherDO->insertChild(suit_obj, pos); + aFatherDO->updateItem(); // tmp?? + + } // END: work with tree nodes structure + else { // BEGIN: work with study structure + EntryMapIter it = entry2SuitObject.find( theID ); + if ( it != entry2SuitObject.end() ) { + MESSAGE("Entry " << theID << " is already added. Problem ??"); + return; + } + + int last2Pnt_pos = theID.rfind( ":" ); + std::string parent_id = theID.substr( 0, last2Pnt_pos ); + int tag = atoi( theID.substr( last2Pnt_pos+1 ).c_str() ); + if ( parent_id.length() == 3 ) // "0:1" - root item? { - // This should be for a module - SUIT_DataObject* father=myStudy->root(); - father->appendChild(suit_obj); + // It's probably a SComponent + if ( theID == aSComp->GetID() ) + suit_obj = new SalomeApp_ModuleObject( aSComp ); + else + suit_obj = new SalomeApp_DataObject( aSObj ); } else { - MESSAGE("SHOULD NEGER GET HERE!!!"); - - //Try to find the SalomeApp_DataObject object parent - std::string root_id = parent_id.substr( 0, 4 ); - std::string obj_id = parent_id.substr( 4 ); - - std::string anID; - std::string::size_type debut = 0; - std::string::size_type fin; - SalomeApp_DataObject* anObj = dynamic_cast( myStudy->root() ); - while ( 1 ) + suit_obj = new SalomeApp_DataObject( aSObj ); + } + + it = entry2SuitObject.find( parent_id ); + if ( it != entry2SuitObject.end() ) { + SalomeApp_DataObject* father = it->second; + father->insertChildAtTag( suit_obj, tag ); + } + else { + if ( parent_id.length() == 3 ) // "0:1" - root item? { - fin = obj_id.find_first_of( ':', debut ); - if ( fin == std::string::npos ) - { - //last id - anObj = dynamic_cast( anObj->childObject( atoi( obj_id.substr( debut ).c_str() )-1 ) ); - entry2SuitObject[parent_id] = anObj; - break; - } - anID = root_id + obj_id.substr( 0, fin ); - EntryMapIter it2 = entry2SuitObject.find( anID ); - if ( it2 == entry2SuitObject.end() ) - { - //the ID is not known in entry2SuitObject - anObj = dynamic_cast( anObj->childObject( atoi( obj_id.substr( debut, fin-debut ).c_str() )-1 ) ); - entry2SuitObject[anID] = anObj; + // This should be for a module + SUIT_DataObject* father=myStudy->root(); + father->appendChild(suit_obj); + } + else + { + MESSAGE("SHOULD NEVER GET HERE!!!"); + + //Try to find the SalomeApp_DataObject object parent + std::string root_id = parent_id.substr( 0, 4 ); + std::string obj_id = parent_id.substr( 4 ); + + std::string anID; + std::string::size_type debut = 0; + std::string::size_type fin; + SalomeApp_DataObject* anObj = dynamic_cast( myStudy->root() ); + while ( 1 ) { + fin = obj_id.find_first_of( ':', debut ); + if ( fin == std::string::npos ) { + //last id + anObj = dynamic_cast(anObj->childObject(atoi(obj_id.substr(debut).c_str())-1)); + entry2SuitObject[parent_id] = anObj; + break; + } + anID = root_id + obj_id.substr( 0, fin ); + EntryMapIter it2 = entry2SuitObject.find( anID ); + if ( it2 == entry2SuitObject.end() ) { + //the ID is not known in entry2SuitObject + anObj = dynamic_cast(anObj->childObject(atoi(obj_id.substr(debut, fin-debut).c_str())-1)); + entry2SuitObject[anID] = anObj; + } + else + anObj = it2->second; + debut = fin+1; } - else - anObj = it2->second; - debut = fin+1; + anObj->insertChildAtTag( suit_obj, tag ); } - anObj->insertChildAtTag( suit_obj, tag ); } - } - entry2SuitObject[theID] = suit_obj; + entry2SuitObject[theID] = suit_obj; + } // END: work with study structure break; - } - case 2: + } + case 2: { // Remove sobject EntryMapIter it = entry2SuitObject.find( theID ); if ( it != entry2SuitObject.end() ) { suit_obj = it->second; - // VSR: object is not removed, since SALOMEDS::SObject is not actually removed, only its attributes are cleared; + // VSR: object is not removed, since SALOMEDS::SObject is not actually removed, + // only its attributes are cleared; // thus, the object can be later reused suit_obj->updateItem(); //SUIT_DataObject* father=suit_obj->parent(); @@ -213,7 +280,7 @@ public: } break; } - case 0: + case 0: { //modify sobject //MESSAGE("Want to modify an object " << theID); EntryMapIter it = entry2SuitObject.find( theID ); @@ -231,20 +298,21 @@ public: case 5: //IOR of the object modified { EntryMapIter it = entry2SuitObject.find( theID ); - if ( it != entry2SuitObject.end() ) + if ( it != entry2SuitObject.end() ) suit_obj = it->second; - + /* Define visibility state */ - bool isComponent = dynamic_cast( suit_obj ) != 0; + bool isComponent = dynamic_cast( suit_obj ) != 0; if ( suit_obj && !isComponent ) { QString moduleTitle = ((CAM_Application*)myStudy->application())->moduleTitle(suit_obj->componentDataType()); if (!moduleTitle.isEmpty()) { LightApp_Displayer* aDisplayer = LightApp_Displayer::FindDisplayer(moduleTitle,false); - if(aDisplayer) { + if (aDisplayer) { if(aDisplayer->canBeDisplayed(theID.c_str())) { myStudy->setVisibilityState( theID.c_str(), Qtx::HiddenState ); //MESSAGE("Object with entry : "<< theID <<" CAN be displayed !!!"); - } else + } + else MESSAGE("Object with entry : "<< theID <<" CAN'T be displayed !!!"); } } @@ -253,9 +321,9 @@ public: } default:MESSAGE("Unknown event: " << event);break; } //switch - } //notifyObserverID + } //notifyObserverID_real -private: +private: void fillEntryMap() { entry2SuitObject.clear(); @@ -287,7 +355,7 @@ private: } } } - + private: _PTR(Study) myStudyDS; SalomeApp_Study* myStudy; @@ -301,7 +369,7 @@ private: SalomeApp_Study::SalomeApp_Study( SUIT_Application* app ) : LightApp_Study( app ), myObserver( 0 ) { -} +} /*! Destructor. @@ -376,10 +444,10 @@ bool SalomeApp_Study::createDocument( const QString& theStr ) #ifdef WITH_SALOMEDS_OBSERVER myObserver = new Observer_i(myStudyDS,this); - //attach an observer to the study with notification of modifications + //attach an observer to the study with notification of modifications myStudyDS->attach(myObserver->_this(),true); #endif - + return aRet; } @@ -404,23 +472,23 @@ bool SalomeApp_Study::openDocument( const QString& theFileName ) ModelList dm_s; dataModels( dm_s ); QListIterator it( dm_s ); - while ( it.hasNext() ) + while ( it.hasNext() ) openDataModel( studyName(), it.next() ); - + // this will build a SUIT_DataObject-s tree under myRoot member field // passing "false" in order NOT to rebuild existing data models' trees - it was done in previous step - // but tree that corresponds to not-loaded data models will be updated any way. - ((SalomeApp_Application*)application())->updateObjectBrowser( false ); + // but tree that corresponds to not-loaded data models will be updated any way. + ((SalomeApp_Application*)application())->updateObjectBrowser( false ); #ifdef WITH_SALOMEDS_OBSERVER dynamic_cast( root() )->setToSynchronize(false); myObserver = new Observer_i(myStudyDS,this); - //attach an observer to the study with notification of modifications + //attach an observer to the study with notification of modifications myStudyDS->attach(myObserver->_this(),true); #endif bool res = CAM_Study::openDocument( theFileName ); - + emit opened( this ); study->IsSaved(true); @@ -431,7 +499,7 @@ bool SalomeApp_Study::openDocument( const QString& theFileName ) SalomeApp_VisualState( (SalomeApp_Application*)application() ).restoreState( savePoints[savePoints.size()-1] ); } - ((SalomeApp_Application*)application())->updateObjectBrowser( true ); + ((SalomeApp_Application*)application())->updateObjectBrowser( true ); return res; } @@ -464,13 +532,13 @@ bool SalomeApp_Study::loadDocument( const QString& theStudyName ) // this will build a SUIT_DataObject-s tree under myRoot member field // passing "false" in order NOT to rebuild existing data models' trees - it was done in previous step - // but tree that corresponds to not-loaded data models will be updated any way. - ((SalomeApp_Application*)application())->updateObjectBrowser( false ); + // but tree that corresponds to not-loaded data models will be updated any way. + ((SalomeApp_Application*)application())->updateObjectBrowser( false ); #ifdef WITH_SALOMEDS_OBSERVER dynamic_cast( root() )->setToSynchronize(false); myObserver = new Observer_i(myStudyDS,this); - //attach an observer to the study with notification of modifications + //attach an observer to the study with notification of modifications myStudyDS->attach(myObserver->_this(),true); #endif @@ -497,7 +565,7 @@ bool SalomeApp_Study::saveDocumentAs( const QString& theFileName ) bool store = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", false ); if ( store ) SalomeApp_VisualState( (SalomeApp_Application*)application() ).storeState(); - + ModelList list; dataModels( list ); QListIterator it( list ); @@ -518,11 +586,11 @@ bool SalomeApp_Study::saveDocumentAs( const QString& theFileName ) bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ); bool isAscii = resMgr->booleanValue( "Study", "ascii_file", false ); - bool res = (isAscii ? + bool res = (isAscii ? SalomeApp_Application::studyMgr()->SaveAsASCII( theFileName.toStdString(), studyDS(), isMultiFile ) : SalomeApp_Application::studyMgr()->SaveAs ( theFileName.toStdString(), studyDS(), isMultiFile )) && CAM_Study::saveDocumentAs( theFileName ); - + res = res && saveStudyData(theFileName); if ( res ) @@ -548,7 +616,7 @@ bool SalomeApp_Study::saveDocument() if ( SalomeApp_DataModel* aModel = (SalomeApp_DataModel*)it.next() ) { listOfFiles.clear(); aModel->save(listOfFiles); - if ( !listOfFiles.isEmpty() ) + if ( !listOfFiles.isEmpty() ) saveModuleData(aModel->module()->name(), listOfFiles); } } @@ -560,13 +628,13 @@ bool SalomeApp_Study::saveDocument() bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ); bool isAscii = resMgr->booleanValue( "Study", "ascii_file", false ); - bool res = (isAscii ? + bool res = (isAscii ? SalomeApp_Application::studyMgr()->SaveASCII( studyDS(), isMultiFile ) : SalomeApp_Application::studyMgr()->Save ( studyDS(), isMultiFile )) && CAM_Study::saveDocument(); res = res && saveStudyData(studyName()); if ( res ) - emit saved( this ); + emit saved( this ); return res; } @@ -599,7 +667,7 @@ bool SalomeApp_Study::isModified() const if (!isAnyChanged) isAnyChanged = LightApp_Study::isModified(); - return isAnyChanged; + return isAnyChanged; } /*! @@ -621,7 +689,7 @@ bool SalomeApp_Study::isSaved() const if (!isAllSaved) isAllSaved = LightApp_Study::isSaved(); - return isAllSaved; + return isAllSaved; } /*! @@ -718,7 +786,7 @@ void SalomeApp_Study::addComponent(const CAM_DataModel* dm) if (!aModule) { // Check SComponent existance _PTR(Study) aStudy = studyDS(); - if (!aStudy) + if (!aStudy) return; _PTR(SComponent) aComp = aStudy->FindComponent(dm->module()->name().toStdString()); if (!aComp) { @@ -977,7 +1045,7 @@ void SalomeApp_Study::children( const QString& entry, QStringList& child_entries */ void SalomeApp_Study::components( QStringList& comps ) const { - for( _PTR(SComponentIterator) it ( studyDS()->NewComponentIterator() ); it->More(); it->Next() ) + for( _PTR(SComponentIterator) it ( studyDS()->NewComponentIterator() ); it->More(); it->Next() ) { _PTR(SComponent) aComponent ( it->Value() ); // skip the magic "Interface Applicative" component @@ -994,7 +1062,7 @@ void SalomeApp_Study::components( QStringList& comps ) const QString SalomeApp_Study::centry( const QString& comp ) const { QString e; - for( _PTR(SComponentIterator) it ( studyDS()->NewComponentIterator() ); it->More() && e.isEmpty(); it->Next() ) + for( _PTR(SComponentIterator) it ( studyDS()->NewComponentIterator() ); it->More() && e.isEmpty(); it->Next() ) { _PTR(SComponent) aComponent ( it->Value() ); if ( aComponent && comp == aComponent->ComponentDataType().c_str() ) diff --git a/src/SalomeApp/resources/SalomeApp.xml b/src/SalomeApp/resources/SalomeApp.xml index 8b58080c6..654cd127c 100644 --- a/src/SalomeApp/resources/SalomeApp.xml +++ b/src/SalomeApp/resources/SalomeApp.xml @@ -55,7 +55,7 @@
      - +
      diff --git a/src/SalomeApp/resources/SalomeApp_msg_fr.ts b/src/SalomeApp/resources/SalomeApp_msg_fr.ts index b7b320ea1..a21bcfef7 100755 --- a/src/SalomeApp/resources/SalomeApp_msg_fr.ts +++ b/src/SalomeApp/resources/SalomeApp_msg_fr.ts @@ -202,7 +202,7 @@ Voulez-vous le recharger ? APPCLOSE_DESCRIPTION - Voulez-vous fermer ou décharger l'étude avant de la fermer? + Voulez-vous fermer ou décharger l'étude avant de la fermer ? PRP_DESK_PROPERTIES @@ -476,7 +476,7 @@ Voulez-vous vraiment la renommer? CLOSE_DESCRIPTION - Voulez-vous sauvegarder les changements faits au Registre? + Voulez-vous sauvegarder les changements faits au Registre ? INCORRECT_DATA @@ -485,7 +485,7 @@ Editez ses paramètres ou retirez la de la liste. ERR_UPDATE_STUDY_FAILED - Impossible de mettre l'étude à jour! + Impossible de mettre l'étude à jour ! diff --git a/src/SalomeApp/salome_pluginsmanager.py b/src/SalomeApp/salome_pluginsmanager.py index 031f856f1..171f5a6fc 100644 --- a/src/SalomeApp/salome_pluginsmanager.py +++ b/src/SalomeApp/salome_pluginsmanager.py @@ -29,7 +29,7 @@ A plugins manager is created when calling initialize. The plugins manager creates a submenu in the menu. -The plugins manager searches in $HOME/.salome/Plugins, $HOME/$APPLI/Plugins, $SALOME_PLUGINS_PATH directories +The plugins manager searches in $HOME/.config/salome/Plugins, $HOME/$APPLI/Plugins, $SALOME_PLUGINS_PATH directories files named _plugins.py and executes them. These files should contain python code that register functions into the plugins manager. @@ -137,8 +137,12 @@ class PluginsManager: self.plugins_files=[] # USER plugins directory - user_dir = os.path.expanduser("~/.salome/Plugins") + user_dir = os.path.expanduser("~/.config/salome/Plugins") self.plugindirs.append(user_dir) + # obsolete: USER plugins directory + # (for compatibility reasons only; new plugins should be stored in ~/.config/salome/Plugins) + user_obsolete_dir = os.path.expanduser("~/.salome/Plugins") + self.plugindirs.append(user_obsolete_dir) # APPLI plugins directory appli=os.getenv("APPLI") diff --git a/src/Session/SALOME_Session_Server.cxx b/src/Session/SALOME_Session_Server.cxx index 3ce58ab5b..3dd788625 100755 --- a/src/Session/SALOME_Session_Server.cxx +++ b/src/Session/SALOME_Session_Server.cxx @@ -54,6 +54,7 @@ #include +#include "GUI_version.h" #include #include #include @@ -134,31 +135,7 @@ static const char* pixmap_not_found_xpm[] = { QString salomeVersion() { - QString path( ::getenv( "GUI_ROOT_DIR" ) ); - if ( !path.isEmpty() ) - path += QDir::separator(); - path += QString( "bin/salome/VERSION" ); - - QFile vf( path ); - if ( !vf.open( QIODevice::ReadOnly ) ) - return QString(); - - QString line( vf.readLine( 1024 ) ); - - vf.close(); - - if ( line.isEmpty() ) - return QString(); - - while ( !line.isEmpty() && line.at( line.length() - 1 ) == QChar( '\n' ) ) - line.remove( line.length() - 1, 1 ); - - QString ver; - int idx = line.lastIndexOf( ":" ); - if ( idx != -1 ) - ver = line.mid( idx + 1 ).trimmed(); - - return ver; + return GUI_VERSION_STR; } class SALOME_ResourceMgr : public SUIT_ResourceMgr @@ -197,8 +174,9 @@ protected: return SUIT_ResourceMgr::userFileName( myExtAppName, for_load ); } - virtual int userFileId( const QString& _fname ) const + virtual long userFileId( const QString& _fname ) const { + long id = -1; if ( !myExtAppName.isEmpty() ) { QRegExp exp( QString( "\\.%1rc\\.([a-zA-Z0-9.]+)$" ).arg( myExtAppName ) ); QRegExp vers_exp( "^([0-9]+)([A-Za-z]?)([0-9]*)$" ); @@ -207,25 +185,26 @@ protected: if( exp.exactMatch( fname ) ) { QStringList vers = exp.cap( 1 ).split( ".", QString::SkipEmptyParts ); int major=0, minor=0; - major = vers[0].toInt(); - minor = vers[1].toInt(); - if( vers_exp.indexIn( vers[2] )==-1 ) - return -1; int release = 0, dev1 = 0, dev2 = 0; - release = vers_exp.cap( 1 ).toInt(); - dev1 = vers_exp.cap( 2 )[ 0 ].toLatin1(); - dev2 = vers_exp.cap( 3 ).toInt(); + if ( vers.count() > 0 ) major = vers[0].toInt(); + if ( vers.count() > 1 ) minor = vers[1].toInt(); + if ( vers.count() > 2 ) { + if( vers_exp.indexIn( vers[2] ) != -1 ) { + release = vers_exp.cap( 1 ).toInt(); + dev1 = vers_exp.cap( 2 )[ 0 ].toLatin1(); + dev2 = vers_exp.cap( 3 ).toInt(); + } + } - int dev = dev1*100+dev2, id = major; + int dev = dev1*100+dev2; + id = major; id*=100; id+=minor; id*=100; id+=release; id*=10000; if ( dev > 0 ) id+=dev-10000; - return id; } } - - return -1; + return id; } public: @@ -298,6 +277,14 @@ public: catch (std::exception& e) { std::cerr << e.what() << std::endl; } + catch (CORBA::Exception& e) { + std::cerr << "Caught CORBA::Exception" << std::endl; + CORBA::Any tmp; + tmp<<= e; + CORBA::TypeCode_var tc = tmp.type(); + const char *p = tc->name(); + std::cerr << "notify(): CORBA exception of the kind : " << p << " is caught" << std::endl; + } catch (...) { std::cerr << "Unknown exception caught in Qt handler: it's probably a bug in SALOME platform" << std::endl; } diff --git a/src/VTKViewer/VTKViewer_AppendFilter.cxx b/src/VTKViewer/VTKViewer_AppendFilter.cxx index ff9e2676f..8b685a591 100644 --- a/src/VTKViewer/VTKViewer_AppendFilter.cxx +++ b/src/VTKViewer/VTKViewer_AppendFilter.cxx @@ -262,8 +262,8 @@ VTKViewer_AppendFilter vtkInformationVector *outputVector) { int idx; - vtkIdType numPts, numCells, newCellId, cellId; - vtkCellData *cd; + vtkIdType numPts, numCells, cellId; + // vtkCellData *cd; vtkIdList *ptIds; vtkDataSet *ds; int numInputs = this->GetNumberOfInputConnections(0); @@ -321,11 +321,11 @@ VTKViewer_AppendFilter if (ds != NULL) { numCells = ds->GetNumberOfCells(); - cd = ds->GetCellData(); + // cd = ds->GetCellData(); // copy cell and cell data for (cellId=0; cellIdGetCellPoints(cellId, ptIds); - newCellId = output->InsertNextCell(ds->GetCellType(cellId), ptIds); + output->InsertNextCell(ds->GetCellType(cellId), ptIds); } } } diff --git a/src/VTKViewer/VTKViewer_TransformFilter.cxx b/src/VTKViewer/VTKViewer_TransformFilter.cxx index 83147f4f4..dc2bc83cc 100755 --- a/src/VTKViewer/VTKViewer_TransformFilter.cxx +++ b/src/VTKViewer/VTKViewer_TransformFilter.cxx @@ -56,7 +56,7 @@ int VTKViewer_TransformFilter::RequestData( vtkPoints *inPts; vtkPoints *newPts; - int numPts, numCells; + int numPts/*, numCells*/; vtkPointData *pd=input->GetPointData(), *outPD=output->GetPointData(); vtkCellData *cd=input->GetCellData(), *outCD=output->GetCellData(); output->CopyStructure( input ); @@ -67,7 +67,7 @@ int VTKViewer_TransformFilter::RequestData( inPts = input->GetPoints(); if(!anIsIdentity && inPts){ numPts = inPts->GetNumberOfPoints(); - numCells = input->GetNumberOfCells(); + // numCells = input->GetNumberOfCells(); newPts = vtkPoints::New(); newPts->Allocate(numPts); this->UpdateProgress(.2); diff --git a/src/VTKViewer/resources/VTKViewer_msg_fr.ts b/src/VTKViewer/resources/VTKViewer_msg_fr.ts index f54a010f6..d848beef5 100755 --- a/src/VTKViewer/resources/VTKViewer_msg_fr.ts +++ b/src/VTKViewer/resources/VTKViewer_msg_fr.ts @@ -202,7 +202,7 @@ VTKViewer_ViewManager VTK_VIEW_TITLE - VTK scène:%M - visualiseur:%V + Scène VTK:%M - visualiseur:%V diff --git a/tools/Makefile.am b/tools/Makefile.am new file mode 100644 index 000000000..c9124600a --- /dev/null +++ b/tools/Makefile.am @@ -0,0 +1,23 @@ +# Copyright (C) 2007-2011 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 +# + +SUBDIRS = dlgfactory diff --git a/tools/dlgfactory/GenericDialog.cxx b/tools/dlgfactory/GenericDialog.cxx new file mode 100644 index 000000000..9b8456674 --- /dev/null +++ b/tools/dlgfactory/GenericDialog.cxx @@ -0,0 +1,29 @@ +#include "GenericDialog.hxx" + +GenericDialog::GenericDialog(QDialog *parent) : QDialog(parent) +{ + ui.setupUi(this); // A faire en premier + + /* + Personnalisez vos widgets ici si nécessaire + Réalisez des connexions supplémentaires entre signaux et slots + */ + + // The slots accept() and reject() are already connected to the + // buttonbox (inherited features) +} + +QFrame * GenericDialog::getPanel() { + return ui.centralPanel; +} + +QDialogButtonBox * GenericDialog::getButtonBox() { + return ui.buttonBox; +} + + +#include +void GenericDialog::accept() { + qDebug() << "accept() is not implemented yet"; + QDialog::accept(); +} diff --git a/tools/dlgfactory/GenericDialog.hxx b/tools/dlgfactory/GenericDialog.hxx new file mode 100644 index 000000000..ee946617d --- /dev/null +++ b/tools/dlgfactory/GenericDialog.hxx @@ -0,0 +1,27 @@ +#ifndef _GenericDialog_HXX +#define _GenericDialog_HXX + +#include +#include "ui_GenericDialog.hxx" + +class GenericDialog : public QDialog +{ + Q_OBJECT + +public: + GenericDialog(QDialog *parent = 0); + + protected: + QFrame * getPanel(); + QDialogButtonBox * getButtonBox(); + + protected slots: + void accept(); + //void reject(); + + private: + Ui_GenericDialog ui; // instance of the class defined in ui_GenericDialog.h +}; + + +#endif // _GenericDialog_HXX diff --git a/tools/dlgfactory/GenericDialog.ui b/tools/dlgfactory/GenericDialog.ui new file mode 100644 index 000000000..1fe7ae99e --- /dev/null +++ b/tools/dlgfactory/GenericDialog.ui @@ -0,0 +1,89 @@ + + GenericDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + GenericDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + GenericDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/tools/dlgfactory/Makefile.am b/tools/dlgfactory/Makefile.am new file mode 100644 index 000000000..6945a9b9b --- /dev/null +++ b/tools/dlgfactory/Makefile.am @@ -0,0 +1,104 @@ +# Copyright (C) 2010 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 +# +# -* Makefile *- +# +# Author : Guillaume Boulant (EDF/R&D) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# moc-files generation (using MOC) +%_moc.cxx: %.hxx + $(MOC) $< -o $@ + +# Qt form files generation (using UIC) +ui_%.hxx: %.ui + $(UIC) -o $@ $< + +# Program targets +bin_PROGRAMS = qtester gtester + +# QDialog uic files +UIC_FILES_QDIALOG = \ + ui_QDialogTest.hxx + +# QDialog moc files +MOC_FILES_QDIALOG = \ + QDialogTest_moc.cxx + +# GDialog uic files +UIC_FILES_GDIALOG= \ + ui_GenericDialog.hxx \ + ui_GDialogTest.hxx + +# GDialog moc files +MOC_FILES_GDIALOG= \ + GenericDialog_moc.cxx \ + GDialogTest_moc.cxx + +QDIALOG_TEMPLATES = __QDIALOG__.ui __QDIALOG__.hxx __QDIALOG__.cxx +GDIALOG_TEMPLATES = __GDIALOG__.ui __GDIALOG__.hxx __GDIALOG__.cxx + +# generated sources +BUILT_SOURCES = $(UIC_FILES_QDIALOG) $(UIC_FILES_GDIALOG) + +# extra distributed files +EXTRA_DIST += $(QDIALOG_TEMPLATES) $(GDIALOG_TEMPLATES) GenericDialog.ui README.txt dlgfactory.sh + +mostlyclean-local: + rm @builddir@/QDialogTest* + rm @builddir@/GDialogTest* + rm -f @builddir@/*_moc.cxx @builddir@/ui_*.hxx + +QDialogTest.hxx QDialogTest.cxx QDialogTest.ui: $(QDIALOG_TEMPLATES) dlgfactory.sh + $(srcdir)/dlgfactory.sh -n QDialogTest -t qdialog + +GDialogTest.hxx GDialogTest.cxx GDialogTest.ui : $(GDIALOG_TEMPLATES) dlgfactory.sh + $(srcdir)/dlgfactory.sh -n GDialogTest -t gdialog + +QT_CXXFLAGS=@QT_INCLUDES@ @QT_MT_INCLUDES@ +QT_LIBS=@QT_LIBS@ + +# QDialog tester +qtester_SOURCES = \ + qtester.cxx +nodist_qtester_SOURCES = \ + QDialogTest.cxx \ + $(MOC_FILES_QDIALOG) \ + $(UIC_FILES_QDIALOG) + +qtester_CPPFLAGS = \ + $(QT_CXXFLAGS) + +qtester_LDFLAGS = \ + $(QT_LIBS) + +gtester_SOURCES = \ + gtester.cxx \ + GenericDialog.hxx \ + GenericDialog.cxx +nodist_gtester_SOURCES = \ + GDialogTest.cxx \ + $(MOC_FILES_GDIALOG) \ + $(UIC_FILES_GDIALOG) + +gtester_CPPFLAGS = \ + $(QT_CXXFLAGS) + +gtester_LDFLAGS = \ + $(QT_LIBS) diff --git a/tools/dlgfactory/README.txt b/tools/dlgfactory/README.txt new file mode 100644 index 000000000..1ddca1679 --- /dev/null +++ b/tools/dlgfactory/README.txt @@ -0,0 +1,12 @@ +This package provides a simple tool to generates the bootstrap files +of a standard Qt dialog. Nothing original neither very smart, but just +help to initiate all this stuff the good way. + +See the header of the script dlgfactory.sh for details. + +Some use cases (basic unit test) are given in the files qtester.cxx +and gtester.cxx. The build procedure (when you type make) create test +classes called QDialogTest and GDialogTest and used respectively in +qtester and gtester. + +(gboulant - 26 oct. 2011) diff --git a/tools/dlgfactory/__GDIALOG__.cxx b/tools/dlgfactory/__GDIALOG__.cxx new file mode 100644 index 000000000..705c7213f --- /dev/null +++ b/tools/dlgfactory/__GDIALOG__.cxx @@ -0,0 +1,6 @@ +#include "__CLASSNAME__.hxx" + +__CLASSNAME__::__CLASSNAME__(QDialog *parent) : GenericDialog(parent) +{ + ui.setupUi(this->getPanel()); +} diff --git a/tools/dlgfactory/__GDIALOG__.hxx b/tools/dlgfactory/__GDIALOG__.hxx new file mode 100644 index 000000000..ab805a197 --- /dev/null +++ b/tools/dlgfactory/__GDIALOG__.hxx @@ -0,0 +1,20 @@ +#ifndef ___CLASSNAME___HXX +#define ___CLASSNAME___HXX + +#include +#include "ui___CLASSNAME__.hxx" +#include "GenericDialog.hxx" + +class __CLASSNAME__ : public GenericDialog +{ + Q_OBJECT + + public: + __CLASSNAME__(QDialog *parent = 0); + + private: + Ui___CLASSNAME__ ui; // instance of the class defined in ui___CLASSNAME__.hxx +}; + + +#endif // ___CLASSNAME___HXX diff --git a/tools/dlgfactory/__GDIALOG__.ui b/tools/dlgfactory/__GDIALOG__.ui new file mode 100644 index 000000000..7f5c27dca --- /dev/null +++ b/tools/dlgfactory/__GDIALOG__.ui @@ -0,0 +1,99 @@ + + __CLASSNAME__ + + + + 0 + 0 + 340 + 300 + + + + Form + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Pression : + + + + + + + Température : + + + + + + + + + 0 + + + 6 + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 121 + + + + + + + + + + + diff --git a/tools/dlgfactory/__QDIALOG__.cxx b/tools/dlgfactory/__QDIALOG__.cxx new file mode 100644 index 000000000..32134c395 --- /dev/null +++ b/tools/dlgfactory/__QDIALOG__.cxx @@ -0,0 +1,20 @@ +#include "__CLASSNAME__.hxx" + +__CLASSNAME__::__CLASSNAME__(QDialog *parent) : QDialog(parent) +{ + ui.setupUi(this); // A faire en premier + + /* + Personnalisez vos widgets ici si nécessaire + Réalisez des connexions supplémentaires entre signaux et slots + */ + + // The slots accept() and reject() are already connected to the + // buttonbox (inherited features) +} + +#include +void __CLASSNAME__::accept() { + qDebug() << "accept() is not implemented yet"; + QDialog::accept(); +} diff --git a/tools/dlgfactory/__QDIALOG__.hxx b/tools/dlgfactory/__QDIALOG__.hxx new file mode 100644 index 000000000..3865e170b --- /dev/null +++ b/tools/dlgfactory/__QDIALOG__.hxx @@ -0,0 +1,23 @@ +#ifndef ___CLASSNAME___HXX +#define ___CLASSNAME___HXX + +#include +#include "ui___CLASSNAME__.hxx" + +class __CLASSNAME__ : public QDialog +{ + Q_OBJECT + + public: + __CLASSNAME__(QDialog *parent = 0); + + protected slots: + void accept(); + //void reject(); + + private: + Ui___CLASSNAME__ ui; // instance of the class defined in ui___CLASSNAME__.hxx +}; + + +#endif // ___CLASSNAME___HXX diff --git a/tools/dlgfactory/__QDIALOG__.ui b/tools/dlgfactory/__QDIALOG__.ui new file mode 100644 index 000000000..88cf24de2 --- /dev/null +++ b/tools/dlgfactory/__QDIALOG__.ui @@ -0,0 +1,67 @@ + + __CLASSNAME__ + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + buttonBox + accepted() + __CLASSNAME__ + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + __CLASSNAME__ + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/tools/dlgfactory/dlgfactory.sh b/tools/dlgfactory/dlgfactory.sh new file mode 100755 index 000000000..763f947a9 --- /dev/null +++ b/tools/dlgfactory/dlgfactory.sh @@ -0,0 +1,137 @@ +#!/bin/sh +# +# ================================================================== +#_debut_usage +# +# USAGE: +# +# dlgfactory.sh -n className [-t classType] +# +# +# DESCRIPTION: +# +# This script generates a set of files to initiate a dialog qt window +# (i.e. MyDialog.ui, MyDialog.hxx and MyDialog.cxx files). +# +# The dialog window can be a self-consistent class (i.e. depends only +# on Qt classes) or a classe that inherits from the class +# GenericDialog whose implementation is provided in this package and +# whose design is defined by the GenericDialog.ui file (editable using +# the qt designer). +# +# The -t option let you choose between the two possibilities (specify +# "-t qdialog" for the first case, "-t gdialog" otherwise). +# +# OPTION: +# -n : specify the name of the class (default is TestDialog) +# +# -t : specify the type of the class (default is qdialog) +# +#_fin_usage +# ================================================================== +# + +thisScript=$(which $0) +TOOLDIRNAME=$(dirname $0) + +displayUsage() +{ + cat $thisScript | sed -e '/^#_debut_usage/,/^#_fin_usage/!d' \ + -e '/^#_debut_usage/d' \ + -e '/^#_fin_usage/d' \ + -e 's/^#//g' +} + +# +# Read the options on the command line +# +className=TestDialog +classType=dialog +if [ $# -eq 0 ]; then + displayUsage + exit 1 +else + while [ $# -ne 0 ]; do + case $1 in + -n) + shift; className=$1; shift ;; + -t) + shift; classType=$1; shift ;; + *) + displayUsage;; + esac + done +fi + +if [ "$classType" = "qdialog" ]; then + sed s/__CLASSNAME__/$className/g $TOOLDIRNAME/__QDIALOG__.ui > $className.ui + sed s/__CLASSNAME__/$className/g $TOOLDIRNAME/__QDIALOG__.hxx > $className.hxx + sed s/__CLASSNAME__/$className/g $TOOLDIRNAME/__QDIALOG__.cxx > $className.cxx +else + sed s/__CLASSNAME__/$className/g $TOOLDIRNAME/__GDIALOG__.ui > $className.ui + sed s/__CLASSNAME__/$className/g $TOOLDIRNAME/__GDIALOG__.hxx > $className.hxx + sed s/__CLASSNAME__/$className/g $TOOLDIRNAME/__GDIALOG__.cxx > $className.cxx +fi + +displayMessage() +{ + cat $thisScript | sed -e '/^#_debut_message/,/^#_fin_message/!d' \ + -e '/^#_debut_message/d' \ + -e '/^#_fin_message/d' \ + -e 's/^#//g' \ + -e "s/__CLASSNAME__/$className/g" +} + +#_debut_message +## +## --------------------------------------------------------- +## Generation rules to create moc files from QObject headers +## and form source files from ui files +## --------------------------------------------------------- +## +#%_moc.cxx: %.hxx +# $(MOC) $< -o $@ +# +#ui_%.hxx: %.ui +# $(UIC) -o $@ $< +# +## +## --------------------------------------------------------- +## Declaration of form files generated by UIC and MOC files +## as BUILT_SOURCES to be used in the building process. +## --------------------------------------------------------- +## +#UIC_FILES = \ +# ui___CLASSNAME__.hxx +## +#MOC_FILES = \ +# __CLASSNAME___moc.cxx +# +#BUILT_SOURCES = $(UIC_FILES) +# +## +## --------------------------------------------------------- +## Declaration of sources files to the building process +## --------------------------------------------------------- +## MOC files and UIC files should be added to the list of undistributed +## source files with something like (where should be +## replaced by the name of the product declared by the directive +## lib_LTLIBRARIES): +## +#nodist__la_SOURCES += $(MOC_FILES) $(UIC_FILES) +# +#dist__la_SOURCES += __CLASSNAME__.cxx +#salomeinclude_HEADERS += __CLASSNAME__.hxx +# +#_la_CPPFLAGS = \ +# $(QT_CXXFLAGS) +# +#_la_LDFLAGS = \ +# $(QT_LIBS) + +#_fin_message + +echo "Note that the following directives should be present in your Makefile.am (or something like that):" +echo "" +displayMessage + diff --git a/tools/dlgfactory/gtester.cxx b/tools/dlgfactory/gtester.cxx new file mode 100644 index 000000000..ed0fc6812 --- /dev/null +++ b/tools/dlgfactory/gtester.cxx @@ -0,0 +1,21 @@ +// +// This program can be used for unit test of dialog box. +// You just have to include the interface file (*.h) and +// use the dialog class as illustrated in the functions TEST_*. +// (gboulant - 12/10/2010) +// +#include +#include +#include "GDialogTest.hxx" + +void TEST_show() { + GDialogTest * dialog = new GDialogTest(); + dialog->show(); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + TEST_show(); + return app.exec(); +} diff --git a/tools/dlgfactory/qtester.cxx b/tools/dlgfactory/qtester.cxx new file mode 100644 index 000000000..19174b76a --- /dev/null +++ b/tools/dlgfactory/qtester.cxx @@ -0,0 +1,21 @@ +// +// This program can be used for unit test of dialog box. +// You just have to include the interface file (*.h) and +// use the dialog class as illustrated in the functions TEST_*. +// (gboulant - 12/10/2010) +// +#include +#include +#include "QDialogTest.hxx" + +void TEST_show() { + QDialogTest * dialog = new QDialogTest(); + dialog->show(); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + TEST_show(); + return app.exec(); +} -- 2.39.2

    b5LqDY;kaGB!9Io$RH)5gKRhl@NQmFq^pu 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 diff --git a/doc/salome/gui/images/pref11.png b/doc/salome/gui/images/pref11.png index a486f06ccacc1169b217382d7a7b534e5b4ecad7..e5f64414e83d9e2cefe7b605196706b6de5d4b20 100755 GIT binary patch literal 49996 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%0D>ak<1E|Pl-?CdH& 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⋙_kNU(~ARatg!lO4Q{W)}> z(*+ymz_ARuY+{FCy- zKTj3s)P215;mGB4T%RA+bEi4IKe|Im!vS@(6sYb$1KKe7jgO7vD6A%jH#5Ndc;4s5 zAx$%YnGVN+dsSrZ9b@->UYz$1`R-bfv;;5n(oggDytmCuK|O;BtQUATlEB|RADCZH znp$Tkq=LQ~33zWrj8Vazzmvv4FO#qJ>H@^S? literal 60349 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