From df885293b0fb69d207deafe35869260088d31b71 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 25 Nov 2010 11:57:51 +0000 Subject: [PATCH] Merge from V5_1_main branch 24/11/2010 --- adm_local/cmake_files/FindCAS.cmake | 13 +- adm_local/cmake_files/FindGUI.cmake | 7 + adm_local/cmake_files/FindSIPPYQT.cmake | 9 +- adm_local/unix/config_files/Makefile.am | 1 - adm_local/unix/config_files/check_pyqt.m4 | 3 + adm_local/unix/config_files/check_qwt.m4 | 19 + adm_local/unix/config_files/check_sip.m4 | 3 + adm_local/unix/config_files/check_vtk.m4 | 388 ------- configure.ac | 16 +- doc/salome/gui/doxyfile.in | 7 +- doc/salome/gui/images/geomview-alt.png | Bin 90244 -> 74085 bytes doc/salome/gui/images/graduatedaxes2.png | Bin 0 -> 16385 bytes doc/salome/gui/images/image111.png | Bin 0 -> 3389 bytes doc/salome/gui/images/image157.png | Bin 32606 -> 8220 bytes doc/salome/gui/images/occviewer_toolbar.png | Bin 8517 -> 6848 bytes doc/salome/gui/images/pref11.png | Bin 26832 -> 50009 bytes doc/salome/gui/images/pref12.png | Bin 85479 -> 82303 bytes doc/salome/gui/images/pref13.png | Bin 24920 -> 27277 bytes doc/salome/gui/images/pref14.png | Bin 32483 -> 34286 bytes doc/salome/gui/images/pref15.png | Bin 50233 -> 49591 bytes doc/salome/gui/images/pref21.png | Bin 61706 -> 64985 bytes doc/salome/gui/images/pref41.png | Bin 0 -> 46594 bytes doc/salome/gui/input/geometry_preferences.doc | 11 + doc/salome/gui/input/mesh_preferences.doc | 7 +- doc/salome/gui/input/occ_3d_viewer.doc | 40 + doc/salome/gui/input/postpro_preferences.doc | 2 +- doc/salome/gui/input/salome_preferences.doc | 22 + doc/salome/gui/input/vtk_3d_viewer.doc | 7 + src/CAF/Makefile.am | 3 +- src/CAF/resources/CAF_msg_en.ts | 27 +- src/CAF/resources/CAF_msg_fr.ts | 59 ++ src/CAM/CAM_Module.cxx | 5 +- src/CAM/CAM_Module.h | 2 +- src/CAM/Makefile.am | 2 +- src/CAM/resources/CAM_msg_en.ts | 27 +- src/CAM/resources/CAM_msg_fr.ts | 19 + src/GLViewer/Makefile.am | 3 +- src/GLViewer/resources/GLViewer_msg_en.ts | 27 +- src/GLViewer/resources/GLViewer_msg_fr.ts | 117 +++ src/LightApp/LightApp.qrc | 7 + src/LightApp/LightApp_Application.cxx | 148 ++- src/LightApp/LightApp_Application.h | 3 + src/LightApp/LightApp_Module.cxx | 21 +- src/LightApp/LightApp_SelectionMgr.cxx | 34 +- src/LightApp/LightApp_WgViewModel.cxx | 55 + src/LightApp/LightApp_WgViewModel.h | 47 + src/LightApp/Makefile.am | 19 +- src/LightApp/images/en.png | Bin 0 -> 599 bytes src/LightApp/images/fr.png | Bin 0 -> 545 bytes src/LightApp/resources/LightApp.xml | 30 + src/LightApp/resources/LightApp_msg_en.ts | 68 +- src/LightApp/resources/LightApp_msg_fr.ts | 752 ++++++++++++++ src/LogWindow/Makefile.am | 3 +- src/LogWindow/resources/LogWindow_msg_en.ts | 25 +- src/LogWindow/resources/LogWindow_msg_fr.ts | 42 + src/Makefile.am | 10 +- src/OCCViewer/Makefile.am | 28 +- .../OCCViewer_CreateRestoreViewDlg.cxx | 50 +- src/OCCViewer/OCCViewer_CubeAxesDlg.cxx | 327 ++++++ src/OCCViewer/OCCViewer_CubeAxesDlg.h | 99 ++ src/OCCViewer/OCCViewer_FontWidget.cxx | 99 ++ src/OCCViewer/OCCViewer_FontWidget.h | 50 + src/OCCViewer/OCCViewer_ViewModel.cxx | 32 + src/OCCViewer/OCCViewer_ViewModel.h | 45 + src/OCCViewer/OCCViewer_ViewPort3d.cxx | 29 +- src/OCCViewer/OCCViewer_ViewPort3d.h | 5 + src/OCCViewer/OCCViewer_ViewWindow.cxx | 407 +++++++- src/OCCViewer/OCCViewer_ViewWindow.h | 14 +- src/OCCViewer/resources/OCCViewer_images.ts | 8 + src/OCCViewer/resources/OCCViewer_msg_en.ts | 43 +- src/OCCViewer/resources/OCCViewer_msg_fr.ts | 318 ++++++ .../resources/occ_view_graduated_axes.png | Bin 0 -> 650 bytes .../occ_view_zooming_style_switch.png | Bin 0 -> 3389 bytes src/ObjBrowser/Makefile.am | 2 +- src/ObjBrowser/resources/OB_msg_en.ts | 26 +- src/ObjBrowser/resources/OB_msg_fr.ts | 38 + src/Plot2d/Makefile.am | 3 +- src/Plot2d/Plot2d_ViewFrame.cxx | 64 +- src/Plot2d/Plot2d_ViewModel.cxx | 4 +- src/Plot2d/resources/Plot2d_msg_en.ts | 27 +- src/Plot2d/resources/Plot2d_msg_fr.ts | 511 +++++++++ src/PyConsole/Makefile.am | 3 +- src/PyConsole/PyConsole_Console.cxx | 24 + src/PyConsole/PyConsole_Console.h | 4 + src/PyConsole/PyConsole_Editor.cxx | 30 +- src/PyConsole/PyConsole_Editor.h | 4 + src/PyConsole/resources/PyConsole_msg_en.ts | 31 +- src/PyConsole/resources/PyConsole_msg_fr.ts | 42 + src/QDS/Makefile.am | 2 +- src/QDS/resources/QDS_msg_en.ts | 29 +- src/QDS/resources/QDS_msg_fr.ts | 51 + src/Qtx/Makefile.am | 6 + src/Qtx/Qtx.cxx | 39 + src/Qtx/Qtx.h | 9 + src/Qtx/QtxAction.cxx | 49 +- src/Qtx/QtxAction.h | 12 +- src/Qtx/QtxColorButton.cxx | 2 +- src/Qtx/QtxMainWindow.cxx | 3 + src/Qtx/QtxPagePrefMgr.cxx | 115 ++- src/Qtx/QtxPagePrefMgr.h | 30 +- src/Qtx/QtxResourceMgr.cxx | 102 +- src/Qtx/QtxResourceMgr.h | 5 + src/Qtx/QtxShortcutEdit.cxx | 404 ++++++++ src/Qtx/QtxShortcutEdit.h | 87 ++ src/Qtx/QtxTreeView.cxx | 2 +- src/Qtx/resources/Qtx_msg_fr.ts | 286 +++++ src/QxGraph/Makefile.am | 3 +- src/QxGraph/resources/QxGraph_msg_en.ts | 27 +- src/QxGraph/resources/QxGraph_msg_fr.ts | 31 + src/QxScene/Makefile.am | 3 +- src/QxScene/resources/QxSceneViewer_msg_en.ts | 27 +- src/QxScene/resources/QxSceneViewer_msg_fr.ts | 38 + .../SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx | 9 + .../SALOME_PYQT_GUI/SALOME_PYQT_Module.h | 1 + .../SALOME_PYQT_ModuleLight.cxx | 90 +- .../SALOME_PYQT_ModuleLight.h | 4 +- src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx | 94 ++ src/SALOME_PYQT/SalomePyQt/SalomePyQt.h | 7 +- src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip | 3 + src/STD/Makefile.am | 3 +- src/STD/resources/STD_msg_en.ts | 29 +- src/STD/resources/STD_msg_fr.ts | 490 +++++++++ src/SUIT/Makefile.am | 12 +- src/SUIT/SUIT_Application.cxx | 19 +- src/SUIT/SUIT_Application.h | 7 +- src/SUIT/SUIT_PreferenceMgr.cxx | 6 + src/SUIT/SUIT_PreferenceMgr.h | 2 +- src/SUIT/SUIT_ShortcutMgr.cxx | 187 ++++ src/SUIT/SUIT_ShortcutMgr.h | 75 ++ src/SUIT/SUIT_ViewManager.cxx | 10 +- src/SUIT/SUIT_ViewManager.h | 1 + src/SUIT/SUIT_ViewWindow.cxx | 28 +- src/SUIT/SUIT_ViewWindow.h | 6 +- src/SUIT/resources/SUIT_msg_en.ts | 29 +- src/SUIT/resources/SUIT_msg_fr.ts | 151 +++ src/SUITApp/Makefile.am | 2 +- src/SUITApp/SUITApp.cxx | 2 +- src/SUITApp/resources/SUITApp_msg_en.ts | 27 +- src/SUITApp/resources/SUITApp_msg_fr.ts | 19 + src/SUPERVGraph/Makefile.am | 3 +- .../resources/SUPERVGraph_msg_en.ts | 27 +- .../resources/SUPERVGraph_msg_fr.ts | 27 + src/SVTK/Makefile.am | 19 +- src/SVTK/SVTK_CubeAxesDlg.cxx | 298 +----- src/SVTK/SVTK_CubeAxesDlg.h | 55 +- src/SVTK/SVTK_FontWidget.cxx | 78 +- src/SVTK/SVTK_FontWidget.h | 28 +- src/SVTK/SVTK_InteractorStyle.cxx | 19 +- src/SVTK/SVTK_InteractorStyle.h | 6 + src/SVTK/SVTK_NonIsometricDlg.cxx | 6 +- src/SVTK/SVTK_NonIsometricDlg.h | 4 +- src/SVTK/SVTK_SetRotationPointDlg.cxx | 6 +- src/SVTK/SVTK_SetRotationPointDlg.h | 4 +- src/SVTK/SVTK_UpdateRateDlg.cxx | 6 +- src/SVTK/SVTK_UpdateRateDlg.h | 4 +- src/SVTK/SVTK_ViewModel.cxx | 55 + src/SVTK/SVTK_ViewModel.h | 14 + src/SVTK/SVTK_ViewParameterDlg.cxx | 2 +- src/SVTK/SVTK_ViewParameterDlg.h | 4 +- src/SVTK/SVTK_ViewWindow.cxx | 109 +- src/SVTK/SVTK_ViewWindow.h | 17 + src/SVTK/resources/SVTK_images.ts | 4 + src/SVTK/resources/SVTK_msg_en.ts | 100 +- src/SVTK/resources/SVTK_msg_fr.ts | 555 ++++++++++ .../vtk_view_zooming_style_switch.png | Bin 0 -> 3389 bytes src/SVTK/vtkPVAxesActor.cxx | 812 +++++++++++++++ src/SVTK/vtkPVAxesActor.h | 293 ++++++ src/SVTK/vtkPVAxesWidget.cxx | 869 ++++++++++++++++ src/SVTK/vtkPVAxesWidget.h | 159 +++ src/SalomeApp/Makefile.am | 5 +- src/SalomeApp/SalomeApp_Application.cxx | 54 +- src/SalomeApp/SalomeApp_NoteBookDlg.cxx | 13 +- src/SalomeApp/addvars2notebook.py | 67 ++ src/SalomeApp/resources/SalomeApp.xml | 30 + src/SalomeApp/resources/SalomeApp_msg_en.ts | 217 ++-- src/SalomeApp/resources/SalomeApp_msg_fr.ts | 481 +++++++++ src/SalomeApp/salome_pluginsmanager.py | 17 +- src/Session/SALOME_Session_Server.cxx | 2 +- src/Style/Makefile.am | 2 + src/Style/Style_PrefDlg.cxx | 6 +- src/Style/Style_Salome.cxx | 3 +- src/Style/resources/Style_msg_fr.ts | 287 +++++ src/TOOLSGUI/Makefile.am | 3 +- src/TOOLSGUI/ToolsGUI_RegWidget.cxx | 976 ++++-------------- src/TOOLSGUI/ToolsGUI_RegWidget.h | 73 +- src/TOOLSGUI/resources/ToolsGUI_msg_en.ts | 144 ++- src/TOOLSGUI/resources/ToolsGUI_msg_fr.ts | 222 ++++ src/VTKViewer/Makefile.am | 9 +- src/VTKViewer/VTKViewer_Actor.cxx | 1 + src/VTKViewer/VTKViewer_CellCenters.cxx | 184 ++++ src/VTKViewer/VTKViewer_CellCenters.h | 60 ++ src/VTKViewer/VTKViewer_InteractorStyle.h | 1 + src/VTKViewer/resources/VTKViewer_msg_en.ts | 27 +- src/VTKViewer/resources/VTKViewer_msg_fr.ts | 207 ++++ src/ViewerTools/Makefile.am | 56 + src/ViewerTools/ViewerTools.h | 41 + .../ViewerTools_CubeAxesDlgBase.cxx | 322 ++++++ src/ViewerTools/ViewerTools_CubeAxesDlgBase.h | 119 +++ src/ViewerTools/ViewerTools_DialogBase.cxx | 79 ++ src/ViewerTools/ViewerTools_DialogBase.h | 54 + .../ViewerTools_FontWidgetBase.cxx | 128 +++ src/ViewerTools/ViewerTools_FontWidgetBase.h | 71 ++ .../resources/ViewerTools_msg_en.ts | 74 ++ .../resources/ViewerTools_msg_fr.ts | 74 ++ 204 files changed, 12350 insertions(+), 2494 deletions(-) delete mode 100644 adm_local/unix/config_files/check_vtk.m4 create mode 100644 doc/salome/gui/images/graduatedaxes2.png create mode 100755 doc/salome/gui/images/image111.png create mode 100644 doc/salome/gui/images/pref41.png create mode 100644 src/CAF/resources/CAF_msg_fr.ts create mode 100755 src/CAM/resources/CAM_msg_fr.ts create mode 100755 src/GLViewer/resources/GLViewer_msg_fr.ts create mode 100644 src/LightApp/LightApp.qrc create mode 100644 src/LightApp/LightApp_WgViewModel.cxx create mode 100644 src/LightApp/LightApp_WgViewModel.h create mode 100644 src/LightApp/images/en.png create mode 100644 src/LightApp/images/fr.png create mode 100755 src/LightApp/resources/LightApp_msg_fr.ts create mode 100755 src/LogWindow/resources/LogWindow_msg_fr.ts create mode 100644 src/OCCViewer/OCCViewer_CubeAxesDlg.cxx create mode 100644 src/OCCViewer/OCCViewer_CubeAxesDlg.h create mode 100644 src/OCCViewer/OCCViewer_FontWidget.cxx create mode 100644 src/OCCViewer/OCCViewer_FontWidget.h create mode 100755 src/OCCViewer/resources/OCCViewer_msg_fr.ts create mode 100755 src/OCCViewer/resources/occ_view_graduated_axes.png create mode 100755 src/OCCViewer/resources/occ_view_zooming_style_switch.png create mode 100755 src/ObjBrowser/resources/OB_msg_fr.ts create mode 100755 src/Plot2d/resources/Plot2d_msg_fr.ts create mode 100755 src/PyConsole/resources/PyConsole_msg_fr.ts create mode 100755 src/QDS/resources/QDS_msg_fr.ts create mode 100755 src/Qtx/QtxShortcutEdit.cxx create mode 100755 src/Qtx/QtxShortcutEdit.h create mode 100644 src/Qtx/resources/Qtx_msg_fr.ts create mode 100755 src/QxGraph/resources/QxGraph_msg_fr.ts create mode 100755 src/QxScene/resources/QxSceneViewer_msg_fr.ts create mode 100755 src/STD/resources/STD_msg_fr.ts create mode 100644 src/SUIT/SUIT_ShortcutMgr.cxx create mode 100644 src/SUIT/SUIT_ShortcutMgr.h create mode 100755 src/SUIT/resources/SUIT_msg_fr.ts create mode 100755 src/SUITApp/resources/SUITApp_msg_fr.ts create mode 100755 src/SUPERVGraph/resources/SUPERVGraph_msg_fr.ts create mode 100755 src/SVTK/resources/SVTK_msg_fr.ts create mode 100755 src/SVTK/resources/vtk_view_zooming_style_switch.png create mode 100644 src/SVTK/vtkPVAxesActor.cxx create mode 100644 src/SVTK/vtkPVAxesActor.h create mode 100644 src/SVTK/vtkPVAxesWidget.cxx create mode 100644 src/SVTK/vtkPVAxesWidget.h create mode 100644 src/SalomeApp/addvars2notebook.py create mode 100755 src/SalomeApp/resources/SalomeApp_msg_fr.ts create mode 100644 src/Style/resources/Style_msg_fr.ts create mode 100755 src/TOOLSGUI/resources/ToolsGUI_msg_fr.ts create mode 100644 src/VTKViewer/VTKViewer_CellCenters.cxx create mode 100644 src/VTKViewer/VTKViewer_CellCenters.h create mode 100755 src/VTKViewer/resources/VTKViewer_msg_fr.ts create mode 100755 src/ViewerTools/Makefile.am create mode 100644 src/ViewerTools/ViewerTools.h create mode 100644 src/ViewerTools/ViewerTools_CubeAxesDlgBase.cxx create mode 100644 src/ViewerTools/ViewerTools_CubeAxesDlgBase.h create mode 100644 src/ViewerTools/ViewerTools_DialogBase.cxx create mode 100644 src/ViewerTools/ViewerTools_DialogBase.h create mode 100644 src/ViewerTools/ViewerTools_FontWidgetBase.cxx create mode 100644 src/ViewerTools/ViewerTools_FontWidgetBase.h create mode 100644 src/ViewerTools/resources/ViewerTools_msg_en.ts create mode 100755 src/ViewerTools/resources/ViewerTools_msg_fr.ts diff --git a/adm_local/cmake_files/FindCAS.cmake b/adm_local/cmake_files/FindCAS.cmake index aa7b8abba..a6f50a456 100644 --- a/adm_local/cmake_files/FindCAS.cmake +++ b/adm_local/cmake_files/FindCAS.cmake @@ -21,7 +21,7 @@ SET(CASROOT $ENV{CASROOT}) SET(OCC_VERSION_MAJOR 6) SET(OCC_VERSION_MINOR 3) -SET(OCC_VERSION_MAINTENANCE 0) +SET(OCC_VERSION_MAINTENANCE 10) SET(CAS_CPPFLAGS) SET(CAS_CPPFLAGS ${CAS_CPPFLAGS} -DOCC_VERSION_MAJOR=${OCC_VERSION_MAJOR}) @@ -33,6 +33,17 @@ SET(CAS_CPPFLAGS ${CAS_CPPFLAGS} -DHAVE_CONFIG_H) SET(CAS_CPPFLAGS ${CAS_CPPFLAGS} -DHAVE_LIMITS_H) SET(CAS_CPPFLAGS ${CAS_CPPFLAGS} -I${CASROOT}/inc) +IF(CMAKE_SIZEOF_VOID_P STREQUAL 8) + SET(CAS_CPPFLAGS ${CAS_CPPFLAGS} -D_OCC64) +ENDIF(CMAKE_SIZEOF_VOID_P STREQUAL 8) + +IF(NOT WINDOWS) + FIND_LIBRARY(Xmu Xmu) + IF(Xmu) + SET(CAS_LDPATH ${Xmu}) + ENDIF(Xmu) +ENDIF(NOT WINDOWS) + IF(WINDOWS) IF(CMAKE_BUILD_TYPE STREQUAL Debug) SET(CASROOT_LIBDIR ${CASROOT}/win32/libd) diff --git a/adm_local/cmake_files/FindGUI.cmake b/adm_local/cmake_files/FindGUI.cmake index b34c590c8..786568aa2 100644 --- a/adm_local/cmake_files/FindGUI.cmake +++ b/adm_local/cmake_files/FindGUI.cmake @@ -29,6 +29,7 @@ FIND_LIBRARY(LightApp LightApp ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(LogWindow LogWindow ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(ObjBrowser ObjBrowser ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(OCCViewer OCCViewer ${GUI_ROOT_DIR}/lib/salome) +FIND_LIBRARY(OpenGLUtils OpenGLUtils ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(Plot2d Plot2d ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(PyConsole PyConsole ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(PyInterp PyInterp ${GUI_ROOT_DIR}/lib/salome) @@ -36,9 +37,14 @@ FIND_LIBRARY(QDS QDS ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(qtx qtx ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(QxScene QxScene ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SalomeApp SalomeApp ${GUI_ROOT_DIR}/lib/salome) +FIND_LIBRARY(SalomeAppTest SalomeAppTest ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SalomeIDLGUI SalomeIDLGUI ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SalomeObject SalomeObject ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SalomePrs SalomePrs ${GUI_ROOT_DIR}/lib/salome) +FIND_LIBRARY(SalomePyQtGUILight SalomePyQtGUILight ${GUI_ROOT_DIR}/lib/salome) +FIND_LIBRARY(SalomePyQtGUI SalomePyQtGUI ${GUI_ROOT_DIR}/lib/salome) +FIND_LIBRARY(SalomePyQt SalomePyQt ${GUI_ROOT_DIR}/lib/salome) +FIND_LIBRARY(SalomePy SalomePy ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SalomeSession SalomeSession ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SalomeStyle SalomeStyle ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SOCC SOCC ${GUI_ROOT_DIR}/lib/salome) @@ -49,4 +55,5 @@ FIND_LIBRARY(suit suit ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SUPERVGraph SUPERVGraph ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(SVTK SVTK ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(ToolsGUI ToolsGUI ${GUI_ROOT_DIR}/lib/salome) +FIND_LIBRARY(ViewerTools ViewerTools ${GUI_ROOT_DIR}/lib/salome) FIND_LIBRARY(VTKViewer VTKViewer ${GUI_ROOT_DIR}/lib/salome) diff --git a/adm_local/cmake_files/FindSIPPYQT.cmake b/adm_local/cmake_files/FindSIPPYQT.cmake index 84ac4c878..448e6a980 100644 --- a/adm_local/cmake_files/FindSIPPYQT.cmake +++ b/adm_local/cmake_files/FindSIPPYQT.cmake @@ -63,8 +63,11 @@ SET(PYQT_INCLUDES ${PYQT_INCLUDES} -I${PYQT_SIPS}/QtAssistant -I${PYQT_SIPS}/QtD SET(PYQT_INCLUDES ${PYQT_INCLUDES} -I${PYQT_SIPS}/QtNetwork -I${PYQT_SIPS}/QtSql) SET(PYQT_INCLUDES ${PYQT_INCLUDES} -I${PYQT_SIPS}/QtSvg -I${PYQT_SIPS}/QtTest) -SET(qt_flag ${QTVERSION}) -STRING(REPLACE "." "_" qt_flag ${qt_flag}) +file(READ ${PYQT_SIPS}/QtCore/QtCoremod.sip SUPPORTED) +STRING(REGEX MATCH "Qt_[0-9]_[0-9]_[0-9]}" SUPPORTED ${SUPPORTED}) +STRING(LENGTH ${SUPPORTED} len) +MATH(EXPR len "${len}-1") +STRING(SUBSTRING ${SUPPORTED} 0 ${len} SUPPORTED) IF(WINDOWS) SET(ws_flag WS_WIN) @@ -72,5 +75,5 @@ ELSE(WINDOWS) SET(ws_flag WS_X11) ENDIF(WINDOWS) -SET(PYQT_SIPFLAGS -x VendorID -x PyQt_NoPrintRangeBug -t ${ws_flag} -t Qt_${qt_flag} -g -s .cc -c .) +SET(PYQT_SIPFLAGS -x VendorID -x PyQt_NoPrintRangeBug -t ${ws_flag} -t ${SUPPORTED} -g -s .cc -c .) SET(PYQT_SIPFLAGS ${PYQT_SIPFLAGS} ${PYQT_INCLUDES}) diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am index ae39d272f..8e01139bb 100644 --- a/adm_local/unix/config_files/Makefile.am +++ b/adm_local/unix/config_files/Makefile.am @@ -37,7 +37,6 @@ check_qwt.m4 \ check_SalomeObject.m4 \ check_sip.m4 \ check_SupervGraphViewer.m4 \ -check_vtk.m4 \ check_VTKViewer.m4 \ check_QxGraphViewer.m4 \ check_TestRecorder.m4 diff --git a/adm_local/unix/config_files/check_pyqt.m4 b/adm_local/unix/config_files/check_pyqt.m4 index c23dac6d5..3b2111d6b 100644 --- a/adm_local/unix/config_files/check_pyqt.m4 +++ b/adm_local/unix/config_files/check_pyqt.m4 @@ -151,6 +151,9 @@ if test "x$pyqt_ok" == "xyes" ; then TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/PyQt4" TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/dist-packages/PyQt4" TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib${LIB_LOCATION_SUFFIX}/pymodules/python${PYTHON_VERSION}/PyQt4" + if test "${build_cpu::6}" = "x86_64" ; then + TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib64/python2.6/site-packages/PyQt4" + fi TEST_SIPS_DIRS="${TEST_SIPS_DIRS} /usr/share/sip" TEST_SIPS_DIRS="${TEST_SIPS_DIRS} /usr/share/sip/PyQt4" diff --git a/adm_local/unix/config_files/check_qwt.m4 b/adm_local/unix/config_files/check_qwt.m4 index e007e76f9..d834777d8 100644 --- a/adm_local/unix/config_files/check_qwt.m4 +++ b/adm_local/unix/config_files/check_qwt.m4 @@ -67,6 +67,25 @@ if test -z $QWTHOME; then fi done fi + if test "x$exist_ok" = "xno"; then + if test "${build_cpu::6}" = "x86_64" ; then + for d in /usr /usr/local ; do + for extension in qwt-qt4 qwt; do + AC_CHECK_FILE(${d}/lib64/lib${extension}.so,exist_ok=yes,exist_ok=no) + if test "x$exist_ok" = "xyes"; then + QWTHOME=$d + AC_MSG_RESULT(lib${extension}.so detected in $d/lib) + libqwt_name=${extension} + dnl break, libqwt-qt4.so is choosen before libqwt.so since it is surely the Qt4 version. + break + fi + done + if test "x$exist_ok" = "xyes"; then + break + fi + done + fi + fi if test "x$exist_ok" = "xno"; then for d in `echo $LD_LIBRARY_PATH | sed -e "s/:/ /g"` ; do if test -f $d/libqwt.so ; then diff --git a/adm_local/unix/config_files/check_sip.m4 b/adm_local/unix/config_files/check_sip.m4 index 9fa0d1b94..0234ec580 100644 --- a/adm_local/unix/config_files/check_sip.m4 +++ b/adm_local/unix/config_files/check_sip.m4 @@ -74,6 +74,9 @@ if test "x$sip_ok" = "xyes" ; then TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib${LIB_LOCATION_SUFFIX} /usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages" TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/dist-packages/PyQt4" TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib${LIB_LOCATION_SUFFIX}/pymodules/python${PYTHON_VERSION}" + if test "${build_cpu::6}" = "x86_64" ; then + TEST_LIB_DIRS="${TEST_LIB_DIRS} /usr/lib64/python${PYTHON_VERSION}/site-packages" + fi dnl Search sip.h file sip_ok=no for d in ${TEST_INC_DIRS} ; do diff --git a/adm_local/unix/config_files/check_vtk.m4 b/adm_local/unix/config_files/check_vtk.m4 deleted file mode 100644 index 97dd12088..000000000 --- a/adm_local/unix/config_files/check_vtk.m4 +++ /dev/null @@ -1,388 +0,0 @@ -dnl Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE -dnl -dnl Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License. -dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -dnl -dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -dnl - -dnl OPTIONS_VTK -dnl ------------------------------------------------------------------------ -dnl Adds the --with-vtk=path, --with-vtk-version and --with-paraview configure options -dnl -AC_DEFUN([OPTIONS_VTK], [ - AC_ARG_WITH([vtk], - [AC_HELP_STRING([--with-vtk], [The prefix where VTK is installed (default "" means taking from environment variable unless VTK from ParaView is detected)])], - [with_vtk=$withval], [with_vtk=""]) - - AC_ARG_WITH([vtk-version], - [AC_HELP_STRING([--with-vtk-version], [VTK include directory name is vtk-suffix, e.g. vtk-5.0/. What is the suffix? (Default "yes" means taking from environment variable)])], - [vtk_suffix=$withval], [vtk_suffix="yes"]) - - AC_ARG_WITH([paraview], - [AC_HELP_STRING([--with-paraview], [ParaView from the specified location is used instead of VTK (default "" means taking from environment variable)])]) -]) - -dnl -dnl CHECK_VTK -dnl ------------------------------------------------------------------------ -dnl -AC_DEFUN([CHECK_VTK], [ -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_CXX])dnl -AC_REQUIRE([AC_PROG_CPP])dnl -AC_REQUIRE([AC_PROG_CXXCPP])dnl -AC_REQUIRE([AC_LINKER_OPTIONS])dnl - -AC_REQUIRE([OPTIONS_VTK])dnl - -AC_LANG_SAVE -AC_LANG_CPLUSPLUS - -AC_SUBST(VTK_INCLUDES) -AC_SUBST(VTK_LIBS) -AC_SUBST(VTKPY_MODULES) - -VTK_INCLUDES="" -VTK_LIBS="" -VTKPY_MODULES="" - -vtk_ok=no - -if test "x$OpenGL_ok" != "xyes" ; then - AC_MSG_WARN(VTK needs OpenGL correct configuration, check configure output) -fi - -AC_PATH_X -if test "x$x_libraries" != "x" -then - LXLIB="-L$x_libraries" -else - LXLIB="" -fi - -if test "x$x_libraries" = "x/usr/lib" -then - LXLIB="" -fi - -if test "x$x_libraries" = "x/usr/lib${LIB_LOCATION_SUFFIX}" -then - LXLIB="" -fi - -LOCAL_INCLUDES="$OGL_INCLUDES" -LOCAL_LIBS="-lvtkCommon -lvtkGraphics -lvtkImaging -lvtkFiltering -lvtkIO -lvtkRendering -lvtkHybrid -lvtkParallel -lvtkWidgets $LXLIB -lX11 -lXt" -TRY_LINK_LIBS="-lvtkCommon $LXLIB -lX11 -lXt" - -dnl VTK version suffix -if test -z $vtk_suffix ; then - vtk_suffix="yes" -fi -if test "x$vtk_suffix" = "xno" ; then - dnl in case user wrote --with-vtk-version=no, use empty suffix - vtk_suffix="" -fi -if test "x$vtk_suffix" != "xyes" ; then - VTKSUFFIX="$vtk_suffix" -else - dnl in case user wrote --with-vtk-version=yes, get the suffix from env - if test -z $VTKSUFFIX ; then - VTKSUFFIX="-5.0" - fi -fi - -dnl -dnl Use VTK from ParaView unless --with-paraview=no is given -dnl - -pv_vtk_ok=no - -case "x$with_paraview" in - - xno ) - PVHOME="" - ;; - - xyes | x ) - - if test -z $PVHOME ; then - AC_PATH_PROG(para_path, paraview) - if test "x$para_path" != "x" ; then - para_path=`dirname $para_path` - PVHOME=`dirname $para_path` - else - for d in /usr/local /usr ; do - if test -f ${d}/include/paraview${PVVERSION}/pqDialog.h ; then - AC_MSG_RESULT(trying ${d}) - PVHOME="${d}" - break - fi - if test -f ${d}/include/paraview-3.7/pqDialog.h ; then - AC_MSG_RESULT(trying ${d}) - PVHOME="${d}" - PVVERSION="-3.7" - break - fi - if test -f ${d}/include/paraview-3.8/pqDialog.h ; then - AC_MSG_RESULT(trying ${d}) - PVHOME="${d}" - PVVERSION="-3.8" - break - fi - if test -f ${d}/include/paraview/pqDialog.h ; then - AC_MSG_RESULT(trying ${d}) - PVHOME="${d}" - PVVERSION="" - break - fi - done - fi - fi - ;; - - * ) - PVHOME=${with_paraview} - ;; -esac - -dnl Check VTK from ParaView. - -if test "x$PVHOME" != "x" ; then - - if test "x$PVVERSION" = "x" ; then - for suffix in 3.7 3.8 ; do - if test -f $PVHOME/include/paraview-$suffix/vtkPVConfig.h ; then - PVVERSION=$suffix - break; - fi - done - fi - if test "x$PVVERSION" = "x" ; then - PVVERSION=`basename $PVHOME | sed -e "s,[[^-]]*,,"` - else - if test "${PVVERSION:0:1}" != "-" ; then - PVVERSION="-$PVVERSION" - fi - fi - - AC_CHECKING(for VTK from ParaView) - - PV_LOCAL_INCLUDES="-I$PVHOME/include/paraview$PVVERSION $LOCAL_INCLUDES" - PV_LOCAL_LIBS="-L$PVHOME/lib/paraview$PVVERSION -lvtksys -lvtkzlib -lvtkpng -lvtkjpeg -lvtktiff -lvtkexpat -lvtksqlite -lvtkmetaio -lvtkverdict -lvtkNetCDF -lvtkDICOMParser -lvtkfreetype -lvtkftgl -lvtkexoIIc $LOCAL_LIBS" - PV_TRY_LINK_LIBS="-L$PVHOME/lib/paraview$PVVERSION -lvtksys $TRY_LINK_LIBS" - - dnl vtk headers - CPPFLAGS_old="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $PV_LOCAL_INCLUDES" - - AC_CHECK_HEADER(vtkPoints.h,pv_vtk_ok="yes",pv_vtk_ok="no") - - CPPFLAGS="$CPPFLAGS_old" - - if test "x$pv_vtk_ok" = "xyes"; then - - dnl vtk libraries - - AC_MSG_CHECKING(linking VTK library from ParaView) - - LIBS_old="$LIBS" - LIBS="$LIBS $PV_TRY_LINK_LIBS" - CPPFLAGS_old="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $PV_LOCAL_INCLUDES" - - AC_CACHE_VAL(salome_cv_lib_pvvtk,[ - AC_TRY_LINK([#include "vtkPoints.h" - ], - [vtkPoints::New()], - [salome_cv_lib_pvvtk=yes], - [salome_cv_lib_pvvtk=no]) - ]) - pv_vtk_ok="$salome_cv_lib_pvvtk" - LIBS="$LIBS_old" - CPPFLAGS="$CPPFLAGS_old" - AC_MSG_RESULT($pv_vtk_ok) - fi - - dnl Find out version of VTK from ParaView - PVVTKVERSION=" Undefined" - if test "x$pv_vtk_ok" = "xyes"; then - AC_MSG_CHECKING(VTK version) - PVVTKVERSION=`grep VTK_VERSION $PVHOME/include/paraview$PVVERSION/vtkConfigure.h` - AC_MSG_RESULT(${PVVTKVERSION:20:10}) - fi -fi - -dnl -dnl Use regular VTK if no ParaView found or a newer version is provided via --with-vtk -dnl - -try_regular_vtk=no -if test "$pv_vtk_ok" = "no"; then - try_regular_vtk=yes -fi - -if test -z $with_vtk ; then - with_vtk="" -fi -case "x$with_vtk" in - xyes) - dnl in case user wrote --with-vtk=yes - with_vtk="" - ;; - xno) - dnl in case user wrote --with-vtk=no - with_vtk="" - AC_MSG_WARN(Value "no", specified for option --with-vtk, is not supported) - ;; - x) - ;; - *) - try_regular_vtk=yes - ;; -esac - -if test "$try_regular_vtk" = "yes"; then - - dnl Check regular VTK installation - AC_CHECKING(for regular VTK) - - dnl VTK install dir - - if test "x$with_vtk" != "x" ; then - VTKHOME="$with_vtk" - else - if test -z $VTKHOME ; then - AC_MSG_WARN(undefined VTKHOME variable which specify where vtk was compiled) - for d in /usr/local /usr ; do - if test -f ${d}/include/vtk${VTKSUFFIX}/vtkPlane.h ; then - AC_MSG_RESULT(trying ${d}) - VTKHOME="${d}" - break - fi - if test -f ${d}/include/vtk-5.0/vtkPlane.h ; then - AC_MSG_RESULT(trying ${d}) - VTKHOME="${d}" - VTKSUFFIX="-5.0" - break - fi - if test -f ${d}/include/vtk-5.2/vtkPlane.h ; then - AC_MSG_RESULT(trying ${d}) - VTKHOME="${d}" - VTKSUFFIX="-5.2" - break - fi - if test -f ${d}/include/vtk/vtkPlane.h ; then - AC_MSG_RESULT(trying ${d}) - VTKHOME="${d}" - VTKSUFFIX="" - break - fi - done - fi - fi - - VTK_LOCAL_INCLUDES="-I$VTKHOME/include/vtk${VTKSUFFIX} $LOCAL_INCLUDES" - VTK_LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk${VTKSUFFIX} $LOCAL_LIBS" - VTK_TRY_LINK_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX} -L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk${VTKSUFFIX} $TRY_LINK_LIBS" - if test "x$VTKHOME" != "x/usr" ; then - VTK_LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk${VTKSUFFIX} $LOCAL_LIBS" - fi - - dnl vtk headers - CPPFLAGS_old="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $VTK_LOCAL_INCLUDES" - - AC_CHECK_HEADER(vtkPlane.h,vtk_ok="yes",vtk_ok="no") - - CPPFLAGS="$CPPFLAGS_old" - - if test "x$vtk_ok" = "xyes"; then - - # VTK_INCLUDES="$LOCAL_INCLUDES" - - dnl vtk libraries - - AC_MSG_CHECKING(linking regular VTK library) - - LIBS_old="$LIBS" - LIBS="$LIBS $VTK_TRY_LINK_LIBS" - CPPFLAGS_old="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $VTK_LOCAL_INCLUDES" - - dnl VTKPY_MODULES="$VTKHOME/python" - - AC_CACHE_VAL(salome_cv_lib_vtk,[ - AC_TRY_LINK([#include "vtkPlane.h" - ], - [vtkPlane::New()], - [salome_cv_lib_vtk=yes], - [salome_cv_lib_vtk=no]) - ]) - vtk_ok="$salome_cv_lib_vtk" - LIBS="$LIBS_old" - CPPFLAGS="$CPPFLAGS_old" - AC_MSG_RESULT($vtk_ok) - fi - - VTKVERSION=" Undefined" - if test "x$vtk_ok" = "xyes"; then - AC_MSG_CHECKING(VTK version) - VTKVERSION=`grep VTK_VERSION $VTKHOME/include/vtk${VTKSUFFIX}/vtkConfigure.h` - AC_MSG_RESULT(${VTKVERSION:20:10}) - fi -fi - -dnl Select either of VTKs -if test "x$pv_vtk_ok" = "xyes" ; then - if test "x$vtk_ok" = "xyes" ; then - if test "$VTKVERSION" \> "$PVVTKVERSION" ; then - AC_MSG_RESULT([VTK from ParaView is older, ignored]) - pv_vtk_ok=no - else - AC_MSG_RESULT([regular VTK is older, ignored]) - vtk_ok=no - fi - fi -fi - -if test "x$pv_vtk_ok" = "xyes" ; then - AC_MSG_RESULT(for VTK: yes) - VTK_INCLUDES="$PV_LOCAL_INCLUDES" - VTK_LIBS="$PV_LOCAL_LIBS" - VTK_MT_LIBS="$VTK_LIBS" - #VTKPY_MODULES= - vtk_ok=yes -else - if test "x$vtk_ok" = "xyes" ; then - AC_MSG_RESULT(for VTK: yes) - VTK_INCLUDES="$VTK_LOCAL_INCLUDES" - VTK_LIBS="$VTK_LOCAL_LIBS" - VTK_MT_LIBS="$VTK_LIBS" - #VTKPY_MODULES= - else - AC_MSG_RESULT(for VTK: no) - AC_MSG_WARN(unable to link with vtk library) - fi -fi - -AC_LANG_RESTORE - -# Save cache -AC_CACHE_SAVE - -])dnl diff --git a/configure.ac b/configure.ac index 1ee35fac3..8a235a268 100644 --- a/configure.ac +++ b/configure.ac @@ -26,7 +26,7 @@ # Modified by : Marc Tajchman (CEA) # Modified by : Mikhail PONIKAROV (OCN) - autotools usage # -AC_INIT([Salome2 Project GUI module], [6.1.0], [webmaster.salome@opencascade.com], [SalomeGUI]) +AC_INIT([Salome2 Project GUI module], [6.2.0], [webmaster.salome@opencascade.com], [SalomeGUI]) AC_CONFIG_AUX_DIR(adm_local/unix/config_files) AC_CANONICAL_HOST AC_CANONICAL_TARGET @@ -599,6 +599,19 @@ echo # chmod +x ./bin/salome/*; \ #]) +AC_CONFIG_COMMANDS([hack_libtool],[ +sed -i "s%^CC=\"\(.*\)\"%hack_libtool (){ \n\ + if test \"\$(echo \$[@] | grep -E '\\\-L/usr/lib(/../lib)?(64)? ')\" == \"\" \n\ + then\n\ + cmd=\"\1 \$[@]\"\n\ + else\n\ + cmd=\"\1 \"\`echo \$[@] | sed -r -e 's|(.*)-L/usr/lib(/../lib)?(64)? (.*)|\\\1\\\4 -L/usr/lib\\\3|g'\`\n\ + fi\n\ + \$cmd\n\ +}\n\ +CC=\"hack_libtool\"%g" libtool +],[]) + # This list is initiated using autoscan and must be updated manually # when adding a new file .in to manage. When you execute # autoscan, the Makefile list is generated in the output file configure.scan. @@ -634,6 +647,7 @@ AC_OUTPUT([ \ src/ObjBrowser/Makefile \ src/Prs/Makefile \ src/OBJECT/Makefile \ + src/ViewerTools/Makefile \ src/GLViewer/Makefile \ src/VTKViewer/Makefile \ src/SVTK/Makefile \ diff --git a/doc/salome/gui/doxyfile.in b/doc/salome/gui/doxyfile.in index 84772c776..4d4cd2fda 100755 --- a/doc/salome/gui/doxyfile.in +++ b/doc/salome/gui/doxyfile.in @@ -62,4 +62,9 @@ GENERATE_LATEX = NO #--------------------------------------------------------------------------- #RTF related options #--------------------------------------------------------------------------- -GENERATE_RTF = NO \ No newline at end of file +GENERATE_RTF = NO + +#--------------------------------------------------------------------------- +#Search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/doc/salome/gui/images/geomview-alt.png b/doc/salome/gui/images/geomview-alt.png index e7e1ef67701a8c4d4876349109d7124ecd611113..b76055e50de84accd66a294f5b00f1ea436ab0a9 100755 GIT binary patch literal 74085 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

Q3U@v8F^v8)dVZ( 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 YdQX#tg5!!5cx^a2Ddo@A62`&*4>+Q+=Kufz diff --git a/doc/salome/gui/images/pref11.png b/doc/salome/gui/images/pref11.png index 39755e71076737e4e59b198f5b4ec4762835489a..a3af88c506591e06908bcb229ee1abc2da0f58c8 100755 GIT binary patch literal 50009 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𝔵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 literal 26832 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 tTiH43&bdolH=zrp_kO=`jC01} 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 Yq?G0T&FiN4WE8c7N0pu`nEmzt0JrAu!T%7I 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 diff --git a/doc/salome/gui/images/pref13.png b/doc/salome/gui/images/pref13.png index 56dd24a418d953c40201eaa152c7fc4f3837c946..0bd100d80bd5e1f9a7afd0e7cb65a4c985469217 100755 GIT binary patch literal 27277 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

Eor_(uKD}3~lfTlTuuRljvUb!ys9sigt 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 literal 32483 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 diff --git a/doc/salome/gui/images/pref15.png b/doc/salome/gui/images/pref15.png index 9f1195e5cf42c2e465f2e4befcdffb7e89db26e2..f90b585329abcb8785867093f4050829d637189b 100755 GIT binary patch literal 49591 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

+^A$7#`expY6O>aBC@U5c8W9X6sk4dFw zlkLFGeNT)x?>Xhg-ZWP0%5`3Jlj`x1Pzo78C2~#&p4dY>U(uM7m|J}SdL;VA$J0qj zNazfYRe5piXfK+FR1b|nBFHb3V#sc^oTMOxjsWJMt|SLw)Aoh<#U{C&BX67U7;c?jzeL(ZmNvLWX0AfN_D$3`};=X?A(UdTmtDLt0W`u1@ z`WEFE7Rsxt64N8MG(k_&{;$#&jl@p_0+=~C2%Rg}@dt8E0&fOV2pb+}N6to6qVTR4 zrRBt{W07_Trr7VkOmNPhfFIwru}QyP#VCX&dJ2W81f)xKp#A2=5V6yKneS=!r#VHe zC}z+`h~T-gMX#Ef*=U*?&Cyn$21Uj@gdp6^QJt3ksvQeRcO9+zo~9oh{=#E%VEjFT znudmdfMIWoj5K4D`xyA;&aqsQ2XuQa$^XIB0m8pEy2TQN%>F|bLmRzZg*)^953#L# zH=dr^ud9NSS*9>(rb>EjDDFMpkp-00;b0yYEfL|d&^Dzo<^tUK!GOU=HSmZ$p00Z< zVp_RIv(WLj6~oT?KU(f zFvxd4xr60?6g+q>`=(jw*c#=b%+eI=7dKBCxS3j1pFR@J4k`b&AB8BYw!35%YsRZm zz&5QK69lv*NF�e|23S7>RLyHJELbM~w!x09kLk{%(g1t1W`F&cx<`ndU2Sq)!(` zFUG?i1q}ErE2~^?OtG0yO`b1#ly8S!%&QK%ncoIjD;2%VgA6nJysAG^+u&D#It8oH z_ZmbW6!-kIq43Um!~IvRH{8`9D_0gTqVkaCxi52F(@+v70=;DN)aQOTGFo;f_|>%N zKV;V~>I728V~<_&6~^ePguU6!DY<3b^wI{zko(&^F@w!vsuG}PiK2-|8!(rDqR9T8 z0gO;l8DxAD#f&g)*I(2a2faP7wj~y6v)NT23AmxUkajV7&W>HEft=yHP43be2g{I~ zGUL=Hun&mpJQekhix&>BIek zET0;)@{A~(-t0IR>Hnw#nQAzDN)4Eqjk|ZaZVR$_NLKuI!uwz`I8)%S@D@w-_n-xDOy@O-Q(Bk z>68w4{h#m>FQN{-kKu;;7+yvmL<7GU6Ch(_frhK zbC|KUs?{?w2^Q@UgxHzXi8~W0+iNJwocQ9q#&=L!G4)VpyX9?&8FHwJx4Qu00b41>fKm1L;E0l4D>cHo}l=bXN3mmnPdX9%F(#ry( z34?(ep89Nq!gJ*0mJ@~s0gX#2wP%nK3(5?CH8+y!C|Lr|#;Mze9O{W;&$7I9GpgOm z;u*X^?&IsMrS4Evj$u+k!Ec!Lc*m?iy#N>tV#CG7GJ!$wED2;oj(22bO z$(Xe3d4G3VG`>F?E_MtA(mqSVePwT8yqvwPv=l5~n$UQH^n$^pmk!1M0-aYq2nQ2o+|l|OPsv?cTBG9rShuCUXg+2!{7=VnK^()~ zuHGe;w3!5C8Ir4AM~?_iDo*72j)&Z_jlP|UbxnyZnaFWqWBD^iYcT8k_|s~#UEFgA zTvDnV53W=nEO5eVL7(`SjMUn#EfUioWj(CWJ+b-P8$xE-Myb3VfJ7XY_9W zJl~7T5j;xx*Da+BV@NMn5TAh}kGhRLUBfmVb*$bASAUW}!P-~=!(vC<-)yax{cJ0T z433|B8;H(dm=1mAd7|3k#o!avKs3wD(#&w(dF-iw@=n;{L9t8M3d3vQn$UHw38e4Z zsju88I)9npV3FXCm1t|C!~Rbn=_kCbMG9Mi3*1#YaLlCjIgRAGw^K*_p|kId6a4 zjM&<~e6V2M?iI|lElChFSXz`q4vK+5C`tl0_Hg}>fAyYx)q#mVuN{U9 z-cCku{w%moKTUUUehBIsa7;aBE=5F3?-k_u2kvWU$GQQbyAo+Xh(nP<OM{_<`0_3 z8|&(z)LQ-lD4GNonV$hDV3k~Kl+Ne>QbWyT$JLRa2RuC~vaY}m=vfN+UqRgcXmxC~ zSC>(eoKWWKn{OH!jKbUJjK8K|6t)LvDD+3Dd;y})*#Q8&!#>UgI#T4G{q`nq%eE@S z6@kz;v0<`H_yWJq@N@T&E6IStR_2QTRi+PD!9l+xf=!)*RKWEknsJJYu_;hsREF+iYdDV@ePH6KdY(1!JVNh?~ZzirvS(S^fh~LCD9(( ztomh+JYdk9jIKCSQX`yv|_E(`%eZhUVI%N8vrVj?hoeD0T+;C$`A$% zaQh;{_=k7M@GpO;$*dhxnHv-;50+CH@!FQTb#NYybnXa#0&2HGL;`AX`gbs$ilWLi z7bP#Irm_Oab@O!GPs|F~H3LB%02rP>zey?A@$uXi2QyJe+AaTu-NOC zEp<6AA6xtmr#cwG*(ZA4@@iscIk@h!;(1`3C`}E-?Ck&D`Fb>vZ4?Tm`<2BnE-7g? zn6EW|wS{ooEszJ%>|Ow994fv3{JGJ*acdB-&GQ%&ozLcWImD8_j+vA+tLYy#xZ!YK zPB4guBqXY!qOcduY*mO~`MWM>TeoM`1>s9Qr`R!MlcKK8DTD7d#xq8QAFgEE6H&Z6 z`&8$GA?Q)^JE4}mrbEW>Y;08qcg`5#;r-!Pn)^c9goxud(M|nxcMOPD;0jEVEG!YP z+mDaW3tEO}DqVfkf|O(k_26<{og4F7xp(7GbWGg+xpa=2Q87D@lx&yeVUU_?$VoK} z1{=rP?Tf)`u~yk;>5^VP`4zdoLoyX@@(cYvIVGcvO0R;0`&PYn4F@qWL>-bAxi>`H_r zB)Sg9mH0cW$!^Qqk+0uod?|fgap>X}^6As3g@^9&67#ms&Vf!k>_Q>0o?$dtw`0-L zG-10cxl}o%rM0y;!OW*vG%uWA^zbk|<=MB*<%DbC*g1Fv3i89XhaNkg3N^^!kzcP5 zi7``@vrDY_OifNc{qZa}J0D-S^~g8DbV;!^W{SY1+FF?$<0^GV*4(3^i|5XbKN?Nv ztnLN9>(IzyJ+*`zrqO06?j1fBxr*y??qmCe#Kc=SL^P(Tk4N-Nb|)5A+xlvJ!5f$6 z?fv$&gxbO>5uf9|1W7(8SaIlJsZWDNsZClxtv+QSJSA`u^QOVPhgbSkr^xB+;ecbO z_^EfisH-8^l%9c?i%T`(QP|EVA?>NPRwK zqA|0-sI9eVNpKk#29wcUNEGRwh<_LPgtI|L_#!oRTG005)=_^8;n~a_R+UrM%=zNU zmc9h|oVYVQ`IfJCQ>=5o69At{xufNrxmFPi13C7)UJae?W~KUFA=H^qzeEv|k`8<= zw82zpNDJHhSiH+G#J)u_`s2?>e&fvmZ6O9`%C0@c zo?wjmdqN?H{@Y%=3~ZZole;x5qt1dS`;^P4m0Cl7vdT1k%?Ccyf^+nDwh!V;;u_by zW@Q6b!Gde3>$9D%mn&G%c9&46OM9IMK1V6+;VB0s)bl9JVqD{$@G4g>Bo{pYl5?TM zzM@qW5HoLMLLt+QIGeo2nXK=n#0prBV+Myro$sDnl*V5t z`Wp;Z>)TBZ&Nd9D8kj}}z1}qxYJgs0eIMBIq1U$*YW&b^ZPEQ#IM9F6ZfX-luYBAw z=FqF3EoK7&URvMe`^4`o?KceGgJF~{EiG8ni`EfTewWbHY;Do#7_fi47n4eQ#;QbS z0l(>#a}QTzlF3Ne2aCZ~U{(@p%%I4?WV9Ti_4>$hWk@t7T9lQQHxO(xslx@!Mh4{X z`)oQrD;@L3klUT%H-#Ghx;YG1bC;jkfa{st;LWF|@3Z414u>xdVew&i_K)(R{XrX0 zJttgNjaj()RGA~jfv%;My>QGt|FNV9Oy<0AHbw$T4bB%{-D^T3Zjn52ocW&TldKx` ziR%>4&X#<5#k{p8A;dWXML+t%5P6>Y(*eA{{oeE`V&YI98ie0zW|%c~Arb z;*`a_8dJ4c5nT`)Z3Cmlff(0&<5zi7^dH{6!qE|}4#+1w({ zTl(0R;k5nrvR#QY=rYI7!=tXLscAQm{cdt<3Vp8*-z)&Hv>_HfWK@cz&R|rZj_VGJ zPG5X^Z!Et15(NbZ8(Z_#GEdp`1?0(07Gdaj0D^fPvDXj9 zxN0p@om+;ZJ(?%Jginp^Ck!2~R-t0W#y*fqKQ_B~O+y!~6U0f8O&L*gqGxFY4hM`W z9)?w(Xr9vX-;{b48IUPH#|O4u36fGF#1A^YACeaFUM*-xDa@CX7k+Un;@q&-u3LqX zueG(Zm^;Hucree#;A8TpIg{|Hb}q%w0OxZZaJ$Q6sS3;Uh=K`lfTo< z?{i>5f5ptqOv2xPf6bDbk}|)G_1$&Rk=ZAgu58$hUPO_tav7vFCDNv4P;hU5O;6O1 zjxM=&a>!=jtMb8Z(D=!dCj-y*!$BJ= zM8hTc9v@RJax5D&CZ`Qf(>Ts?e{$1t>zAUNu_aFM-Id*M>q(*dgLBiCC@a;VYSRkY zsjKP(_3IYdi}W7zvcZW$H&FwY^I(y^5}w49R#f@g=fEPLsq2Pi)>UoC5m9g6MT961Q7=+at30!KnT|CWbhbgmy{b1n2lL11$2s)!|#M+nB~pz2&#Oim|e>u?K~O z&^|;Q#I)FTrbI$%rCODL5!5L;|umJqY_(iC}M2M)k-s6b6aO1O8HVx@Px zM99v)W1t%81y;3{=}S}V>rGWb(vgl+IAiRbCwFY$zly&RmW;3;oL`%$i@9+xE~P+Y zmPMwH(6+$B;D*FbjBC)u>R^ z;iC|)D+eVB35-rjFTLZh5j8MD+3EY89f2P&-{ZEx;TwTij*m*-j@qXULa z3Uf@W41o@&7PJn6(kfM_Cx_LfXCJf}p@(Aczk0%9olga(@cvfJBKd_2=I*MumtEWZ z|M;U7DXwI-JXg8d3BP-{Czy4mepOjU#!t#*JrcUXmxqh(HtN^Qk2Y%Tw_Gho#}uvN zV+~XjrA*qQxcjnnQLRW}qBXQ41NEfmYr3yx=|!de7_7NXXIu}kai_l)Lln&~KT^{2 zIWgcy+TQtiYpdh0ce<7=zWcz_dePw=v8l*^zr@8?yT_bLG6C0 z)3Ahu+;@UD%Hg+ysFF;pJPihcWUvLjv!P*J_pzU1r6#H>csTtD2L%O1+CU4tr`18A zz)86p%MTUNHd72Dg7Sqd6nb(~gH`DitRK8szS${l298iqR#vub5{z*leL|h~3ECpw z_Lm#42RwV0d9#hGO4vOF5j)isI=sZp%L@mC4hM&rp)D@K;#dBuB1Q}3JJ(X6ZiZeA zNGt;XwkDbq?|%z#;F)sKd&8Rx*PsZzS#xyshQ)SY;1IsI(KU-2UosFbT@p|#5Sd*8 zLjbX@t?f|0MS$DV7wBw!>rRqyZ4uoS&pkaDtRbhPTdw;ZXV)WH&x=NlfBfb(_34Zj z#Gt;J$x5Y3xDepe$0vuTto6k@(AXC~i9T4&8y%Xn&+F=W+mj59H=rYz0wZGKHb=}0 z(8tllg*(}SzGx=5yPFS^#MAXRa*h^=)ZX4`n9zr>^8)dL(nF?}zP+Ey(qR9o^15Sj zmt+{qr^<_ipXXM~OBYYidOo#8{=#;b*=n>5Zxx^JOBep3O55bCY6-LJ9`8n<;1UQq zeBqm!o@Nsk)&)z|y$TK8Md-_vJ)WB2h6YNf(N(ko1q~%{V1riLL}8Pr8mKoLn6~Xg zZN`_NECPy2L4Pumz8C3=nT`+t5G!_02FFS!Ah(>G36Om{Sbh{V(pDZc^~$NCC~7aT#Gv>nS)eU&SGz_Q7m4tDMF~k|<^=kghjGmPD>2uuUcCiYd09hHfwT1U zO52DyHFxj1SUfuDXMgtmnca#+mlGNn=4(Zzb#J1K^DIFqE&SNis^-FjwPu%Cm$6FL z&=_J^ah64n+p{#PHNi|eXFa>7SWZOZifJ$mX2yZsmJJsmqt~rFpd7B`m28YHnf6G& zS`j!z@?I<}1U+=A8j@>Aa_b7HEqk+BMy1~Bc6qnK&8HTy46ze^RGHR~U)LEeeLZYS zBpoy$w0(v1KI@0z@uOw}u}ZPSq28d0dwiZePUUAl%S}Py6~nR(&YQPHcH|WN=74Pb z_CsdLkc7qc-U=^z{7o83dv=`e8xgIv=+}46&5Z-T41RfSaLv;En>7?P6zpe=j;l&1uaI5H&Rf03Ak8i}_M@;Ugeli&JaeuSI}mJJO>Yk%rR z$%F3K4;{r1gGIv?EQ0Kw7zW3*o7oEkE!%&t;Z1f*3d^4&H1Z~n7;-kdX?SO06b^1= z1?|6W4qGFlsC(U@b>H1YVIHrwwWYAeB& zvf~66xhVn%fl-Qly~(hnFC7QwXU0dI`LWx4lOw_M5{mM?p>}{y@fL)Av zt%|_z>fohdYMrm^>T%6Is618P!F3hqMOEFz=o(S)y^l^6qUg^Sl`|z+AMHnvinb9m zk?<_1(Q>JmcxyWAn1D%e-%PkQVe%-Q1UtWC0@{xc5iVcwl$Bn=XDBFeCTdIZuHZ`T317S2;n` zgxqV-N%DFfB{lW+Gv2?yl1HCh5OIA#g{Mp*(YGuMI;>XCynbMj%wA>iTH?QKeA7RX z4XH8)?lsb;DB8INFFQ)p$6*7`N4LU-Ry#yJ7h0O2nRqk=m1P%;GBhc1GRYf=iZP@_ zp+L(eDEI;?r6?9FE35q*Otq3@S(vf*X|5H;z6lSb$}V31C$*{f`uiq`WE`nO^g55{1smm72rln+pXrh2IPS-bdi zC~({{!mhX8@rOKI=D2nVG24Eb+oW6vmw+_82>IKX&e0l0m)VLL^8O&B?&%>mFMPVd z)I)1HP3>I@I3By6%9jJV201UMnmB;^gd{as>&h^6HG3r@7n3^mR>Ue?&Cx~Yy2=M0 zJ+sZ(j=uSxgXH2d#zP^&A5)=6+cvl91US2KY0`nT9qZ&Z+) zkBQeDc?wHFY&x1qCLnHM{G@j~|MwIF1t*nq*Pi_To&6cyitj~!*DS(>a<$vk?z zV9{<(Q_}=f-(!TZ{ebFqtaqW$A+St>pe&Wc4q*j7E&nV1nmIp^30>Cm;}G@mlunbC zfw(~%afztp<5IAOc&a4uM~Sa4a49Ve9GfB*hsuoSF3{3u^SHaCtFfi`s=z{vN@X4% z0>tuQ>96vj>*C@@;_lw|uHqJtAD0?6@#cU=MhlPTOx(Iqmf5*G%WP?HJm!3?uLue0 zfSP>jFEybvH&}Y$^%(=3` z(K(MCf!G1b}BYpOyZRH9r_9ClA zP7spd%$fPVOJ=r%o$*7}jwoP#%4_32t+*w9eP9`>v$e`6DQN=w^G2`)Q}N4zeof&l z%h(z-09l~$Lvn~=TqRV>@>DsU6H>&F*M~_5qmR^G_~F~FeM1!I&Rxlz$GXIe?VOrK zr>{f=)zR3Qn`DP54=#WePB7R>`Jk2Lg~12)8*gZ-Z*aa9MEyQ_)m zzcuPT#}};MKo^Mt6Zg>u_x^D>7h!jcARc{9tE)=Fwe74*bdC@l(ey@aRXv!)y0~1Q zE;1JbqFg&{b(M(I2%8eJ-%N7PJ(m@;_0S+o%k+^T`vS1r+)2J~#?HLiJ zU9BIEsWj=GcUc<~+zI`tSN+AkaTq#{#Yz;lu7D4?=>=V9RV5FX3hjDRUiS9&Z8y?5 z?}@S0a-ZzI&+#+D4-q^drpuGRmU>Z&>g954FAMx+EP7z3&}(gXvf2 zdU`SH!-FTSyERzB?R7;pRXrZn#JmbItmAHpF=bkpdue@x5ioe)xu%g&zysvR z!h@r*Y}&=d&CRZbs@<`i4bNpVJ5Q7Bg_zlT7>rI;NkLX81j2EZ1}M6YiW2Wag9`W4 zJJ#{Z^m^geIg+`7JWlVWeMWK_1f*ug8~kd%mNLpuH3j#4(@rO+rpPMWY;}*Nhwafo zJgv(_>Bi&f(uG0JLxxQ!-QldQ)I0?ym$!VKShH5}S3oATSrcvshOg-IlVexZM;e89wU1nmYF*-%U zs&D1oQk(m^BC01i?_-kna4|$=Lx8dVj|`Q*2oENFyYT=qR5(Xz7J#F}2|y%< z1TfRUbPZe>NA~0JOO$<|p^NC$R_wezFE8JUUS7IBd;3B#e-@sdu$_Q!4hAsWJM!cj z1t2@_O-Fd=8zk64M7#B_kluM1{^;&0Lb2L(@~kz&Ea*6b2}F4IsF*qwTC1vC<&EAWXg<+EI1 z2kLRSZnmky{dfEnb!(dSu)9(qwg6Xy7X(0m63$%&TjT;jJLSu>{e+>in6|F2!PkuP z{V7Ty+d7~MD8(k?wx7{|V$#lBDX<);!M9B;hilxt_4WJUrVkjlTEXUVQVX+TU+$f^ zt6IH-n#lVJ7;t#KPOIDz+D%4V69lXFpu26BNk#Ff3m`6_$}nqkzSVc+-^%sQHZVn| z15LX;R%H|pR+1>bU#1;n2r=`T^^;MhG+_ zq-R7|7!G$b4<${=v02XmXB9ebm}@g;^*}VX*nydbHgVa`XE`~whe2Xau7!F?Jr|4ncKn_(bOlcH0YsWkVxPi`Uh~B2tejM1-~Ks zsyu)<_G^AV3q4alRt`fSAUf%_d$_gNt(ZOKwfzkRlv|N)n~3Co|Lyb=;6$|K%tRCj zh&XBn^oLN3TNibRX@rQs_hmrLKX_BU-&F#^QGfc6$H!&=ML(ty5Ri3$oY1iEi*kGw zsL}1(C1r6@`|m=yH1U4va&s6n=#9|__eMIGcaGn^%WR_-iD1Da zAV9T^ny@MXgmiy&NLUPnidWUCu4OK1?}5IKd6)alw46*6i0keQ@-eL4d*br#5Xk}P2rmxt0h82L4UfE2L+ zJyMJ2q7xBwCh^OSJaopk(9{v`28~v1Hy1j3T__ z=Tx@srlh5+%DFsx7|XJI;`?664%wlQ^IUpUFK6c}6ghXsi6)bc`Dy?hcE4x%TX@RR zQK8{Mr@5r?q^(k~$6S0~ZS4md5iSaOAXp5`JmbODXi0aA1=Gx*;_`6|(1srto$r4bl|Ifgkv>X+{*g(aD5ykp6^l## zB~N>VIK1uSQ(b-P1n)`w8>bu!Atxu-uc@m%^0!h}wKK_`dj7uvs;v@e;UD@G{W9~a zWPMt>vWiL{2>pvJnn<@7{!e>X9@f;c=&@AkeO72y1X=6SA_fseKz3UNWD$^6)(DCS z2&e&pK!__=5D;WBNC>h+B!GY{kwoQ&um}hwLDt9`NPx&r$aW{#zV_XB`@Qe|U;fDV z<$S};IdkSre%qO$TKyF&Bb@;cGKkMv)Dz99Z{W)G)yQJ<7Ay_QZoX zsfu#1w~rj{?kwEOVMh=fC9X^I(tiL%epxr2vXJhMRx&w$+hA~Ved*vF>~Y9d&Wqs!c#l!hDFxW_}oyP zTtA+=A!0Yuab zB2;~;e=%uRUAT&e**+S<3vYEaG=#C33H6D@2byCu=j0Za4{b`4H%~aHWFxP`QNWVW zURoiJ5^N&)~t zlC0F)Rw?L5V>n=aYMi7}hkDh}a6_8Tg~vVHzI{nJitEBL-DlQt%t|B5M&?7e9mvTJ zx49#L2LbW%j`x}S_xG?^pOVLKk`)ba3|-DT8qz8*Rt3~CfUYPfS8?Bo-6BE=8+MCn zksnr7c>wmM?{#oco;qD7VW;>-GZcZ1k<-|U3OnvGDT|a>hU~y4o zutz+o1+P~Z$`=0+<18}XKSMV=^Z%$D6#RdA_y6Ja{;uMWTlIHe{M{G+zds{bXH%WT zM^|4AnasiAkSR^{S0plX8;YDH>tAb(!t>ykE{%I#M(okAIWXFb zNgt%E3VbF5LYg--IVaO#SXIJg;p#}@W}4^LVTQ9qwBcHH?YO9Zv7ELA^lxFE-!JBW z<$Z2&RZz!h<-OTP#0afD#65fa&x4sw0jGlOOeV(dLrRYy7G=n&JC+O>hA4VHb+?R4 z^z;EKr$ZH)S7|0Aj}PJ>svvQ{l~wz_Y~Po%?Ea;ArO0(}w6Xj7%9el%V+1#FA@}~x zCpH3)14!vpg2T@6$(4K@~rl3!%(=3r$PT{I^E=Ui8u z3b%=TEMNP~=hXfgo4R0&7L3+Jxlap}^ms3b28KMP>oF`Y4-xIJJ`VNsn2P1;nFZfP;3(o@l-cA;qfgNtyo@oBzawA^Klp+^7(&OL>dv9mB|S$sEfS?(|l* zH7xuzlBU1N_~y$AY*J&k1`*cwgyWerXuuC76CxS~N&S|OLJCszzpkb8h|$XM^`ciWFr1|B8Qd;zQ~fnr87GYEG7_{T%_wd=DVHTgs- z6UvCmG3njA9p|%B-}~Fxyz)X!`WgxTS#e{o{p}VHT=@&4EhgI7vZYPmdF8iDqCj8c zmlZoOYw77~2$vml9zR)ZbkWN6BR=0!ult-yl$?`*sYv-OPg_=!d>lEf8dojtx%(NR zqxWT6eKaY>-IH>fH&VTxaZ1A;9R%ybiA{S_6f5U9c=mELoKb%!9+m*Ik8Ov>;=YbeAM1^rrfB0rR zU@T>;K@P`R z2Wo;5Q#a>7KED~10%B1%p7YFn;5L1{s=He67r)y7+8@P>lc=$X?b>tlDG{*C2dGmi&d zu6ivBFbRYEpzH#NBAc0P_3(hHK%pJTW|m}UFd9>do(ADe5Rr8wHP4K2;Y{?8@m4P~ zfb^F7^rKrKEy#{5St3e=xwG z1%Q47%$;R}6|PAp3#n!%T0L(UEJtWJf`^xm60Qz2;>roMg>kZWP}{+>^~Jz4PvSY2 zZcH9fft>I1>Yw!GcAW#p+6t+SDyJKh0;eM};Cfu?wwW5830+ywAH*8wsANZ5vUILG z16tgi5J|g?FP`2bYIJUWo~XmYrgSNTjBD8VeZknr%8U9D(~mQ?iQQ%Yqm$!Rmhb_5 z15&K_p_5yD69Z*qJB*h1?b~N*lKC8nLk*(vT2CoZ+5^A@(qK?zA_r z9fIS5B;n{-{nb}ry%1h61!R8!A70+xHMH&1o@E9^+MWR6V1Eh+yF<7f_7w9$W zXG^5FtPPS`GGX|>pV!gN(@{|&&kW)1ZAo`4mG}o8oJ@w*4EKA4vCO8q?C=u*-pjPf zK|z%haJY}gkt;;rQ%I+K&Rg-`;}I8-jd~$Jr|CB11Unm(L8eE`jS!7u-n)0DHN`X~ zzly`zVBoEm|M|q$f+qE}V0tNt|DF4gmx_hBgcPkw$~Xrkrh9Apys%hYLupSJ3BrMd zDUn_U_rLh*Y-XE=+F>;{y9*a`jD?F3Do)Ye_#z+Rs< z@rf5iSus0cnb0n7-L|d8=e$SE)VDGiGO*BWw`@sVav60P+f>7~My8Lxd)E}|&$n6` z4mY5_aD^F29MSWG9Ya3hb40trpt~9&$)Zt*;8uIf!ly^gS7wX-QqkxmO&ZH&0wPl| zwq0)VLz9k6LI4<3x{MPF6aH35$z1uiW0?X_N-m+k+ zg1cVPqmf3d>$`y2`5b9fF-P57&ZB;iYcqkF(UC&*Fd|D2W(HDbrBLGSZ<`KnBz=!0 zIRh=hRc#M{ajDBx&yz6p)BG4;6!a{z#dHHj2E^8Hz+fwWmkYrIcMic_>1**b1Ixni zpzcS`Pt=4aS}9{EqRcV%6(G?LJDcCpaPQthJoylsc$mWj=)qCfi`kW}pyOdHg|w8A zRH#rNBm_Ovxpe8{`}V93xm@;7;4H-@Op5Q^`DHkgTUILVVfFLv zpXCfsV1#1T#h$?t{=;iJh&tB}56fmFa#f z-JuWF*6Ql7KkqkMm~db|9kAIUuVWv;JZnncU@hqe^A3iwZ`R7`T+NqMv@c^>&Z`_( z^FZT=z;9B7>1m47#ygVSi5#L0$k1zm41G<2KXd6QJd_|BvytirOBXp1$tX4&F?GgROr z)k!3Ga8ge9x;-iqmB$%;n6*oiQQJ8+lGX}P*_$KcfVE zml60O=WSbOXUY2$fvLb;IszqFg8`TB%E0pY9KS;SYO8J}a)X)|w)#lH*xJP_vOp;& z^os8T)e`tr7iRsGz>xpm=|{gW;H0#jhtr4Y5TDho)~Pqt-4?80$H%m+*TGG$uoh!8 z8WgIIF4;++9?LXvVIDR>;ufoX2NQEI4(bKBx+`bt0SGhC?)LQd9+lJePU$liC$vD% zj!AJ~Yg&x$RL!3N6!wcA#yDjdzyH2`$k;Qq3r;n@!dl}?cqEoEpDJ8u8=%wVu?8H@ zDA8olC>ZPqu7HEgh+aTwEAMloM?vU+uJH?MU9U62Cc+w0UN574npEhjt1`H9O0tRH z7w`+DB{4BUEC&tqdTnprqj;TdsmOud1F#t&-x~mA@+6lGie9fS`=`u5#lC<1J80gg z1-K3!AmYv^@9U5S=XvQx4(hN|f~@_UxIT6WTnn*@*ICj=uvY-A0%T{gd?*ng_tF{J zXbE(gIoyH2D^cP?(C70_tMf4t#!8BLo+=#B2bnU&5t z<>H&3+#8p_e4nA;5V4UPFMowLAWn$elyk(&8>Yv$>9E^*2OVZM8J8Hvkyf~#q+H8A zCZcM9xOm+1mTd_85Yg0kd-H%@n)7>k<oF5LMST?2%g literal 61706 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 diff --git a/doc/salome/gui/images/pref41.png b/doc/salome/gui/images/pref41.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d943f7d65a9da426a1dc23d726d101f749c450 GIT binary patch literal 46594 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 b3$ESO+|qVR+8W +

+ */ diff --git a/doc/salome/gui/input/mesh_preferences.doc b/doc/salome/gui/input/mesh_preferences.doc index 7fd8a38a2..0b5a756d7 100644 --- a/doc/salome/gui/input/mesh_preferences.doc +++ b/doc/salome/gui/input/mesh_preferences.doc @@ -10,10 +10,15 @@ later sessions with this module. \image html pref21.png
    -
  • Update
  • +
  • Automatic Update
    • If you toggle Automatic Update checkbox, the model in your viewer automatically updated whenever you make changes in it.
    • +
    • Size limit (elements) - allows to specify the maximum +number of elements in the resulting mesh for which the automatic updating +of the presentation is performed. This option affects only +Compute operation. Zero value means "no limit". Default value +is 500 000 mesh elements.
  • Quality Controls
    • diff --git a/doc/salome/gui/input/occ_3d_viewer.doc b/doc/salome/gui/input/occ_3d_viewer.doc index dcadc8d28..f1f3acba6 100644 --- a/doc/salome/gui/input/occ_3d_viewer.doc +++ b/doc/salome/gui/input/occ_3d_viewer.doc @@ -24,6 +24,12 @@ left mouse button, panning - by middle mouse button, zooming - by left and middl mouse buttons pressed simultaneously.
      +\image html image111.png +\n
      Zooming style switch - allows to switch between standard +(zooming at the center of the view) and advanced (zooming at the current cursor +position) zooming styles.
      +
      + \image html image88.png \n
      Show/Hide Trihedron - shows or hides coordinate axes.

      @@ -126,6 +132,40 @@ viewer. \image html occviewer_axialscale.png \n
      Scaling - represents objects deformed (stretched or stuffed) along the axes of coordinates.
      +
      + +\image html image109.png +\n
      Graduated axes - allows to define axes parameters +and graduate them.
      + +\image html graduatedaxes2.png + +
        +
      • Axis name
      • +
          +
        • Is visible - if checked the axis name is displayed in the +viewer.
        • +
        • Name - allows to redefine the axis name.
        • +
        • Font - allows to define the font color of the axis name.
        • +
        +
      • Labels
      • +
          +
        • Is visible - if checked the labels are displayed in the +viewer.
        • +
        • Number - allows to define the number of labels.
        • +
        • Offset - allows to define the distance between labels.
        • +
        • Font - allows to define the font color of labels names.
        • +
        +
      • Tick marks
      • +
          +
        • Is visible - if checked the tick marks are displayed in the +viewer.
        • +
        • Length - allows to define the length of tick marks.
        • +
        +
      • Is visible - if checked the axis is displayed in the +viewer.
      • +
      +
      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 rectangular frame. diff --git a/doc/salome/gui/input/postpro_preferences.doc b/doc/salome/gui/input/postpro_preferences.doc index 6e2755a6b..f8b0b1fca 100644 --- a/doc/salome/gui/input/postpro_preferences.doc +++ b/doc/salome/gui/input/postpro_preferences.doc @@ -129,7 +129,7 @@ structure of the study and can be visualized in a XY plot.
      • Stream Lines Preferences
        • -
        • Used points - allows to define a default value of percentage +
        • Used points - allows to define a default percentage of points used for building the Stream Lines presentation.
      diff --git a/doc/salome/gui/input/salome_preferences.doc b/doc/salome/gui/input/salome_preferences.doc index 17d91caa3..8e4065d36 100644 --- a/doc/salome/gui/input/salome_preferences.doc +++ b/doc/salome/gui/input/salome_preferences.doc @@ -97,11 +97,20 @@ operations are assigned to the buttons differently: rotation is made with the left button, translation with the right and zoom with both pressed in the same time.
    +
  • Zooming mode - this option allows to choose a zooming mode.
  • +
      +
    • Relative to the view's center - allows to zoom the view +relatively to its center.
    • +
    • Relative to the cursor - allows to zoom the view +relatively to the current cursor position..
    • +
  • [+]/[-] Speed Increment - defines the number of units by which the speed increases or respectively decreases after pressing [+] or [-] keyboard buttons.
  • Modification Mode - allows choosing between \b Arithmetic 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.
  • Spacemouse - a mouse-like manipulator device specially designed for working with 3D presentations, objects, etc. You can reassign the @@ -207,4 +216,17 @@ resizing columns on expanding an object browser item.
  • Entry, IOR and Reference entry columns in the Object Browser. +

    Shortcuts Preferences

    + +\image html pref41.png + +
      +
    • +Shortcuts settings widget allows to define custom shortcuts for +various operations. +
      To change keyboard sequence for a certain action - select the +action and press the custom keys combination. +
    • +
    + */ diff --git a/doc/salome/gui/input/vtk_3d_viewer.doc b/doc/salome/gui/input/vtk_3d_viewer.doc index a33ab8e16..e5b73f294 100644 --- a/doc/salome/gui/input/vtk_3d_viewer.doc +++ b/doc/salome/gui/input/vtk_3d_viewer.doc @@ -24,6 +24,13 @@ left mouse button, panning - by middle mouse button, zooming - by left and middl mouse buttons pressed simultaneously.
    +\image html image111.png +\n
    Zooming style switch - allows to switch between standard +(zooming at the center of the view) and advanced (zooming at the current cursor +position) zooming styles. The second mode is available only for parallel +(non-perspective) view's mode.
    +
    + \image html image88.png \n
    Show/Hide Trihedron - shows or hides coordinate axes.

    diff --git a/src/CAF/Makefile.am b/src/CAF/Makefile.am index a0fc8e5ff..e95bc4463 100755 --- a/src/CAF/Makefile.am +++ b/src/CAF/Makefile.am @@ -49,7 +49,8 @@ MOC_FILES = \ nodist_libcaf_la_SOURCES = $(MOC_FILES) nodist_salomeres_DATA = \ - CAF_msg_en.qm + CAF_msg_en.qm \ + CAF_msg_fr.qm libcaf_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) -I$(srcdir)/../STD -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx libcaf_la_LDFLAGS = $(QT_MT_LIBS) $(CAS_OCAF) $(CAS_OCAFVIS) diff --git a/src/CAF/resources/CAF_msg_en.ts b/src/CAF/resources/CAF_msg_en.ts index 590baaac3..ed2ac521d 100644 --- a/src/CAF/resources/CAF_msg_en.ts +++ b/src/CAF/resources/CAF_msg_en.ts @@ -1,27 +1,6 @@ - - + + + CAF_Application diff --git a/src/CAF/resources/CAF_msg_fr.ts b/src/CAF/resources/CAF_msg_fr.ts new file mode 100644 index 000000000..a1a8505b9 --- /dev/null +++ b/src/CAF/resources/CAF_msg_fr.ts @@ -0,0 +1,59 @@ + + + + + CAF_Application + + MEN_APP_EDIT + &Editer + + + INF_ALL_FILTER + Tous les fichiers (*.*) + + + INF_ALL_DOCUMENTS_FILTER + Tous les documents lisibles + + + MEN_DESK_EDIT + &Editer + + + MEN_APP_EDIT_UNDO + &Défaire + + + MEN_APP_EDIT_REDO + &Refaire + + + PRP_APP_EDIT_REDO + Refaire la dernière opération + + + PRP_APP_EDIT_UNDO + Défaire la dernière opération + + + TOT_APP_EDIT_REDO + Refaire + + + TOT_APP_EDIT_UNDO + Défaire + + + INF_APP_REDOACTIONS + Refait %1 action(s) + + + INF_APP_UNDOACTIONS + Défait %1 action(s) + + + ABOUT_INFO + Application SUIT Caf + + + diff --git a/src/CAM/CAM_Module.cxx b/src/CAM/CAM_Module.cxx index 39beee2d7..8e39ab66b 100755 --- a/src/CAM/CAM_Module.cxx +++ b/src/CAM/CAM_Module.cxx @@ -835,9 +835,10 @@ int CAM_Module::actionId( const QAction* a ) const */ QAction* CAM_Module::createAction( const int id, const QString& text, const QIcon& icon, const QString& menu, const QString& tip, const int key, - QObject* parent, const bool toggle, QObject* reciever, const char* member ) + QObject* parent, const bool toggle, QObject* reciever, + const char* member, const QString& shortcutAction ) { - QtxAction* a = new QtxAction( text, icon, menu, key, parent, toggle ); + QtxAction* a = new QtxAction( text, icon, menu, key, parent, toggle, shortcutAction ); a->setStatusTip( tip ); if ( reciever && member ) diff --git a/src/CAM/CAM_Module.h b/src/CAM/CAM_Module.h index 73aaf71b9..2a3022d66 100755 --- a/src/CAM/CAM_Module.h +++ b/src/CAM/CAM_Module.h @@ -128,7 +128,7 @@ protected: bool unregisterAction( QAction* ); QAction* createAction( const int, const QString&, const QIcon&, const QString&, const QString&, const int, QObject* = 0, - const bool = false, QObject* = 0, const char* = 0 ); + const bool = false, QObject* = 0, const char* = 0, const QString& = QString() ); private: CAM_Application* myApp; //!< parent application object diff --git a/src/CAM/Makefile.am b/src/CAM/Makefile.am index cd568c63f..98630d977 100755 --- a/src/CAM/Makefile.am +++ b/src/CAM/Makefile.am @@ -51,7 +51,7 @@ MOC_FILES = \ CAM_DataModel_moc.cxx nodist_libCAM_la_SOURCES = $(MOC_FILES) -nodist_salomeres_DATA = CAM_msg_en.qm +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 libCAM_la_LDFLAGS = $(QT_MT_LIBS) diff --git a/src/CAM/resources/CAM_msg_en.ts b/src/CAM/resources/CAM_msg_en.ts index 831ce43f1..6779ef228 100644 --- a/src/CAM/resources/CAM_msg_en.ts +++ b/src/CAM/resources/CAM_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/CAM/resources/CAM_msg_fr.ts b/src/CAM/resources/CAM_msg_fr.ts new file mode 100755 index 000000000..09e8fecd3 --- /dev/null +++ b/src/CAM/resources/CAM_msg_fr.ts @@ -0,0 +1,19 @@ + + + + + @default + + ERROR_TLT + Erreur + + + ERROR_ACTIVATE_MODULE_MSG + Impossible d'activer le module %1 + + + MODULE_ROOT_OBJECT_TOOLTIP + %1 objet-racine du module + + + diff --git a/src/GLViewer/Makefile.am b/src/GLViewer/Makefile.am index 1eec79e89..e134a769f 100644 --- a/src/GLViewer/Makefile.am +++ b/src/GLViewer/Makefile.am @@ -111,7 +111,8 @@ dist_salomeres_DATA = \ nodist_salomeres_DATA = \ GLViewer_images.qm \ - GLViewer_msg_en.qm + GLViewer_msg_en.qm \ + GLViewer_msg_fr.qm libGLViewer_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx libGLViewer_la_LDFLAGS = $(QT_MT_LIBS) $(CAS_KERNEL) $(OGL_LIBS) diff --git a/src/GLViewer/resources/GLViewer_msg_en.ts b/src/GLViewer/resources/GLViewer_msg_en.ts index 667a0a688..d99e2af4c 100644 --- a/src/GLViewer/resources/GLViewer_msg_en.ts +++ b/src/GLViewer/resources/GLViewer_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/GLViewer/resources/GLViewer_msg_fr.ts b/src/GLViewer/resources/GLViewer_msg_fr.ts new file mode 100755 index 000000000..32fea6fa1 --- /dev/null +++ b/src/GLViewer/resources/GLViewer_msg_fr.ts @@ -0,0 +1,117 @@ + + + + + @default + + DSC_FITSELECT + Montrer la zone choisie dans la vue + + + ERROR + Erreur + + + MNU_DUMP_VIEW + Sauvegarder + + + MNU_PAN_VIEW + Déplacement + + + DSC_GLOBALPAN_VIEW + Sélection d'un nouveau centre de vue + + + MNU_ZOOM_VIEW + Zoomer + + + DSC_PAN_VIEW + Déplacer la vue + + + DSC_FITALL + Montrer tous les objets dans la vue + + + MNU_FITALL + Tout afficher + + + MNU_GLOBALPAN_VIEW + Déplacement global + + + INF_APP_DUMP_VIEW + Sauvegarder la vue + + + GL_IMAGE_FILES + Fichiers images (*.bmp *.png) + + + MNU_RESET_VIEW + Restaurer + + + DSC_FITRECT + Montrer la zone dans la vue + + + MNU_FITRECT + Afficher la zone + + + CHANGE_BGCOLOR + Changer la couleur d'arrière-plan... + + + DSC_DUMP_VIEW + Sauvegarder la vue en cours dans un fichier image + + + MNU_FITSELECT + Afficher la sélection + + + DSC_ZOOM_VIEW + Zoomer la vue + + + DSC_RESET_VIEW + Restaurer le point de vue + + + ERR_DOC_CANT_SAVE_FILE + Impossible de sauvegarder le fichier + + + LBL_TOOLBAR_LABEL + Opérations de visualisation + + + + GLViewer_ViewFrame + + DUMP_VIEW_SAVE_FILE_DLG_CAPTION + Sauvegarder la vue dans le fichier + + + DUMP_VIEW_ERROR_DLG_TEXT + Impossible de sauvegarder la vue dans le fichier + + + DUMP_VIEW_ERROR_DLG_CAPTION + Erreur + + + + GLViewer_ViewManager + + GL_VIEW_TITLE + Scène GL:%M - visualiseur:%V + + + diff --git a/src/LightApp/LightApp.qrc b/src/LightApp/LightApp.qrc new file mode 100644 index 000000000..ffcce9a7b --- /dev/null +++ b/src/LightApp/LightApp.qrc @@ -0,0 +1,7 @@ + + + images/en.png + images/fr.png + + + diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 63252a822..7a2fb0fac 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -54,6 +54,7 @@ #include "LightApp_OBSelector.h" #include "LightApp_SelectionMgr.h" #include "LightApp_DataObject.h" +#include "LightApp_WgViewModel.h" #include @@ -70,6 +71,7 @@ #include #include #include +#include #include #include #include @@ -176,6 +178,14 @@ #include #endif +#include + +#ifdef OCC_VERSION_SERVICEPACK +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8 | OCC_VERSION_SERVICEPACK) +#else +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8) +#endif + #define ToolBarMarker 0 #define DockWidgetMarker 1 @@ -232,6 +242,8 @@ LightApp_Application::LightApp_Application() : CAM_Application( false ), myPrefs( 0 ) { + Q_INIT_RESOURCE( LightApp ); + STD_TabDesktop* desk = new STD_TabDesktop(); setDesktop( desk ); @@ -1361,6 +1373,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType v = resMgr->integerValue( "OCCViewer", "iso_number_v", v ); vm->setIsos( u, v ); vm->setInteractionStyle( resMgr->integerValue( "OCCViewer", "navigation_mode", vm->interactionStyle() ) ); + vm->setZoomingStyle( resMgr->integerValue( "OCCViewer", "zooming_mode", vm->zoomingStyle() ) ); viewMgr->setViewModel( vm );// custom view model, which extends SALOME_View interface new LightApp_OCCSelector( (OCCViewer_Viewer*)viewMgr->getViewModel(), mySelMgr ); } @@ -1381,7 +1394,9 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType vm->setBackgroundColor( resMgr->colorValue( "VTKViewer", "background", vm->backgroundColor() ) ); vm->setTrihedronSize( resMgr->doubleValue( "VTKViewer", "trihedron_size", vm->trihedronSize() ), resMgr->booleanValue( "VTKViewer", "relative_size", vm->trihedronRelative() ) ); + 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->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) ), @@ -1410,6 +1425,24 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType return viewMgr; } +SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType, QWidget* 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() ) + vw->resize( (int)( desktop()->width() * 0.6 ), (int)( desktop()->height() * 0.6 ) ); + + if ( !vmType.isEmpty() && !myUserWmTypes.contains( vmType ) ) + myUserWmTypes << vmType; + + return vm; +} + /*! SLOT: Removes view manager from application */ @@ -1603,6 +1636,9 @@ void LightApp_Application::showPreferences( const QString& itemText ) if ( desktop() ) resourceMgr()->setValue( "desktop", "geometry", desktop()->storeGeometry() ); resourceMgr()->save(); + + // Update shortcuts + shortcutMgr()->updateShortcuts(); } delete prefDlg; @@ -1861,6 +1897,19 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemIcon( salomeCat, Qtx::scaleIcon( resourceMgr()->loadPixmap( "LightApp", tr( "APP_DEFAULT_ICO" ), false ), 20 ) ); int genTab = pref->addPreference( tr( "PREF_TAB_GENERAL" ), salomeCat ); + + int langGroup = pref->addPreference( tr( "PREF_GROUP_LANGUAGE" ), genTab ); + pref->setItemProperty( "columns", 2, langGroup ); + int curLang = pref->addPreference( tr( "PREF_CURRENT_LANGUAGE" ), langGroup, + LightApp_Preferences::Selector, "language", "language" ); + QStringList aLangs = SUIT_Session::session()->resourceMgr()->stringValue( "language", "languages", "en" ).split( "," ); + QList aIcons; + foreach ( QString aLang, aLangs ) { + aIcons << QPixmap( QString( ":/images/%1" ).arg( aLang ) ); + } + pref->setItemProperty( "strings", aLangs, curLang ); + pref->setItemProperty( "icons", aIcons, curLang ); + int studyGroup = pref->addPreference( tr( "PREF_GROUP_STUDY" ), genTab ); pref->setItemProperty( "columns", 2, studyGroup ); @@ -1949,6 +1998,17 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "strings", aStyleModeList, occStyleMode ); pref->setItemProperty( "indexes", aModeIndexesList, occStyleMode ); +#if OCC_VERSION_LARGE > 0x06030010 // available only with OCC-6.3-sp11 and higher version + int occZoomingStyleMode = pref->addPreference( tr( "PREF_ZOOMING" ), occGroup, + LightApp_Preferences::Selector, "OCCViewer", "zooming_mode" ); + QStringList anOCCZoomingStyleModeList; + anOCCZoomingStyleModeList.append( tr("PREF_ZOOMING_AT_CENTER") ); + anOCCZoomingStyleModeList.append( tr("PREF_ZOOMING_AT_CURSOR") ); + + pref->setItemProperty( "strings", anOCCZoomingStyleModeList, occZoomingStyleMode ); + pref->setItemProperty( "indexes", aModeIndexesList, occZoomingStyleMode ); +#endif + // VTK Viewer int vtkGen = pref->addPreference( "", vtkGroup, LightApp_Preferences::Frame ); pref->setItemProperty( "columns", 2, vtkGen ); @@ -1979,7 +2039,15 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "strings", aStyleModeList, vtkStyleMode ); pref->setItemProperty( "indexes", aModeIndexesList, vtkStyleMode ); - pref->addPreference( "", vtkGroup, LightApp_Preferences::Space ); + int vtkZoomingStyleMode = pref->addPreference( tr( "PREF_ZOOMING" ), vtkGen, + LightApp_Preferences::Selector, "VTKViewer", "zooming_mode" ); + + QStringList aVTKZoomingStyleModeList; + aVTKZoomingStyleModeList.append( tr("PREF_ZOOMING_AT_CENTER") ); + aVTKZoomingStyleModeList.append( tr("PREF_ZOOMING_AT_CURSOR") ); + + pref->setItemProperty( "strings", aVTKZoomingStyleModeList, vtkZoomingStyleMode ); + pref->setItemProperty( "indexes", aModeIndexesList, vtkZoomingStyleMode ); int vtkSpeed = pref->addPreference( tr( "PREF_INCREMENTAL_SPEED" ), vtkGen, LightApp_Preferences::IntSpin, "VTKViewer", "speed_value" ); @@ -1996,6 +2064,8 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "strings", aSpeedModeList, vtkSpeedMode ); pref->setItemProperty( "indexes", aModeIndexesList, vtkSpeedMode ); + pref->addPreference( tr( "PREF_SHOW_STATIC_TRIHEDRON" ), vtkGen, LightApp_Preferences::Bool, "VTKViewer", "show_static_trihedron" ); + int vtkSM = pref->addPreference( tr( "PREF_FRAME_SPACEMOUSE" ), vtkGroup, LightApp_Preferences::GroupBox ); pref->setItemProperty( "columns", 2, vtkSM ); int spacemousePref1 = pref->addPreference( tr( "PREF_SPACEMOUSE_FUNC_1" ), vtkSM, @@ -2158,6 +2228,12 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->addPreference( tr( "PREF_RESIZE_ON_EXPAND_ITEM" ), objSetGroup, LightApp_Preferences::Bool, "ObjectBrowser", "resize_on_expand_item" ); + // Shortcuts preferences + int shortcutTab = pref->addPreference( tr( "PREF_TAB_SHORTCUTS" ), salomeCat ); + int shortcutGroup = pref->addPreference( tr( "PREF_GROUP_SHORTCUTS" ), shortcutTab ); + pref->addPreference( tr( "" ), shortcutGroup, + LightApp_Preferences::ShortcutTree, "shortcuts" ); + // MRU preferences int mruGroup = pref->addPreference( tr( "PREF_GROUP_MRU" ), genTab, LightApp_Preferences::Auto, "MRU", "show_mru" ); pref->setItemProperty( "columns", 4, mruGroup ); @@ -2227,6 +2303,25 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } #endif +#ifndef DISABLE_OCCVIEWER + if ( sec == QString( "OCCViewer" ) && param == QString( "zooming_mode" ) ) + { + int mode = resMgr->integerValue( "OCCViewer", "zooming_mode", 0 ); + 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 = (OCCViewer_Viewer*)vm; + occVM->setZoomingStyle( mode ); + } + } +#endif + #ifndef DISABLE_VTKVIEWER if ( sec == QString( "VTKViewer" ) && (param == QString( "trihedron_size" ) || param == QString( "relative_size" )) ) { @@ -2317,6 +2412,52 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } #endif +#ifndef DISABLE_VTKVIEWER + if ( sec == QString( "VTKViewer" ) && param == QString( "zooming_mode" ) ) + { + int mode = resMgr->integerValue( "VTKViewer", "zooming_mode", 0 ); + 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->setZoomingStyle( mode ); + } +#endif + } +#endif + +#ifndef DISABLE_VTKVIEWER + if ( sec == QString( "VTKViewer" ) && param == QString( "show_static_trihedron" ) ) + { + bool isVisible = resMgr->booleanValue( "VTKViewer", "show_static_trihedron", 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->setStaticTrihedronVisible( isVisible ); + vtkVM->Repaint(); + } + } +#endif + } +#endif + #ifndef DISABLE_VTKVIEWER if ( sec == QString( "VTKViewer" ) && (param == QString( "spacemouse_func1_btn" ) || param == QString( "spacemouse_func2_btn" ) || @@ -2425,6 +2566,10 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString mru->setVisible( resMgr->booleanValue( "MRU", "show_mru", false ) ); // do not show MRU menu item by default } } + if ( sec == "language" && param == "language" ) + { + SUIT_MessageBox::information( desktop(), tr( "WRN_WARNING" ), tr( "LANG_CHANGED" ) ); + } } /*! @@ -3244,6 +3389,7 @@ bool LightApp_Application::openAction( const int choice, const QString& aName ) QStringList LightApp_Application::viewManagersTypes() const { QStringList aTypesList; + aTypesList += myUserWmTypes; #ifndef DISABLE_GLVIEWER aTypesList< #include +#include class LogWindow; #ifndef DISABLE_PYCONSOLE @@ -124,6 +125,7 @@ public: virtual void addViewManager( SUIT_ViewManager* ); virtual void removeViewManager( SUIT_ViewManager* ); virtual SUIT_ViewManager* createViewManager( const QString& vmType ); + virtual SUIT_ViewManager* createViewManager( const QString& vmType, QWidget* w ); QWidget* getWindow( const int, const int = -1 ); QWidget* dockWindow( const int ) const; @@ -285,6 +287,7 @@ protected: static LightApp_Preferences* _prefs_; static int lastStudyId; + QStringList myUserWmTypes; }; #ifdef WIN32 diff --git a/src/LightApp/LightApp_Module.cxx b/src/LightApp/LightApp_Module.cxx index 118fc9db4..c456acd82 100644 --- a/src/LightApp/LightApp_Module.cxx +++ b/src/LightApp/LightApp_Module.cxx @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -220,6 +221,14 @@ bool LightApp_Module::activateModule( SUIT_Study* study ) if ( mySwitchOp == 0 ) mySwitchOp = new LightApp_SwitchOp( this ); + // Enable Display and Erase actions + if ( action(myDisplay) ) + action(myDisplay)->setEnabled(true); + if ( action(myErase) ) + action(myErase)->setEnabled(true); + + application()->shortcutMgr()->setSectionEnabled( moduleName() ); + /* BUG 0020498 : The Entry column is always shown at module activation The registration of column is moved into LightApp_Application @@ -251,6 +260,14 @@ bool LightApp_Module::deactivateModule( SUIT_Study* study ) anIt.value()->abort(); } + // Disable Display and Erase action + if ( action(myDisplay) ) + action(myDisplay)->setEnabled(false); + if ( action(myErase) ) + action(myErase)->setEnabled(false); + + application()->shortcutMgr()->setSectionEnabled( moduleName(), false ); + /* BUG 0020498 : The Entry column is always shown at module activation QString EntryCol = QObject::tr( "ENTRY_COLUMN" ); LightApp_DataModel* m = dynamic_cast( dataModel() ); @@ -386,9 +403,9 @@ QtxPopupMgr* LightApp_Module::popupMgr() QAction *disp = createAction( -1, tr( "TOP_SHOW" ), p, tr( "MEN_SHOW" ), tr( "STB_SHOW" ), - 0, d, false, this, SLOT( onShowHide() ) ), + 0, d, false, this, SLOT( onShowHide() ), QString("General:Show object(s)") ), *erase = createAction( -1, tr( "TOP_HIDE" ), p, tr( "MEN_HIDE" ), tr( "STB_HIDE" ), - 0, d, false, this, SLOT( onShowHide() ) ), + 0, d, false, this, SLOT( onShowHide() ) , QString("General:Hide object(s)") ), *dispOnly = createAction( -1, tr( "TOP_DISPLAY_ONLY" ), p, tr( "MEN_DISPLAY_ONLY" ), tr( "STB_DISPLAY_ONLY" ), 0, d, false, this, SLOT( onShowHide() ) ), *eraseAll = createAction( -1, tr( "TOP_ERASE_ALL" ), p, tr( "MEN_ERASE_ALL" ), tr( "STB_ERASE_ALL" ), diff --git a/src/LightApp/LightApp_SelectionMgr.cxx b/src/LightApp/LightApp_SelectionMgr.cxx index 397cfaebc..a7b9b17d2 100644 --- a/src/LightApp/LightApp_SelectionMgr.cxx +++ b/src/LightApp/LightApp_SelectionMgr.cxx @@ -176,7 +176,7 @@ void LightApp_SelectionMgr::selectionChanged( SUIT_Selector* theSel ) /*! get map of indexes for the given SALOME_InteractiveObject */ -void LightApp_SelectionMgr::GetIndexes( const Handle(SALOME_InteractiveObject)& IObject, +void LightApp_SelectionMgr::GetIndexes( const Handle(SALOME_InteractiveObject)& IObject, TColStd_IndexedMapOfInteger& theIndex) { theIndex.Clear(); @@ -186,12 +186,10 @@ void LightApp_SelectionMgr::GetIndexes( const Handle(SALOME_InteractiveObject)& for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr ) { - const LightApp_DataSubOwner* subOwner = dynamic_cast( (*itr).operator->() ); - if ( subOwner ) - if ( subOwner->entry() == QString(IObject->getEntry()) ) - theIndex.Add( subOwner->index() ); + LightApp_DataSubOwner* subOwner = dynamic_cast( (*itr).operator->() ); + if ( subOwner && subOwner->entry() == QString(IObject->getEntry()) ) + theIndex.Add( subOwner->index() ); } - } /*! @@ -223,12 +221,12 @@ void LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObj bool modeShift) { SUIT_DataOwnerPtrList remainsOwners; - + SUIT_DataOwnerPtrList aList; selected( aList ); - + QString ioEntry (IObject->getEntry()); - + if ( !modeShift ) { for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr ) { @@ -253,7 +251,7 @@ void LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObj It.Initialize(theIndexes); for(;It.More();It.Next()) remainsOwners.append( new LightApp_DataSubOwner( ioEntry, It.Key() ) ); - + bool append = false; setSelected( remainsOwners, append ); @@ -268,7 +266,7 @@ void LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObj /*! select 'subobjects' with given indexes */ -void LightApp_SelectionMgr::selectObjects( const Handle(SALOME_InteractiveObject)& IObject, +void LightApp_SelectionMgr::selectObjects( const Handle(SALOME_InteractiveObject)& IObject, TColStd_IndexedMapOfInteger theIndex, bool append ) { SUIT_DataOwnerPtrList aList; @@ -294,7 +292,7 @@ void LightApp_SelectionMgr::selectObjects( MapIOOfMapOfInteger theMapIO, bool ap SUIT_DataOwnerPtrList aList; MapIOOfMapOfInteger::Iterator it(theMapIO); - for ( ; it.More(); it.Next() ) + for ( ; it.More(); it.Next() ) { if ( it.Value().IsEmpty() ) aList.append( new LightApp_DataOwner( QString(it.Key()->getEntry()) ) ); @@ -305,7 +303,7 @@ void LightApp_SelectionMgr::selectObjects( MapIOOfMapOfInteger theMapIO, bool ap aList.append( new LightApp_DataSubOwner( QString(it.Key()->getEntry()), it.Value()( i ) ) ); } } - + setSelected( aList, append ); } @@ -326,13 +324,13 @@ void LightApp_SelectionMgr::selectedSubOwners( MapEntryOfMapOfInteger& theMap ) { const LightApp_DataSubOwner* subOwner = dynamic_cast( (*itr).operator->() ); - if ( subOwner ) + if ( subOwner ) { -#ifndef WNT +//#ifndef WNT if ( !theMap.IsBound( TCollection_AsciiString(subOwner->entry().toLatin1().data()) ) ) -#else - if ( !theMap.IsBound( subOwner->entry().toLatin1().data() ) ) -#endif +//#else +// if ( !theMap.IsBound( subOwner->entry().toLatin1().data() ) ) +//#endif { anIndexes.Clear(); //Bug 17269: GetIndexes( subOwner->entry(), anIndexes ); diff --git a/src/LightApp/LightApp_WgViewModel.cxx b/src/LightApp/LightApp_WgViewModel.cxx new file mode 100644 index 000000000..e4a337cb4 --- /dev/null +++ b/src/LightApp/LightApp_WgViewModel.cxx @@ -0,0 +1,55 @@ +// Copyright (C) 2007-2010 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_LightApp_WgViewModel.cxx +// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) + +#include "LightApp_WgViewModel.h" +#include "SUIT_ViewWindow.h" + +LightApp_WgViewModel::LightApp_WgViewModel( const QString& type, QWidget* w ) + : SUIT_ViewModel(), + myType( type ), + myWidget( w ), + myCreated( false ) +{ +} + +LightApp_WgViewModel::~LightApp_WgViewModel() +{ +} + +SUIT_ViewWindow* LightApp_WgViewModel::createView( SUIT_Desktop* d ) +{ + SUIT_ViewWindow* vw = 0; + if ( !myCreated ) { + vw = new SUIT_ViewWindow( d ); + vw->setCentralWidget( myWidget ); + myCreated = true; + vw->setClosable( false );/////////////////// + } + return vw; +} + +QString LightApp_WgViewModel::getType() const +{ + return myType; +} diff --git a/src/LightApp/LightApp_WgViewModel.h b/src/LightApp/LightApp_WgViewModel.h new file mode 100644 index 000000000..a75b628f3 --- /dev/null +++ b/src/LightApp/LightApp_WgViewModel.h @@ -0,0 +1,47 @@ +// Copyright (C) 2007-2010 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_LightApp_WgViewModel.h +// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) + +#ifndef LIGHTAPP_WGVIEWMODEL_H +#define LIGHTAPP_WGVIEWMODEL_H + +#include "SUIT_ViewModel.h" +#include "SUIT_ViewManager.h" + +class LightApp_WgViewModel : public SUIT_ViewModel +{ + Q_OBJECT + +public: + LightApp_WgViewModel( const QString& type, QWidget* w ); + virtual ~LightApp_WgViewModel(); + + virtual SUIT_ViewWindow* createView( SUIT_Desktop* d ); + virtual QString getType() const; + +private: + QString myType; + QWidget* myWidget; + bool myCreated; +}; +#endif // LIGHTAPP_WGVIEWMODEL_H diff --git a/src/LightApp/Makefile.am b/src/LightApp/Makefile.am index 7f682eec1..a28fcc3bd 100755 --- a/src/LightApp/Makefile.am +++ b/src/LightApp/Makefile.am @@ -27,6 +27,10 @@ # include $(top_srcdir)/adm_local/unix/make_common_starter.am +EXTRA_DIST += images + +QRC_FILES = qrc_LightApp.cxx + lib_LTLIBRARIES = libLightApp.la salomeinclude_HEADERS = \ @@ -55,7 +59,8 @@ salomeinclude_HEADERS = \ LightApp_SwitchOp.h \ LightApp_Preferences.h \ LightApp_PreferencesDlg.h \ - LightApp_UpdateFlags.h + LightApp_UpdateFlags.h \ + LightApp_WgViewModel.h if ENABLE_PYCONSOLE salomeinclude_HEADERS += LightApp_PyInterp.h @@ -102,7 +107,8 @@ dist_libLightApp_la_SOURCES = \ LightApp_Study.cxx \ LightApp_SwitchOp.cxx \ LightApp_Preferences.cxx \ - LightApp_PreferencesDlg.cxx + LightApp_PreferencesDlg.cxx \ + LightApp_WgViewModel.cxx if ENABLE_PYCONSOLE dist_libLightApp_la_SOURCES += LightApp_PyInterp.cxx @@ -141,7 +147,8 @@ MOC_FILES = \ LightApp_Study_moc.cxx \ LightApp_SwitchOp_moc.cxx \ LightApp_Preferences_moc.cxx \ - LightApp_PreferencesDlg_moc.cxx + LightApp_PreferencesDlg_moc.cxx \ + LightApp_WgViewModel_moc.cxx if ENABLE_VTKVIEWER if ENABLE_SALOMEOBJECT @@ -157,8 +164,7 @@ endif if ENABLE_PLOT2DVIEWER MOC_FILES += LightApp_Plot2dSelector_moc.cxx endif -nodist_libLightApp_la_SOURCES = $(MOC_FILES) - +nodist_libLightApp_la_SOURCES = $(MOC_FILES) $(QRC_FILES) dist_salomeres_DATA = \ resources/icon_about.png \ resources/icon_applogo.png \ @@ -171,7 +177,8 @@ dist_salomeres_DATA = \ nodist_salomeres_DATA = \ LightApp_images.qm \ - LightApp_msg_en.qm + LightApp_msg_en.qm \ + LightApp_msg_fr.qm libLightApp_la_CPPFLAGS = $(PYTHON_INCLUDES) $(QT_INCLUDES) $(CAS_CPPFLAGS) \ $(HDF5_INCLUDES) @KERNEL_CXXFLAGS@ -I$(srcdir)/../SUIT -I$(srcdir)/../STD \ diff --git a/src/LightApp/images/en.png b/src/LightApp/images/en.png new file mode 100644 index 0000000000000000000000000000000000000000..ff701e19f6d2c0658fb23b1d94124cba4ce60851 GIT binary patch literal 599 zcmV-d0;v6oP)U(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 literal 0 HcmV?d00001 diff --git a/src/LightApp/images/fr.png b/src/LightApp/images/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..8332c4ec23c853944c29b02d7b32a88033f48a71 GIT binary patch literal 545 zcmV++0^a?JP)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Z
    +
    @@ -55,8 +56,11 @@
    + + + @@ -122,6 +126,7 @@ +
    @@ -131,8 +136,10 @@ + + @@ -177,4 +184,27 @@
    + +
    + +
    +
    + + +
    +
    + + + + + + + +
    +
    + + + + +
    diff --git a/src/LightApp/resources/LightApp_msg_en.ts b/src/LightApp/resources/LightApp_msg_en.ts index 9e799934b..6ac1fc058 100644 --- a/src/LightApp/resources/LightApp_msg_en.ts +++ b/src/LightApp/resources/LightApp_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default @@ -58,6 +37,11 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS LightApp_Application + + LANG_CHANGED + Application language has been changed. +The changes will be applied on the next application session. + MEN_DESK_THEME Theme @@ -150,6 +134,18 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASPREF_KEYFREE_STYLE Keyboard free style + + PREF_ZOOMING + Zooming: + + + PREF_ZOOMING_AT_CENTER + Relative to the view's center + + + PREF_ZOOMING_AT_CURSOR + Relative to the cursor + PREF_INCREMENTAL_SPEED Speed increment: @@ -170,6 +166,10 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASPREF_FRAME_SPACEMOUSE Spacemouse + + PREF_SHOW_STATIC_TRIHEDRON + Show static trihedron + PREF_SPACEMOUSE_FUNC_1 Decrease speed increment @@ -474,6 +474,14 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASPREF_HOR_AXIS_SCALE Horizontal axis scale: + + PREF_GROUP_LANGUAGE + Language + + + PREF_CURRENT_LANGUAGE + Current language + PREF_GROUP_STUDY Study properties @@ -653,7 +661,15 @@ File does not exist PREFERENCES_NOT_SUPPORTED - Preferences for module "%1" not supported + Preferences for module "%1" not supported + + + PREF_TAB_SHORTCUTS + Shortcuts + + + PREF_GROUP_SHORTCUTS + Shortcuts settings @@ -711,7 +727,7 @@ File does not exist LightApp_ModuleDlg DESCRIPTION - You're activating module + You're activating module <b>%1</b>.<br>Please, select required action by pressing the corresponding button below. diff --git a/src/LightApp/resources/LightApp_msg_fr.ts b/src/LightApp/resources/LightApp_msg_fr.ts new file mode 100755 index 000000000..8606a27c1 --- /dev/null +++ b/src/LightApp/resources/LightApp_msg_fr.ts @@ -0,0 +1,752 @@ + + + + + @default + + EXTERNAL_BROWSER_CANNOT_SHOW_PAGE + Le navigateur externe "%1" ne peut pas trouver la page d'aide "%2". Voulez-vous le modifierdans les préférences ? + + + ABOUT_COPYRIGHT + Copyright (C) 2007-2010 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 + + + ABOUT_CAPTION + A propos de %1 + + + APP_NAME + SALOME + + + ABOUT_LICENSE + GNU LGPL + + + ABOUT_VERSION + Version %1 + + + ENTRY_COLUMN + Entrée + + + + LightApp_Application + + LANG_CHANGED + La langue de l'application a été modifié. +Les modifications seront appliquées à la prochaine session. + + + MEN_DESK_THEME + T&hème + + + TOT_THEME + Thème + + + PRP_THEME + Changer les propriétés du style + + + INF_TOOLBAR_MODULES + Modules + + + PREF_SHOW_LEGEND + Montrer la légende + + + MEN_DESK_RENAME + &Renommer + + + PREF_MULTI_FILE + Sauvegarde multi-fichiers + + + MEN_DESK_PREFERENCES + &Préférences... + + + PREF_TRIHEDRON_SHOW + Afficher le trièdre + + + PREF_TRIHEDRON_SIZE + Taille du trièdre + + + OBJECT_BROWSER + Arbre d'étude + + + PRP_DESK_PREFERENCES + Permettre de changer les préférences + + + PREF_GROUP_DIRECTORIES + Liste des répertoires + + + PREF_GROUP_VTKVIEWER + Visualiseur VTK 3D + + + PREF_STORE_POS + Enregistrer la position des fenêtres + + + PREF_AUTO_SAVE + Intervalle d'enregistrement automatique (min) + + + PREF_AUTO_SAVE_DISABLED + Désactivé + + + PREF_PROJECTION_MODE + Mode de projection: + + + PREF_ORTHOGRAPHIC + Orthogonal + + + PREF_PERSPECTIVE + Perspective + + + PREF_NAVIGATION + Navigation: + + + PREF_STANDARD_STYLE + Style de contrôles type Salomé + + + PREF_KEYFREE_STYLE + Style sans clavier + + + PREF_INCREMENTAL_SPEED + Incrément de vitesse: + + + PREF_INCREMENTAL_SPEED_MODE + Mode de modification: + + + PREF_ARITHMETIC + Progression arithmétique + + + PREF_GEOMETRICAL + Progression géométrique + + + PREF_FRAME_SPACEMOUSE + Spacemouse + + + PREF_SHOW_STATIC_TRIHEDRON + Montrer le trièdre statique + + + PREF_SPACEMOUSE_FUNC_1 + Réduire l'incrément de vitesse + + + PREF_SPACEMOUSE_FUNC_2 + Augmenter l'incrément de vitesse + + + PREF_SPACEMOUSE_FUNC_3 + Changement Dominant/Combiné + + + PREF_SPACEMOUSE_BTN_1 + Bouton 1 + + + PREF_SPACEMOUSE_BTN_2 + Bouton 2 + + + PREF_SPACEMOUSE_BTN_3 + Bouton 3 + + + PREF_SPACEMOUSE_BTN_4 + Bouton 4 + + + PREF_SPACEMOUSE_BTN_5 + Bouton 5 + + + PREF_SPACEMOUSE_BTN_6 + Bouton 6 + + + PREF_SPACEMOUSE_BTN_7 + Bouton 7 + + + PREF_SPACEMOUSE_BTN_8 + Bouton 8 + + + PREF_SPACEMOUSE_BTN_* + Bouton * + + + PREF_SPACEMOUSE_BTN_10 + Bouton 10 + + + PREF_SPACEMOUSE_BTN_11 + Bouton 11 + + + PREF_FRAME_RECORDING + Enregistrement AVI + + + PREF_ALL_DISLPAYED_FRAMES + Enregistrer toutes les images affichées + + + PREF_FPS + FPS + + + PREF_GROUP_TTL + Paramètres + + + PREF_PROGRESSIVE + Progressif + + + PREF_QUALITY + Qualité + + + PREF_RECORDING_MODE + Mode + + + PREF_SKIPPED_FRAMES + Enregistrer à FPS donné + + + PREF_FRAME_GROUP_NAMES + Nom des groupes + + + PREF_GROUP_NAMES_TEXT_COLOR + Couleur du texte + + + PREF_GROUP_NAMES_TRANSPARENCY + Transparence + + + PREF_BOTTOM + Dessous + + + PREF_CURVE_TYPE + Type de courbe: + + + PREF_ISOS_U + Nombre d'isolignes selon U + + + PREF_ISOS_V + Nombre d'isolignes selon V + + + PREF_POINTS + Points + + + PRP_MODULE + Basculer vers le module "%1" + + + PREF_ASCII_FILE + Enregistrement ASCII + + + PREFERENCES_NOT_LOADED + Les préférences du module "<b>%N</b>" seront accessibles quand le module sera chargé + + + PREF_LINEAR + Linéaire + + + DATA_MODELS + Modèles de données + + + PRP_RENAME + Renommer la fenêtre active + + + TOT_RENAME + Renommer + + + LOG_WINDOW + Fenêtre de messages + + + PREF_SPLINE + Spline + + + PREF_OBJ_BROWSER_SEARCH_TOOL + Outil de recherche + + + PREF_AUTO_HIDE_SEARCH_TOOL + Cacher automatiquement + + + PREF_OBJ_BROWSER_SETTINGS + Paramètres de l'arbre d'étude + + + PRP_APP_MODULE + Basculer au point neutre de la plate-forme SALOME + + + PREF_GROUP_PY_CONSOLE + Propriétés de la console Python + + + PREF_GROUP_STYLE + Style Salomé + + + PREF_USE_SALOME_STYLE + Utiliser le style Salomé + + + PREF_MARKER_SIZE + Taille de repère: + + + PREF_TAB_VIEWERS + Visualiseurs + + + PREF_APP + Application + + + PREF_TOP + Dessus + + + MEN_REFRESH + Rafraîchir + + + PREF_AUTO_SIZE_FIRST + Taille automatique pour la première colonne + + + PREF_RESIZE_ON_EXPAND_ITEM + Redimensionner les colonnes quand l'objet est déplié + + + PREF_GROUP_SUPERV + Superviseur des graphes + + + PREF_TAB_OBJBROWSER + Arbre d'étude + + + PREF_TAB_GENERAL + Général + + + NEW_WINDOW_0 + Vue &GL + + + NEW_WINDOW_1 + Vue &Plot2d + + + NEW_WINDOW_2 + Vue &OCC + + + NEW_WINDOW_3 + Vue VT&K + + + NEW_WINDOW_4 + Vue &QxGraph + + + NEW_WINDOW_5 + Vue Qx&Scene + + + OBJ_BROWSER_NAME + Objet + + + PREF_LEGEND_POSITION + Position de la Légende: + + + PREF_RELATIVE_SIZE + Taille Relative + + + PREF_VIEWER_BACKGROUND + Couleur de l'arrière-plan + + + PREF_FONT + Police + + + PREF_LEFT + Gauche + + + PREF_TAB_DIRECTORIES + Emplacements + + + ACTIVATING_MODULE + Activation du module "%1" en cours + + + PREF_VERT_AXIS_SCALE + Echelle de l'axe vertical : + + + PREF_HOR_AXIS_SCALE + Echelle de l'axe horizontal : + + + PREF_GROUP_LANGUAGE + Langue + + + PREF_CURRENT_LANGUAGE + Langue actuel + + + PREF_GROUP_STUDY + Propiétés de l'étude + + + PREF_CATEGORY_SALOME + SALOME + + + PREF_GROUP_OCCVIEWER + Visualiseur OCC 3D + + + PREF_LOGARITHMIC + Logarithmique + + + MEN_DESK_MODULE_HELP + Module &Aide + + + PREF_SUPERV_TITLE_COLOR + Couleur de titre + + + PREF_PARAM + Paramètres + + + PREF_RIGHT + Droite + + + PREF_LINES + Lignes + + + INF_CANCELLED + L'activation du module est annulée + + + PREF_GROUP_EXT_BROWSER + Navigateur externe + + + PREF_SUPERV_CTRL_COLOR + Couleur de contrôle + + + PREF_GROUP_DEF_COLUMNS + Colonnnes par défaut + + + PREF_GROUP_PLOT2DVIEWER + Visualiseur Plot2d + + + MEN_DESK_MRU + &Récemment utilisés + + + TOT_DESK_PREFERENCES + Préférences + + + DEFINE_EXTERNAL_BROWSER + Le navigateur externe n'est pas trouvé. Voulez-vous le définir dans les préférences? + + + PREF_AUTO_SIZE + Taille automatique pour les autres colonnes + + + TOT_DESK_MRU + Récemment utilisés + + + ACTIVATE_MODULE_OP_NEW + &Nouveau + + + ACTIVATE_MODULE_OP_OPEN + &Ouvrir... + + + PYTHON_CONSOLE + Console Python + + + PREF_USE_ADVANCED_SELECTION_ALGORITHM + Utiliser l'algorithme de sélection avancée + + + TOT_CLOSE + Fermer + + + MEN_DESK_CLOSE + &Fermer + + + PRP_CLOSE + Fermer la fenêtre active + + + TOT_CLOSE_ALL + Tout fermer + + + MEN_DESK_CLOSE_ALL + &Tout fermer + + + PRP_CLOSE_ALL + Fermer toutes les fenêtres + + + TOT_GROUP_ALL + Tout grouper + + + MEN_DESK_GROUP_ALL + Tout &grouper + + + PRP_GROUP_ALL + Grouper toutes les fenêtres + + + ERR_DOC_NOT_EXISTS + Impossible d'ouvrir %1. +Le fichier n'existe pas + + + PREF_GROUP_MRU + Montrer les études récemment utilisées + + + PREF_MRU_VISIBLE_COUNT + Nombre d'études + + + PREF_MRU_INSERT_MODE + Mode d'insertion + + + PREF_MRU_MOVE_FIRST + Placer au début + + + PREF_MRU_MOVE_LAST + Placer à la fin + + + PREF_MRU_ADD_FIRST + Ajouter au début + + + PREF_MRU_ADD_LAST + Ajouter à la fin + + + PREF_MRU_LINK_TYPE + Type de lien + + + PREF_MRU_LINK_AUTO + Auto + + + PREF_MRU_LINK_SHORT + Court + + + PREF_MRU_LINK_FULL + Complet + + + PREFERENCES_NOT_SUPPORTED + Les préférences du module "%1" ne sont pas supportées + + + PREF_TAB_SHORTCUTS + Raccourcis clavier + + + PREF_GROUP_SHORTCUTS + Réglage des raccourcis clavier + + + + LightApp_Module + + MEN_HIDE + Cacher + + + TOP_DISPLAY_ONLY + Afficher uniquement + + + STB_DISPLAY_ONLY + Afficher uniquement + + + MEN_DISPLAY_ONLY + Afficher uniquement + + + TOP_HIDE + Cacher + + + MEN_ERASE_ALL + Tout cacher + + + STB_HIDE + Cacher + + + STB_SHOW + Afficher + + + TOP_SHOW + Afficher + + + MEN_SHOW + Afficher + + + STB_ERASE_ALL + Tout cacher + + + TOP_ERASE_ALL + Tout cacher + + + + LightApp_ModuleDlg + + DESCRIPTION + Vous activez le module + <b>%1</b>.<br>Choisissez l'action nécessaire avec le bouton correspondant ci-dessous + + + CANCEL + &Annuler + + + CAPTION + Activer le module + + + + LightApp_NameDlg + + TLT_RENAME + Renommer + + + NAME_LBL + Nom: + + + + LightApp_PreferencesDlg + + IMPORT_PREFERENCES + Importer les préférences + + + CAPTION + Préférences + + + WARNING + Avertissement + + + IMPORT_BTN_TEXT + Importer + + + DEFAULT_QUESTION + Voulez-vous restaurer les préférences par défaut ? + + + DEFAULT_BTN_TEXT + Défauts + + + diff --git a/src/LogWindow/Makefile.am b/src/LogWindow/Makefile.am index 492ebb8ff..166a2ac56 100755 --- a/src/LogWindow/Makefile.am +++ b/src/LogWindow/Makefile.am @@ -37,7 +37,8 @@ MOC_FILES = LogWindow_moc.cxx nodist_libLogWindow_la_SOURCES = $(MOC_FILES) nodist_salomeres_DATA = \ - LogWindow_msg_en.qm + LogWindow_msg_en.qm \ + LogWindow_msg_fr.qm libLogWindow_la_CPPFLAGS = $(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx libLogWindow_la_LDFLAGS = $(QT_MT_LIBS) diff --git a/src/LogWindow/resources/LogWindow_msg_en.ts b/src/LogWindow/resources/LogWindow_msg_en.ts index 91681176b..a7421d837 100644 --- a/src/LogWindow/resources/LogWindow_msg_en.ts +++ b/src/LogWindow/resources/LogWindow_msg_en.ts @@ -1,27 +1,6 @@ - - + + LogWindow diff --git a/src/LogWindow/resources/LogWindow_msg_fr.ts b/src/LogWindow/resources/LogWindow_msg_fr.ts new file mode 100755 index 000000000..1e6a59100 --- /dev/null +++ b/src/LogWindow/resources/LogWindow_msg_fr.ts @@ -0,0 +1,42 @@ + + + + + LogWindow + + + EDIT_COPY_CMD + &Copier + + + + EDIT_CLEAR_CMD + &Effacer + + + + EDIT_SELECTALL_CMD + &Tout sélectionner + + + + EDIT_SAVETOFILE_CMD + &Sauvegarder le journal dans un fichier... + + + + ERR_ERROR + Erreur + + + + ERR_CANT_SAVE_FILE + Impossible de sauvegarder le fichier + + + + BUT_OK + &OK + + + diff --git a/src/Makefile.am b/src/Makefile.am index 8b684ec2e..7d4de20d2 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -49,6 +49,7 @@ if ENABLE_VTKVIEWER SUBDIRS_VTKVIEWER = VTKViewer if ENABLE_SALOMEOBJECT SUBDIRS_VTKVIEWER += SVTK + SUBDIRS_VIEWERTOOLS = ViewerTools endif endif @@ -57,6 +58,7 @@ endif ## if ENABLE_OCCVIEWER SUBDIRS_OCCVIEWER = OCCViewer + SUBDIRS_VIEWERTOOLS = ViewerTools if ENABLE_SALOMEOBJECT SUBDIRS_OCCVIEWER += SOCC endif @@ -114,10 +116,10 @@ if ENABLE_PYCONSOLE SUBDIRS_PY_LIGHT = SALOME_SWIG SALOME_PY SALOME_PYQT endif -SUBDIRS = $(SUBDIRS_COMMON) $(SUBDIRS_OBJECT) $(SUBDIRS_GLVIEWER) $(SUBDIRS_VTKVIEWER) $(SUBDIRS_OCCVIEWER) \ - $(SUBDIRS_PLOT2DVIEWER) $(SUBDIRS_SUPERVGRAPHVIEWER) $(SUBDIRS_QXGRAPHVIEWER) $(SUBDIRS_PYCONSOLE) \ - $(SUBDIRS_LIGHT) $(SUBDIRS_CORBA) $(SUBDIRS_PY_LIGHT) +SUBDIRS = $(SUBDIRS_COMMON) $(SUBDIRS_OBJECT) $(SUBDIRS_VIEWERTOOLS) $(SUBDIRS_GLVIEWER) $(SUBDIRS_VTKVIEWER) \ + $(SUBDIRS_OCCVIEWER) $(SUBDIRS_PLOT2DVIEWER) $(SUBDIRS_SUPERVGRAPHVIEWER) $(SUBDIRS_QXGRAPHVIEWER) \ + $(SUBDIRS_PYCONSOLE) $(SUBDIRS_LIGHT) $(SUBDIRS_CORBA) $(SUBDIRS_PY_LIGHT) DIST_SUBDIRS = CASCatch Qtx Style DDS QDS ObjBrowser SUIT SUITApp STD CAF CAM LogWindow Prs Event OpenGLUtils \ - OBJECT GLViewer VTKViewer SVTK OCCViewer SOCC Plot2d SPlot2d SUPERVGraph QxGraph QxScene \ + OBJECT ViewerTools GLViewer VTKViewer SVTK OCCViewer SOCC Plot2d SPlot2d SUPERVGraph QxGraph QxScene \ PyInterp PyConsole LightApp ResExporter TOOLSGUI Session SalomeApp SALOME_SWIG SALOME_PY SALOME_PYQT diff --git a/src/OCCViewer/Makefile.am b/src/OCCViewer/Makefile.am index 1a5e49497..73f3e5fa8 100755 --- a/src/OCCViewer/Makefile.am +++ b/src/OCCViewer/Makefile.am @@ -44,7 +44,9 @@ salomeinclude_HEADERS = \ OCCViewer_AxialScaleDlg.h \ OCCViewer_SetRotationPointDlg.h \ OCCViewer_Trihedron.h \ - OCCViewer_ToolTip.h \ + OCCViewer_FontWidget.h \ + OCCViewer_CubeAxesDlg.h \ + OCCViewer_ToolTip.h \ OCCViewer_ViewFrame.h dist_libOCCViewer_la_SOURCES = \ @@ -61,7 +63,9 @@ dist_libOCCViewer_la_SOURCES = \ OCCViewer_ClippingDlg.cxx \ OCCViewer_AxialScaleDlg.cxx \ OCCViewer_Trihedron.cxx \ - OCCViewer_ToolTip.cxx \ + OCCViewer_FontWidget.cxx \ + OCCViewer_CubeAxesDlg.cxx \ + OCCViewer_ToolTip.cxx \ OCCViewer_ViewFrame.cxx MOC_FILES = \ @@ -76,7 +80,9 @@ MOC_FILES = \ OCCViewer_SetRotationPointDlg_moc.cxx \ OCCViewer_ClippingDlg_moc.cxx \ OCCViewer_AxialScaleDlg_moc.cxx \ - OCCViewer_ToolTip_moc.cxx \ + OCCViewer_FontWidget_moc.cxx \ + OCCViewer_CubeAxesDlg_moc.cxx \ + OCCViewer_ToolTip_moc.cxx \ OCCViewer_ViewFrame_moc.cxx nodist_libOCCViewer_la_SOURCES = $(MOC_FILES) @@ -89,6 +95,7 @@ dist_salomeres_DATA = \ resources/occ_view_clipping.png \ resources/occ_view_clipping_pressed.png \ resources/occ_view_scaling.png \ + resources/occ_view_graduated_axes.png \ resources/occ_view_ambient.png \ resources/occ_view_fitall.png \ resources/occ_view_fitarea.png \ @@ -104,16 +111,21 @@ dist_salomeres_DATA = \ resources/occ_view_top.png \ resources/occ_view_triedre.png \ resources/occ_view_zoom.png \ - resources/occ_view_rotation_point.png \ - resources/occ_view_maximized.png \ + resources/occ_view_rotation_point.png \ + resources/occ_view_style_switch.png \ + resources/occ_view_zooming_style_switch.png \ + resources/occ_view_maximized.png \ resources/occ_view_minimized.png nodist_salomeres_DATA = \ OCCViewer_images.qm \ - OCCViewer_msg_en.qm + OCCViewer_msg_en.qm \ + OCCViewer_msg_fr.qm libOCCViewer_la_CPPFLAGS = $(QT_INCLUDES) $(OGL_INCLUDES) $(CAS_CPPFLAGS) \ - -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx -I$(srcdir)/../OpenGLUtils + -I$(srcdir)/../SUIT -I$(srcdir)/../ViewerTools -I$(srcdir)/../Qtx \ + -I$(srcdir)/../OpenGLUtils libOCCViewer_la_LDFLAGS = $(OGL_LIBS) $(QT_MT_LIBS) $(CAS_KERNEL) $(CAS_VIEWER) -libOCCViewer_la_LIBADD = ../Qtx/libqtx.la ../SUIT/libsuit.la ../OpenGLUtils/libOpenGLUtils.la +libOCCViewer_la_LIBADD = ../Qtx/libqtx.la ../SUIT/libsuit.la \ + ../ViewerTools/libViewerTools.la ../OpenGLUtils/libOpenGLUtils.la diff --git a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx b/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx index 574e7de73..95a4a96da 100755 --- a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx +++ b/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx @@ -181,25 +181,38 @@ viewAspect OCCViewer_CreateRestoreViewDlg::currentItem() const */ void OCCViewer_CreateRestoreViewDlg::deleteSelectedItems() { - if( myListBox->count() ) + QList selectedItems = myListBox->selectedItems(); + if( myListBox->count() && selectedItems.count()) { int curIndex = -1; - for( int i = 0; i < (int)myListBox->count(); i++ ) - if( myListBox->item( i )->isSelected() && ( myListBox->item( i )->flags() & Qt::ItemIsEditable ) ) + // Iterate by all selected items + for(int i = 0; i < selectedItems.count(); i++) + { + QListWidgetItem* item = selectedItems.at(i); + // get position of the selected item in the list + int position = myListBox->row(item); + + //Calculate current index in case if "item" is last selected item. + if(i == selectedItems.count() - 1) { - QListWidgetItem* anItemToDelete = myListBox->takeItem( i ); - delete anItemToDelete; - for( int j = i; j < (int)myParametersMap.count(); j++ ) - if( j != myParametersMap.count() - 1 ) - myParametersMap[ j ] = myParametersMap[ j + 1 ]; - else - myParametersMap.removeAt( j ); - if( i != myListBox->count() ) - curIndex = i; - else - curIndex = i - 1; - i--; + if(position != myListBox->count() - 1) + curIndex = position; + else + curIndex = position - 1; } + + //Delete item + delete item; + + //Shift parameters in the map + for( int j = position; j < (int)myParametersMap.count(); j++ ) + { + if( j != myParametersMap.count() - 1 ) + myParametersMap[ j ] = myParametersMap[ j + 1 ]; + else + myParametersMap.removeAt( j ); + } + } if( curIndex >= 0 ) { myListBox->setCurrentItem( myListBox->item( curIndex ) ); @@ -208,8 +221,7 @@ void OCCViewer_CreateRestoreViewDlg::deleteSelectedItems() } if( !myListBox->count() ) { - myListBox->clear(); - myListBox->insertItem( 0, "No Items" ); + clearList(); } } @@ -220,8 +232,10 @@ void OCCViewer_CreateRestoreViewDlg::clearList() { myListBox->clear(); myListBox->insertItem( 0, "No Items" ); - myParametersMap.clear(); + + //Clear view + myCurViewPort->reset(); } /*! diff --git a/src/OCCViewer/OCCViewer_CubeAxesDlg.cxx b/src/OCCViewer/OCCViewer_CubeAxesDlg.cxx new file mode 100644 index 000000000..9ecc2a6af --- /dev/null +++ b/src/OCCViewer/OCCViewer_CubeAxesDlg.cxx @@ -0,0 +1,327 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "OCCViewer_CubeAxesDlg.h" + +#include "OCCViewer_FontWidget.h" +#include "OCCViewer_ViewPort3d.h" +#include "OCCViewer_ViewWindow.h" + +#include "QtxAction.h" +#include "QtxIntSpinBox.h" + +#include +#include +#include + +#include + +#ifdef OCC_VERSION_SERVICEPACK +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8 | OCC_VERSION_SERVICEPACK) +#else +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8) +#endif + +/*! + \class OCCViewer_CubeAxesDlg::AxisWidget + \brief Axis tab widget of the "Graduated axis" dialog box + \internal +*/ + +/*! + Constructor +*/ +OCCViewer_AxisWidget::OCCViewer_AxisWidget (QWidget* theParent) +: ViewerTools_AxisWidgetBase(theParent) +{ +} + +/*! + Destructor +*/ +OCCViewer_AxisWidget::~OCCViewer_AxisWidget() +{ +} + +/*! + Create font widget +*/ +ViewerTools_FontWidgetBase* OCCViewer_AxisWidget::createFontWidget( QWidget* theParent ) +{ + OCCViewer_FontWidget* aFontWidget = new OCCViewer_FontWidget( theParent ); + aFontWidget->Initialize(); + return aFontWidget; +} + +/*! + Set axis data +*/ +void OCCViewer_AxisWidget::SetData( const AxisData& theAxisData ) +{ + myNameGrp->setChecked( theAxisData.DrawName ); + myAxisName->setText( theAxisData.Name ); + myNameFont->SetData( theAxisData.NameColor, 0, false, false, false ); + + myLabelsGrp->setChecked( theAxisData.DrawValues ); + myLabelNumber->setValue( theAxisData.NbValues ); + myLabelOffset->setValue( theAxisData.Offset ); + myLabelsFont->SetData( theAxisData.Color, 0, false, false, false ); + + myTicksGrp->setChecked( theAxisData.DrawTickmarks ); + myTickLength->setValue( theAxisData.TickmarkLength ); +} + +/*! + Get axis data +*/ +void OCCViewer_AxisWidget::GetData( AxisData& theAxisData ) +{ + theAxisData.DrawName = myNameGrp->isChecked(); + theAxisData.Name = myAxisName->text(); + + int aNameFamily; + bool aNameBold, aNameItalic, aNameShadow; + myNameFont->GetData( theAxisData.NameColor, aNameFamily, aNameBold, aNameItalic, aNameShadow ); + + theAxisData.DrawValues = myLabelsGrp->isChecked(); + theAxisData.NbValues = myLabelNumber->value(); + theAxisData.Offset = myLabelOffset->value(); + + int aLabelFamily; + bool aLabelBold, aLabelItalic, aLabelShadow; + myLabelsFont->GetData( theAxisData.Color, aLabelFamily, aLabelBold, aLabelItalic, aLabelShadow ); + + theAxisData.DrawTickmarks = myTicksGrp->isChecked(); + theAxisData.TickmarkLength = myTickLength->value(); +} + +/* + Class : OCCViewer_CubeAxesDlg + Description : Dialog for specifying cube axes properties +*/ + +/*! + Constructor +*/ +OCCViewer_CubeAxesDlg::OCCViewer_CubeAxesDlg(QtxAction* theAction, + OCCViewer_ViewWindow* theParent, + const char* theName): + ViewerTools_CubeAxesDlgBase(theAction, + theParent, + theName), + myMainWindow(theParent) +{ +} + +/*! + Destructor +*/ +OCCViewer_CubeAxesDlg::~OCCViewer_CubeAxesDlg() +{ +} + +/*! + Create axis widget +*/ +ViewerTools_AxisWidgetBase* OCCViewer_CubeAxesDlg::createAxisWidget( QWidget* theParent ) +{ + OCCViewer_AxisWidget* anAxisWidget = new OCCViewer_AxisWidget( theParent ); + anAxisWidget->initialize(); + return anAxisWidget; +} + +/*! + Update dialog fields, connect signals and slots, show dialog +*/ +void OCCViewer_CubeAxesDlg::initialize() +{ + ViewerTools_CubeAxesDlgBase::initialize(); + + for( int i = 0; i < 3; i++ ) + { + if( OCCViewer_AxisWidget* anAxisWidget = dynamic_cast( myAxes[ i ] ) ) + { + OCCViewer_AxisWidget::AxisData anAxisData; + switch( i ) + { + case 0: + anAxisData.Name = "X"; + anAxisData.NameColor = anAxisData.Color = Qt::red; + break; + case 1: + anAxisData.Name = "Y"; + anAxisData.NameColor = anAxisData.Color = Qt::green; + break; + case 2: + anAxisData.Name = "Z"; + anAxisData.NameColor = anAxisData.Color = Qt::blue; + break; + } + anAxisData.DrawName = true; + anAxisData.DrawValues = true; + anAxisData.NbValues = 3; + anAxisData.Offset = 2; + anAxisData.DrawTickmarks = true; + anAxisData.TickmarkLength = 5; + anAxisWidget->SetData( anAxisData ); + } + } +} + +/*! + Update dialog fields, connect signals and slots, show dialog +*/ +void OCCViewer_CubeAxesDlg::Update() +{ + ViewerTools_CubeAxesDlgBase::Update(); +} + +/*! + Verify validity of entry data +*/ +bool OCCViewer_CubeAxesDlg::onApply() +{ + bool isOk = ViewerTools_CubeAxesDlgBase::onApply(); + + try + { + QWidget *aCurrWid = this->focusWidget(); + aCurrWid->clearFocus(); + aCurrWid->setFocus(); + + if( OCCViewer_ViewPort3d* aViewPort = myMainWindow->getViewPort() ) + { + Handle(V3d_View) aView = aViewPort->getView(); + if( !aView.IsNull() ) + ApplyData( aView ); + } + } + catch(...) + { + isOk = false; + } + + return isOk; +} + +/*! + Get graduated trihedron parameters +*/ +void OCCViewer_CubeAxesDlg::GetData( bool& theIsVisible, OCCViewer_AxisWidget::AxisData theAxisData[3] ) +{ + theIsVisible = myIsVisible->isChecked(); + for( int i = 0; i < 3; i++ ) + if( OCCViewer_AxisWidget* anAxisWidget = dynamic_cast( myAxes[ i ] ) ) + anAxisWidget->GetData( theAxisData[i] ); +} + +/*! + Set graduated trihedron parameters +*/ +void OCCViewer_CubeAxesDlg::SetData( bool theIsVisible, OCCViewer_AxisWidget::AxisData theAxisData[3] ) +{ + myIsVisible->setChecked( theIsVisible ); + for( int i = 0; i < 3; i++ ) + if( OCCViewer_AxisWidget* anAxisWidget = dynamic_cast( myAxes[ i ] ) ) + anAxisWidget->SetData( theAxisData[i] ); +} + +/*! + Apply graduated trihedron parameters +*/ +void OCCViewer_CubeAxesDlg::ApplyData( const Handle(V3d_View)& theView ) +{ +#if OCC_VERSION_LARGE > 0x06030009 // available only with OCC-6.3-sp10 and higher version + if( theView.IsNull() ) + return; + + if( myIsVisible->isChecked() ) + { + OCCViewer_AxisWidget::AxisData anAxisData[3]; + for( int i = 0; i < 3; i++ ) + if( OCCViewer_AxisWidget* anAxisWidget = dynamic_cast( myAxes[ i ] ) ) + anAxisWidget->GetData( anAxisData[i] ); + + // A gap used offset of axis names' offset + // (this hard-coded value will be removed when the + // font support will be introduced in OCC-6.4) + int aGap = 20; + + theView->GraduatedTrihedronDisplay( + anAxisData[0].Name.toLatin1().constData(), + anAxisData[1].Name.toLatin1().constData(), + anAxisData[2].Name.toLatin1().constData(), + anAxisData[0].DrawName, + anAxisData[1].DrawName, + anAxisData[2].DrawName, + anAxisData[0].DrawValues, + anAxisData[1].DrawValues, + anAxisData[2].DrawValues, + Standard_True, // draw grid + Standard_False, // draw axes + anAxisData[0].NbValues - 1, + anAxisData[1].NbValues - 1, + anAxisData[2].NbValues - 1, + anAxisData[0].Offset, + anAxisData[1].Offset, + anAxisData[2].Offset, + anAxisData[0].Offset + aGap, // see above + anAxisData[1].Offset + aGap, // see above + anAxisData[2].Offset + aGap, // see above + anAxisData[0].DrawTickmarks, + anAxisData[1].DrawTickmarks, + anAxisData[2].DrawTickmarks, + anAxisData[0].TickmarkLength, + anAxisData[1].TickmarkLength, + anAxisData[2].TickmarkLength, + Quantity_NOC_WHITE, // grid color + Quantity_Color( anAxisData[0].NameColor.redF(), + anAxisData[0].NameColor.greenF(), + anAxisData[0].NameColor.blueF(), + Quantity_TOC_RGB ), + Quantity_Color( anAxisData[1].NameColor.redF(), + anAxisData[1].NameColor.greenF(), + anAxisData[1].NameColor.blueF(), + Quantity_TOC_RGB ), + Quantity_Color( anAxisData[2].NameColor.redF(), + anAxisData[2].NameColor.greenF(), + anAxisData[2].NameColor.blueF(), + Quantity_TOC_RGB ), + Quantity_Color( anAxisData[0].Color.redF(), + anAxisData[0].Color.greenF(), + anAxisData[0].Color.blueF(), + Quantity_TOC_RGB ), + Quantity_Color( anAxisData[1].Color.redF(), + anAxisData[1].Color.greenF(), + anAxisData[1].Color.blueF(), + Quantity_TOC_RGB ), + Quantity_Color( anAxisData[2].Color.redF(), + anAxisData[2].Color.greenF(), + anAxisData[2].Color.blueF(), + Quantity_TOC_RGB ) ); + } + else + theView->GraduatedTrihedronErase(); + + theView->Redraw(); +#endif +} diff --git a/src/OCCViewer/OCCViewer_CubeAxesDlg.h b/src/OCCViewer/OCCViewer_CubeAxesDlg.h new file mode 100644 index 000000000..b570d380c --- /dev/null +++ b/src/OCCViewer/OCCViewer_CubeAxesDlg.h @@ -0,0 +1,99 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef OCCVIEWER_CUBEAXESDLG_H +#define OCCVIEWER_CUBEAXESDLG_H + +#include "OCCViewer.h" + +#include + +#include + +class OCCViewer_ViewWindow; + +/*! + * Class : OCCViewer_AxisWidget + * Description : Axis tab widget of the "Graduated axis" dialog box +*/ +class OCCVIEWER_EXPORT OCCViewer_AxisWidget : public ViewerTools_AxisWidgetBase +{ +public: + struct AxisData + { + bool DrawName; + QString Name; + QColor NameColor; + bool DrawValues; + int NbValues; + int Offset; + QColor Color; + bool DrawTickmarks; + int TickmarkLength; + }; + +public: + OCCViewer_AxisWidget( QWidget* ); + ~OCCViewer_AxisWidget(); + +public: + void SetData( const AxisData& ); + void GetData( AxisData& ); + +protected: + virtual ViewerTools_FontWidgetBase* createFontWidget( QWidget* ); +}; + +/*! + * Class : OCCViewer_CubeAxesDlg + * Description : Dialog for specifynig cube axes properties + */ +class OCCVIEWER_EXPORT OCCViewer_CubeAxesDlg : public ViewerTools_CubeAxesDlgBase +{ + Q_OBJECT + +public: + OCCViewer_CubeAxesDlg(QtxAction* theAction, + OCCViewer_ViewWindow* theParent, + const char* theName); + virtual ~OCCViewer_CubeAxesDlg(); + + virtual void initialize(); + + void GetData( bool& theIsVisible, OCCViewer_AxisWidget::AxisData theAxisData[3] ); + void SetData( bool theIsVisible, OCCViewer_AxisWidget::AxisData theAxisData[3] ); + + void ApplyData( const Handle(V3d_View)& theView ); + + virtual void Update(); + +private slots: + virtual bool onApply(); + +private: + virtual ViewerTools_AxisWidgetBase* createAxisWidget( QWidget* ); + +private: + OCCViewer_ViewWindow* myMainWindow; +}; + +#endif diff --git a/src/OCCViewer/OCCViewer_FontWidget.cxx b/src/OCCViewer/OCCViewer_FontWidget.cxx new file mode 100644 index 000000000..d0a61ae6c --- /dev/null +++ b/src/OCCViewer/OCCViewer_FontWidget.cxx @@ -0,0 +1,99 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "OCCViewer_FontWidget.h" + +#include + +//#include + +/*! + * Class : OCCViewer_FontWidget + * Description : Dialog for specifynig font + */ + +/*! + Constructor +*/ +OCCViewer_FontWidget::OCCViewer_FontWidget( QWidget* theParent ) +: ViewerTools_FontWidgetBase( theParent ) +{ +} + +/*! + Destructor +*/ +OCCViewer_FontWidget::~OCCViewer_FontWidget() +{ +} + +void OCCViewer_FontWidget::InitializeFamilies() +{ + //myFamily->insertItem( myFamily->count(), tr( "ARIAL" ) ); + //myFamily->insertItem( myFamily->count(), tr( "COURIER" ) ); + //myFamily->insertItem( myFamily->count(), tr( "TIMES" ) ); +} + +void OCCViewer_FontWidget::SetData( const QColor& theColor, + const int theFamily, + const bool theBold, + const bool theItalic, + const bool theShadow ) +{ + ViewerTools_FontWidgetBase::SetData( theColor, + theFamily, + theBold, + theItalic, + theShadow ); + + /* + if ( theFamily == VTK_ARIAL ) + myFamily->setCurrentIndex( 0 ); + else if ( theFamily == VTK_COURIER ) + myFamily->setCurrentIndex( 1 ); + else + myFamily->setCurrentIndex( 2 ); + */ +} + +void OCCViewer_FontWidget::GetData( QColor& theColor, + int& theFamily, + bool& theBold, + bool& theItalic, + bool& theShadow ) const +{ + ViewerTools_FontWidgetBase::GetData( theColor, + theFamily, + theBold, + theItalic, + theShadow ); + + /* + int anItem = myFamily->currentIndex(); + if ( anItem == 0 ) + theFamily = VTK_ARIAL; + else if ( anItem == 1 ) + theFamily = VTK_COURIER; + else + theFamily = VTK_TIMES; + */ +} diff --git a/src/OCCViewer/OCCViewer_FontWidget.h b/src/OCCViewer/OCCViewer_FontWidget.h new file mode 100644 index 000000000..506d583dd --- /dev/null +++ b/src/OCCViewer/OCCViewer_FontWidget.h @@ -0,0 +1,50 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef OCCVIEWER_FONTWIDGET_H +#define OCCVIEWER_FONTWIDGET_H + +#include "OCCViewer.h" + +#include + +/*! + * Class : OCCViewer_FontWidget + * Description : Dialog for specifynig font + */ +class OCCVIEWER_EXPORT OCCViewer_FontWidget : public ViewerTools_FontWidgetBase +{ + Q_OBJECT + +public: + OCCViewer_FontWidget( QWidget* ); + virtual ~OCCViewer_FontWidget(); + + virtual void SetData( const QColor&, const int, const bool, const bool, const bool ); + + virtual void GetData( QColor&, int&, bool&, bool&, bool& ) const; + +protected: + virtual void InitializeFamilies(); +}; + +#endif diff --git a/src/OCCViewer/OCCViewer_ViewModel.cxx b/src/OCCViewer/OCCViewer_ViewModel.cxx index ebc094f48..32fdc73a4 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.cxx +++ b/src/OCCViewer/OCCViewer_ViewModel.cxx @@ -120,6 +120,9 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron, bool DisplayStaticTri // set interaction style to standard myInteractionStyle = 0; + // set zooming style to standard + myZoomingStyle = 0; + // selection mySelectionEnabled = true; myMultiSelectionEnabled = true; @@ -159,6 +162,7 @@ void OCCViewer_Viewer::initView( OCCViewer_ViewWindow* view ) view->initLayout(); view->initSketchers(); view->setInteractionStyle( interactionStyle() ); + view->setZoomingStyle( zoomingStyle() ); OCCViewer_ViewPort3d* vp3d = view->getViewPort(); if ( vp3d ) @@ -333,6 +337,34 @@ void OCCViewer_Viewer::setInteractionStyle( const int theStyle ) } } +/*! + \return zooming style +*/ +int OCCViewer_Viewer::zoomingStyle() const +{ + return myZoomingStyle; +} + +/*! + Sets zooming style: 0 - standard, 1 - advanced (at cursor) + \param theStyle - new zooming style +*/ +void OCCViewer_Viewer::setZoomingStyle( const int theStyle ) +{ + myZoomingStyle = theStyle; + //!! To be done for view windows + if ( !myViewManager ) + return; + + QVector wins = myViewManager->getViews(); + for ( int i = 0; i < (int)wins.count(); i++ ) + { + OCCViewer_ViewWindow* win = ::qobject_cast( wins.at( i ) ); + if ( win ) + win->setZoomingStyle( theStyle ); + } +} + /*! Sets selection enabled status \param isEnabled - new status diff --git a/src/OCCViewer/OCCViewer_ViewModel.h b/src/OCCViewer/OCCViewer_ViewModel.h index 94f28153c..b46752e58 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.h +++ b/src/OCCViewer/OCCViewer_ViewModel.h @@ -66,6 +66,47 @@ public: QString name; bool isVisible; double size; + // graduated trihedron + bool gtIsVisible; + bool gtDrawNameX; + bool gtDrawNameY; + bool gtDrawNameZ; + QString gtNameX; + QString gtNameY; + QString gtNameZ; + int gtNameColorRX; + int gtNameColorGX; + int gtNameColorBX; + int gtNameColorRY; + int gtNameColorGY; + int gtNameColorBY; + int gtNameColorRZ; + int gtNameColorGZ; + int gtNameColorBZ; + bool gtDrawValuesX; + bool gtDrawValuesY; + bool gtDrawValuesZ; + int gtNbValuesX; + int gtNbValuesY; + int gtNbValuesZ; + int gtOffsetX; + int gtOffsetY; + int gtOffsetZ; + int gtColorRX; + int gtColorGX; + int gtColorBX; + int gtColorRY; + int gtColorGY; + int gtColorBY; + int gtColorRZ; + int gtColorGZ; + int gtColorBZ; + bool gtDrawTickmarksX; + bool gtDrawTickmarksY; + bool gtDrawTickmarksZ; + int gtTickmarkLengthX; + int gtTickmarkLengthY; + int gtTickmarkLengthZ; }; typedef QList viewAspectList; @@ -135,6 +176,9 @@ public: int interactionStyle() const; void setInteractionStyle( const int ); + int zoomingStyle() const; + void setZoomingStyle( const int ); + void enableSelection(bool isEnabled); bool isSelectionEnabled() const { return mySelectionEnabled; } @@ -183,6 +227,7 @@ private: viewAspectList myViewAspects; int myInteractionStyle; + int myZoomingStyle; bool mySelectionEnabled; bool myMultiSelectionEnabled; diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.cxx b/src/OCCViewer/OCCViewer_ViewPort3d.cxx index f0cbe3d13..34bad67d3 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort3d.cxx @@ -51,6 +51,14 @@ static int sx = 0; static int sy = 0; static Standard_Boolean zRotation = Standard_False; +#include + +#ifdef OCC_VERSION_SERVICEPACK +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8 | OCC_VERSION_SERVICEPACK) +#else +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8) +#endif + /*! Constructor */ @@ -59,7 +67,8 @@ OCCViewer_ViewPort3d::OCCViewer_ViewPort3d( QWidget* parent, const Handle( V3d_V myScale( 1.0 ), myDegenerated( true ), myAnimate( false ), - myBusy( true ) + myBusy( true ), + myIsAdvancedZoomingEnabled( false ) { // VSR: 01/07/2010 commented to avoid SIGSEGV at SALOME exit //selectVisualId(); @@ -309,6 +318,17 @@ void OCCViewer_ViewPort3d::fitRect( const QRect& rect ) activeView()->WindowFit( rect.left(), rect.top(), rect.right(), rect.bottom() ); } +/*! + Inits 'zoom' transformation. [ protected ] +*/ +void OCCViewer_ViewPort3d::startZoomAtPoint( int x, int y ) +{ +#if OCC_VERSION_LARGE > 0x06030010 // available only with OCC-6.3-sp11 and higher version + if ( !activeView().IsNull() && isAdvancedZoomingEnabled() ) + activeView()->StartZoomAtPoint( x, y ); +#endif +} + /*! Called at 'zoom' transformation. [ virtual protected ] */ @@ -318,7 +338,12 @@ void OCCViewer_ViewPort3d::zoom( int x0, int y0, int x, int y ) // as OCCT respects a sign of only dx, // but we want both signes to be taken into account //activeView()->Zoom( x0, y0, x, y ); - activeView()->Zoom( x0 + y0, 0, x + y, 0 ); +#if OCC_VERSION_LARGE > 0x06030010 // available only with OCC-6.3-sp11 and higher version + if ( isAdvancedZoomingEnabled() ) + activeView()->ZoomAtPoint( x0, y0, x, y ); + else +#endif + activeView()->Zoom( x0 + y0, 0, x + y, 0 ); } } diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.h b/src/OCCViewer/OCCViewer_ViewPort3d.h index 469ce17cb..125fcfa93 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.h +++ b/src/OCCViewer/OCCViewer_ViewPort3d.h @@ -69,6 +69,7 @@ public: virtual void pan( int , int ); virtual void setCenter( int , int ); virtual void fitRect( const QRect& ); + virtual void startZoomAtPoint( int, int ); virtual void zoom( int, int, int, int ); virtual void fitAll( bool keepScale = false, bool withZ = true, bool upd = true ); @@ -77,6 +78,9 @@ public: virtual void endRotation(); bool isBusy() {return myBusy;} // check that View Port is fully initialized + void setAdvancedZoomingEnabled( const bool theState ) { myIsAdvancedZoomingEnabled = theState; } + bool isAdvancedZoomingEnabled() const { return myIsAdvancedZoomingEnabled; } + protected: // EVENTS virtual void paintEvent( QPaintEvent* ); @@ -100,6 +104,7 @@ private: bool myAnimate; bool myBusy; double myScale; + bool myIsAdvancedZoomingEnabled; }; #ifdef WIN32 diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx index a82f2b983..06c1c0cef 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ b/src/OCCViewer/OCCViewer_ViewWindow.cxx @@ -32,6 +32,7 @@ #include "OCCViewer_ClippingDlg.h" #include "OCCViewer_SetRotationPointDlg.h" #include "OCCViewer_AxialScaleDlg.h" +#include "OCCViewer_CubeAxesDlg.h" #include #include @@ -73,6 +74,14 @@ #include #include +#include + +#ifdef OCC_VERSION_SERVICEPACK +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8 | OCC_VERSION_SERVICEPACK) +#else +#define OCC_VERSION_LARGE (OCC_VERSION_MAJOR << 24 | OCC_VERSION_MINOR << 16 | OCC_VERSION_MAINTENANCE << 8) +#endif + static QEvent* l_mbPressEvent = 0; #ifdef WIN32 @@ -251,6 +260,7 @@ void OCCViewer_ViewWindow::initLayout() createActions(); createToolBar(); + switch (my2dMode) { case XYPlane: onTopView(); @@ -262,6 +272,11 @@ void OCCViewer_ViewWindow::initLayout() onFrontView(); break; } + + // Graduated axes dialog + QtxAction* anAction = dynamic_cast( toolMgr()->action( GraduatedAxesId ) ); + myCubeAxesDlg = new OCCViewer_CubeAxesDlg( anAction, this, "OCCViewer_CubeAxesDlg" ); + myCubeAxesDlg->initialize(); } /*! @@ -384,20 +399,26 @@ void OCCViewer_ViewWindow::vpMousePressEvent( QMouseEvent* theEvent ) break; case ZOOMVIEW: - if ( theEvent->button() == Qt::LeftButton ) + if ( theEvent->button() == Qt::LeftButton ) { + myViewPort->startZoomAtPoint( myStartX, myStartY ); emit vpTransformationStarted ( ZOOMVIEW ); + } break; case PANVIEW: - if ( aSwitchToZoom ) + if ( aSwitchToZoom ) { + myViewPort->startZoomAtPoint( myStartX, myStartY ); activateZoom(); + } else if ( theEvent->button() == Qt::LeftButton ) emit vpTransformationStarted ( PANVIEW ); break; case ROTATE: - if ( aSwitchToZoom ) + if ( aSwitchToZoom ) { + myViewPort->startZoomAtPoint( myStartX, myStartY ); activateZoom(); + } else if ( theEvent->button() == Qt::LeftButton ) { myViewPort->startRotation(myStartX, myStartY, myCurrPointType, mySelectedPoint); emit vpTransformationStarted ( ROTATE ); @@ -408,7 +429,8 @@ void OCCViewer_ViewWindow::vpMousePressEvent( QMouseEvent* theEvent ) /* Try to activate a transformation */ switch ( getButtonState(theEvent, anInteractionStyle) ) { case ZOOMVIEW: - activateZoom(); + myViewPort->startZoomAtPoint( myStartX, myStartY ); + activateZoom(); break; case PANVIEW: activatePanning(); @@ -1052,46 +1074,54 @@ void OCCViewer_ViewWindow::createActions() // Projections aAction = new QtxAction(tr("MNU_FRONT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_FRONT" ) ), - tr( "MNU_FRONT_VIEW" ), 0, this); + tr( "MNU_FRONT_VIEW" ), 0, this, false, "Viewers:Front view"); aAction->setStatusTip(tr("DSC_FRONT_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onFrontView())); + this->addAction(aAction); toolMgr()->registerAction( aAction, FrontId ); aAction = new QtxAction(tr("MNU_BACK_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_BACK" ) ), - tr( "MNU_BACK_VIEW" ), 0, this); + tr( "MNU_BACK_VIEW" ), 0, this, false, "Viewers:Back view"); aAction->setStatusTip(tr("DSC_BACK_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onBackView())); + this->addAction(aAction); toolMgr()->registerAction( aAction, BackId ); aAction = new QtxAction(tr("MNU_TOP_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_TOP" ) ), - tr( "MNU_TOP_VIEW" ), 0, this); + tr( "MNU_TOP_VIEW" ), 0, this, false, "Viewers:Top view"); aAction->setStatusTip(tr("DSC_TOP_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onTopView())); + this->addAction(aAction); toolMgr()->registerAction( aAction, TopId ); aAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_BOTTOM" ) ), - tr( "MNU_BOTTOM_VIEW" ), 0, this); + tr( "MNU_BOTTOM_VIEW" ), 0, this, false, "Viewers:Bottom view"); aAction->setStatusTip(tr("DSC_BOTTOM_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onBottomView())); + this->addAction(aAction); + this->addAction(aAction); toolMgr()->registerAction( aAction, BottomId ); - + aAction = new QtxAction(tr("MNU_LEFT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_LEFT" ) ), - tr( "MNU_LEFT_VIEW" ), 0, this); + tr( "MNU_LEFT_VIEW" ), 0, this, false, "Viewers:Left view"); aAction->setStatusTip(tr("DSC_LEFT_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onLeftView())); + this->addAction(aAction); toolMgr()->registerAction( aAction, LeftId ); aAction = new QtxAction(tr("MNU_RIGHT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_RIGHT" ) ), - tr( "MNU_RIGHT_VIEW" ), 0, this); + tr( "MNU_RIGHT_VIEW" ), 0, this, false, "Viewers:Right view"); aAction->setStatusTip(tr("DSC_RIGHT_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onRightView())); + this->addAction(aAction); toolMgr()->registerAction( aAction, RightId ); // Reset aAction = new QtxAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_RESET" ) ), - tr( "MNU_RESET_VIEW" ), 0, this); + tr( "MNU_RESET_VIEW" ), 0, this, false, "Viewers:Reset view"); aAction->setStatusTip(tr("DSC_RESET_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onResetView())); + this->addAction(aAction); toolMgr()->registerAction( aAction, ResetId ); // Clone @@ -1136,6 +1166,13 @@ void OCCViewer_ViewWindow::createActions() connect(aAction, SIGNAL(triggered()), this, SLOT(onAxialScale())); toolMgr()->registerAction( aAction, AxialScaleId ); + // Graduated axes + aAction = new QtxAction(tr("MNU_GRADUATED_AXES"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_GRADUATED_AXES" ) ), + tr( "MNU_GRADUATED_AXES" ), 0, this); + aAction->setStatusTip(tr("DSC_GRADUATED_AXES")); + connect(aAction, SIGNAL(triggered()), this, SLOT(onGraduatedAxes())); + toolMgr()->registerAction( aAction, GraduatedAxesId ); + // Active only ambient light or not aAction = new QtxAction(tr("MNU_AMBIENT"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_AMBIENT" ) ), tr( "MNU_AMBIENT" ), 0, this); @@ -1144,14 +1181,22 @@ void OCCViewer_ViewWindow::createActions() toolMgr()->registerAction( aAction, AmbientId ); // Switch between interaction styles - aAction = new QtxAction(tr("MNU_STYLE_SWITCH"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_SVTK_STYLE_SWITCH" ) ), + aAction = new QtxAction(tr("MNU_STYLE_SWITCH"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_STYLE_SWITCH" ) ), tr( "MNU_STYLE_SWITCH" ), 0, this); aAction->setStatusTip(tr("DSC_STYLE_SWITCH")); aAction->setCheckable(true); connect(aAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchInteractionStyle(bool))); toolMgr()->registerAction( aAction, SwitchInteractionStyleId ); - // Maximized view + // Switch between zooming styles + aAction = new QtxAction(tr("MNU_ZOOMING_STYLE_SWITCH"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_ZOOMING_STYLE_SWITCH" ) ), + tr( "MNU_ZOOMING_STYLE_SWITCH" ), 0, this); + aAction->setStatusTip(tr("DSC_ZOOMING_STYLE_SWITCH")); + aAction->setCheckable(true); + connect(aAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchZoomingStyle(bool))); + toolMgr()->registerAction( aAction, SwitchZoomingStyleId ); + + // Maximized view aAction = new QtxAction(tr("MNU_MINIMIZE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_MINIMIZE" ) ), tr( "MNU_MINIMIZE_VIEW" ), 0, this ); aAction->setStatusTip(tr("DSC_MINIMIZE_VIEW")); @@ -1183,6 +1228,9 @@ void OCCViewer_ViewWindow::createToolBar() toolMgr()->append( DumpId, tid ); toolMgr()->append( SwitchInteractionStyleId, tid ); +#if OCC_VERSION_LARGE > 0x06030010 // available only with OCC-6.3-sp11 and higher version + toolMgr()->append( SwitchZoomingStyleId, tid ); +#endif if( myModel->trihedronActivated() && (my2dMode == No2dMode) ) toolMgr()->append( TrihedronShowId, tid ); @@ -1223,6 +1271,9 @@ void OCCViewer_ViewWindow::createToolBar() toolMgr()->append( toolMgr()->separator(), tid ); toolMgr()->append( ClippingId, tid ); toolMgr()->append( AxialScaleId, tid ); +#if OCC_VERSION_LARGE > 0x06030009 // available only with OCC-6.3-sp10 and higher version + toolMgr()->append( GraduatedAxesId, tid ); +#endif toolMgr()->append( AmbientId, tid ); } else { toolMgr()->append( AxialScaleId, tid ); @@ -1429,6 +1480,15 @@ void OCCViewer_ViewWindow::onAxialScale() myScalingDlg->show(); } +/*! + Shows Graduated Axes dialog +*/ +void OCCViewer_ViewWindow::onGraduatedAxes() +{ + myCubeAxesDlg->Update(); + myCubeAxesDlg->show(); +} + void OCCViewer_ViewWindow::onAmbientToogle() { Handle(V3d_Viewer) viewer = myViewPort->getViewer(); @@ -1488,6 +1548,54 @@ void OCCViewer_ViewWindow::performRestoring( const viewAspect& anItem ) 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 ); +#endif + myRestoreFlag = 0; } @@ -1520,6 +1628,19 @@ void OCCViewer_ViewWindow::onSwitchInteractionStyle( bool on ) a->setChecked( on ); } +/*! + \brief Toogles advanced zooming style (relatively to the cursor position) on/off +*/ +void OCCViewer_ViewWindow::onSwitchZoomingStyle( bool on ) +{ + myViewPort->setAdvancedZoomingEnabled( on ); + + // update action state if method is called outside + QtxAction* a = dynamic_cast( toolMgr()->action( SwitchZoomingStyleId ) ); + if ( a->isChecked() != on ) + a->setChecked( on ); +} + /*! \brief Get current interaction style \return interaction style @@ -1538,6 +1659,24 @@ void OCCViewer_ViewWindow::setInteractionStyle( const int theStyle ) onSwitchInteractionStyle( theStyle == (int)SUIT_ViewModel::KEY_FREE ); } +/*! + \brief Get current zooming style + \return zooming style +*/ +int OCCViewer_ViewWindow::zoomingStyle() const +{ + return myViewPort->isAdvancedZoomingEnabled() ? 1 : 0; +} + +/*! + \brief Set current zooming style + \param theStyle zooming style +*/ +void OCCViewer_ViewWindow::setZoomingStyle( const int theStyle ) +{ + onSwitchZoomingStyle( theStyle == 1 ); +} + /*! \brief Dump view window contents to the pixmap. \return pixmap containing all scene rendered in the window @@ -1725,6 +1864,54 @@ viewAspect OCCViewer_ViewWindow::getViewParams() const params.isVisible= isShown; params.size = size; +#if OCC_VERSION_LARGE > 0x06030009 // available only with OCC-6.3-sp10 and higher version + // graduated trihedron + bool anIsVisible = false; + OCCViewer_AxisWidget::AxisData anAxisData[3]; + myCubeAxesDlg->GetData( anIsVisible, anAxisData ); + + params.gtIsVisible = anIsVisible; + params.gtDrawNameX = anAxisData[0].DrawName; + params.gtDrawNameY = anAxisData[1].DrawName; + params.gtDrawNameZ = anAxisData[2].DrawName; + params.gtNameX = anAxisData[0].Name; + params.gtNameY = anAxisData[1].Name; + params.gtNameZ = anAxisData[2].Name; + params.gtNameColorRX = anAxisData[0].NameColor.red(); + params.gtNameColorGX = anAxisData[0].NameColor.green(); + params.gtNameColorBX = anAxisData[0].NameColor.blue(); + params.gtNameColorRY = anAxisData[1].NameColor.red(); + params.gtNameColorGY = anAxisData[1].NameColor.green(); + params.gtNameColorBY = anAxisData[1].NameColor.blue(); + params.gtNameColorRZ = anAxisData[2].NameColor.red(); + params.gtNameColorGZ = anAxisData[2].NameColor.green(); + params.gtNameColorBZ = anAxisData[2].NameColor.blue(); + params.gtDrawValuesX = anAxisData[0].DrawValues; + params.gtDrawValuesY = anAxisData[1].DrawValues; + params.gtDrawValuesZ = anAxisData[2].DrawValues; + params.gtNbValuesX = anAxisData[0].NbValues; + params.gtNbValuesY = anAxisData[1].NbValues; + params.gtNbValuesZ = anAxisData[2].NbValues; + params.gtOffsetX = anAxisData[0].Offset; + params.gtOffsetY = anAxisData[1].Offset; + params.gtOffsetZ = anAxisData[2].Offset; + params.gtColorRX = anAxisData[0].Color.red(); + params.gtColorGX = anAxisData[0].Color.green(); + params.gtColorBX = anAxisData[0].Color.blue(); + params.gtColorRY = anAxisData[1].Color.red(); + params.gtColorGY = anAxisData[1].Color.green(); + params.gtColorBY = anAxisData[1].Color.blue(); + params.gtColorRZ = anAxisData[2].Color.red(); + params.gtColorGZ = anAxisData[2].Color.green(); + params.gtColorBZ = anAxisData[2].Color.blue(); + params.gtDrawTickmarksX = anAxisData[0].DrawTickmarks; + params.gtDrawTickmarksY = anAxisData[1].DrawTickmarks; + params.gtDrawTickmarksZ = anAxisData[2].DrawTickmarks; + params.gtTickmarkLengthX = anAxisData[0].TickmarkLength; + params.gtTickmarkLengthY = anAxisData[1].TickmarkLength; + params.gtTickmarkLengthZ = anAxisData[2].TickmarkLength; +#endif + return params; } @@ -1736,13 +1923,73 @@ viewAspect OCCViewer_ViewWindow::getViewParams() const QString OCCViewer_ViewWindow::getVisualParameters() { viewAspect params = getViewParams(); - QString retStr; - retStr.sprintf( "%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e", params.scale, - params.centerX, params.centerY, params.projX, params.projY, params.projZ, params.twist, - params.atX, params.atY, params.atZ, params.eyeX, params.eyeY, params.eyeZ, - params.scaleX, params.scaleY, params.scaleZ ); - retStr += QString().sprintf("*%u*%.2f", params.isVisible, params.size ); - return retStr; + + QStringList data; + + data << QString( "scale=%1" ) .arg( params.scale, 0, 'e', 12 ); + data << QString( "centerX=%1" ) .arg( params.centerX, 0, 'e', 12 ); + data << QString( "centerY=%1" ) .arg( params.centerY, 0, 'e', 12 ); + data << QString( "projX=%1" ) .arg( params.projX, 0, 'e', 12 ); + data << QString( "projY=%1" ) .arg( params.projY, 0, 'e', 12 ); + data << QString( "projZ=%1" ) .arg( params.projZ, 0, 'e', 12 ); + data << QString( "twist=%1" ) .arg( params.twist, 0, 'e', 12 ); + data << QString( "atX=%1" ) .arg( params.atX, 0, 'e', 12 ); + data << QString( "atY=%1" ) .arg( params.atY, 0, 'e', 12 ); + data << QString( "atZ=%1" ) .arg( params.atZ, 0, 'e', 12 ); + data << QString( "eyeX=%1" ) .arg( params.eyeX, 0, 'e', 12 ); + data << QString( "eyeY=%1" ) .arg( params.eyeY, 0, 'e', 12 ); + data << QString( "eyeZ=%1" ) .arg( params.eyeZ, 0, 'e', 12 ); + data << QString( "scaleX=%1" ) .arg( params.scaleX, 0, 'e', 12 ); + data << QString( "scaleY=%1" ) .arg( params.scaleY, 0, 'e', 12 ); + data << QString( "scaleZ=%1" ) .arg( params.scaleZ, 0, 'e', 12 ); + data << QString( "isVisible=%1" ).arg( params.isVisible ); + data << QString( "size=%1" ) .arg( params.size, 0, 'f', 2 ); + +#if OCC_VERSION_LARGE > 0x06030009 // available only with OCC-6.3-sp10 or newer version + // graduated trihedron + data << QString( "gtIsVisible=%1" ) .arg( params.gtIsVisible ); + data << QString( "gtDrawNameX=%1" ) .arg( params.gtDrawNameX ); + data << QString( "gtDrawNameY=%1" ) .arg( params.gtDrawNameY ); + data << QString( "gtDrawNameZ=%1" ) .arg( params.gtDrawNameZ ); + data << QString( "gtNameX=%1" ) .arg( params.gtNameX ); + data << QString( "gtNameY=%1" ) .arg( params.gtNameY ); + data << QString( "gtNameZ=%1" ) .arg( params.gtNameZ ); + data << QString( "gtNameColorRX=%1" ) .arg( params.gtNameColorRX ); + data << QString( "gtNameColorGX=%1" ) .arg( params.gtNameColorGX ); + data << QString( "gtNameColorBX=%1" ) .arg( params.gtNameColorBX ); + data << QString( "gtNameColorRY=%1" ) .arg( params.gtNameColorRY ); + data << QString( "gtNameColorGY=%1" ) .arg( params.gtNameColorGY ); + data << QString( "gtNameColorBY=%1" ) .arg( params.gtNameColorBY ); + data << QString( "gtNameColorRZ=%1" ) .arg( params.gtNameColorRZ ); + data << QString( "gtNameColorGZ=%1" ) .arg( params.gtNameColorGZ ); + data << QString( "gtNameColorBZ=%1" ) .arg( params.gtNameColorBZ ); + data << QString( "gtDrawValuesX=%1" ) .arg( params.gtDrawValuesX ); + data << QString( "gtDrawValuesY=%1" ) .arg( params.gtDrawValuesY ); + data << QString( "gtDrawValuesZ=%1" ) .arg( params.gtDrawValuesZ ); + data << QString( "gtNbValuesX=%1" ) .arg( params.gtNbValuesX ); + data << QString( "gtNbValuesY=%1" ) .arg( params.gtNbValuesY ); + data << QString( "gtNbValuesZ=%1" ) .arg( params.gtNbValuesZ ); + data << QString( "gtOffsetX=%1" ) .arg( params.gtOffsetX ); + data << QString( "gtOffsetY=%1" ) .arg( params.gtOffsetY ); + data << QString( "gtOffsetZ=%1" ) .arg( params.gtOffsetZ ); + data << QString( "gtColorRX=%1" ) .arg( params.gtColorRX ); + data << QString( "gtColorGX=%1" ) .arg( params.gtColorGX ); + data << QString( "gtColorBX=%1" ) .arg( params.gtColorBX ); + data << QString( "gtColorRY=%1" ) .arg( params.gtColorRY ); + data << QString( "gtColorGY=%1" ) .arg( params.gtColorGY ); + data << QString( "gtColorBY=%1" ) .arg( params.gtColorBY ); + data << QString( "gtColorRZ=%1" ) .arg( params.gtColorRZ ); + data << QString( "gtColorGZ=%1" ) .arg( params.gtColorGZ ); + data << QString( "gtColorBZ=%1" ) .arg( params.gtColorBZ ); + data << QString( "gtDrawTickmarksX=%1" ) .arg( params.gtDrawTickmarksX ); + data << QString( "gtDrawTickmarksY=%1" ) .arg( params.gtDrawTickmarksY ); + data << QString( "gtDrawTickmarksZ=%1" ) .arg( params.gtDrawTickmarksZ ); + data << QString( "gtTickmarkLengthX=%1" ).arg( params.gtTickmarkLengthX ); + data << QString( "gtTickmarkLengthY=%1" ).arg( params.gtTickmarkLengthY ); + data << QString( "gtTickmarkLengthZ=%1" ).arg( params.gtTickmarkLengthZ ); +#endif + + return data.join("*"); } /*! @@ -1751,36 +1998,98 @@ QString OCCViewer_ViewWindow::getVisualParameters() */ void OCCViewer_ViewWindow::setVisualParameters( const QString& parameters ) { - QStringList paramsLst = parameters.split( '*' ); - if ( paramsLst.size() >= 15 ) { - viewAspect params; - params.scale = paramsLst[0].toDouble(); - params.centerX = paramsLst[1].toDouble(); - params.centerY = paramsLst[2].toDouble(); - params.projX = paramsLst[3].toDouble(); - params.projY = paramsLst[4].toDouble(); - params.projZ = paramsLst[5].toDouble(); - params.twist = paramsLst[6].toDouble(); - params.atX = paramsLst[7].toDouble(); - params.atY = paramsLst[8].toDouble(); - params.atZ = paramsLst[9].toDouble(); - params.eyeX = paramsLst[10].toDouble(); - params.eyeY = paramsLst[11].toDouble(); - params.eyeZ = paramsLst[12].toDouble(); - if ( paramsLst.size() == 18 ) { - params.scaleX = paramsLst[13].toDouble(); - params.scaleY = paramsLst[14].toDouble(); - params.scaleZ = paramsLst[15].toDouble(); - params.isVisible = paramsLst[16].toDouble(); - params.size = paramsLst[17].toDouble(); - } - else { - params.scaleX = 1.; - params.scaleY = 1.; - params.scaleZ = 1.; + viewAspect params; + + QStringList data = parameters.split( '*' ); + if ( parameters.contains( '=' ) ) // new format - "scale=1.000e+00*centerX=0.000e+00..." + { + foreach( QString param, data ) { + QString paramName = param.section( '=', 0, 0 ).trimmed(); + QString paramValue = param.section( '=', 1, 1 ).trimmed(); + if ( paramName == "scale" ) params.scale = paramValue.toDouble(); + else if ( paramName == "centerX" ) params.centerX = paramValue.toDouble(); + else if ( paramName == "centerY" ) params.centerY = paramValue.toDouble(); + else if ( paramName == "projX" ) params.projX = paramValue.toDouble(); + else if ( paramName == "projY" ) params.projY = paramValue.toDouble(); + else if ( paramName == "projZ" ) params.projZ = paramValue.toDouble(); + else if ( paramName == "twist" ) params.twist = paramValue.toDouble(); + else if ( paramName == "atX" ) params.atX = paramValue.toDouble(); + else if ( paramName == "atY" ) params.atY = paramValue.toDouble(); + else if ( paramName == "atZ" ) params.atZ = paramValue.toDouble(); + else if ( paramName == "eyeX" ) params.eyeX = paramValue.toDouble(); + else if ( paramName == "eyeY" ) params.eyeY = paramValue.toDouble(); + else if ( paramName == "eyeZ" ) params.eyeZ = paramValue.toDouble(); + else if ( paramName == "scaleX" ) params.scaleX = paramValue.toDouble(); + else if ( paramName == "scaleY" ) params.scaleY = paramValue.toDouble(); + else if ( paramName == "scaleZ" ) params.scaleZ = paramValue.toDouble(); + else if ( paramName == "isVisible" ) params.isVisible = paramValue.toInt(); + else if ( paramName == "size" ) params.size = paramValue.toDouble(); + // graduated trihedron + else if ( paramName == "gtIsVisible" ) params.gtIsVisible = paramValue.toInt(); + else if ( paramName == "gtDrawNameX" ) params.gtDrawNameX = paramValue.toInt(); + else if ( paramName == "gtDrawNameY" ) params.gtDrawNameY = paramValue.toInt(); + else if ( paramName == "gtDrawNameZ" ) params.gtDrawNameZ = paramValue.toInt(); + else if ( paramName == "gtNameX" ) params.gtNameX = paramValue; + else if ( paramName == "gtNameY" ) params.gtNameY = paramValue; + else if ( paramName == "gtNameZ" ) params.gtNameZ = paramValue; + else if ( paramName == "gtNameColorRX" ) params.gtNameColorRX = paramValue.toInt(); + else if ( paramName == "gtNameColorGX" ) params.gtNameColorGX = paramValue.toInt(); + else if ( paramName == "gtNameColorBX" ) params.gtNameColorBX = paramValue.toInt(); + else if ( paramName == "gtNameColorRY" ) params.gtNameColorRY = paramValue.toInt(); + else if ( paramName == "gtNameColorGY" ) params.gtNameColorGY = paramValue.toInt(); + else if ( paramName == "gtNameColorBY" ) params.gtNameColorBY = paramValue.toInt(); + else if ( paramName == "gtNameColorRZ" ) params.gtNameColorRZ = paramValue.toInt(); + else if ( paramName == "gtNameColorGZ" ) params.gtNameColorGZ = paramValue.toInt(); + else if ( paramName == "gtNameColorBZ" ) params.gtNameColorBZ = paramValue.toInt(); + else if ( paramName == "gtDrawValuesX" ) params.gtDrawValuesX = paramValue.toInt(); + else if ( paramName == "gtDrawValuesY" ) params.gtDrawValuesY = paramValue.toInt(); + else if ( paramName == "gtDrawValuesZ" ) params.gtDrawValuesZ = paramValue.toInt(); + else if ( paramName == "gtNbValuesX" ) params.gtNbValuesX = paramValue.toInt(); + else if ( paramName == "gtNbValuesY" ) params.gtNbValuesY = paramValue.toInt(); + else if ( paramName == "gtNbValuesZ" ) params.gtNbValuesZ = paramValue.toInt(); + else if ( paramName == "gtOffsetX" ) params.gtOffsetX = paramValue.toInt(); + else if ( paramName == "gtOffsetY" ) params.gtOffsetY = paramValue.toInt(); + else if ( paramName == "gtOffsetZ" ) params.gtOffsetZ = paramValue.toInt(); + else if ( paramName == "gtColorRX" ) params.gtColorRX = paramValue.toInt(); + else if ( paramName == "gtColorGX" ) params.gtColorGX = paramValue.toInt(); + else if ( paramName == "gtColorBX" ) params.gtColorBX = paramValue.toInt(); + else if ( paramName == "gtColorRY" ) params.gtColorRY = paramValue.toInt(); + else if ( paramName == "gtColorGY" ) params.gtColorGY = paramValue.toInt(); + else if ( paramName == "gtColorBY" ) params.gtColorBY = paramValue.toInt(); + else if ( paramName == "gtColorRZ" ) params.gtColorRZ = paramValue.toInt(); + else if ( paramName == "gtColorGZ" ) params.gtColorGZ = paramValue.toInt(); + else if ( paramName == "gtColorBZ" ) params.gtColorBZ = paramValue.toInt(); + else if ( paramName == "gtDrawTickmarksX" ) params.gtDrawTickmarksX = paramValue.toInt(); + else if ( paramName == "gtDrawTickmarksY" ) params.gtDrawTickmarksY = paramValue.toInt(); + else if ( paramName == "gtDrawTickmarksZ" ) params.gtDrawTickmarksZ = paramValue.toInt(); + else if ( paramName == "gtTickmarkLengthX" ) params.gtTickmarkLengthX = paramValue.toInt(); + else if ( paramName == "gtTickmarkLengthY" ) params.gtTickmarkLengthY = paramValue.toInt(); + else if ( paramName == "gtTickmarkLengthZ" ) params.gtTickmarkLengthZ = paramValue.toInt(); } - performRestoring( params ); } + else // old format - "1.000e+00*0.000e+00..." + { + int idx = 0; + params.scale = data.count() > idx ? data[idx++].toDouble() : 1.0; + params.centerX = data.count() > idx ? data[idx++].toDouble() : 0.0; + params.centerY = data.count() > idx ? data[idx++].toDouble() : 0.0; + params.projX = data.count() > idx ? data[idx++].toDouble() : sqrt(1./3); + params.projY = data.count() > idx ? data[idx++].toDouble() : -sqrt(1./3); + params.projZ = data.count() > idx ? data[idx++].toDouble() : sqrt(1./3); + params.twist = data.count() > idx ? data[idx++].toDouble() : 0.0; + params.atX = data.count() > idx ? data[idx++].toDouble() : 0.0; + params.atY = data.count() > idx ? data[idx++].toDouble() : 0.0; + params.atZ = data.count() > idx ? data[idx++].toDouble() : 0.0; + params.eyeX = data.count() > idx ? data[idx++].toDouble() : sqrt(250000./3); + params.eyeY = data.count() > idx ? data[idx++].toDouble() : -sqrt(250000./3); + params.eyeZ = data.count() > idx ? data[idx++].toDouble() : sqrt(250000./3); + params.scaleX = data.count() > idx ? data[idx++].toDouble() : 1.0; + params.scaleY = data.count() > idx ? data[idx++].toDouble() : 1.0; + params.scaleZ = data.count() > idx ? data[idx++].toDouble() : 1.0; + params.isVisible = data.count() > idx ? data[idx++].toInt() : 1; + params.size = data.count() > idx ? data[idx++].toDouble() : 100.0; + } + performRestoring( params ); } /*! diff --git a/src/OCCViewer/OCCViewer_ViewWindow.h b/src/OCCViewer/OCCViewer_ViewWindow.h index 498748a7c..3837db444 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.h +++ b/src/OCCViewer/OCCViewer_ViewWindow.h @@ -36,6 +36,7 @@ class OCCViewer_ClippingDlg; class OCCViewer_AxialScaleDlg; class OCCViewer_SetRotationPointDlg; class OCCViewer_Viewer; +class OCCViewer_CubeAxesDlg; struct viewAspect; class QtxAction; @@ -51,7 +52,8 @@ public: enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, ChangeRotationPointId, RotationId, FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, CloneId, ClippingId, MemId, RestoreId, - TrihedronShowId, AxialScaleId, AmbientId, SwitchInteractionStyleId, MaximizedId, UserId }; + TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId, + SwitchInteractionStyleId, SwitchZoomingStyleId, MaximizedId, UserId }; enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW, @@ -95,6 +97,9 @@ public: virtual int interactionStyle() const; virtual void setInteractionStyle( const int ); + int zoomingStyle() const; + void setZoomingStyle( const int ); + void setTransformEnabled( const OperationType, const bool ); bool transformEnabled( const OperationType ) const; @@ -128,12 +133,14 @@ public slots: virtual void onCloneView(); virtual void onClipping( bool on ); virtual void onAxialScale(); + virtual void onGraduatedAxes(); virtual void onAmbientToogle(); virtual void onMemorizeView(); virtual void onRestoreView(); virtual void onTrihedronShow(); virtual void setRestoreFlag(); virtual void onSwitchInteractionStyle( bool on ); + virtual void onSwitchZoomingStyle( bool on ); virtual void activateSetRotationGravity(); virtual void activateSetRotationSelected( double theX, double theY, double theZ ); @@ -143,8 +150,7 @@ public slots: virtual void showEvent( QShowEvent * ); virtual void hideEvent( QHideEvent * ); - void onMaximizedView(); - + virtual void onMaximizedView(); signals: void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type); @@ -199,6 +205,8 @@ protected: OCCViewer_Viewer* myModel; OCCViewer_ViewPort3d* myViewPort; + OCCViewer_CubeAxesDlg* myCubeAxesDlg; + RotationPointType myCurrPointType; RotationPointType myPrevPointType; gp_Pnt mySelectedPoint; diff --git a/src/OCCViewer/resources/OCCViewer_images.ts b/src/OCCViewer/resources/OCCViewer_images.ts index e6a032c7a..d6f77585e 100644 --- a/src/OCCViewer/resources/OCCViewer_images.ts +++ b/src/OCCViewer/resources/OCCViewer_images.ts @@ -112,6 +112,10 @@ ICON_OCCVIEWER_SCALING occ_view_scaling.png + + ICON_OCCVIEWER_GRADUATED_AXES + occ_view_graduated_axes.png + ICON_OCCVIEWER_AMBIENT occ_view_ambient.png @@ -120,6 +124,10 @@ ICON_OCCVIEWER_STYLE_SWITCH occ_view_style_switch.png + + ICON_OCCVIEWER_ZOOMING_STYLE_SWITCH + occ_view_zooming_style_switch.png + ICON_OCCVIEWER_MAXIMIZE occ_view_maximized.png diff --git a/src/OCCViewer/resources/OCCViewer_msg_en.ts b/src/OCCViewer/resources/OCCViewer_msg_en.ts index 764efc208..909b278ec 100644 --- a/src/OCCViewer/resources/OCCViewer_msg_en.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default @@ -240,6 +219,14 @@ MNU_SCALING Scaling + + DSC_GRADUATED_AXES + Graduated axes + + + MNU_GRADUATED_AXES + Graduated axes + DSC_AMBIENT Toogle keep only ambient light @@ -256,6 +243,14 @@ MNU_STYLE_SWITCH Interaction style switch + + DSC_ZOOMING_STYLE_SWITCH + Zooming style switch + + + MNU_ZOOMING_STYLE_SWITCH + Zooming style switch + OCC_IMAGE_FILES Images Files (*.bmp *.png *.jpg *.jpeg) diff --git a/src/OCCViewer/resources/OCCViewer_msg_fr.ts b/src/OCCViewer/resources/OCCViewer_msg_fr.ts new file mode 100755 index 000000000..c76f2252a --- /dev/null +++ b/src/OCCViewer/resources/OCCViewer_msg_fr.ts @@ -0,0 +1,318 @@ + + + + + @default + + MNU_FRONT_VIEW + Avant + + + ERROR + Erreur + + + MNU_DUMP_VIEW + Sauvegarder la scène + + + DSC_TOP_VIEW + Vue de dessus + + + MNU_PAN_VIEW + Panoramique + + + MNU_CLONE_VIEW + Dupliquer la scène + + + DSC_SHOW_TRIHEDRE + Afficher/cacher le trièdre dans la scène + + + MNU_SHOW_TRIHEDRE + Afficher/cacher le trièdre + + + MNU_TOP_VIEW + Dessus + + + DSC_GLOBALPAN_VIEW + Sélection d'un nouveau centre de vue + + + DSC_ROTATE_VIEW + Tourner le point de vue autour du centre de la scène + + + MNU_ZOOM_VIEW + Zoom + + + DSC_PAN_VIEW + Déplacer la vue + + + DSC_LEFT_VIEW + Vue de gauche + + + DSC_SHOOT_VIEW + Memoriser l'état courant de la scène et l'ajouter dans la liste + + + DSC_FITALL + Redimentionner la scène pour montrer tous les objets + + + MNU_FITALL + Tout afficher + + + MNU_ROTATE_VIEW + Rotation + + + DSC_FRONT_VIEW + Vue de devant + + + MNU_ROTATIONPOINTGRAVITY_VIEW + Point de Rotation : le centre de gravité + + + MNU_GLOBALPAN_VIEW + Panoramique global + + + INF_APP_DUMP_VIEW + Sauvegarder la vue + + + DSC_CLIPPING + Définir le plan de coupe + + + DSC_CLONE_VIEW + Ouvrir une nouvelle fenêtre de visualisation pour la scène en cours + + + INF_APP_SHOOT_VIEW + Mémoriser la scène + + + MNU_CLIPPING + Plan de coupe + + + MNU_BACK_VIEW + Arrière + + + MNU_SHOOT_VIEW + Memoriser la vue + + + DSC_CHANGINGROTATIONPOINT_VIEW + Changer le point autour duquel la scène est tournée + + + MNU_BOTTOM_VIEW + Dessous + + + MNU_RESET_VIEW + Restaurer le point de vue + + + MNU_LEFT_VIEW + Gauche + + + DSC_RIGHT_VIEW + Vue de droite + + + MNU_CHANGINGROTATIONPOINT_VIEW + Changer le point de rotation + + + DSC_FITRECT + Redimensionner la scène pour ne montrer que sa partie choisie par l'encadré + + + MNU_FITRECT + Afficher la zone + + + DSC_BOTTOM_VIEW + Vue de dessous + + + DSC_DUMP_VIEW + Sauvegarder la scène en cours dans un fichier image + + + DSC_ZOOM_VIEW + Zoom la vue + + + MNU_ROTATIONPOINT000_VIEW + Point de Rotation : (0,0,0) + + + MNU_ROTATIONPOINTSELECTED_VIEW + Point de Rotation : le point choisi par l'utilisateur + + + DSC_RESET_VIEW + Restaurer le point de vue + + + ERR_DOC_CANT_SAVE_FILE + Impossible de sauvegarder le fichier + + + DSC_PRESETS_VIEW + Restaurer d'un état mémorisé de la scène courante + + + MNU_PRESETS_VIEW + Restaurer la vue + + + MNU_RIGHT_VIEW + Droit + + + INF_APP_PRESETS_VIEW + Restaurer la scène + + + LBL_TOOLBAR_LABEL + Opérations de visualisation + + + DSC_BACK_VIEW + Vue arrière + + + DSC_SCALING + Changer l'échelle des axes de coordonnées + + + MNU_SCALING + Changer l'échelle + + + DSC_GRADUATED_AXES + Axes gradués + + + MNU_GRADUATED_AXES + Axes gradués + + + DSC_AMBIENT + Ne montrer que la lumière d'ambiance + + + MNU_AMBIENT + Ne montrer que la lumière d'ambiance + + + DSC_STYLE_SWITCH + Changer le style d'intéraction + + + MNU_STYLE_SWITCH + Changer le style d'intéraction + + + OCC_IMAGE_FILES + Fichiers images (*.bmp *.png *.jpg *.jpeg) + + + + OCCViewer_CreateRestoreViewDlg + + CAPTION + Restaurer la vue + + + + OCCViewer_SetRotationPointDlg + + LBL_X + X: + + + LBL_Y + Y: + + + LBL_Z + Z: + + + USE_BBCENTER + Utiliser le centre de la boîte englobante + + + LBL_TOORIGIN + Définir à l'origine + + + CAPTION + Indiquer le point de rotation + + + LBL_SELECTPOINT + Choisir le point dans la vue + + + + OCCViewer_ViewManager + + OCC_VIEW_TITLE + Scène OCC :%M - visualiseur:%V + + + + OCCViewer_Viewer + + MEN_DUMP_VIEW + Sauvegarder la Vue + + + MEN_SHOW_TOOLBAR + Montrer la Barre d'Outils + + + MEN_CHANGE_BACKGROUD + Changer l'arrière-plan + + + + OCCViewer_AxialScaleDlg + + DLG_SCALING + Changer l'échelle des axes + + + LBL_X + X: + + + LBL_Y + Y: + + + LBL_Z + Z: + + + diff --git a/src/OCCViewer/resources/occ_view_graduated_axes.png b/src/OCCViewer/resources/occ_view_graduated_axes.png new file mode 100755 index 0000000000000000000000000000000000000000..2b44c06fe8f81517d47267c43b62963b1a40ace5 GIT binary patch literal 650 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 - + + + OB_Browser diff --git a/src/ObjBrowser/resources/OB_msg_fr.ts b/src/ObjBrowser/resources/OB_msg_fr.ts new file mode 100755 index 000000000..a2d4d2f5b --- /dev/null +++ b/src/ObjBrowser/resources/OB_msg_fr.ts @@ -0,0 +1,38 @@ + + + + + OB_Browser + + MEN_EXPAND_ALL + Tout déplier + + + MEN_COLLAPSE_ALL + Tout réduire + + + MEN_FIND + Chercher + + + + OB_FindDlg + + FIND + Chercher + + + CLOSE + Fermer + + + CASE_SENSITIVE + Sensible à la casse + + + IS_REG_EXP + Expression régulière + + + diff --git a/src/Plot2d/Makefile.am b/src/Plot2d/Makefile.am index dac45b6e1..8cb2b6e21 100755 --- a/src/Plot2d/Makefile.am +++ b/src/Plot2d/Makefile.am @@ -87,7 +87,8 @@ dist_salomeres_DATA = \ nodist_salomeres_DATA = \ Plot2d_images.qm \ - Plot2d_msg_en.qm + Plot2d_msg_en.qm \ + Plot2d_msg_fr.qm libPlot2d_la_CPPFLAGS = $(QT_INCLUDES) $(PYTHON_INCLUDES) $(QWT_INCLUDES) \ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT diff --git a/src/Plot2d/Plot2d_ViewFrame.cxx b/src/Plot2d/Plot2d_ViewFrame.cxx index 7f212a85b..0380785c9 100755 --- a/src/Plot2d/Plot2d_ViewFrame.cxx +++ b/src/Plot2d/Plot2d_ViewFrame.cxx @@ -282,6 +282,7 @@ void Plot2d_ViewFrame::DisplayAll() updateCurve( clist.at( i ), false ); } myPlot->replot(); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } /*! Removes all curves from the view @@ -291,6 +292,7 @@ void Plot2d_ViewFrame::EraseAll() myPlot->clear(); myPlot->getCurves().clear(); myPlot->replot(); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } /*! Redraws viewframe contents @@ -315,6 +317,7 @@ void Plot2d_ViewFrame::Display( const Plot2d_Prs* prs ) setXGrid( myXGridMajorEnabled, myXGridMaxMajor, myXGridMinorEnabled, myXGridMaxMinor, true ); setYGrid( myYGridMajorEnabled, myYGridMaxMajor, myYGridMinorEnabled, myYGridMaxMinor, myY2GridMajorEnabled, myY2GridMaxMajor, myY2GridMinorEnabled, myY2GridMaxMinor, true ); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } /*! @@ -328,6 +331,7 @@ void Plot2d_ViewFrame::Erase( const Plot2d_Prs* prs, const bool ) // erase all curves from presentation curveList aCurves = prs->getCurves(); eraseCurves( aCurves ); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } bool Plot2d_ViewFrame::eventFilter( QObject* watched, QEvent* e ) @@ -363,6 +367,10 @@ bool Plot2d_ViewFrame::eventFilter( QObject* watched, QEvent* e ) } break; } + case QEvent::ContextMenu: + // Fix from SLN + // Do nothing because context menu is called from MouseRelease + return true; } } return QWidget::eventFilter( watched, e ); @@ -627,6 +635,7 @@ void Plot2d_ViewFrame::displayCurve( Plot2d_Curve* curve, bool update ) myPlot->updateYAxisIdentifiers(); if ( update ) myPlot->replot(); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } /*! @@ -643,7 +652,7 @@ void Plot2d_ViewFrame::displayCurves( const curveList& curves, bool update ) } fitAll(); //myPlot->setUpdatesEnabled( true ); -// update legend + // update legend if ( update ) myPlot->replot(); } @@ -665,6 +674,7 @@ void Plot2d_ViewFrame::eraseCurve( Plot2d_Curve* curve, bool update ) if ( update ) myPlot->replot(); } + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } /*! @@ -681,6 +691,7 @@ void Plot2d_ViewFrame::eraseCurves( const curveList& curves, bool update ) // fitAll(); if ( update ) myPlot->replot(); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } /*! @@ -691,7 +702,7 @@ void Plot2d_ViewFrame::updateCurve( Plot2d_Curve* curve, bool update ) if ( !curve ) return; if ( hasPlotCurve( curve ) ) { - QwtPlotCurve* aPCurve = getPlotCurve( curve ); + QwtPlotCurve* aPCurve = getPlotCurve( curve ); if ( !curve->isAutoAssign() ) { Qt::PenStyle ps = Plot2d::plot2qwtLine( curve->getLine() ); QwtSymbol::Style ms = Plot2d::plot2qwtMarker( curve->getMarker() ); @@ -706,6 +717,7 @@ void Plot2d_ViewFrame::updateCurve( Plot2d_Curve* curve, bool update ) aPCurve->setVisible( true ); if ( update ) myPlot->replot(); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); } } @@ -1158,19 +1170,21 @@ void Plot2d_ViewFrame::setLegendPos( int pos ) { myLegendPos = pos; QwtLegend* legend = myPlot->legend(); - switch( pos ) { - case 0: - myPlot->insertLegend( legend, QwtPlot::LeftLegend ); - break; - case 1: - myPlot->insertLegend( legend, QwtPlot::RightLegend ); - break; - case 2: - myPlot->insertLegend( legend, QwtPlot::TopLegend ); - break; - case 3: - myPlot->insertLegend( legend, QwtPlot::BottomLegend ); - break; + if ( legend ) { + switch( pos ) { + case 0: + myPlot->insertLegend( legend, QwtPlot::LeftLegend ); + break; + case 1: + myPlot->insertLegend( legend, QwtPlot::RightLegend ); + break; + case 2: + myPlot->insertLegend( legend, QwtPlot::TopLegend ); + break; + case 3: + myPlot->insertLegend( legend, QwtPlot::BottomLegend ); + break; + } } } @@ -1547,6 +1561,7 @@ void Plot2d_ViewFrame::wheelEvent(QWheelEvent* event) myPlot->setAxisScale( QwtPlot::yRight, y2Map.s1(), y2Map.s1() + aScale*(y2Map.s2() - y2Map.s1()) ); } myPlot->replot(); + if ( myPlot->zoomer() ) myPlot->zoomer()->setZoomBase(); myPnt = event->pos(); } @@ -1738,6 +1753,7 @@ Plot2d_Plot2d::Plot2d_Plot2d( QWidget* parent ) canvas()->setMouseTracking( true ); myPlotZoomer->setEnabled( true ); + myPlotZoomer->setZoomBase(); } /*! @@ -2460,14 +2476,16 @@ void Plot2d_QwtPlotCurve::updateLegend( QwtLegend* legend ) const { QwtPlotCurve::updateLegend( legend ); - QWidget* widget = legend->find( this ); - if( Plot2d_QwtLegendItem* anItem = dynamic_cast( widget ) ) { - int aMode = Plot2d_QwtLegendItem::IM_None; - if( myYAxisIdentifierEnabled ) - aMode = myYAxis == QwtPlot::yRight ? - Plot2d_QwtLegendItem::IM_Right : - Plot2d_QwtLegendItem::IM_Left; - anItem->setYAxisIdentifierMode( aMode ); + if ( legend ) { + QWidget* widget = legend->find( this ); + if( Plot2d_QwtLegendItem* anItem = dynamic_cast( widget ) ) { + int aMode = Plot2d_QwtLegendItem::IM_None; + if( myYAxisIdentifierEnabled ) + aMode = myYAxis == QwtPlot::yRight ? + Plot2d_QwtLegendItem::IM_Right : + Plot2d_QwtLegendItem::IM_Left; + anItem->setYAxisIdentifierMode( aMode ); + } } } diff --git a/src/Plot2d/Plot2d_ViewModel.cxx b/src/Plot2d/Plot2d_ViewModel.cxx index 2e912da1a..a36346e0b 100755 --- a/src/Plot2d/Plot2d_ViewModel.cxx +++ b/src/Plot2d/Plot2d_ViewModel.cxx @@ -121,7 +121,9 @@ void Plot2d_Viewer::update() void Plot2d_Viewer::clearPrs() { SUIT_ViewManager* aMgr = getViewManager(); - QVector aViews = aMgr->getViews(); + QVector aViews; + if ( aMgr ) + aViews = aMgr->getViews(); unsigned int aSize = aViews.size(); for (uint i = 0; i < aSize; i++) { Plot2d_ViewWindow* aView = (Plot2d_ViewWindow*)aViews[i]; diff --git a/src/Plot2d/resources/Plot2d_msg_en.ts b/src/Plot2d/resources/Plot2d_msg_en.ts index 3a084267f..08b09ca76 100644 --- a/src/Plot2d/resources/Plot2d_msg_en.ts +++ b/src/Plot2d/resources/Plot2d_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/Plot2d/resources/Plot2d_msg_fr.ts b/src/Plot2d/resources/Plot2d_msg_fr.ts new file mode 100755 index 000000000..9bad865be --- /dev/null +++ b/src/Plot2d/resources/Plot2d_msg_fr.ts @@ -0,0 +1,511 @@ + + + + + @default + + PLOT2D_CURVE_TYPE_LBL + Type de courbe: + + + ERROR + Erreur + + + PLOT2D_SET_AS_DEFAULT_CHECK + Enregistrer comme paramètres par défaut + + + TLT_SETUP_CURVE + Initialiser une courbe + + + MNU_DUMP_VIEW + Enregistrer la vue... + + + PLOT2D_SCALE_MODE_HOR + Axe horizontal: + + + PLOT2D_SCALE_MODE_VER + Axe vertical: + + + MNU_PAN_VIEW + Déplacement + + + MNU_CLONE_VIEW + Dupliquer la vue + + + POSTSCRIPT_FILES + Fichiers PostScript (*.ps) + + + ENCAPSULATED_POSTSCRIPT_FILES + Fichiers PostScript encapsulés (*.eps) + + + DSC_GLOBALPAN_VIEW + Sélection d'un nouveau centre de vue + + + PRP_PLOT2D_MODE_LINEAR_VER + Changer la vue de l'axe vertical au mode d'échelle linéaire + + + PRP_PLOT2D_MODE_LINEAR_HOR + Changer la vue de l'axe horizontal au mode d'échelle linéaire + + + CURVE_LINE_WIDTH_LAB + Epaisseur du trait: + + + CURVE_TYPE_POPUP + Type de courbe + + + TOT_PLOT2D_MODE_LINEAR_VER + Axe vertical: linéaire + + + TOT_PLOT2D_MODE_LINEAR_HOR + Axe horizontal: linéaire + + + FIT_DATA_TLT + Ajuster à la plage de données + + + MNU_ZOOM_VIEW + Zoom + + + PLOT2D_GRID_TLT + Marques de la grille et des axes + + + DSC_PAN_VIEW + Déplacer la vue + + + DASHDOT_LINE_LBL + TiretPoint + + + PRP_PLOT2D_CURVES_SPLINES + Changer la vue en mode splines + + + INF_AXES_X + Axe X + + + PLOT2D_SCALE_TLT + Mode d'échelle + + + DSC_FITALL + Ajuster la scène pour afficher tous les objets + + + MNU_FITALL + Tout afficher + + + TOT_PLOT2D_MODE_LOGARITHMIC_HOR + Axe horizontal: logarithmique + + + TOT_PLOT2D_MODE_LOGARITHMIC_VER + Axe vertical: logarithmique + + + MNU_GLOBALPAN_VIEW + Déplacement global + + + INF_APP_DUMP_VIEW + Enregistrer la vue + + + PLOT2D_LEGEND_POSITION_BOTTOM + Dessous + + + INF_COORDINATES + Coordonnées: X : %1, Y : %2 + + + DSC_CLONE_VIEW + Ouvrir un nouveau visualiseur OCC pour la scène actuelle + + + DASH_LINE_LBL + Tiret + + + DTRIANGLE_MARKER_LBL + Triangle orienté vers le bas + + + UTRIANGLE_MARKER_LBL + Triangle orienté en haut + + + LTRIANGLE_MARKER_LBL + Triangle orienté à gauche + + + RTRIANGLE_MARKER_LBL + Triangle orienté à droite + + + RECTANGLE_MARKER_LBL + Rectangle + + + TLT_SETUP_PLOT2D_VIEW + Paramètres de visualisation Plot 2d + + + CURVE_LINE_TYPE_LAB + Type de trait: + + + CROSS_MARKER_LBL + Croix + + + XCROSS_MARKER_LBL + Croix diagonale + + + PLOT2D_ENABLE_VER_TITLE + Titre de l'axe vertical + + + PLOT2D_ENABLE_HOR_TITLE + Titre de l'axe horizontal + + + TOT_PLOT2D_SETTINGS + Paramètres + + + PLOT2D_CURVE_TYPE_LINES + Lignes + + + MEN_PLOT2D_CURVES_SPLINES + Dessiner les splines + + + PRP_PLOT2D_MODE_LOGARITHMIC_HOR + Changer la vue de l'axe horizontal au mode d'échelle logarithmique + + + PRP_PLOT2D_MODE_LOGARITHMIC_VER + Changer la vue de l'axe vertical au mode d'échelle logarithmique + + + PLOT2D_IMAGE_FILES + Fichiers images (*.bmp *.png *.jpg *.jpeg) + + + PLOT2D_MAX_INTERVALS + Intervalles max + + + INF_AXES_Y_LEFT + Axe Y gauche + + + CURVE_COLOR_LAB + Couleur: + + + CURVE_PREVIEW_LAB + Prévisualiser + + + DIAMOND_MARKER_LBL + Diamant + + + PLOT2D_LEGEND_POSITION_TOP + Dessus + + + TOT_PLOT2D_CHANGE_BACKGROUND + Changer l'arrière-plan + + + MEN_PLOT2D_CHANGE_BACKGROUND + Changer l'arrière-plan... + + + PRP_PLOT2D_CHANGE_BACKGROUND + Changer la couleur d'arrière plan + + + SOLID_LINE_LBL + Solide + + + PLOT2D_GRID_ENABLE_VER_MAJOR + Verticale principale + + + PLOT2D_GRID_ENABLE_HOR_MAJOR + Horizontale principale + + + PLOT2D_GRID_ENABLE_VER_MINOR + Verticale secondaire + + + TOT_PLOT2D_CURVES_POINTS + Dessiner des points + + + PLOT2D_GRID_ENABLE_HOR_MINOR + Horizontale secondaire + + + PLOT2D_BACKGROUND_COLOR_LBL + Couleur d'arrière-plan: + + + WRN_XLOG_NOT_ALLOWED + On a détecté des points avec les valeurs non-positives sur l'abscisse. +L'échelle logarithmique de l'abscisse n'est pas permise. + + + WRN_YLOG_NOT_ALLOWED + On a détecté des points avec les valeurs non-positives sur l'ordonnée. +L'échelle logarithmique de l'ordonnée n'est pas permise. + + + DSC_FITRECT + Ajuster la scène à la zone choisie par l'encadré + + + PLOT2D_LEGEND_POSITION_LEFT + Gauche + + + MNU_FITRECT + Afficher la zone + + + DOT_LINE_LBL + Point + + + MEN_PLOT2D_CURVES_POINTS + Dessiner les points + + + PRP_PLOT2D_CURVES_POINTS + Changer la vue en mode points + + + PLOT2D_SCALE_MODE_LOGARITHMIC + Logarithmique + + + PLOT2D_LEGEND_POSITION_RIGHT + Droite + + + DSC_DUMP_VIEW + Sauvegarder la vue actuelle dans un fichier image + + + WARNING + Avertissement + + + PLOT2D_ENABLE_LEGEND + Afficher la légende + + + DSC_ZOOM_VIEW + Zoomer la vue + + + PRP_PLOT2D_SETTINGS + Définit les paramètres de visualisation + + + INF_COORDINATES_SOME_Y + Coordonnées: X : %1, Y : %2 ( %3 ) + + + SCALING_POPUP + Echelle + + + PLOT2D_SCALE_MODE_LINEAR + Linéaire + + + TOT_PLOT2D_FITDATA + Ajuster à l'intervalle + + + PLOT2D_CURVE_TYPE_POINTS + Points + + + PLOT2D_CURVE_TYPE_SPLINE + Spline + + + MEN_PLOT2D_FITDATA + &Ajuster à l'intervalle + + + MEN_PLOT2D_MODE_LOGARITHMIC_HOR + Axe horizontal: logarithmique + + + MEN_PLOT2D_MODE_LOGARITHMIC_VER + Axe vertical: logarithmique + + + PRP_PLOT2D_FITDATA + Ajuster la vue à la plage de données indiquées + + + MEN_PLOT2D_MODE_LINEAR_VER + Axe vertical: linéaire + + + MEN_PLOT2D_MODE_LINEAR_HOR + Axe horizontal: linéaire + + + NONE_MARKER_LBL + Aucun + + + ERR_DOC_CANT_SAVE_FILE + Impossible de sauvegarder le fichier + + + MEN_PLOT2D_SHOW_LEGEND + Afficher la &légende + + + PRP_PLOT2D_SHOW_LEGEND + Activer/désactiver la légende + + + TOT_PLOT2D_SHOW_LEGEND + Afficher la légende + + + INF_AXES_Y_RIGHT + Axe Y droite + + + DAHSDOTDOT_LINE_LBL + TiretPointPoint + + + TOT_PLOT2D_CURVES_SPLINES + Dessiner des splines + + + CURVE_MARKER_TYPE_LAB + Type de marqueur: + + + MEN_PLOT2D_SETTINGS + &Paramètres + + + CIRCLE_MARKER_LBL + Cercle + + + LBL_TOOLBAR_LABEL + Opérations de visualisation + + + NONE_LINE_LBL + Aucun + + + PLOT2D_MARKER_SIZE_LBL + Taille du marqueur: + + + PLOT2D_ENABLE_MAIN_TITLE + Titre principal + + + TOT_PLOT2D_CURVES_LINES + Dessiner des lignes + + + PRP_PLOT2D_CURVES_LINES + Changer la vue en mode lignes + + + MEN_PLOT2D_CURVES_LINES + Dessiner les lignes + + + + Plot2d_FitDataDlg + + FIT_HORIZONTAL + Ajuster horizontalement + + + MIN_VALUE_LAB + Min: + + + VERTICAL_AXIS + Axe vertical + + + MAX_VALUE_LAB + Max: + + + HORIZONTAL_AXIS + Axe horizontal + + + VERTICAL_LEFT_AXIS + Axe vertical gauche + + + FIT_ALL + Tout ajuster + + + VERTICAL_RIGHT_AXIS + Axe vertical droite + + + FIT_VERTICAL + Ajuster verticalement + + + + Plot2d_ViewManager + + PLOT2D_VIEW_TITLE + Scène Plot2d:%M - visualiseur:%V + + + diff --git a/src/PyConsole/Makefile.am b/src/PyConsole/Makefile.am index fe0b4a1f6..e28a2b67f 100755 --- a/src/PyConsole/Makefile.am +++ b/src/PyConsole/Makefile.am @@ -44,7 +44,8 @@ MOC_FILES = \ nodist_libPyConsole_la_SOURCES = $(MOC_FILES) nodist_salomeres_DATA = \ - PyConsole_msg_en.qm + PyConsole_msg_en.qm \ + PyConsole_msg_fr.qm libPyConsole_la_CPPFLAGS = $(PYTHON_INCLUDES) $(QT_INCLUDES) \ -I$(srcdir)/../PyInterp -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx diff --git a/src/PyConsole/PyConsole_Console.cxx b/src/PyConsole/PyConsole_Console.cxx index bae645157..4abd2af8e 100644 --- a/src/PyConsole/PyConsole_Console.cxx +++ b/src/PyConsole/PyConsole_Console.cxx @@ -128,6 +128,30 @@ void PyConsole_Console::setIsSync( const bool on ) myEditor->setIsSync( on ); } +/*! + \brief Get suppress output flag value. + + \sa setIsSuppressOutput() + \return True if python console output is suppressed. +*/ +bool PyConsole_Console::isSuppressOutput() const +{ + return myEditor->isSuppressOutput(); +} + +/*! + \brief Set suppress output flag value. + + In case if suppress output flag is true, the python + console output suppressed. + + \param on suppress output flag +*/ +void PyConsole_Console::setIsSuppressOutput( const bool on ) +{ + myEditor->setIsSuppressOutput(on); +} + /*! \brief Change the python console's font. \param f new font diff --git a/src/PyConsole/PyConsole_Console.h b/src/PyConsole/PyConsole_Console.h index 0666396fc..8833039fb 100644 --- a/src/PyConsole/PyConsole_Console.h +++ b/src/PyConsole/PyConsole_Console.h @@ -63,6 +63,10 @@ public: bool isSync() const; void setIsSync( const bool ); + bool isSuppressOutput() const; + void setIsSuppressOutput( const bool ); + + void exec( const QString& ); void execAndWait( const QString& ); diff --git a/src/PyConsole/PyConsole_Editor.cxx b/src/PyConsole/PyConsole_Editor.cxx index c622c66a8..54496b36f 100644 --- a/src/PyConsole/PyConsole_Editor.cxx +++ b/src/PyConsole/PyConsole_Editor.cxx @@ -226,7 +226,8 @@ private: void staticCallback( void* data, char* c ) { - QApplication::postEvent( (PyConsole_Editor*)data, new PrintEvent( c ) ); + if(!((PyConsole_Editor*)data)->isSuppressOutput()) + QApplication::postEvent( (PyConsole_Editor*)data, new PrintEvent( c ) ); } /*! @@ -242,7 +243,8 @@ PyConsole_Editor::PyConsole_Editor( PyConsole_Interp* theInterp, myInterp( 0 ), myCmdInHistory( -1 ), myEventLoop( 0 ), - myIsSync( false ) + myIsSync( false ), + myIsSuppressOutput(false) { QString fntSet( "" ); QFont aFont = SUIT_Tools::stringToFont( fntSet ); @@ -296,6 +298,30 @@ void PyConsole_Editor::setIsSync( const bool on ) myIsSync = on; } +/*! + \brief Get suppress output flag value. + + \sa setIsSuppressOutput() + \return True if python console output is suppressed. +*/ +bool PyConsole_Editor::isSuppressOutput() const +{ + return myIsSuppressOutput; +} + +/*! + \brief Set suppress output flag value. + + In case if suppress output flag is true, the python + console output suppressed. + + \param on suppress output flag +*/ +void PyConsole_Editor::setIsSuppressOutput( const bool on ) +{ + myIsSuppressOutput = on; +} + /*! \brief Put the string \a str to the python editor. \param str string to be put in the command line of the editor diff --git a/src/PyConsole/PyConsole_Editor.h b/src/PyConsole/PyConsole_Editor.h index ae381467c..6f8eba127 100644 --- a/src/PyConsole/PyConsole_Editor.h +++ b/src/PyConsole/PyConsole_Editor.h @@ -52,6 +52,9 @@ public: bool isSync() const; void setIsSync( const bool ); + bool isSuppressOutput() const; + void setIsSuppressOutput(const bool); + protected: virtual void dropEvent( QDropEvent* event ); virtual void mouseReleaseEvent( QMouseEvent* event ); @@ -80,6 +83,7 @@ private: QString myBanner; //!< current banner QStringList myQueue; //!< python commands queue bool myIsSync; //!< synchronous mode flag + bool myIsSuppressOutput; //!< suppress output flag }; #endif // PYCONSOLE_EDITOR_H diff --git a/src/PyConsole/resources/PyConsole_msg_en.ts b/src/PyConsole/resources/PyConsole_msg_en.ts index 986b476b1..85393a2bf 100644 --- a/src/PyConsole/resources/PyConsole_msg_en.ts +++ b/src/PyConsole/resources/PyConsole_msg_en.ts @@ -1,28 +1,6 @@ - - + + PyConsole_Console @@ -50,7 +28,6 @@ D&ump commands - PyConsole_Editor @@ -58,8 +35,8 @@ Dump commands - PYTHON_FILES_FILTER - PYTHON Files (*.py) + PYTHON_FILES_FILTER + PYTHON Files (*.py) diff --git a/src/PyConsole/resources/PyConsole_msg_fr.ts b/src/PyConsole/resources/PyConsole_msg_fr.ts new file mode 100755 index 000000000..910911562 --- /dev/null +++ b/src/PyConsole/resources/PyConsole_msg_fr.ts @@ -0,0 +1,42 @@ + + + + + PyConsole_Console + + + EDIT_COPY_CMD + &Copier + + + + EDIT_PASTE_CMD + C&oller + + + + EDIT_CLEAR_CMD + &Effacer + + + + EDIT_SELECTALL_CMD + &Tout sélectionner + + + EDIT_DUMPCOMMANDS_CMD + &Générer le script des commandes + + + + PyConsole_Editor + + TOT_DUMP_PYCOMMANDS + &Générer le script des commandes + + + PYTHON_FILES_FILTER + Fichiers PYTHON (*.py) + + + diff --git a/src/QDS/Makefile.am b/src/QDS/Makefile.am index cd641de0d..ff1bdea07 100755 --- a/src/QDS/Makefile.am +++ b/src/QDS/Makefile.am @@ -82,7 +82,7 @@ MOC_FILES = \ nodist_libQDS_la_SOURCES = $(MOC_FILES) -nodist_salomeres_DATA = QDS_msg_en.qm +nodist_salomeres_DATA = QDS_msg_en.qm QDS_msg_fr.qm libQDS_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) \ -I$(srcdir)/../Qtx -I$(srcdir)/../DDS diff --git a/src/QDS/resources/QDS_msg_en.ts b/src/QDS/resources/QDS_msg_en.ts index 0caa8c1f2..2388719f0 100644 --- a/src/QDS/resources/QDS_msg_en.ts +++ b/src/QDS/resources/QDS_msg_en.ts @@ -1,27 +1,6 @@ - - + + + QDS_Datum @@ -50,7 +29,7 @@ DATA_SHOULD_BE_VALUE - Should be%1 value + Should be %1 value DATA_INTEGER diff --git a/src/QDS/resources/QDS_msg_fr.ts b/src/QDS/resources/QDS_msg_fr.ts new file mode 100755 index 000000000..d57669bec --- /dev/null +++ b/src/QDS/resources/QDS_msg_fr.ts @@ -0,0 +1,51 @@ + + + + + QDS_Datum + + DATA_ERR_TITLE + Valeur du paramètre incorrecte + + + DATA_STRING + chaîne de caractères non-vide + + + DATA_NON_EMPTY + non-vide + + + DATA_MIN_LIMIT + est supérieur à %1 + + + DATA_FLOAT + réel + + + DATA_RANGE + dans l'intervalle [%1, %2] + + + DATA_SHOULD_BE_VALUE + Devrait avoir la valeur %1 + + + DATA_INTEGER + entier + + + DATA_INCORRECT_VALUE + La valeur du paramètre "%1" n'est pas correcte. + + + DATA_MAX_LIMIT + est inférieur à %1 + + + DATA_INPUT_VALUE + Indiquez une valeur correcte. + + + diff --git a/src/Qtx/Makefile.am b/src/Qtx/Makefile.am index 633d33df9..610935c55 100755 --- a/src/Qtx/Makefile.am +++ b/src/Qtx/Makefile.am @@ -67,6 +67,7 @@ salomeinclude_HEADERS = \ QtxResourceMgr.h \ QtxRubberBand.h \ QtxSearchTool.h \ + QtxShortcutEdit.h \ QtxSplash.h \ QtxToolBar.h \ QtxToolTip.h \ @@ -123,6 +124,7 @@ dist_libqtx_la_SOURCES = \ QtxResourceMgr.cxx \ QtxRubberBand.cxx \ QtxSearchTool.cxx \ + QtxShortcutEdit.cxx \ QtxSplash.cxx \ QtxToolBar.cxx \ QtxToolTip.cxx \ @@ -171,6 +173,7 @@ MOC_FILES = \ QtxPopupMgr_moc.cxx \ QtxRubberBand_moc.cxx \ QtxSearchTool_moc.cxx \ + QtxShortcutEdit_moc.cxx \ QtxSplash_moc.cxx \ QtxToolBar_moc.cxx \ QtxToolTip_moc.cxx \ @@ -189,3 +192,6 @@ nodist_libqtx_la_SOURCES = $(MOC_FILES) libqtx_la_CPPFLAGS = $(QT_INCLUDES) libqtx_la_LDFLAGS = $(QT_MT_LIBS) + +nodist_salomeres_DATA = \ + Qtx_msg_fr.qm diff --git a/src/Qtx/Qtx.cxx b/src/Qtx/Qtx.cxx index ded4dd501..a095db966 100755 --- a/src/Qtx/Qtx.cxx +++ b/src/Qtx/Qtx.cxx @@ -1384,6 +1384,45 @@ bool Qtx::stringToConicalGradient( const QString& str, QConicalGradient& gradien return success; } +/*! + \class Qtx::Localizer + \brief Localization helper + + This helper class can be used to solve the localization problems, + usually related to the textual files reading/writing, namely when + floating point values are read / written with API functions. + The problem relates to such locale specific settings as decimal point + separator, thousands separator, etc. + + To use the Localizer class, just create a local variable in the beginning + of the code where you need to read / write data from textual file(s). + The constructor of the class forces setting "C" locale temporariy. + The destructor switches back to the initial locale. + + \code + Qtx::Localizer loc; + readSomething(); + writeSomething(); + \endcode +*/ + +/*! + \brief Constructor. Forces "C" locale to be set. +*/ +Qtx::Localizer::Localizer() +{ + myCurLocale = setlocale( LC_NUMERIC, 0 ); + setlocale( LC_NUMERIC, "C" ); +} + +/*! + \brief Destructor. Reverts back to the initial locale. +*/ +Qtx::Localizer::~Localizer() +{ + setlocale( LC_NUMERIC, myCurLocale.toLatin1().constData() ); +} + #ifndef WIN32 #include diff --git a/src/Qtx/Qtx.h b/src/Qtx/Qtx.h index c5bc82b2d..72a2a494f 100755 --- a/src/Qtx/Qtx.h +++ b/src/Qtx/Qtx.h @@ -113,6 +113,15 @@ public: Auto //!< substitute environment variable by it's value if variable exists, and keep it as is otherwise } SubstMode; + class QTX_EXPORT Localizer + { + public: + Localizer(); + ~Localizer(); + private: + QString myCurLocale; + }; + static QString toQString( const char*, const int = -1 ); static QString toQString( const short*, const int = -1 ); static QString toQString( const unsigned char*, const int = -1 ); diff --git a/src/Qtx/QtxAction.cxx b/src/Qtx/QtxAction.cxx index 0bc9508aa..b706f850a 100755 --- a/src/Qtx/QtxAction.cxx +++ b/src/Qtx/QtxAction.cxx @@ -67,14 +67,19 @@ private: Creates an action owned by \a parent. Parameter \a toggle can be used to make the action checkable. + Parameter \a shortcutAction can be used to assign the shortcut from + preferences. This parameter value corresponds to shortcut action identifier + in shortcut preferences. \param parent parent object \param toggle if \c true the action will be a toggle action + \param shortcutAction shortcut action identifier */ -QtxAction::QtxAction( QObject* parent, bool toggle ) +QtxAction::QtxAction( QObject* parent, bool toggle, const QString& shortcutAction ) : QWidgetAction( parent ) { setCheckable( toggle ); + setShortcutActionName(shortcutAction); QApplication::instance()->installEventFilter( this ); } @@ -85,6 +90,9 @@ QtxAction::QtxAction( QObject* parent, bool toggle ) Creates an action owned by \a parent. Parameters \a text, \a icon, \a menuText and \a accel specify the action's attributes. Parameter \a toggle can be used to make the action checkable. + Parameter \a shortcutAction can be used to assign the shortcut from + preferences. This parameter value corresponds to shortcut action identifier + in shortcut preferences. \param text tooltip text \param icon iconset @@ -92,9 +100,10 @@ QtxAction::QtxAction( QObject* parent, bool toggle ) \param accel shortcut key sequence \param parent parent object \param toggle if \c true the action will be a toggle action + \param shortcutAction shortcut action identifier */ -QtxAction::QtxAction( const QString& text, const QIcon& icon, - const QString& menuText, int accel, QObject* parent, bool toggle ) +QtxAction::QtxAction( const QString& text, const QIcon& icon, const QString& menuText, + int accel, QObject* parent, bool toggle, const QString& shortcutAction ) : QWidgetAction( parent ) { setIcon( icon ); @@ -102,6 +111,7 @@ QtxAction::QtxAction( const QString& text, const QIcon& icon, setToolTip( text ); setShortcut( accel ); setCheckable( toggle ); + setShortcutActionName(shortcutAction); QApplication::instance()->installEventFilter( this ); } @@ -112,22 +122,27 @@ QtxAction::QtxAction( const QString& text, const QIcon& icon, Creates an action owned by \a parent. Parameters \a text, \a menuText and \a accel specify the action's attributes. Parameter \a toggle can be used to make the action checkable. + Parameter \a shortcutAction can be used to assign the shortcut from + preferences. This parameter value corresponds to shortcut action identifier + in shortcut preferences. \param text tooltip text \param menuText menu text \param accel shortcut key sequence \param parent parent object \param toggle if \c true the action is a toggle action + \param shortcutAction shortcut action identifier */ QtxAction::QtxAction( const QString& text, const QString& menuText, - int accel, QObject* parent, bool toggle ) + int accel, QObject* parent, bool toggle, const QString& shortcutAction ) : QWidgetAction( parent ) { setText( menuText ); setToolTip( text ); setShortcut( accel ); setCheckable( toggle ); - + setShortcutActionName(shortcutAction); + QApplication::instance()->installEventFilter( this ); } @@ -208,3 +223,27 @@ void QtxAction::customEvent( QEvent* e ) else removedFrom( ae->widget() ); } + +/*! + \brief Return shortcut action name for the action. + + \return shortcut action name + \sa setShortcutActionName() +*/ +QString QtxAction::shortcutActionName() const +{ + return myShortcutActionName; +} + +/*! + \brief Set shortcut action name to the action. + + Shortcut action name is used for shortcuts customization. + + \param shortcutAction shortcut action name + \sa shortcutActionName() +*/ +void QtxAction::setShortcutActionName( const QString& shortcutAction ) +{ + myShortcutActionName = shortcutAction; +} diff --git a/src/Qtx/QtxAction.h b/src/Qtx/QtxAction.h index c7a87293f..4536fa5ba 100755 --- a/src/Qtx/QtxAction.h +++ b/src/Qtx/QtxAction.h @@ -43,18 +43,24 @@ class QTX_EXPORT QtxAction : public QWidgetAction class ActionNotify; public: - QtxAction( QObject* = 0, bool = false ); - QtxAction( const QString&, const QString&, int, QObject*, bool = false ); - QtxAction( const QString&, const QIcon&, const QString&, int, QObject*, bool = false ); + QtxAction( QObject* = 0, bool = false, const QString& = QString() ); + QtxAction( const QString&, const QString&, int, QObject*, bool = false, const QString& = QString() ); + QtxAction( const QString&, const QIcon&, const QString&, int, QObject*, bool = false, const QString& = QString() ); virtual ~QtxAction(); virtual bool eventFilter( QObject*, QEvent* ); + QString shortcutActionName() const; + void setShortcutActionName( const QString& ); + protected: virtual void addedTo( QWidget* ); virtual void removedFrom( QWidget* ); virtual void customEvent( QEvent* ); + +private: + QString myShortcutActionName; }; #ifdef WIN32 diff --git a/src/Qtx/QtxColorButton.cxx b/src/Qtx/QtxColorButton.cxx index af9a76673..635647d6c 100644 --- a/src/Qtx/QtxColorButton.cxx +++ b/src/Qtx/QtxColorButton.cxx @@ -54,7 +54,7 @@ QtxColorButton::QtxColorButton( QWidget* parent ) : QToolButton( parent ) { setCheckable( false ); - setPopupMode( MenuButtonPopup ); + setPopupMode( MenuButtonPopup ); // VSR 11/10/2010 temporarily roolback from InstantPopup (regressions) QMenu* pm = new QMenu( this ); QGridLayout* grid = new QGridLayout( pm ); diff --git a/src/Qtx/QtxMainWindow.cxx b/src/Qtx/QtxMainWindow.cxx index 75abd996f..d3cb76621 100644 --- a/src/Qtx/QtxMainWindow.cxx +++ b/src/Qtx/QtxMainWindow.cxx @@ -110,6 +110,9 @@ QtxMainWindow::QtxMainWindow( QWidget* parent, Qt::WindowFlags f ) myMenuBar( 0 ), myStatusBar( 0 ) { + //rnv: Enables tooltips for inactive windows. + //rnv: For details see http://bugtracker.opencascade.com/show_bug.cgi?id=20893 + setAttribute(Qt::WA_AlwaysShowToolTips); } /*! diff --git a/src/Qtx/QtxPagePrefMgr.cxx b/src/Qtx/QtxPagePrefMgr.cxx index d59c3f89f..979ee0e64 100644 --- a/src/Qtx/QtxPagePrefMgr.cxx +++ b/src/Qtx/QtxPagePrefMgr.cxx @@ -29,6 +29,8 @@ #include "QtxIntSpinBox.h" #include "QtxColorButton.h" #include "QtxDoubleSpinBox.h" +#include "QtxShortcutEdit.h" +#include "QtxResourceMgr.h" #include #include @@ -3069,7 +3071,7 @@ void QtxPagePrefSpinItem::setPrecision( const QVariant& prec ) if ( QtxDoubleSpinBox* dsb = ::qobject_cast( control() ) ) { if ( prec.canConvert( QVariant::Int ) ) { - dsb->setDecimals( prec.toInt() ); + dsb->setDecimals( qAbs( prec.toInt() ) ); dsb->setPrecision( prec.toInt() ); } } @@ -4191,7 +4193,118 @@ void QtxPagePrefDateTimeItem::updateDateTime() myDateTime->setDisplayFormat( dispFmt ); } +/*! + \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 +*/ +QtxPagePrefShortcutBtnsItem::QtxPagePrefShortcutBtnsItem( const QString& title, QtxPreferenceItem* parent, const QString& sect, + const QString& param ): QtxPageNamedPrefItem( title, parent, sect, param ) +{ + setControl( myShortcut = new QtxShortcutEdit() ); +} + +/*! + \brief Destructor. +*/ +QtxPagePrefShortcutBtnsItem::~QtxPagePrefShortcutBtnsItem() +{ +} + +/*! + \brief Store preference item to the resource manager. + \sa retrieve() +*/ +void QtxPagePrefShortcutBtnsItem::store() +{ + setString( myShortcut->shortcut().toString() ); +} + +/*! + \brief Retrieve preference item from the resource manager. + \sa store() +*/ +void QtxPagePrefShortcutBtnsItem::retrieve() +{ + myShortcut->setShortcut( QKeySequence::fromString( getString() ) ); +} + +/*! + \brief Constructor. + + Creates preference item for editing of key bindings + \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 +*/ +QtxPagePrefShortcutTreeItem::QtxPagePrefShortcutTreeItem( const QString& title, QtxPreferenceItem* parent, const QString& sect, + const QString& param ): QtxPageNamedPrefItem( title, parent, sect, "" ) +{ + mySection = sect; + + myShortcutTree = new QtxShortcutTree(); + + // Retrieve shortcuts common sections from resources + QtxResourceMgr* resMgr = resourceMgr(); + if ( resMgr ){ + QString generalSections = resourceMgr()->stringValue( "shortcuts_settings", "general_sections", QString() ); + QStringList sectionsList = generalSections.split( ";", QString::SkipEmptyParts ); + myShortcutTree->setGeneralSections( sectionsList ); + } + + setControl( myShortcutTree ); +} + +/*! + \brief Destructor. +*/ +QtxPagePrefShortcutTreeItem::~QtxPagePrefShortcutTreeItem() +{ +} + +/*! + \brief Retrieve preference item from the resource manager. + \sa store() +*/ +void QtxPagePrefShortcutTreeItem::retrieve() +{ + QtxResourceMgr* resMgr = resourceMgr(); + if ( resMgr ){ + QStringList secLst = resMgr->subSections( mySection, false ); + ShortcutMap aMap; QStringList paramLst; + for( int i = 0; i < secLst.size(); i++ ) { + paramLst = resMgr->parameters( QStringList() << mySection << secLst.at( i ) ); + for( int j = 0; j < paramLst.size(); j++ ) + resMgr->value( mySection + resMgr->sectionsToken() + secLst.at( i ), paramLst.at( j ),aMap[ paramLst.at( j ) ], false ); + myShortcutTree->setBindings( secLst.at( i ), aMap ); + aMap.clear(); + } + } +} + +/*! + \brief Store preference item to the resource manager. + \sa retrieve() +*/ +void QtxPagePrefShortcutTreeItem::store() +{ + QStringList lst = myShortcutTree->sections(); + QString aSection; + QtxResourceMgr* resMgr = resourceMgr(); + + if ( resMgr ) { + for( int i = 0; i < lst.size(); i++ ) { + ShortcutMap* aMap( myShortcutTree->bindings( lst.at( i ) ) ); + aSection = mySection + resMgr->sectionsToken() + lst.at( i ); + for( ShortcutMap::const_iterator it = aMap->constBegin(); it != aMap->constEnd(); ++it ) + resMgr->setValue( aSection, it.key(), it.value() ); + } + } +} /*! \brief Constructor. diff --git a/src/Qtx/QtxPagePrefMgr.h b/src/Qtx/QtxPagePrefMgr.h index 62f1c88bd..5b7ee10eb 100644 --- a/src/Qtx/QtxPagePrefMgr.h +++ b/src/Qtx/QtxPagePrefMgr.h @@ -38,6 +38,8 @@ class QtxFontEdit; class QtxGroupBox; class QtxComboBox; class QtxColorButton; +class QtxShortcutEdit; +class QtxShortcutTree; class QToolBox; class QLineEdit; @@ -50,6 +52,7 @@ class QFileDialog; class QDateTimeEdit; class QStackedWidget; class QSlider; +class QTreeWidget; class QTX_EXPORT QtxPagePrefMgr : public QFrame, public QtxPreferenceMgr { @@ -704,6 +707,32 @@ private: QDateTimeEdit* myDateTime; }; +class QTX_EXPORT QtxPagePrefShortcutBtnsItem : public QtxPageNamedPrefItem +{ +public: + QtxPagePrefShortcutBtnsItem( const QString&, QtxPreferenceItem* = 0, + const QString& = QString(), const QString& = QString() ); + virtual ~QtxPagePrefShortcutBtnsItem(); + virtual void store(); + virtual void retrieve(); + +private: + QtxShortcutEdit* myShortcut; +}; + +class QTX_EXPORT QtxPagePrefShortcutTreeItem : public QtxPageNamedPrefItem +{ +public: + QtxPagePrefShortcutTreeItem( const QString&, QtxPreferenceItem* = 0, + const QString& = QString(), const QString& = QString() ); + virtual ~QtxPagePrefShortcutTreeItem(); + virtual void store(); + virtual void retrieve(); + +private: + QtxShortcutTree* myShortcutTree; + QString mySection; +}; class QtxUserDefinedContent: public QWidget { @@ -732,5 +761,4 @@ private: QtxUserDefinedContent* myContent; }; - #endif diff --git a/src/Qtx/QtxResourceMgr.cxx b/src/Qtx/QtxResourceMgr.cxx index f68c292bc..8328d8a0a 100644 --- a/src/Qtx/QtxResourceMgr.cxx +++ b/src/Qtx/QtxResourceMgr.cxx @@ -31,6 +31,7 @@ #include #include #include +#include #ifndef QT_NO_DOM #include #include @@ -2096,6 +2097,63 @@ QStringList QtxResourceMgr::sections() const return map.keys(); } +/*! + \brief Get all sections names matching specified regular expression. + \param re searched regular expression + \return list of sections names +*/ +QStringList QtxResourceMgr::sections(const QRegExp& re) const +{ + return sections().filter( re ); +} + +/*! + \brief Get all sections names with the prefix specified by passed + list of parent sections names. + + Sub-sections are separated inside the section name by the sections + separator token, for example "splash:color:label". + + \param names parent sub-sections names + \return list of sections names +*/ +QStringList QtxResourceMgr::sections(const QStringList& names) const +{ + QStringList nm = names; + nm << ".+"; + QRegExp re( QString( "^%1$" ).arg( nm.join( sectionsToken() ) ) ); + return sections( re ); +} + +/*! + \brief Get list of sub-sections names for the specified parent section name. + + Sub-sections are separated inside the section name by the sections + separator token, for example "splash:color:label". + + \param section parent sub-section name + \param full if \c true return full names of child sub-sections, if \c false, + return only top-level sub-sections names + \return list of sub-sections names +*/ +QStringList QtxResourceMgr::subSections(const QString& section, const bool full) const +{ + QStringList names = sections( QStringList() << section ); + QMutableListIterator it( names ); + while ( it.hasNext() ) { + QString name = it.next().mid( section.size() + 1 ).trimmed(); + if ( name.isEmpty() ) { + it.remove(); + continue; + } + if ( !full ) name = name.split( sectionsToken() ).first(); + it.setValue( name ); + } + names.removeDuplicates(); + names.sort(); + return names; +} + /*! \brief Get all parameters name in specified section. \param sec section name @@ -2132,6 +2190,21 @@ QStringList QtxResourceMgr::parameters( const QString& sec ) const return pmap.keys(); } +/*! + \brief Get all parameters name in specified + list of sub-sections names. + + Sub-sections are separated inside the section name by the sections + separator token, for example "splash:color:label". + + \param names parent sub-sections names + \return list of settings names +*/ +QStringList QtxResourceMgr::parameters( const QStringList& names ) const +{ + return parameters( names.join( sectionsToken() ) ); +} + /*! \brief Get absolute path to the file which name is defined by the parameter. @@ -2163,7 +2236,7 @@ QString QtxResourceMgr::path( const QString& sect, const QString& prefix, const \brief Get application resources section name. By default, application resources section name is "resources" but - it can be changed by setting the corresponding resources manager option. + it can be changed by setting the "res_section_name" resources manager option. \return section corresponding to the resources directories \sa option(), setOption() @@ -2180,7 +2253,7 @@ QString QtxResourceMgr::resSection() const \brief Get application language section name. By default, application language section name is "language" but - it can be changed by setting the corresponding resources manager option. + it can be changed by setting the "lang_section_name" resources manager option. \return section corresponding to the application language settings \sa option(), setOption() @@ -2193,6 +2266,23 @@ QString QtxResourceMgr::langSection() const return res; } +/*! + \brief Get sections separator token. + + By default, sections separator token is colon symbol ":" but + it can be changed by setting the "section_token" resources manager option. + + \return string corresponding to the current section separator token + \sa option(), setOption() +*/ +QString QtxResourceMgr::sectionsToken() const +{ + QString res = option( "section_token" ); + if ( res.isEmpty() ) + res = QString( ":" ); + return res; +} + /*! \brief Get default pixmap. @@ -2347,6 +2437,14 @@ void QtxResourceMgr::loadLanguage( const QString& pref, const QString& l ) else prefixList = parameters( resSection() ); + if ( pref.isEmpty() && lang != "en" ) { + // load Qt resources + QString qt_translations = QLibraryInfo::location( QLibraryInfo::TranslationsPath ); + QTranslator* trans = new QtxTranslator( 0 ); + if ( trans->load( QString("qt_%1").arg( lang ), qt_translations ) ) + QApplication::instance()->installTranslator( trans ); + } + for ( QStringList::ConstIterator iter = prefixList.begin(); iter != prefixList.end(); ++iter ) { QString prefix = *iter; diff --git a/src/Qtx/QtxResourceMgr.h b/src/Qtx/QtxResourceMgr.h index 5c9970777..9b5356369 100644 --- a/src/Qtx/QtxResourceMgr.h +++ b/src/Qtx/QtxResourceMgr.h @@ -143,6 +143,7 @@ public: QString resSection() const; QString langSection() const; + QString sectionsToken() const; QPixmap loadPixmap( const QString&, const QString& ) const; QPixmap loadPixmap( const QString&, const QString&, const bool ) const; @@ -161,7 +162,11 @@ public: bool save(); QStringList sections() const; + QStringList sections(const QRegExp&) const; + QStringList sections(const QStringList&) const; + QStringList subSections(const QString&, const bool = true) const; QStringList parameters( const QString& ) const; + QStringList parameters( const QStringList& ) const; void refresh(); diff --git a/src/Qtx/QtxShortcutEdit.cxx b/src/Qtx/QtxShortcutEdit.cxx new file mode 100755 index 000000000..efa555de1 --- /dev/null +++ b/src/Qtx/QtxShortcutEdit.cxx @@ -0,0 +1,404 @@ +// Copyright (C) 2007-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 +// + +#include "QtxShortcutEdit.h" + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#define COLUMN_SIZE 500 + +static const char* delete_icon[] = { +"16 16 3 1", +"` c #810000", +" c none", +"# c #ffffff", +" ", +" ", +" ``# ``# ", +" ````# ``# ", +" ````# ``# ", +" ```# `# ", +" `````# ", +" ```# ", +" `````# ", +" ```# ``# ", +" ```# ``# ", +" ```# `# ", +" ```# `# ", +" `# `# ", +" ", +" " +}; + +/*! + \brief Constructor + \param parent parent widget +*/ +QtxShortcutEdit::QtxShortcutEdit( QWidget* parent ) +: QFrame( parent ) +{ + initialize(); + myShortcut->installEventFilter(this); +} + +/*! + \brief Destructor +*/ +QtxShortcutEdit::~QtxShortcutEdit() +{ +} + +/*! + \brief Sets custom shortcut + \param seq a key sequence describes a combination of keys + \sa shortcut() +*/ +void QtxShortcutEdit::setShortcut( const QKeySequence& seq ) +{ + QString txt = seq.toString(); + myPrevShortcutText = txt; + myShortcut->setText( txt ); +} + +/*! + \brief Gets custom shortcut + \return a key sequence describes a combination of keys + \sa setShortcut() +*/ +QKeySequence QtxShortcutEdit::shortcut() +{ + return QKeySequence::fromString( myShortcut->text() ); +} + +/*! + \brief Gets the key sequence from keys that were pressed + \param e a key event + \return a string representation of the key sequence +*/ +QString QtxShortcutEdit::parseEvent( QKeyEvent* e ) +{ + bool isShiftPressed = e->modifiers() & Qt::ShiftModifier; + bool isControlPressed = e->modifiers() & Qt::ControlModifier; + bool isAltPressed = e->modifiers() & Qt::AltModifier; + bool isMetaPressed = e->modifiers() & Qt::MetaModifier; + bool isModifiersPressed = isShiftPressed || isControlPressed || isAltPressed || isMetaPressed; + int result=0; + if( isControlPressed ) + result += Qt::CTRL; + if( isAltPressed ) + result += Qt::ALT; + if( isShiftPressed ) + result += Qt::SHIFT; + if( isMetaPressed ) + result += Qt::META; + + int aKey = e->key(); + if ( ( isValidKey( aKey ) && isModifiersPressed ) || ( ( aKey >= Qt::Key_F1 ) && ( aKey <= Qt::Key_F12 ) ) ) + result += aKey; + + return QKeySequence( result ).toString(); +} + +/*! + \brief Check if the key event contains a 'valid' key + \param aKey the code of the key + \return \c true if the key is 'valid' +*/ + +bool QtxShortcutEdit::isValidKey( int aKey ) +{ + if ( aKey == Qt::Key_Underscore || aKey == Qt::Key_Escape || + ( aKey >= Qt::Key_Backspace && aKey <= Qt::Key_Delete ) || + ( aKey >= Qt::Key_Home && aKey <= Qt::Key_PageDown ) || + ( aKey >= Qt::Key_F1 && aKey <= Qt::Key_F12 ) || + ( aKey >= Qt::Key_Space && aKey <= Qt::Key_Asterisk ) || + ( aKey >= Qt::Key_Comma && aKey <= Qt::Key_Question ) || + ( aKey >= Qt::Key_A && aKey <= Qt::Key_AsciiTilde ) ) + return true; + return false; +} + +/*! + \brief Called when "Clear" button is clicked. +*/ +void QtxShortcutEdit::onCliked() +{ + myShortcut->setText( "" ); +} + +/*! + \brief Called when myShortcut loses focus. +*/ +void QtxShortcutEdit::onEditingFinished() +{ + if ( myShortcut->text().endsWith("+") ) + myShortcut->setText( myPrevShortcutText ); +} + +/*! + \brief Custom event filter. + \param obj event receiver object + \param event event + \return \c true if further event processing should be stopped +*/ +bool QtxShortcutEdit::eventFilter(QObject* obj, QEvent* event) +{ + if ( obj == myShortcut ) { + if (event->type() == QEvent::KeyPress ) { + QKeyEvent* keyEvent = static_cast(event); + QString text = parseEvent( keyEvent ); + if ( keyEvent->key() == Qt::Key_Delete || keyEvent->key() == Qt::Key_Backspace ) + onCliked(); + if ( text != "" ) + myShortcut->setText( text ); + return true; + } + if ( event->type() == QEvent::KeyRelease ) { + if ( myShortcut->text().endsWith("+") ) + myShortcut->setText( myPrevShortcutText ); + else myPrevShortcutText = myShortcut->text(); + + return true; + } + } + return false; +} + +/* + \brief Perform internal intialization. +*/ +void QtxShortcutEdit::initialize() +{ + myPrevShortcutText = QString(); + + QHBoxLayout* base = new QHBoxLayout( this ); + base->setMargin( 0 ); + base->setSpacing( 5 ); + + base->addWidget( myShortcut = new QLineEdit( this ) ); + + QToolButton* deleteBtn = new QToolButton(); + deleteBtn->setIcon( QPixmap( delete_icon ) ); + base->addWidget( deleteBtn ); + + myShortcut->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Fixed ); + deleteBtn->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); + + connect( deleteBtn, SIGNAL( clicked() ), this, SLOT( onCliked() ) ); + connect( myShortcut, SIGNAL( editingFinished() ), this, SLOT( onEditingFinished() ) ); +} + +/*! + \brief Constructor + \param parent parent widget +*/ +QtxShortcutTree::QtxShortcutTree( QWidget * parent ) : QTreeWidget( parent ) +{ + setColumnCount( 2 ); + setSelectionMode( QAbstractItemView::SingleSelection ); + setColumnWidth ( 0, COLUMN_SIZE); + setSortingEnabled(false); + headerItem()->setHidden ( true ); + + this->installEventFilter(this); + connect( this, SIGNAL( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT( onCurrentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ) ); + +} + +/*! + \brief Destructor +*/ +QtxShortcutTree::~QtxShortcutTree(){} + +/*! + \brief Custom event filter. + \param obj event receiver object + \param event event + \return \c true if further event processing should be stopped +*/ +bool QtxShortcutTree::eventFilter(QObject* obj, QEvent* event) +{ + if ( currentItem() && currentItem()->isSelected() ) { + + if (event->type() == QEvent::KeyPress ) { + QKeyEvent* keyEvent = static_cast(event); + QString text = QtxShortcutEdit::parseEvent( keyEvent ); + if ( keyEvent->key() == Qt::Key_Delete || keyEvent->key() == Qt::Key_Backspace ) + currentItem()->setText( 1, "" ); + if ( text != "" ) { + if ( text.endsWith( "+" ) || checkUniqueness( currentItem(), text ) ) + currentItem()->setText( 1, text ); + } + return true; + } + if ( event->type() == QEvent::KeyRelease ) { + if ( currentItem()->text( 1 ).endsWith( "+" ) ) + currentItem()->setText( 1, myPrevBindings[ currentItem()->parent()->text( 0 ) ][ currentItem()->text( 0 ) ] ); + else myPrevBindings[ currentItem()->parent()->text( 0 ) ][ currentItem()->text( 0 ) ] = currentItem()->text( 1 ); + + return true; + } + } + return false; +} + +/*! + \brief Called when the current item changes. + \param cur the current item + \param prev the previous current item +*/ +void QtxShortcutTree::onCurrentItemChanged( QTreeWidgetItem* cur, QTreeWidgetItem* prev ) +{ + if ( prev && prev->text( 1 ).endsWith( "+" ) ) + prev->setText( 1, myPrevBindings[ prev->parent()->text( 0 ) ][ prev->text( 0 ) ] ); +} + +/*! + \brief Set key bindings to the tree + \param title the name of top-level item + \param theShortcutMap map of key bindings +*/ +void QtxShortcutTree::setBindings( const QString& title, const ShortcutMap& theShortcutMap ) +{ + QTreeWidgetItem* item= new QTreeWidgetItem(); + QFont font = item->font(0); + font.setBold(true); + + if ( findItems( title, Qt::MatchFixedString ).isEmpty() ) { + item->setText( 0, title ); + item->setFont( 0, font ); + addTopLevelItem( item ); + item->setFlags( Qt::ItemIsEnabled ); + } else { + item = findItems( title, Qt::MatchFixedString ).first(); + item->takeChildren(); + } + for( ShortcutMap::const_iterator it = theShortcutMap.constBegin(); it != theShortcutMap.constEnd(); ++it ) + item->addChild( new QTreeWidgetItem( QStringList() << it.key() << it.value() ) ); + myPrevBindings.insert( title, theShortcutMap); +} + +/*! + \brief Get all sections names. + \return list of section names +*/ +QStringList QtxShortcutTree::sections() const +{ + QStringList lst; + for( int i = 0; i < topLevelItemCount(); i++ ) + lst << topLevelItem( i )->text( 0 ); + return lst; +} + +ShortcutMap* QtxShortcutTree::bindings( const QString& sec ) const +{ + ShortcutMap* aMap = new ShortcutMap(); + QTreeWidgetItem* item = findItems( sec, Qt::MatchFixedString ).first(); + int nbChildren = item->childCount(); + + for( int i = 0; i < nbChildren; i++ ) { + QTreeWidgetItem* child = item->child(i); + aMap->insert( child->text( 0 ), child->text( 1 ) ); + } + + return aMap; +} + +void QtxShortcutTree::focusOutEvent ( QFocusEvent* event ) +{ + QWidget::focusOutEvent( event ); + if ( currentItem() && currentItem()->isSelected() ) + currentItem()->setText( 1, myPrevBindings[ currentItem()->parent()->text( 0 ) ][ currentItem()->text( 0 ) ] ); +} + +/*! + \brief Set the list of shortcuts general sections. + + Key combinations in general sections should not intersect + with any other key combinations. + + \param sectionsList list of common section names +*/ +void QtxShortcutTree::setGeneralSections( const QStringList& sectionsList ) +{ + myGeneralSections = sectionsList; +} + +/*! + \brief Check uniqueness of the shortcut. + \param item current item of the shortcut tree + \param shortcut shortcut appointed for the current item + \return \c true if the given shortcut is allowed +*/ +bool QtxShortcutTree::checkUniqueness( QTreeWidgetItem* item, const QString& shortcut ) +{ + // List of sections to check shortcut intersections + QStringList sectionsList; + + // Current section + QString currentSection = currentItem()->parent()->text( 0 ); + + // If the current section is general + if ( myGeneralSections.contains(currentSection) ) { + sectionsList = sections(); + int currentSectionIndex = sectionsList.indexOf(currentSection); + sectionsList.move( currentSectionIndex, 0); + } + else { + sectionsList = myGeneralSections; + sectionsList.prepend(currentSection); + } + + // Iterate on sections + QStringList::const_iterator it; + for( it = sectionsList.constBegin(); it != sectionsList.constEnd(); ++it ) { + QString section = *it; + + // Iterate on actual section + QTreeWidgetItem* sectionRoot = findItems( section, Qt::MatchFixedString ).first(); + int nbChildren = sectionRoot->childCount(); + + for( int i = 0; i < nbChildren; i++ ) { + QTreeWidgetItem* child = sectionRoot->child(i); + + if ( (child != item) && (shortcut == child->text( 1 )) ) { + bool res = QMessageBox::warning( parentWidget(), tr("Warning"), + tr("The \"%1\" shortcut has already used by the \"%2\" action.\n") + .arg(shortcut, section + ":" + child->text( 0 ) ) + + tr("Do you want to reassign it from that action to the current one?"), + QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes; + if (res) + child->setText( 1, "" ); + return res; + } + } + } + + return true; +} diff --git a/src/Qtx/QtxShortcutEdit.h b/src/Qtx/QtxShortcutEdit.h new file mode 100755 index 000000000..01791d761 --- /dev/null +++ b/src/Qtx/QtxShortcutEdit.h @@ -0,0 +1,87 @@ +// Copyright (C) 2007-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 +// + +#ifndef QTXSHORTCUTEDIT_H +#define QTXSHORTCUTEDIT_H + +#include "Qtx.h" + +#include +#include + +class QLineEdit; +class QPushButton; +class QTreeWidgetItem; + +typedef QMap< QString, QString > ShortcutMap; + +class QTX_EXPORT QtxShortcutEdit : public QFrame +{ + Q_OBJECT + +public: + QtxShortcutEdit( QWidget* = 0 ); + virtual ~QtxShortcutEdit(); + void setShortcut( const QKeySequence& ); + QKeySequence shortcut(); + static QString parseEvent( QKeyEvent* ); + static bool isValidKey( int ); + + +private slots: + void onCliked(); + void onEditingFinished(); + +protected: + virtual bool eventFilter( QObject*, QEvent* ); + +private: + void initialize(); + +private: + QLineEdit* myShortcut; + QString myPrevShortcutText; +}; + +class QTX_EXPORT QtxShortcutTree : public QTreeWidget +{ + Q_OBJECT + +public: + QtxShortcutTree( QWidget * parent = 0 ); + virtual ~QtxShortcutTree(); + void setBindings( const QString&, const ShortcutMap& ); + ShortcutMap* bindings( const QString& ) const; + QStringList sections() const; + void setGeneralSections( const QStringList& ); + +protected: + virtual bool eventFilter( QObject*, QEvent* ); + virtual void focusOutEvent( QFocusEvent* ); + virtual bool checkUniqueness( QTreeWidgetItem*, const QString& ); + +private slots: + void onCurrentItemChanged( QTreeWidgetItem*, QTreeWidgetItem* ); + +private: + QMap< QString, ShortcutMap > myPrevBindings; + QStringList myGeneralSections; +}; + +#endif // QTXSHORTCUTEDIT_H diff --git a/src/Qtx/QtxTreeView.cxx b/src/Qtx/QtxTreeView.cxx index d86270d85..437092838 100644 --- a/src/Qtx/QtxTreeView.cxx +++ b/src/Qtx/QtxTreeView.cxx @@ -124,7 +124,7 @@ void QtxTreeView::Header::contextMenuEvent( QContextMenuEvent* e ) QAction* sortAction = 0; if ( count() > 0 && myEnableSortMenu ) { menu.addSeparator(); - sortAction = menu.addAction( tr( "Enable sorting" ) ); + sortAction = menu.addAction( QtxTreeView::tr( "Enable sorting" ) ); sortAction->setCheckable( true ); sortAction->setChecked( isSortIndicatorShown() ); } diff --git a/src/Qtx/resources/Qtx_msg_fr.ts b/src/Qtx/resources/Qtx_msg_fr.ts new file mode 100644 index 000000000..5981c3c1e --- /dev/null +++ b/src/Qtx/resources/Qtx_msg_fr.ts @@ -0,0 +1,286 @@ + + + + + QtxTreeView + + Enable sorting + Autoriser le tri + + + + QtxWorkspaceAction + + Arranges the windows as overlapping tiles + Ranger les fenêtres en les superposant + + + Cascade + Cascade + + + Arranges the windows as nonoverlapping tiles + Ranger les fenêtres sans les superposer + + + Tile + Mosaïque + + + Arranges the windows as nonoverlapping horizontal tiles + Ranger les fenêtres en mosaïque horizontale + + + Tile horizontally + Mosaïque horizontale + + + Arranges the windows as nonoverlapping vertical tiles + Ranger les fenêtres en mosaïque verticale + + + Tile vertically + Mosaïque verticale + + + + QtxMainWindow + + Menu bar + Barre de menu + + + Status bar + Barre de statut + + + + QtxPathDialog + + Open file + Ouvrir le fichier + + + Save file + Sauvegarder le fichier + + + File name + Nom du fichier + + + File name not specified + Le nom du fichier n'est pas indiqué + + + File \"%1\" does not exist + Le fichier \"%1\" n'existe pas + + + File \"%1\" already exist. Do you want to overwrite it? + Le fichier \"%1\" existe déjà. Voulez-vous l'écraser ? + + + Directory \"%1\" does not exist + Le répertoire \"%1\" n'existe pas + + + Directory \"%1\" can't be created because file with the same name exist + Il est impossible de créer le répertoire \"%1\" parce qu'un fichier avec ce nom existe déjà + + + Directory \"%1\" not empty. Do you want to remove all files in this directory? + Le répertoire \"%1\" n'est pas vide. Voulez-vous supprimer tous les fichiers dans ce répertoire? + + + File dialog + Fenêtre de dialogue de fichiers + + + All files (*.*) + Tous les fichiers (*.*) + + + + QtxFontEdit + + B + Bold + G + + + I + Italic + I + + + U + Underline + S + + + S + Strikethrough + R + + + + QtxPathListEdit + + Warning + Avertissement + + + Path \"%1\" doesn't exist. Add it to list anyway? + Le chemin \"%1\" n'existe pas. Faut-il l'ajouter dans la liste? + + + Error + Erreur + + + Location \"%1\" doesn't point to file + L'emplacement \"%1\" ne pointe sur aucun fichier + + + Location \"%1\" doesn't point to directory + L'emplacement \"%1\" ne pointe sur aucun répertoire + + + Path \"%1\" already exist in the list + Le chemin \"%1\" existe déjà dans la liste + + + + QtxMRUAction + + Most Recently Used + Récemment utilisés + + + Clear + Effacer + + + <Empty> + <Vide> + + + + QtxDialog + + &OK + &OK + + + &Cancel + &Annuler + + + C&lose + &Fermer + + + &Help + &Aide + + + &Apply + A&ppliquer + + + &Yes + &Oui + + + &No + &Non + + + + QtxSearchTool + + Case sensitive + Sensible à la casse + + + Regular expression + Expression régulière + + + Wrap search + Terminer la recherche + + + + QtxSplash + + Error + Erreur + + + &OK + &OK + + + + QtxWorkstack + + Split vertically + Diviser verticalement + + + Split horizontally + Diviser horisontalement + + + Close + Fermer + + + Rename + Renommer + + + Enter new name: + Indiquer un nouveau nom: + + + + QtxWorkstackAction + + Split the active window on two vertical parts + Diviser la fenêtre actuelle en deux parties verticales + + + Split vertically + Diviser verticalement + + + Split the active window on two horizontal parts + Diviser la fenêtre actuelle en deux parties horizontales + + + Split horizontally + Diviser horizontalement + + + + QtxColorButton + + Auto + Auto + + + Other colors... + Autres couleurs... + + + + QtxColorScale + + Color scale + Echelle de couleurs + + + diff --git a/src/QxGraph/Makefile.am b/src/QxGraph/Makefile.am index a3ee2853c..d7366aee2 100755 --- a/src/QxGraph/Makefile.am +++ b/src/QxGraph/Makefile.am @@ -63,7 +63,8 @@ dist_salomeres_DATA = \ nodist_salomeres_DATA = \ QxGraph_images.qm \ - QxGraph_msg_en.qm + QxGraph_msg_en.qm \ + QxGraph_msg_fr.qm libQxGraph_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) \ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT diff --git a/src/QxGraph/resources/QxGraph_msg_en.ts b/src/QxGraph/resources/QxGraph_msg_en.ts index ddd193551..08f6833f9 100644 --- a/src/QxGraph/resources/QxGraph_msg_en.ts +++ b/src/QxGraph/resources/QxGraph_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/QxGraph/resources/QxGraph_msg_fr.ts b/src/QxGraph/resources/QxGraph_msg_fr.ts new file mode 100755 index 000000000..c03cdeb51 --- /dev/null +++ b/src/QxGraph/resources/QxGraph_msg_fr.ts @@ -0,0 +1,31 @@ + + + + + @default + + MEN_CHANGE_BACKGROUND + Changer l'arrière-plan... + + + MNU_PAN_VIEW + Déplacement + + + DSC_PAN_VIEW + Déplacer la vue + + + MNU_RESET_VIEW + Restaurer + + + DSC_RESET_VIEW + Restaurer le point de vue + + + LBL_TOOLBAR_LABEL + Opérations de Visualisation + + + diff --git a/src/QxScene/Makefile.am b/src/QxScene/Makefile.am index d877bf81e..72f9947c2 100755 --- a/src/QxScene/Makefile.am +++ b/src/QxScene/Makefile.am @@ -55,7 +55,8 @@ dist_salomeres_DATA= \ nodist_salomeres_DATA= \ QxSceneViewer_images.qm \ - QxSceneViewer_msg_en.qm + QxSceneViewer_msg_en.qm \ + QxSceneViewer_msg_fr.qm libQxScene_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) \ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT diff --git a/src/QxScene/resources/QxSceneViewer_msg_en.ts b/src/QxScene/resources/QxSceneViewer_msg_en.ts index 4ad001ec8..fe62d243d 100644 --- a/src/QxScene/resources/QxSceneViewer_msg_en.ts +++ b/src/QxScene/resources/QxSceneViewer_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/QxScene/resources/QxSceneViewer_msg_fr.ts b/src/QxScene/resources/QxSceneViewer_msg_fr.ts new file mode 100755 index 000000000..a69b81928 --- /dev/null +++ b/src/QxScene/resources/QxSceneViewer_msg_fr.ts @@ -0,0 +1,38 @@ + + + + + @default + + MEN_CHANGE_BACKGROUND + Changer l'arrière-plan + + + MNU_PAN_VIEW + Déplacement + + + DSC_PAN_VIEW + Déplacer la vue + + + MNU_RESET_VIEW + Restaurer + + + DSC_RESET_VIEW + Restaurer le point de vue + + + LBL_TOOLBAR_LABEL + Opérations de visualisation + + + + QxScene_ViewManager + + QXSCENE_VIEW_TITLE + QGraphics scène:%M - visualisateur:%V + + + diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx index 14bcf08bd..c89d9cc0b 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx +++ b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx @@ -197,6 +197,15 @@ void SALOME_PYQT_Module::onViewClosed( SUIT_ViewWindow* pview ) SALOME_PYQT_ModuleLight::onViewClosed( pview ); } +/*! + \brief Signal handler tryClose(SUIT_ViewWindow*) of a view + \param pview view user tries to close +*/ +void SALOME_PYQT_Module::onViewTryClose( SUIT_ViewWindow* pview ) +{ + SALOME_PYQT_ModuleLight::onViewTryClose( pview ); +} + /*! \breif Process application preferences changing. diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h index 950f723ed..f4a35eaeb 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h +++ b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h @@ -54,6 +54,7 @@ public slots: void onGUIEvent(); void onActiveViewChanged( SUIT_ViewWindow* ); void onViewClosed( SUIT_ViewWindow* ); + void onViewTryClose( SUIT_ViewWindow* ); void onViewCloned( SUIT_ViewWindow* ); protected: diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.cxx b/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.cxx index 50861058a..675ac783b 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.cxx +++ b/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.cxx @@ -862,7 +862,7 @@ void SALOME_PYQT_ModuleLight::init( CAM_Application* app ) PyLockWrapper aLock = myInterp->GetLockWrapper(); // ... (the Python module is already imported) // ... finally call Python module's initialize() method - if ( PyObject_HasAttrString( myModule, "initialize" ) ) { + if ( PyObject_HasAttrString( myModule, (char*)"initialize" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"initialize", (char*)"" ) ); if ( !res ) { PyErr_Print(); @@ -876,7 +876,7 @@ void SALOME_PYQT_ModuleLight::init( CAM_Application* app ) myWindowsMap.insert( LightApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea ); myWindowsMap.insert( LightApp_Application::WT_LogWindow, Qt::BottomDockWidgetArea ); - if ( PyObject_HasAttrString( myModule , "windows" ) ) { + if ( PyObject_HasAttrString( myModule , (char*)"windows" ) ) { PyObjWrapper res1( PyObject_CallMethod( myModule, (char*)"windows", (char*)"" ) ); if ( !res1 ) { PyErr_Print(); @@ -903,7 +903,7 @@ void SALOME_PYQT_ModuleLight::init( CAM_Application* app ) // get compatible view windows types from the Python module // by calling views() method - if ( PyObject_HasAttrString( myModule , "views" ) ) { + if ( PyObject_HasAttrString( myModule , (char*)"views" ) ) { PyObjWrapper res2( PyObject_CallMethod( myModule, (char*)"views", (char*)"" ) ); if ( !res2 ) { PyErr_Print(); @@ -966,7 +966,7 @@ void SALOME_PYQT_ModuleLight::activate( SUIT_Study* theStudy ) PyLockWrapper aLock = myInterp->GetLockWrapper(); // call Python module's activate() method (for the new modules) - if ( PyObject_HasAttrString( myModule , "activate" ) ) { + if ( PyObject_HasAttrString( myModule , (char*)"activate" ) ) { PyObject* res1 = PyObject_CallMethod( myModule, (char*)"activate", (char*)"" ); if ( !res1 || !PyBool_Check( res1 ) ) { PyErr_Print(); @@ -1039,7 +1039,7 @@ void SALOME_PYQT_ModuleLight::customize( SUIT_Study* theStudy ) if ( IsCallOldMethods ) { // call Python module's setSettings() method (obsolete) - if ( PyObject_HasAttrString( myModule , "setSettings" ) ) { + if ( PyObject_HasAttrString( myModule , (char*)"setSettings" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"setSettings", (char*)"" ) ); if( !res ) { PyErr_Print(); @@ -1066,7 +1066,7 @@ void SALOME_PYQT_ModuleLight::deactivate( SUIT_Study* theStudy ) return; } // then call Python module's deactivate() method - if ( PyObject_HasAttrString( myModule , "deactivate" ) ) { + if ( PyObject_HasAttrString( myModule , (char*)"deactivate" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"deactivate", (char*)"" ) ); if( !res ) { PyErr_Print(); @@ -1120,7 +1120,7 @@ void SALOME_PYQT_ModuleLight::studyChanged( SUIT_Study* theStudy ) PyLockWrapper aLock = myInterp->GetLockWrapper(); // call Python module's activeStudyChanged() method - if ( PyObject_HasAttrString( myModule, "activeStudyChanged" ) ) { + if ( PyObject_HasAttrString( myModule, (char*)"activeStudyChanged" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"activeStudyChanged", (char*)"i", aStudyId ) ); if( !res ) { PyErr_Print(); @@ -1154,7 +1154,7 @@ void SALOME_PYQT_ModuleLight::contextMenu( const QString& theContext, QMenu* the QString aContext( "" ), aObject( "" ), aParent( theContext ); - if ( IsCallOldMethods && PyObject_HasAttrString( myModule, "definePopup" ) ) { + if ( IsCallOldMethods && PyObject_HasAttrString( myModule, (char*)"definePopup" ) ) { // call definePopup() Python module's function // this is obsolete function, used only for compatibility reasons PyObjWrapper res( PyObject_CallMethod( myModule, @@ -1189,7 +1189,7 @@ void SALOME_PYQT_ModuleLight::contextMenu( const QString& theContext, QMenu* the #endif // then call Python module's createPopupMenu() method (for new modules) - if ( PyObject_HasAttrString( myModule, "createPopupMenu" ) ) { + if ( PyObject_HasAttrString( myModule, (char*)"createPopupMenu" ) ) { PyObjWrapper res1( PyObject_CallMethod( myModule, (char*)"createPopupMenu", (char*)"Os", @@ -1200,7 +1200,7 @@ void SALOME_PYQT_ModuleLight::contextMenu( const QString& theContext, QMenu* the } } - if ( IsCallOldMethods && PyObject_HasAttrString( myModule, "customPopup" ) ) { + if ( IsCallOldMethods && PyObject_HasAttrString( myModule, (char*)"customPopup" ) ) { // call customPopup() Python module's function // this is obsolete function, used only for compatibility reasons PyObjWrapper res2( PyObject_CallMethod( myModule, @@ -1233,7 +1233,7 @@ void SALOME_PYQT_ModuleLight::guiEvent( const int theId ) if ( !myInterp || !myModule ) return; - if ( PyObject_HasAttrString( myModule, "OnGUIEvent" ) ) { + if ( PyObject_HasAttrString( myModule, (char*)"OnGUIEvent" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"OnGUIEvent", (char*)"i", theId ) ); if( !res ) { PyErr_Print(); @@ -1260,7 +1260,7 @@ void SALOME_PYQT_ModuleLight::initPreferences() // might be called during the module intialization process myInitModule = this; - if ( PyObject_HasAttrString( myModule, "createPreferences" ) ) { + if ( PyObject_HasAttrString( myModule, (char*)"createPreferences" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"createPreferences", (char*)"" ) ); if( !res ) { PyErr_Print(); @@ -1404,7 +1404,7 @@ void SALOME_PYQT_ModuleLight::setWorkSpace() PyObjWrapper pyws( sipBuildResult( 0, "D", aWorkspace, sipType_QWidget , NULL) ); #endif // ... and finally call Python module's setWorkspace() method (obsolete) - if ( PyObject_HasAttrString( myModule, "setWorkSpace" ) ) { + if ( PyObject_HasAttrString( myModule, (char*)"setWorkSpace" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"setWorkSpace", (char*)"O", pyws.get() ) ); if( !res ) { PyErr_Print(); @@ -1431,7 +1431,7 @@ void SALOME_PYQT_ModuleLight::prefChanged( const QString& section, const QString if ( !myInterp || !myModule ) return; - if ( PyObject_HasAttrString( myModule, "preferenceChanged" ) ) { + if ( PyObject_HasAttrString( myModule, (char*)"preferenceChanged" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"preferenceChanged", (char*)"ss", @@ -1829,7 +1829,7 @@ void SALOME_PYQT_ModuleLight::activeViewChanged( const SUIT_ViewWindow* pview ) connectView( pview ); - if ( PyObject_HasAttrString( myModule, "activeViewChanged" ) ) + if ( PyObject_HasAttrString( myModule, (char*)"activeViewChanged" ) ) { if ( !pview ) return; @@ -1876,7 +1876,7 @@ void SALOME_PYQT_ModuleLight::viewCloned( const SUIT_ViewWindow* pview ) if ( !myInterp || !myModule || !pview ) return; - if ( PyObject_HasAttrString( myModule, "viewCloned" ) ) + if ( PyObject_HasAttrString( myModule, (char*)"viewCloned" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"viewCloned", (char*)"i", pview->getId() ) ); if( !res ) @@ -1884,6 +1884,52 @@ void SALOME_PYQT_ModuleLight::viewCloned( const SUIT_ViewWindow* pview ) } } +/*! + \brief Signal handler tryClose(SUIT_ViewWindow*) of a view + \param pview view being closed +*/ +void SALOME_PYQT_ModuleLight::onViewTryClose( SUIT_ViewWindow* pview ) +{ + class ViewTryClose : public PyInterp_LockRequest + { + public: + ViewTryClose( PyInterp_Interp* _py_interp, SALOME_PYQT_ModuleLight* _obj, const SUIT_ViewWindow* _pview ) + : PyInterp_LockRequest( _py_interp, 0, true ), + myObj(_obj),myView(_pview) {} + + protected: + virtual void execute() + { + myObj->viewTryClose( myView ); + } + + private: + SALOME_PYQT_ModuleLight* myObj; + const SUIT_ViewWindow * myView; + }; + + PyInterp_Dispatcher::Get()->Exec( new ViewTryClose( myInterp, this, pview ) ); +} + +/*! + \brief Processes the view closing attempt, calls Python module's viewTryClose() method + \param pview view user tries to close +*/ +void SALOME_PYQT_ModuleLight::viewTryClose( const SUIT_ViewWindow* pview ) +{ + if ( !myInterp || !myModule ) + return; + + if ( PyObject_HasAttrString( myModule, (char*)"viewTryClose" ) ) + { + PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"viewTryClose", (char*)"i", pview->getId() ) ); + if ( !res ) + { + PyErr_Print(); + } + } +} + /*! \brief Signal handler closing(SUIT_ViewWindow*) of a view \param pview view being closed @@ -1920,7 +1966,7 @@ void SALOME_PYQT_ModuleLight::viewClosed( const SUIT_ViewWindow* pview ) if ( !myInterp || !myModule ) return; - if ( PyObject_HasAttrString( myModule, "viewClosed" ) ) + if ( PyObject_HasAttrString( myModule, (char*)"viewClosed" ) ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"viewClosed", (char*)"i", pview->getId() ) ); if ( !res ) @@ -1941,9 +1987,13 @@ void SALOME_PYQT_ModuleLight::connectView( const SUIT_ViewWindow* pview ) if ( viewMgr ) { + disconnect( viewMgr, SIGNAL( tryCloseView( SUIT_ViewWindow* ) ), + this, SLOT( onViewTryClose( SUIT_ViewWindow* ) ) ); disconnect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ), - this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) ); + this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) ); + connect( viewMgr, SIGNAL( tryCloseView( SUIT_ViewWindow* ) ), + this, SLOT( onViewTryClose( SUIT_ViewWindow* ) ) ); connect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ), this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) ); } @@ -2388,7 +2438,7 @@ void SALOME_PYQT_ModuleLight::saveEvent(QStringList& theListOfFiles) if ( !myInterp || !myModule || (it == theListOfFiles.end())) return; - if ( PyObject_HasAttrString(myModule, "saveFiles") ) { + if ( PyObject_HasAttrString(myModule, (char*)"saveFiles") ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"saveFiles", (char*)"s", (*it).toLatin1().constData())); if( !res ) { @@ -2470,7 +2520,7 @@ void SALOME_PYQT_ModuleLight::openEvent(QStringList theListOfFiles, bool &opened #else PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList , NULL) ); #endif - if ( PyObject_HasAttrString(myModule , "openFiles") ) { + if ( PyObject_HasAttrString(myModule , (char*)"openFiles") ) { PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"openFiles", (char*)"O", sipList.get())); if( !res || !PyBool_Check( res )) { diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.h b/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.h index 90fce3969..1fa012262 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.h +++ b/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_ModuleLight.h @@ -158,12 +158,13 @@ public slots: void onGUIEvent(); void onActiveViewChanged( SUIT_ViewWindow* ); + void onViewTryClose( SUIT_ViewWindow* ); void onViewClosed( SUIT_ViewWindow* ); void onViewCloned( SUIT_ViewWindow* ); protected: /* create data model */ - virtual CAM_DataModel* createDataModel(); + virtual CAM_DataModel* createDataModel(); private: void init( CAM_Application* ); @@ -182,6 +183,7 @@ private: void setWorkSpace(); void activeViewChanged( const SUIT_ViewWindow* ); + void viewTryClose( const SUIT_ViewWindow* ); void viewClosed( const SUIT_ViewWindow* ); void viewCloned( const SUIT_ViewWindow* ); void connectView( const SUIT_ViewWindow* ); diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx index bfda59f2d..f466eb966 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx @@ -2365,6 +2365,45 @@ int SalomePyQt::createView( const QString& type ) return ProcessEvent( new TCreateView( type ) ); } +/*! + \fn int SalomePyQt::createView( const QString& type, QWidget* w ) + \brief Create new view with custom widget embedded and activate it + \param type viewer type + \param w custom widget + \return integer identifier of created view (or -1 if view could not be created) +*/ + +class TCreateViewWg: public SALOME_Event +{ +public: + typedef int TResult; + TResult myResult; + QString myType; + QWidget* myWidget; + TCreateViewWg( const QString& theType, QWidget* w ) + : myResult( -1 ), + myType( theType ), + myWidget( w ) {} + virtual void Execute() + { + LightApp_Application* app = getApplication(); + if ( app ) + { + SUIT_ViewManager* viewMgr = app->createViewManager( myType, myWidget ); + if ( viewMgr ) + { + SUIT_ViewWindow* wnd = viewMgr->getActiveView(); + if ( wnd ) + myResult = wnd->getId(); + } + } + } +}; +int SalomePyQt::createView( const QString& type, QWidget* w ) +{ + return ProcessEvent( new TCreateViewWg( type, w ) ); +} + /*! \fn bool SalomePyQt::closeView( const int id ) \brief Close view @@ -2483,6 +2522,61 @@ bool SalomePyQt::isViewVisible( const int id ) return ProcessEvent( new TIsViewVisible( id ) ); } +/*! + \fn bool SalomePyQt::setViewClosable( const int id, const bool on ) + \brief Set / clear view's "closable" option. By default any view is closable + (i.e. can be closed by the user). + \param id window identifier + \param on new "closable" option's value +*/ + +void SalomePyQt::setViewClosable( const int id, const bool on ) +{ + class TEvent: public SALOME_Event + { + int myWndId; + bool myOn; + public: + TEvent( const int id, const bool on ) + : myWndId( id ), myOn( on ) {} + virtual void Execute() + { + SUIT_ViewWindow* wnd = getWnd( myWndId ); + if ( wnd ) wnd->setClosable( myOn ); + } + }; + ProcessVoidEvent( new TEvent( id, on ) ); +} + +/*! + \fn bool SalomePyQt::isViewClosable( const int id ) + \brief Check whether view is closable (i.e. can be closed by the user) + \param id window identifier + \return \c true if view is closable or \c false otherwise +*/ + +class TIsViewClosable: public SALOME_Event +{ +public: + typedef bool TResult; + TResult myResult; + int myWndId; + TIsViewClosable( const int id ) + : myResult( true ), + myWndId( id ) {} + virtual void Execute() + { + SUIT_ViewWindow* wnd = getWnd( myWndId ); + if ( wnd ) + myResult = wnd->closable(); + } +}; + +bool SalomePyQt::isViewClosable( const int id ) +{ + return ProcessEvent( new TIsViewClosable( id ) ); +} + /*! \fn bool SalomePyQt::groupAllViews() \brief Group all views to the single tab area diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h index 0aaa9f395..885b708db 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h @@ -230,10 +230,13 @@ public: static QList findViews( const QString& ); static bool activateView( const int ); static int createView( const QString& ); + static int createView( const QString&, QWidget* ); static bool closeView( const int ); static int cloneView( const int ); - static bool isViewVisible( const int id ); - + static bool isViewVisible( const int ); + static void setViewClosable( const int, const bool ); + static bool isViewClosable( const int ); + static bool groupAllViews(); static bool splitView( const int, const Orientation, const Action ); static bool moveView( const int, const int, const bool ); diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip index 60bbb4f42..229c82736 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip @@ -317,9 +317,12 @@ public: static QList findViews( const QString& ) /ReleaseGIL/ ; static bool activateView( const int ) /ReleaseGIL/ ; static int createView( const QString& ) /ReleaseGIL/ ; + static int createView( const QString&, QWidget* ) /ReleaseGIL/ ; static bool closeView( const int ) /ReleaseGIL/ ; static int cloneView( const int ) /ReleaseGIL/ ; static bool isViewVisible( const int id ) /ReleaseGIL/ ; + static void setViewClosable( const int id, const bool ) /ReleaseGIL/ ; + static bool isViewClosable( const int id ) /ReleaseGIL/ ; static bool groupAllViews() /ReleaseGIL/ ; static bool splitView( const int, Orientation, Action ) /ReleaseGIL/ ; diff --git a/src/STD/Makefile.am b/src/STD/Makefile.am index 7c023b577..2e8d99fb4 100755 --- a/src/STD/Makefile.am +++ b/src/STD/Makefile.am @@ -71,7 +71,8 @@ dist_salomeres_DATA = \ nodist_salomeres_DATA = \ STD_images.qm \ - STD_msg_en.qm + STD_msg_en.qm \ + STD_msg_fr.qm libstd_la_CPPFLAGS = $(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx libstd_la_LDFLAGS = $(QT_MT_LIBS) diff --git a/src/STD/resources/STD_msg_en.ts b/src/STD/resources/STD_msg_en.ts index b6c4b838d..da25cadba 100644 --- a/src/STD/resources/STD_msg_en.ts +++ b/src/STD/resources/STD_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default @@ -409,7 +388,7 @@ Do you want to overwrite it? PRP_DESK_FILE_LOAD - Load a document + Loads a document PRP_DESK_WINDOW_HTILE diff --git a/src/STD/resources/STD_msg_fr.ts b/src/STD/resources/STD_msg_fr.ts new file mode 100755 index 000000000..d4a11f3c6 --- /dev/null +++ b/src/STD/resources/STD_msg_fr.ts @@ -0,0 +1,490 @@ + + + + + @default + + TOT_DESK_EDIT_CUT + Couper + + + PRP_DESK_EDIT_CUT + Couper la sélection et la placer dans la presse-papier + + + MEN_DESK_EDIT_CUT + Co&uper + + + ERR_APP_NOAPP + Pas d'application + + + MEN_DESK_WINDOW + &Fenêtre + + + TOT_DESK_EDIT_COPY + Copier + + + MEN_DESK_WINDOW_CASCADE + Cascade + + + PRP_DESK_EDIT_COPY + Copier la sélection dans le presse-papiers + + + PRP_DESK_WINDOW_CASCADE + Ranger les fenêtres en cascade + + + TOT_DESK_FILE_SAVEAS + Enregistrer le document sous... + + + MEN_DESK_EDIT_COPY + &Copier + + + MSG_CANT_SAVE + Impossible de sauvegarder le fichier "%1". + + + INF_DESK_TOOLBAR_STANDARD + Standard + + + ALL_FILES + Tous les fichiers (*.*) + + + DESK_DEFAULTTITLE + Qt Framework d'Applications + + + QUE_DESK_EXIT + Voulez-vous vraiment quitter ? + + + INF_INFO + Information + + + ERR_DOC_UNKNOWNTYPE_OPEN + Vous essayez d'ouvrir un document de type inconnu +( %1 ) + + + ERR_DOC_UNKNOWNTYPE_SAVE + Vous essayez de sauvegarder le document sous un type inconnu +( %1 ) + + + TOT_DESK_NEWWINDOW + Créer une nouvelle fenêtre + + + BUT_CANCEL + &Annuler + + + MEN_DESK_HELP_ABOUT + &A propos de... + + + PRP_DESK_NEWWINDOW + Créer une nouvelle fenêtre + + + MEN_DESK_VIEW_STATUSBAR + &Barre de status + + + MEN_DESK_NEWWINDOW + &Nouvelle fenêtre + + + PRP_DESK_VIEW_STATUSBAR + Activer ou désactiver la barre de status + + + ERR_DOC_DIRWITHNAMEEXIST_SAVE + Impossible de sauvegarder le fichier %1. +Un répertoire avec ce nom existe déjà sur le disque. Essayez d'utiliser un autre nom + + + BUT_NO + N&on + + + BUT_OK + O&k + + + FILTER_FILES + Fichiers %1 (%2) + + + PRP_DESK_WINDOW_ACTIVATE + Activer la fenêtre + + + TOT_DESK_FILE_PRINT + Imprimer un document + + + TOT_DESK_FILE_CLOSE + Fermer le document + + + TOT_DESK_FILE_NEW + Créer un nouveau document + + + PRP_DESK_FILE_NEW + Crée un nouveau document + + + PRP_DESK_FILE_MRU + Ouvre un document + + + MEN_DESK_FILE_NEW + &Nouveau + + + MEN_DESK_FILE_MRU + &Fichiers récents + + + TOT_DESK_EDIT_PASTE + Coller + + + MEN_DESK_VIEW_DOCKWINDOWS + Fenêtres + + + BUT_YES + O&ui + + + MEN_DESK_VIEW + &Affichage + + + PRP_DESK_HELP_ABOUT + Montre la boîte de dialogue 'A propos' + + + MEN_DESK_FILE + Fic&hier + + + MEN_DESK_EDIT + &Edition + + + MEN_DESK_HELP + A&ide + + + ERR_ERROR + Erreur + + + ERR_DESK_NOAPP + Pas d'application enregistrée + + + INF_DESK_DOC_CREATE + Créer un nouveau document + + + QUE_DOC_ALREADYOPEN + Le document %1 est déjà ouvert. +Voulez-vous le réouvrir? + + + BUT_APPLY + A&ppliquer + + + BUT_CLOSE + &Fermer + + + INF_DESK_EXIT + &Quitter + + + ERR_UNKNOWN + Erreur inconnue + + + BUT_HELP + A&ide + + + PRP_DESK_FILE_CLOSE + Ferme le document actuel + + + PRP_DESK_FILE_PRINT + Imprime le document actuel + + + WRN_WARNING + Avertissement + + + TOT_DESK_HELP_ABOUT + A propos... + + + MEN_DESK_VIEW_TOOLBARS + Barres d'&outils + + + PRP_DESK_WINDOW_HSPLIT + Diviser la fenêtre actuelle en deux parties horizontales + + + MEN_DESK_WINDOW_HSPLIT + Séparation horizontale + + + PRP_DESK_EDIT_PASTE + Insérer le contenu du presse-papiers au point d'insertion + + + DLG_LOAD_STUDY_CAPTION + Ouvrir une étude + + + PRP_DESK_HELP_SEARCH + Chercher de l'information sur le sujet + + + PRP_DESK_FILE_SAVEAS + Sauvegarder le document actuel sous un nouveau nom + + + INF_READY + Prêt + + + INF_CANCELLED + Annulé + + + PRP_DESK_WINDOW_VSPLIT + Diviser la fenêtre actuelle en deux parties verticales + + + MEN_DESK_WINDOW_VSPLIT + Séparation verticale + + + PRP_DESK_WINDOW_TILE + Ranger les fenêtres en mosaïque + + + MEN_DESK_HELP_CONTENTS + &Contenu + + + PRP_DESK_HELP_CONTENTS + Afficher le sommaire de la référence documentaire + + + MEN_DESK_WINDOW_HTILE + Mosaïque horizontale + + + MEN_DESK_WINDOW_VTILE + Mosaïque verticale + + + ERR_DOC_PERMISSIONDENIED_SAVE + Impossible de sauvegarder le fichier %1. Autorisaton refusée. + + + INF_DESK_DOCALREADYOPEN + Impossible de sauvegarder le document sous le nom d'un document déjà ouvert. +Indiquez un autre nom pour le document que vous voulez sauvegarder. +( %1 ) + + + TIT_FILE_SAVEAS + Enregistrer sous + + + MEN_DESK_FILE_CLOSE + Fer&mer + + + MSG_FILE_EXISTS + Le fichier "%1" existe déjà. +Voulez-vous l'écraser ? + + + MEN_DESK_FILE_PRINT + &Imprimer + + + MEN_DESK_HELP_SEARCH + &Recherche... + + + MEN_DESK_VIEW_STDTOOLBAR + &Standard + + + MEN_DESK_FILE_SAVEAS + Enre&gistrer sous... + + + PRP_DESK_VIEW_STDTOOLBAR + Activer ou désactiver la barre standard + + + TOT_DESK_FILE_SAVE + Enregistrer le document + + + TOT_DESK_FILE_EXIT + Quitter l'application + + + TOT_DESK_FILE_LOAD + Charger le document + + + TOT_DESK_FILE_OPEN + Ouvrir un document + + + TOT_DESK_FILE_REOPEN + Réouvrir un document + + + PRP_DESK_FILE_EXIT + Quitte l'application + + + PRP_DESK_FILE_OPEN + Ouvre un document existant + + + PRP_DESK_FILE_REOPEN + Réouvrir le document actuel à partir d'un fichier + + + PRP_DESK_FILE_SAVE + Sauvegarder le document actuel + + + PRP_DESK_FILE_LOAD + Charge un document + + + PRP_DESK_WINDOW_HTILE + Ranger les fenêtres en mosaïque horizontale + + + PRP_DESK_WINDOW_VTILE + Ranger les fenêtres en mosaïque verticale + + + MEN_DESK_WINDOW_TILE + Mosaïque + + + MEN_DESK_FILE_EXIT + &Quitter + + + MEN_DESK_FILE_OPEN + &Ouvrir... + + + MEN_DESK_FILE_REOPEN + &Réouvrir + + + MEN_DESK_FILE_LOAD + Connec&ter... + + + MEN_DESK_FILE_SAVE + &Enregistrer + + + MEN_DESK_EDIT_PASTE + Co&ller + + + MEN_STUDIES_CHOICE + Choisir une étude existante + + + + STD_Application + + INF_DOC_MODIFIED + Le document a été modifié. +Voulez-vous sauvegarder les modifications? + + + INF_DOC_SAVING + Sauvegarde de l'étude en cours + + + INF_DOC_SAVED + L'étude %1 est sauvegardée + + + TOT_DOCK_WINDOWS + Montrer / cacher les fenêtres ancrables et les barres d'outils + + + MEN_DOCK_WINDOWS + Fenêtres et Barres d'outils + + + ABOUT_INFO + Application SUIT Std + + + INF_DOC_SAVING_FAILS + Impossible de sauvegarder le fichier "%1". +Il peut y avoir un problème de droit ou l'espace disque restant est insuffisant. +Essayez d'utiliser un autre nom de fichier. + + + INF_DOCUMENT_MODIFIED + Le document "%1" a été modifié. +Voulez-vous sauvegarder les changements? + + + CLOSE_STUDY + Fermer l'étude actuelle + + + CLOSE_QUESTION + Voulez-vous sauvegarder l'étude avant de la fermer? + + + REOPEN_STUDY + Réouvrir l'étude + + + REOPEN_QUESTION + Voulez-vous vraiment réouvrir l'étude? +Toutes les modifications introduites après le dernier enregistrement seront perdues. + + + diff --git a/src/SUIT/Makefile.am b/src/SUIT/Makefile.am index 1cf970288..9b1df08d9 100755 --- a/src/SUIT/Makefile.am +++ b/src/SUIT/Makefile.am @@ -61,7 +61,8 @@ salomeinclude_HEADERS = \ SUIT_TreeModel.h \ SUIT_ViewManager.h \ SUIT_ViewModel.h \ - SUIT_ViewWindow.h + SUIT_ViewWindow.h \ + SUIT_ShortcutMgr.h dist_libsuit_la_SOURCES = \ SUIT_Accel.cxx \ @@ -92,7 +93,8 @@ dist_libsuit_la_SOURCES = \ SUIT_TreeModel.cxx \ SUIT_ViewManager.cxx \ SUIT_ViewModel.cxx \ - SUIT_ViewWindow.cxx + SUIT_ViewWindow.cxx \ + SUIT_ShortcutMgr.cxx MOC_FILES = \ SUIT_Accel_moc.cxx \ @@ -113,12 +115,14 @@ MOC_FILES = \ SUIT_TreeModel_moc.cxx \ SUIT_ViewManager_moc.cxx \ SUIT_ViewModel_moc.cxx \ - SUIT_ViewWindow_moc.cxx + SUIT_ViewWindow_moc.cxx \ + SUIT_ShortcutMgr_moc.cxx nodist_libsuit_la_SOURCES = $(MOC_FILES) nodist_salomeres_DATA = \ - SUIT_msg_en.qm + SUIT_msg_en.qm \ + SUIT_msg_fr.qm libsuit_la_CPPFLAGS = $(QT_INCLUDES) -I$(srcdir)/../Qtx -I$(srcdir)/../ObjBrowser diff --git a/src/SUIT/SUIT_Application.cxx b/src/SUIT/SUIT_Application.cxx index 7624b5c6a..e7129b5e8 100755 --- a/src/SUIT/SUIT_Application.cxx +++ b/src/SUIT/SUIT_Application.cxx @@ -26,6 +26,7 @@ #include "SUIT_Session.h" #include "SUIT_Desktop.h" #include "SUIT_ResourceMgr.h" +#include "SUIT_ShortcutMgr.h" #include #include @@ -37,6 +38,7 @@ #include #include + /*! \class StatusLabel \brief Status bar customization label. Used to workaroubd desktop resizing bug. @@ -123,6 +125,9 @@ void SUIT_Application::start() { if ( desktop() ) desktop()->show(); + + // Initialize shortcut manager + SUIT_ShortcutMgr::Init(); } /*! @@ -174,6 +179,15 @@ SUIT_ResourceMgr* SUIT_Application::resourceMgr() const return SUIT_Session::session()->resourceMgr(); } +/*! + \brief Get access to shortcut manager. + \return global shortcut manager +*/ +SUIT_ShortcutMgr* SUIT_Application::shortcutMgr() const +{ + return SUIT_ShortcutMgr::getShortcutMgr(); +} + #define DEFAULT_MESSAGE_DELAY 3000 /*! @@ -612,9 +626,10 @@ QList SUIT_Application::actionIds() const */ QAction* SUIT_Application::createAction( const int id, const QString& text, const QIcon& icon, const QString& menu, const QString& tip, const int key, - QObject* parent, const bool toggle, QObject* reciever, const char* member ) + QObject* parent, const bool toggle, QObject* reciever, + const char* member, const QString& shortcutAction ) { - QtxAction* a = new QtxAction( text, icon, menu, key, parent, toggle ); + QtxAction* a = new QtxAction( text, icon, menu, key, parent, toggle, shortcutAction ); a->setStatusTip( tip ); if ( reciever && member ) diff --git a/src/SUIT/SUIT_Application.h b/src/SUIT/SUIT_Application.h index e04cee4f5..3773977fc 100755 --- a/src/SUIT/SUIT_Application.h +++ b/src/SUIT/SUIT_Application.h @@ -37,6 +37,7 @@ class QWidget; class SUIT_Desktop; class SUIT_ViewModel; class SUIT_ResourceMgr; +class SUIT_ShortcutMgr; class SUIT_Study; #ifdef WIN32 @@ -97,6 +98,8 @@ public: SUIT_ResourceMgr* resourceMgr() const; + SUIT_ShortcutMgr* shortcutMgr() const; + //! Puts the message to the status bar void putInfo ( const QString&, const int = 0 ); @@ -164,7 +167,8 @@ protected: int registerAction( const int, QAction* ); QAction* createAction( const int, const QString&, const QIcon&, const QString&, const QString&, const int, QObject* = 0, - const bool = false, QObject* = 0, const char* = 0 ); + const bool = false, QObject* = 0, const char* = 0, + const QString& = QString() ); protected slots: virtual void onDesktopActivated(); @@ -173,6 +177,7 @@ private: SUIT_Study* myStudy; SUIT_Desktop* myDesktop; QMap myActionMap; + SUIT_ShortcutMgr* myShortcutMgr; QLabel* myStatusLabel; }; diff --git a/src/SUIT/SUIT_PreferenceMgr.cxx b/src/SUIT/SUIT_PreferenceMgr.cxx index 0263b413d..17be32560 100644 --- a/src/SUIT/SUIT_PreferenceMgr.cxx +++ b/src/SUIT/SUIT_PreferenceMgr.cxx @@ -151,6 +151,12 @@ int SUIT_PreferenceMgr::addItem( const QString& title, const int pId, case DirList: item = new QtxPagePrefPathListItem( Qtx::PT_Directory, title, parent, sect, param ); break; + case Shortcut: + item = new QtxPagePrefShortcutBtnsItem( title, parent, sect, param ); + break; + case ShortcutTree: + item = new QtxPagePrefShortcutTreeItem( 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 be99b1dc6..4a1d0a8ee 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, + GroupBox, Tab, Frame, Font, DirList, File, Slider, Shortcut, ShortcutTree, UserDefined = 1000 } PrefItemType; public: diff --git a/src/SUIT/SUIT_ShortcutMgr.cxx b/src/SUIT/SUIT_ShortcutMgr.cxx new file mode 100644 index 000000000..44eb8a950 --- /dev/null +++ b/src/SUIT/SUIT_ShortcutMgr.cxx @@ -0,0 +1,187 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SUIT_ShortcutMgr.h" + +#include "SUIT_Session.h" +#include "SUIT_ResourceMgr.h" + +#include + +#include +#include + +SUIT_ShortcutMgr* SUIT_ShortcutMgr::myShortcutMgr = NULL; + +/*! + \brief Constructor +*/ +SUIT_ShortcutMgr::SUIT_ShortcutMgr() +: QObject() +{ + qApp->installEventFilter( this ); +} + +/*! + \brief Destructor +*/ +SUIT_ShortcutMgr::~SUIT_ShortcutMgr() +{ + qApp->removeEventFilter( this ); +} + +/*! + \brief Create new instance of shortcut manager. +*/ +void SUIT_ShortcutMgr::Init() +{ + if( myShortcutMgr==NULL ) + myShortcutMgr = new SUIT_ShortcutMgr(); +} + +/*! + \brief Return shortcut manager. +*/ +SUIT_ShortcutMgr* SUIT_ShortcutMgr::getShortcutMgr() +{ + Init(); + + return myShortcutMgr; +} + +/*! + \brief Custom event filter for qapplication . + + Redefined from QObject::eventFilter(); +*/ +bool SUIT_ShortcutMgr::eventFilter( QObject* o, QEvent* e ) +{ + if ( e->type() == QEvent::ActionAdded ) { + QActionEvent* anActionEvent = (QActionEvent*)e; + if (anActionEvent) { + QtxAction* anAction = qobject_cast( anActionEvent->action() ); + if ( anAction ) + processAction( anAction ); + } + } + + return QObject::eventFilter( o, e ); +} + +/*! + \brief Return key sequence for shortcut action name. + \param actionName name of shortcut action in preferences + \return key sequence defined in preferences or empty sequence +*/ +QKeySequence SUIT_ShortcutMgr::getShortcutByActionName( const QString& actionName ) const +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + QString section = actionName.section( resMgr->sectionsToken(), 0, 0 ); + section.prepend( QString("shortcuts") + resMgr->sectionsToken() ); + QString parameter = actionName.section( resMgr->sectionsToken(), 1, 1 ); + + QString shortcutValue; + bool hasValue = resMgr->value( section, parameter, shortcutValue, false ); + + if ( !hasValue ) + return QKeySequence(); + + return QKeySequence::fromString( shortcutValue ); +} + +/*! + \brief Set shortcut to the given action if the shortcut is defined. + \param action action to process + */ +void SUIT_ShortcutMgr::processAction( QtxAction* action ) +{ + QString shortcutActionName = action->shortcutActionName(); + + if ( !shortcutActionName.isEmpty() ) { + // Add action to the actions map + if ( !myShortcutActions.contains( shortcutActionName, action ) ) { + myShortcutActions.insert( shortcutActionName, action ); + connect( action, SIGNAL( destroyed( QObject* ) ), + this, SLOT ( onActionDestroyed( QObject* ) ) ); + } + + QKeySequence keySeq = getShortcutByActionName( shortcutActionName ); + action->setShortcut( keySeq ); + } +} + +/*! + \brief Enable/disable a shortcuts section. + + Enables or disables actions which belong to the given shortcuts section. + Only actions which have an active desktop as a parent widget + are taken into account. + + \param section shorcuts section + \param on if \c true - action will be enabled, otherwise - disabled +*/ +void SUIT_ShortcutMgr::setSectionEnabled( const QString& section, const bool on ) +{ + QMap::ConstIterator it; + for ( it = myShortcutActions.constBegin(); it != myShortcutActions.constEnd(); ++it ) { + QtxAction* action = it.value(); + QString shortcutActionName = action->shortcutActionName(); + QString actionSection = shortcutActionName.section( ":", 0, 0 ); + if ( actionSection == section ) { + // Check if the action parent widget equals to the active desktop + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) + return; + if ( action->parentWidget() == (QWidget*)app->desktop() ) + action->setEnabled( on ); + } + } +} + +/*! + \brief Update shortcuts from preferences. +*/ +void SUIT_ShortcutMgr::updateShortcuts() +{ + QMap::ConstIterator it; + for ( it = myShortcutActions.constBegin(); it != myShortcutActions.constEnd(); ++it ) { + QtxAction* action = it.value(); + QKeySequence keySeq = getShortcutByActionName( action->shortcutActionName() ); + action->setShortcut( keySeq ); + } +} + +/*! + \brief Called when the corresponding action is destroyed. + + Removes destroyed action from the actions list. + + \param obj action being destroyed +*/ +void SUIT_ShortcutMgr::onActionDestroyed( QObject* obj ) +{ + QtxAction* anAction = (QtxAction*)obj; + + if ( anAction ) + myShortcutActions.remove( anAction->shortcutActionName(), anAction ); +} diff --git a/src/SUIT/SUIT_ShortcutMgr.h b/src/SUIT/SUIT_ShortcutMgr.h new file mode 100644 index 000000000..eafd854e2 --- /dev/null +++ b/src/SUIT/SUIT_ShortcutMgr.h @@ -0,0 +1,75 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef SUIT_SHORTCUTMGR_H +#define SUIT_SHORTCUTMGR_H + +#include "SUIT.h" + +#include +#include + +class QtxAction; + +class QKeySequence; + +#if defined WIN32 +#pragma warning( disable: 4251 ) +#endif + +/*! + \class SUIT_ShortcutMgr + \brief Class which manages shortcuts customization. +*/ +class SUIT_EXPORT SUIT_ShortcutMgr: public QObject +{ + Q_OBJECT +public: + static void Init(); + static SUIT_ShortcutMgr* getShortcutMgr(); + + void setSectionEnabled( const QString&, const bool = true ); + void updateShortcuts(); + +protected: + SUIT_ShortcutMgr(); + virtual ~SUIT_ShortcutMgr(); + +private slots: + void onActionDestroyed( QObject* ); + +private: + virtual bool eventFilter( QObject* o, QEvent* e ); + + void processAction( QtxAction* ); + QKeySequence getShortcutByActionName( const QString& ) const; + +private: + static SUIT_ShortcutMgr* myShortcutMgr; + QMultiMap myShortcutActions; +}; + +#if defined WIN32 +#pragma warning( default: 4251 ) +#endif + +#endif diff --git a/src/SUIT/SUIT_ViewManager.cxx b/src/SUIT/SUIT_ViewManager.cxx index 212702c5f..1e55aecef 100755 --- a/src/SUIT/SUIT_ViewManager.cxx +++ b/src/SUIT/SUIT_ViewManager.cxx @@ -46,9 +46,9 @@ SUIT_ViewManager::SUIT_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop, SUIT_ViewModel* theViewModel ) : QObject( 0 ), -myDesktop( theDesktop ), -myTitle( "Default: %M - viewer %V" ), -myStudy( NULL ) + myDesktop( theDesktop ), + myTitle( "Default: %M - viewer %V" ), + myStudy( NULL ) { myViewModel = 0; myActiveView = 0; @@ -209,6 +209,9 @@ bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView) connect(theView, SIGNAL(closing(SUIT_ViewWindow*)), this, SLOT(onClosingView(SUIT_ViewWindow*))); + connect(theView, SIGNAL(tryClosing(SUIT_ViewWindow*)), + this, SIGNAL(tryCloseView(SUIT_ViewWindow*))); + connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)), this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*))); @@ -261,6 +264,7 @@ void SUIT_ViewManager::closeView( SUIT_ViewWindow* theView ) QPointer view( theView ); + view->setClosable( false ); view->hide(); if ( !view->testAttribute( Qt::WA_DeleteOnClose ) ) diff --git a/src/SUIT/SUIT_ViewManager.h b/src/SUIT/SUIT_ViewManager.h index a011b11fb..07c8ca8bf 100755 --- a/src/SUIT/SUIT_ViewManager.h +++ b/src/SUIT/SUIT_ViewManager.h @@ -89,6 +89,7 @@ public slots: signals: void lastViewClosed(SUIT_ViewManager*); + void tryCloseView(SUIT_ViewWindow*); void deleteView(SUIT_ViewWindow*); void viewCreated(SUIT_ViewWindow*); void mousePress(SUIT_ViewWindow*, QMouseEvent*); diff --git a/src/SUIT/SUIT_ViewWindow.cxx b/src/SUIT/SUIT_ViewWindow.cxx index 9d41d22d3..bd081febd 100755 --- a/src/SUIT/SUIT_ViewWindow.cxx +++ b/src/SUIT/SUIT_ViewWindow.cxx @@ -119,6 +119,7 @@ bool SUIT_ViewWindow::dumpViewToFormat( const QImage& img, const QString& fileNa */ bool SUIT_ViewWindow::dumpViewToFormat( const QString& fileName, const QString& format ) { + Qtx::Localizer loc; return dumpViewToFormat( dumpView(), fileName, format ); } @@ -135,7 +136,8 @@ void SUIT_ViewWindow::setDestructiveClose( const bool on ) void SUIT_ViewWindow::closeEvent( QCloseEvent* e ) { e->ignore(); - emit closing( this ); + emit tryClosing( this ); + if ( closable() ) emit closing( this ); } /*! Context menu requested for event \a e. @@ -185,11 +187,12 @@ bool SUIT_ViewWindow::event( QEvent* e ) if ( !fileName.isEmpty() ) { QImage im = dumpView(); - QString fmt = SUIT_Tools::extension( fileName ).toUpper(); - bOk = dumpViewToFormat( im, fileName, fmt ); + QString fmt = SUIT_Tools::extension( fileName ).toUpper(); + Qtx::Localizer loc; + bOk = dumpViewToFormat( im, fileName, fmt ); } else - bOk = true; // cancelled + bOk = true; // cancelled } if ( !bOk ) SUIT_MessageBox::critical( this, tr( "ERROR" ), tr( "ERR_CANT_DUMP_VIEW" ) ); @@ -213,10 +216,25 @@ bool SUIT_ViewWindow::action( const int ) return true; } +/*! Returns \c true if view window can be closed by the user +*/ +bool SUIT_ViewWindow::closable() const +{ + QVariant val = property( "closable" ); + return !val.isValid() || val.toBool(); +} + +/*! Set / reset "closable" option of the view window +*/ +bool SUIT_ViewWindow::setClosable( const bool on ) +{ + setProperty( "closable", on ); +} + /*! \return string containing visual parameters of window */ -QString SUIT_ViewWindow::getVisualParameters() +QString SUIT_ViewWindow::getVisualParameters() { return "empty"; } diff --git a/src/SUIT/SUIT_ViewWindow.h b/src/SUIT/SUIT_ViewWindow.h index 7043c8497..7b044053f 100755 --- a/src/SUIT/SUIT_ViewWindow.h +++ b/src/SUIT/SUIT_ViewWindow.h @@ -53,6 +53,9 @@ public: bool onAccelAction( int ); + bool closable() const; + bool setClosable( const bool ); + virtual QString getVisualParameters(); virtual void setVisualParameters( const QString& parameters ); @@ -70,6 +73,7 @@ public slots: virtual void onDumpView(); signals: + void tryClosing( SUIT_ViewWindow* ); void closing( SUIT_ViewWindow* ); void mousePressed( SUIT_ViewWindow*, QMouseEvent* ); void mouseReleased( SUIT_ViewWindow*, QMouseEvent* ); @@ -95,4 +99,4 @@ private: QMap myCustomData; }; -#endif // !defined(AFX_SUIT_VIEWWINDOW_H__82C3D51A_6F10_45B0_BCFE_3CB3EF596A4D__INCLUDED_) +#endif // SUIT_VIEWWINDOW_H diff --git a/src/SUIT/resources/SUIT_msg_en.ts b/src/SUIT/resources/SUIT_msg_en.ts index d477c7f9c..c1435da5b 100644 --- a/src/SUIT/resources/SUIT_msg_en.ts +++ b/src/SUIT/resources/SUIT_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default @@ -99,7 +78,7 @@ Permission denied. QUE_FILE_EXISTS - The file "%1" already exists. + The file %1 already exists. Do you want to overwrite it? diff --git a/src/SUIT/resources/SUIT_msg_fr.ts b/src/SUIT/resources/SUIT_msg_fr.ts new file mode 100755 index 000000000..345b25512 --- /dev/null +++ b/src/SUIT/resources/SUIT_msg_fr.ts @@ -0,0 +1,151 @@ + + + + + @default + + MEN_DESK_WINDOW + &Fenêtre + + + ERR_CANT_DUMP_VIEW + Impossible de sauvegarder le contenu de la vue dans le fichier. + + + TLT_IMAGE_FILES + Fichiers images (*.bmp *.png *.jpg *.jpeg) + + + MEN_DESK_WINDOW_CASCADE + &Cascade + + + PRP_DESK_WINDOW_CASCADE + Superpose les fenêtres + + + ERR_DIR_NOT_EXIST + Le répertoire "%1" n'existe pas ! + + + ERR_FILE_NOT_DIR + "%1" n'est pas un répertoire ! + + + CONTINUE + Continuer + + + CANCEL + Annuler + + + ERR_FILE_NOT_EXIST + Le fichier "%1" n'existe pas ! + + + QUE_DOC_FILEEXISTS + Le fichier %1 existe déjà. +Voulez-vous l'écraser ? + + + PRP_DESK_WINDOW_ACTIVATE + Active la fenêtre + + + ERR_PERMISSION_DENIED + Impossible de sauvegarder le fichier "%1". +Autorisation interdite. + + + ERR_OPEN_PERMISSION_DENIED + Impossible d'ouvrir le fichier "%1". +Autorisation interdite. + + + ERR_DIR_READ_PERMISSION_DENIED + Impossible de lire le répertoire "%1". +Autorisation interdite. + + + ERR_DIR_WRITE_PERMISSION_DENIED + Impossible d'écrire dans le répertoire "%1". +Autorisation interdite. + + + ERR_ERROR + Erreur + + + QUE_FILE_EXISTS + Le fichier %1 existe déjà. +Voulez-vous l'écraser ? + + + WRN_WARNING + Avertissement + + + TLT_DUMP_VIEW + Enregistrer la vue dans le fichier + + + PRP_DESK_WINDOW_TILE + Place les fenêtres en mosaïque + + + MEN_DESK_WINDOW_VTILE + Mosaïque &verticale + + + INF_DIRECTORIES_FILTER + Répertoires + + + PRP_DESK_WINDOW_VTILE + Place les fenêtres en mosaïque verticale + + + MEN_DESK_WINDOW_TILE + &Mosaïque + + + NAME_COLUMN + Nom + + + + SUIT_Study + + OPERATION_LAUNCH + Lancer l'opération + + + PREVIOUS_NOT_FINISHED + L'opération précédente n'est pas aboutie et sera interrompue + + + + SUIT_FileDlg + + LAB_QUICK_PATH + Emplacement : + + + BUT_ADD_PATH + Ajouter un chemin + + + INF_DESK_DOC_OPEN + Ouvrir un fichier + + + INF_DESK_DOC_SAVE + Sauvegarder un fichier + + + ALL_FILES_FILTER + Tous les fichiers (*) + + + diff --git a/src/SUITApp/Makefile.am b/src/SUITApp/Makefile.am index cd3632cb1..f92b88e22 100644 --- a/src/SUITApp/Makefile.am +++ b/src/SUITApp/Makefile.am @@ -46,7 +46,7 @@ MOC_FILES = \ nodist_libSUITApp_la_SOURCES = $(MOC_FILES) -nodist_salomeres_DATA = SUITApp_msg_en.qm +nodist_salomeres_DATA = SUITApp_msg_en.qm SUITApp_msg_fr.qm libSUITApp_la_CPPFLAGS = $(QT_INCLUDES) $(PYTHON_INCLUDES) \ -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx -I$(srcdir)/../Style diff --git a/src/SUITApp/SUITApp.cxx b/src/SUITApp/SUITApp.cxx index 989542ba4..9668c4e18 100644 --- a/src/SUITApp/SUITApp.cxx +++ b/src/SUITApp/SUITApp.cxx @@ -248,7 +248,7 @@ int main( int argc, char* argv[] ) { if ( resMgr ) { - resMgr->loadLanguage( false ); + resMgr->loadLanguage(); splash = QtxSplash::splash( QPixmap() ); splash->readSettings( resMgr ); diff --git a/src/SUITApp/resources/SUITApp_msg_en.ts b/src/SUITApp/resources/SUITApp_msg_en.ts index 23ba569c8..b67d2ec37 100644 --- a/src/SUITApp/resources/SUITApp_msg_en.ts +++ b/src/SUITApp/resources/SUITApp_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/SUITApp/resources/SUITApp_msg_fr.ts b/src/SUITApp/resources/SUITApp_msg_fr.ts new file mode 100755 index 000000000..92f8f53fb --- /dev/null +++ b/src/SUITApp/resources/SUITApp_msg_fr.ts @@ -0,0 +1,19 @@ + + + + + @default + + APP_OK + Ok + + + APP_ERROR + Erreur + + + APP_UNK_EXCEPTION + Exception inconnue + + + diff --git a/src/SUPERVGraph/Makefile.am b/src/SUPERVGraph/Makefile.am index f33bbbbcd..35e262500 100755 --- a/src/SUPERVGraph/Makefile.am +++ b/src/SUPERVGraph/Makefile.am @@ -49,7 +49,8 @@ dist_salomeres_DATA = \ nodist_salomeres_DATA = \ SUPERVGraph_images.qm \ - SUPERVGraph_msg_en.qm + SUPERVGraph_msg_en.qm \ + SUPERVGraph_msg_fr.qm libSUPERVGraph_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) \ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../OBJECT diff --git a/src/SUPERVGraph/resources/SUPERVGraph_msg_en.ts b/src/SUPERVGraph/resources/SUPERVGraph_msg_en.ts index 922fe3dcd..6a21a259e 100644 --- a/src/SUPERVGraph/resources/SUPERVGraph_msg_en.ts +++ b/src/SUPERVGraph/resources/SUPERVGraph_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/SUPERVGraph/resources/SUPERVGraph_msg_fr.ts b/src/SUPERVGraph/resources/SUPERVGraph_msg_fr.ts new file mode 100755 index 000000000..27458b761 --- /dev/null +++ b/src/SUPERVGraph/resources/SUPERVGraph_msg_fr.ts @@ -0,0 +1,27 @@ + + + + + @default + + MNU_PAN_VIEW + Déplacement + + + DSC_PAN_VIEW + Déplacement de la vue + + + MNU_RESET_VIEW + Restaurer + + + DSC_RESET_VIEW + Restaurer le point de vue + + + LBL_TOOLBAR_LABEL + Opérations de visualisation + + + diff --git a/src/SVTK/Makefile.am b/src/SVTK/Makefile.am index 1b078781e..232e9ef83 100755 --- a/src/SVTK/Makefile.am +++ b/src/SVTK/Makefile.am @@ -36,7 +36,6 @@ salomeinclude_HEADERS= \ SALOME_Actor.h \ SVTK_RectPicker.h \ SVTK_DeviceActor.h \ - SVTK_DialogBase.h \ SVTK_FontWidget.h \ SVTK_CubeAxesActor2D.h \ SVTK_Functor.h \ @@ -73,7 +72,6 @@ dist_libSVTK_la_SOURCES= \ SVTK_NonIsometricDlg.cxx \ SVTK_UpdateRateDlg.cxx \ SVTK_CubeAxesDlg.cxx \ - SVTK_DialogBase.cxx \ SVTK_FontWidget.cxx \ SVTK_Trihedron.cxx \ SVTK_View.cxx \ @@ -93,7 +91,11 @@ dist_libSVTK_la_SOURCES= \ SVTK_Recorder.cxx \ SVTK_RecorderDlg.cxx \ SVTK_ImageWriter.cxx \ - SVTK_ImageWriterMgr.cxx + SVTK_ImageWriterMgr.cxx \ + vtkPVAxesActor.h \ + vtkPVAxesActor.cxx \ + vtkPVAxesWidget.h \ + vtkPVAxesWidget.cxx # internal headers @@ -106,7 +108,6 @@ MOC_FILES= \ SVTK_UpdateRateDlg_moc.cxx \ SVTK_CubeAxesDlg_moc.cxx \ SVTK_FontWidget_moc.cxx \ - SVTK_DialogBase_moc.cxx \ SVTK_ViewModelBase_moc.cxx \ SVTK_ViewManager_moc.cxx \ SVTK_ViewWindow_moc.cxx \ @@ -127,6 +128,7 @@ dist_salomeres_DATA=\ resources/vtk_view_perspective.png \ resources/vtk_view_parameters.png \ resources/vtk_view_style_switch.png \ + resources/vtk_view_zooming_style_switch.png \ resources/vtk_view_recording_start.png \ resources/vtk_view_recording_play.png \ resources/vtk_view_recording_pause.png \ @@ -134,6 +136,7 @@ dist_salomeres_DATA=\ nodist_salomeres_DATA = \ SVTK_msg_en.qm \ + SVTK_msg_fr.qm \ SVTK_images.qm libSVTK_la_CPPFLAGS = \ @@ -143,6 +146,7 @@ libSVTK_la_CPPFLAGS = \ $(BOOST_CPPFLAGS) \ -I$(srcdir)/../Qtx \ -I$(srcdir)/../SUIT \ + -I$(srcdir)/../ViewerTools \ -I$(srcdir)/../OBJECT \ -I$(srcdir)/../Prs \ -I$(srcdir)/../VTKViewer \ @@ -155,9 +159,10 @@ libSVTK_la_LDFLAGS = \ $(KERNEL_LDFLAGS) -libSVTK_la_LIBADD = ../Qtx/libqtx.la ../SUIT/libsuit.la ../OBJECT/libSalomeObject.la \ - ../Prs/libSalomePrs.la ../VTKViewer/libVTKViewer.la \ - ../OpenGLUtils/libOpenGLUtils.la -lSALOMELocalTrace +libSVTK_la_LIBADD = ../Qtx/libqtx.la ../SUIT/libsuit.la ../ViewerTools/libViewerTools.la \ + ../OBJECT/libSalomeObject.la ../Prs/libSalomePrs.la \ + ../VTKViewer/libVTKViewer.la ../OpenGLUtils/libOpenGLUtils.la \ + -lSALOMELocalTrace # Executable bin_PROGRAMS = SVTK diff --git a/src/SVTK/SVTK_CubeAxesDlg.cxx b/src/SVTK/SVTK_CubeAxesDlg.cxx index 942e9af62..b979f5508 100644 --- a/src/SVTK/SVTK_CubeAxesDlg.cxx +++ b/src/SVTK/SVTK_CubeAxesDlg.cxx @@ -35,14 +35,9 @@ #include "QtxAction.h" #include "QtxIntSpinBox.h" -#include -#include -#include -#include #include #include #include -#include #include #include @@ -53,176 +48,29 @@ \internal */ -class SVTK_CubeAxesDlg::AxisWidget : public QFrame -{ -public: - AxisWidget( QWidget* ); - ~AxisWidget(); - - void UseName( const bool ); - void SetName( const QString& ); - void SetNameFont( const QColor&, const int, const bool, const bool, const bool ); - bool ReadData( vtkAxisActor2D* ); - bool Apply( vtkAxisActor2D* ); - -private: - // name - QGroupBox* myNameGrp; - QLineEdit* myAxisName; - SVTK_FontWidget* myNameFont; - - // labels - QGroupBox* myLabelsGrp; - QtxIntSpinBox* myLabelNumber; - QtxIntSpinBox* myLabelOffset; - SVTK_FontWidget* myLabelsFont; - - // tick marks - QGroupBox* myTicksGrp; - QtxIntSpinBox* myTickLength; - - friend class SVTK_CubeAxesDlg; -}; - /*! Constructor */ -SVTK_CubeAxesDlg::AxisWidget::AxisWidget (QWidget* theParent) -: QFrame(theParent) +SVTK_AxisWidget::SVTK_AxisWidget (QWidget* theParent) +: ViewerTools_AxisWidgetBase(theParent) { - QList< QLabel* > aLabels; - - // "Name" grp - - myNameGrp = new QGroupBox(SVTK_CubeAxesDlg::tr("AXIS_NAME"), this); - myNameGrp->setCheckable( true ); - - QVBoxLayout* aVBox = new QVBoxLayout; - - QHBoxLayout* aHBox = new QHBoxLayout; - aHBox->setSpacing(5); - QLabel* aLabel = new QLabel(SVTK_CubeAxesDlg::tr("NAME")); - aHBox->addWidget(aLabel); - myAxisName = new QLineEdit; - aHBox->addWidget(myAxisName); - aLabels.append(aLabel); - aVBox->addLayout(aHBox); - - aHBox = new QHBoxLayout; - aHBox->setSpacing(5); - aLabel = new QLabel(SVTK_CubeAxesDlg::tr("FONT")); - aHBox->addWidget(aLabel); - myNameFont = new SVTK_FontWidget(myNameGrp); - aHBox->addWidget(myNameFont); - aLabels.append(aLabel); - aVBox->addLayout(aHBox); - - myNameGrp->setLayout(aVBox); - - // "Labels" grp - - myLabelsGrp = new QGroupBox(SVTK_CubeAxesDlg::tr("LABELS"), this); - myLabelsGrp->setCheckable( true ); - - aVBox = new QVBoxLayout; - - aHBox = new QHBoxLayout; - aHBox->setSpacing(5); - aLabel = new QLabel(SVTK_CubeAxesDlg::tr("NUMBER")); - aHBox->addWidget(aLabel); - myLabelNumber = new QtxIntSpinBox(0,25,1,myLabelsGrp); - aHBox->addWidget(myLabelNumber); - aLabels.append(aLabel); - aVBox->addLayout(aHBox); - - aHBox = new QHBoxLayout; - aHBox->setSpacing(5); - aLabel = new QLabel(SVTK_CubeAxesDlg::tr("OFFSET")); - aHBox->addWidget(aLabel); - myLabelOffset = new QtxIntSpinBox(0,100,1,myLabelsGrp); - aHBox->addWidget(myLabelOffset); - aLabels.append(aLabel); - aVBox->addLayout(aHBox); - - aHBox = new QHBoxLayout; - aHBox->setSpacing(5); - aLabel = new QLabel(SVTK_CubeAxesDlg::tr("FONT")); - aHBox->addWidget(aLabel); - myLabelsFont = new SVTK_FontWidget(myLabelsGrp); - aHBox->addWidget(myLabelsFont); - aLabels.append(aLabel); - aVBox->addLayout(aHBox); - - myLabelsGrp->setLayout(aVBox); - - // "Tick marks" grp - - myTicksGrp = new QGroupBox(SVTK_CubeAxesDlg::tr("TICK_MARKS"), this); - myTicksGrp->setCheckable( true ); - - aVBox = new QVBoxLayout; - - aHBox = new QHBoxLayout; - aHBox->setSpacing(5); - aLabel = new QLabel(SVTK_CubeAxesDlg::tr("LENGTH")); - aHBox->addWidget(aLabel); - myTickLength = new QtxIntSpinBox(0,100,1,myTicksGrp); - aHBox->addWidget(myTickLength); - aLabels.append(aLabel); - aVBox->addLayout(aHBox); - - myTicksGrp->setLayout(aVBox); - - // Layout - - QVBoxLayout* aLay = new QVBoxLayout(this); - aLay->setMargin(5); - aLay->setSpacing(5); - aLay->addWidget(myNameGrp); - aLay->addWidget(myLabelsGrp); - aLay->addWidget(myTicksGrp); - - // init - myNameGrp->setChecked( true ); - myLabelsGrp->setChecked( true ); - myTicksGrp->setChecked( true ); - - // Adjust label widths - QList< QLabel* >::iterator anIter; - int aMaxWidth = 0; - for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) - aMaxWidth = qMax(aMaxWidth, (*anIter)->sizeHint().width()); - for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) - (*anIter)->setFixedWidth(aMaxWidth); } /*! Destructor */ -SVTK_CubeAxesDlg::AxisWidget::~AxisWidget() +SVTK_AxisWidget::~SVTK_AxisWidget() { } -void SVTK_CubeAxesDlg::AxisWidget::UseName(const bool toUse) +ViewerTools_FontWidgetBase* SVTK_AxisWidget::createFontWidget( QWidget* theParent ) { - myNameGrp->setChecked(toUse); + SVTK_FontWidget* aFontWidget = new SVTK_FontWidget( theParent ); + aFontWidget->Initialize(); + return aFontWidget; } -void SVTK_CubeAxesDlg::AxisWidget::SetName(const QString& theName) -{ - myAxisName->setText(theName); -} - -void SVTK_CubeAxesDlg::AxisWidget::SetNameFont(const QColor& theColor, - const int theFont, - const bool theIsBold, - const bool theIsItalic, - const bool theIsShadow) -{ - myNameFont->SetData(theColor, theFont, theIsBold, theIsItalic, theIsShadow); -} - -bool SVTK_CubeAxesDlg::AxisWidget::ReadData(vtkAxisActor2D* theActor) +bool SVTK_AxisWidget::ReadData(vtkAxisActor2D* theActor) { if (theActor == 0) return false; @@ -293,7 +141,7 @@ bool SVTK_CubeAxesDlg::AxisWidget::ReadData(vtkAxisActor2D* theActor) return true; } -bool SVTK_CubeAxesDlg::AxisWidget::Apply(vtkAxisActor2D* theActor) +bool SVTK_AxisWidget::Apply(vtkAxisActor2D* theActor) { if (theActor == 0) return false; @@ -378,86 +226,28 @@ bool SVTK_CubeAxesDlg::AxisWidget::Apply(vtkAxisActor2D* theActor) SVTK_CubeAxesDlg::SVTK_CubeAxesDlg(QtxAction* theAction, SVTK_ViewWindow* theParent, const char* theName): - SVTK_DialogBase(theAction, - theParent, - theName), + ViewerTools_CubeAxesDlgBase(theAction, + theParent, + theName), myMainWindow(theParent) { - setWindowTitle(tr("CAPTION")); - - QVBoxLayout* aLay = new QVBoxLayout(this); - aLay->setMargin(5); - aLay->setSpacing(5); - aLay->addWidget(createMainFrame(this)); - aLay->addWidget(createButtonFrame(this)); - - connect(theParent, SIGNAL(Show( QShowEvent * )), this, SLOT(onParentShow())); - connect(theParent, SIGNAL(Hide( QHideEvent * )), this, SLOT(onParentHide())); } /*! - Create frame containing dialog's input fields -*/ -QWidget* SVTK_CubeAxesDlg::createMainFrame(QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - - myTabWg = new QTabWidget(aFrame); - - myAxes[ 0 ] = new AxisWidget(myTabWg); - myAxes[ 1 ] = new AxisWidget(myTabWg); - myAxes[ 2 ] = new AxisWidget(myTabWg); - - myTabWg->addTab(myAxes[ 0 ], tr("X_AXIS")); - myTabWg->addTab(myAxes[ 1 ], tr("Y_AXIS")); - myTabWg->addTab(myAxes[ 2 ], tr("Z_AXIS")); - - myIsVisible = new QCheckBox(tr("IS_VISIBLE"), aFrame); - - QVBoxLayout* aLay = new QVBoxLayout(aFrame); - aLay->setMargin(0); - aLay->setSpacing(5); - aLay->addWidget(myTabWg); - aLay->addWidget(myIsVisible); - - return aFrame; -} - -/*! - Create frame containing buttons + Destructor */ -QWidget* SVTK_CubeAxesDlg::createButtonFrame(QWidget* theParent) +SVTK_CubeAxesDlg::~SVTK_CubeAxesDlg() { - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("BUT_OK"), aFrame); - myApplyBtn = new QPushButton(tr("BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame); - aLay->setMargin(5); - aLay->setSpacing(5); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - - return aFrame; } /*! - Destructor + Create axis widget */ -SVTK_CubeAxesDlg::~SVTK_CubeAxesDlg() +ViewerTools_AxisWidgetBase* SVTK_CubeAxesDlg::createAxisWidget( QWidget* theParent ) { + SVTK_AxisWidget* anAxisWidget = new SVTK_AxisWidget( theParent ); + anAxisWidget->initialize(); + return anAxisWidget; } /*! @@ -465,29 +255,23 @@ SVTK_CubeAxesDlg::~SVTK_CubeAxesDlg() */ void SVTK_CubeAxesDlg::Update() { + ViewerTools_CubeAxesDlgBase::Update(); + myActor = myMainWindow->GetCubeAxes(); - myAxes[ 0 ]->ReadData(myActor->GetXAxisActor2D()); - myAxes[ 1 ]->ReadData(myActor->GetYAxisActor2D()); - myAxes[ 2 ]->ReadData(myActor->GetZAxisActor2D()); + ((SVTK_AxisWidget*)myAxes[ 0 ])->ReadData(myActor->GetXAxisActor2D()); + ((SVTK_AxisWidget*)myAxes[ 1 ])->ReadData(myActor->GetYAxisActor2D()); + ((SVTK_AxisWidget*)myAxes[ 2 ])->ReadData(myActor->GetZAxisActor2D()); myIsVisible->setChecked(myActor->GetVisibility() ? true : false); } -/*! - Verify validity of entry data -*/ -bool SVTK_CubeAxesDlg::isValid() const -{ - return true; -} - /*! Verify validity of entry data */ bool SVTK_CubeAxesDlg::onApply() { - bool isOk = true; + bool isOk = ViewerTools_CubeAxesDlgBase::onApply(); try { @@ -495,16 +279,15 @@ bool SVTK_CubeAxesDlg::onApply() aCurrWid->clearFocus(); aCurrWid->setFocus(); - isOk = isOk && myAxes[ 0 ]->Apply(myActor->GetXAxisActor2D()); - isOk = isOk && myAxes[ 1 ]->Apply(myActor->GetYAxisActor2D()); - isOk = isOk && myAxes[ 2 ]->Apply(myActor->GetZAxisActor2D()); - + isOk = isOk && ((SVTK_AxisWidget*)myAxes[ 0 ])->Apply(myActor->GetXAxisActor2D()); + isOk = isOk && ((SVTK_AxisWidget*)myAxes[ 1 ])->Apply(myActor->GetYAxisActor2D()); + isOk = isOk && ((SVTK_AxisWidget*)myAxes[ 2 ])->Apply(myActor->GetZAxisActor2D()); - //myActor->SetXLabel(myAxes[ 0 ]->myAxisName->text()); - //myActor->SetYLabel(myAxes[ 1 ]->myAxisName->text()); - //myActor->SetZLabel(myAxes[ 2 ]->myAxisName->text()); + //myActor->SetXLabel(myAxes[ 0 ]->myAxisName->text()); // to remove? + //myActor->SetYLabel(myAxes[ 1 ]->myAxisName->text()); // to remove? + //myActor->SetZLabel(myAxes[ 2 ]->myAxisName->text()); // to remove? - //myActor->SetNumberOfLabels(myActor->GetXAxisActor2D()->GetNumberOfLabels()); + //myActor->SetNumberOfLabels(myActor->GetXAxisActor2D()->GetNumberOfLabels()); // to remove? if (myIsVisible->isChecked()) myActor->VisibilityOn(); else @@ -520,20 +303,3 @@ bool SVTK_CubeAxesDlg::onApply() return isOk; } - -/*! - SLOT called when "Ok" button pressed. -*/ -void SVTK_CubeAxesDlg::onOk() -{ - if (onApply()) - onClose(); -} - -/*! - SLOT: called when "Close" button pressed. Close dialog -*/ -void SVTK_CubeAxesDlg::onClose() -{ - reject(); -} diff --git a/src/SVTK/SVTK_CubeAxesDlg.h b/src/SVTK/SVTK_CubeAxesDlg.h index 6d615b8c6..57efc3b02 100644 --- a/src/SVTK/SVTK_CubeAxesDlg.h +++ b/src/SVTK/SVTK_CubeAxesDlg.h @@ -27,59 +27,58 @@ #ifndef SVTK_CubeAxesDlg_H #define SVTK_CubeAxesDlg_H -#include "SVTK_DialogBase.h" +#include "SVTK.h" -class QWidget; -class QPushButton; -class QTabWidget; -class QCheckBox; +#include -class QtxAction; +class SVTK_ViewWindow; class SVTK_CubeAxesActor2D; -class SVTK_FontWidget; -class SVTK_AxisWidget; -class SVTK_ViewWindow; +class vtkAxisActor2D; + +/*! + * Class : SVTK_AxisWidget + * Description : Axis tab widget of the "Graduated axis" dialog box +*/ +class SVTK_EXPORT SVTK_AxisWidget : public ViewerTools_AxisWidgetBase +{ +public: + SVTK_AxisWidget( QWidget* ); + ~SVTK_AxisWidget(); + +public: + bool ReadData( vtkAxisActor2D* ); + bool Apply( vtkAxisActor2D* ); + +protected: + virtual ViewerTools_FontWidgetBase* createFontWidget( QWidget* ); +}; /*! * Class : SVTK_CubeAxesDlg * Description : Dialog for specifynig cube axes properties */ -class SVTK_CubeAxesDlg : public SVTK_DialogBase +class SVTK_EXPORT SVTK_CubeAxesDlg : public ViewerTools_CubeAxesDlgBase { Q_OBJECT - class AxisWidget; - public: SVTK_CubeAxesDlg(QtxAction* theAction, SVTK_ViewWindow* theParent, const char* theName); virtual ~SVTK_CubeAxesDlg(); - void Update(); + virtual void Update(); private slots: - void onOk(); - bool onApply(); - void onClose(); + virtual bool onApply(); private: - QWidget* createButtonFrame( QWidget* ); - QWidget* createMainFrame ( QWidget* ); - bool isValid() const; + virtual ViewerTools_AxisWidgetBase* createAxisWidget( QWidget* ); private: - SVTK_ViewWindow *myMainWindow; + SVTK_ViewWindow* myMainWindow; SVTK_CubeAxesActor2D* myActor; - - QTabWidget* myTabWg; - QCheckBox* myIsVisible; - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - AxisWidget* myAxes[ 3 ]; }; #endif diff --git a/src/SVTK/SVTK_FontWidget.cxx b/src/SVTK/SVTK_FontWidget.cxx index b8e3b28a8..fdbb838ba 100644 --- a/src/SVTK/SVTK_FontWidget.cxx +++ b/src/SVTK/SVTK_FontWidget.cxx @@ -27,11 +27,7 @@ // #include "SVTK_FontWidget.h" -#include #include -#include -#include -#include #include @@ -44,30 +40,8 @@ Constructor */ SVTK_FontWidget::SVTK_FontWidget( QWidget* theParent ) -: QWidget( theParent ) +: ViewerTools_FontWidgetBase( theParent ) { - myColorBtn = new QToolButton( this ); - myColorBtn->setMinimumWidth( 20 ); - - myFamily = new QComboBox( this ); - myFamily->insertItem( myFamily->count(), tr( "ARIAL" ) ); - myFamily->insertItem( myFamily->count(), tr( "COURIER" ) ); - myFamily->insertItem( myFamily->count(), tr( "TIMES" ) ); - - myBold = new QCheckBox( tr( "BOLD" ), this ); - myItalic = new QCheckBox( tr( "ITALIC" ), this ); - myShadow = new QCheckBox( tr( "SHADOW" ), this ); - - QHBoxLayout* aHBLayout = new QHBoxLayout; - aHBLayout->setSpacing( 5 ); - aHBLayout->addWidget(myColorBtn); - aHBLayout->addWidget(myFamily); - aHBLayout->addWidget(myBold); - aHBLayout->addWidget(myItalic); - aHBLayout->addWidget(myShadow); - this->setLayout(aHBLayout); - - connect( myColorBtn, SIGNAL( clicked() ), SLOT( onColor() ) ); } /*! @@ -77,32 +51,24 @@ SVTK_FontWidget::~SVTK_FontWidget() { } -void SVTK_FontWidget::SetColor( const QColor& theColor ) -{ - QPalette palette; - palette.setColor(myColorBtn->backgroundRole(), theColor); - myColorBtn->setPalette(palette); -} - -QColor SVTK_FontWidget::GetColor() const +void SVTK_FontWidget::InitializeFamilies() { - return myColorBtn->palette().color( myColorBtn->backgroundRole() ); -} - -void SVTK_FontWidget::onColor() -{ - QColor aColor = QColorDialog::getColor( GetColor(), this ); - if ( aColor.isValid() ) - SetColor( aColor ); + myFamily->insertItem( myFamily->count(), tr( "ARIAL" ) ); + myFamily->insertItem( myFamily->count(), tr( "COURIER" ) ); + myFamily->insertItem( myFamily->count(), tr( "TIMES" ) ); } void SVTK_FontWidget::SetData( const QColor& theColor, - const int theFamily, - const bool theBold, - const bool theItalic, - const bool theShadow ) + const int theFamily, + const bool theBold, + const bool theItalic, + const bool theShadow ) { - SetColor( theColor ); + ViewerTools_FontWidgetBase::SetData( theColor, + theFamily, + theBold, + theItalic, + theShadow ); if ( theFamily == VTK_ARIAL ) myFamily->setCurrentIndex( 0 ); @@ -110,10 +76,6 @@ void SVTK_FontWidget::SetData( const QColor& theColor, myFamily->setCurrentIndex( 1 ); else myFamily->setCurrentIndex( 2 ); - - myBold->setChecked( theBold ); - myItalic->setChecked( theItalic ); - myShadow->setChecked( theShadow ); } void SVTK_FontWidget::GetData( QColor& theColor, @@ -122,17 +84,17 @@ void SVTK_FontWidget::GetData( QColor& theColor, bool& theItalic, bool& theShadow ) const { - theColor = GetColor(); + ViewerTools_FontWidgetBase::GetData( theColor, + theFamily, + theBold, + theItalic, + theShadow ); - int anItem =myFamily->currentIndex(); + int anItem = myFamily->currentIndex(); if ( anItem == 0 ) theFamily = VTK_ARIAL; else if ( anItem == 1 ) theFamily = VTK_COURIER; else theFamily = VTK_TIMES; - - theBold = myBold->isChecked(); - theItalic = myItalic->isChecked(); - theShadow = myShadow->isChecked(); } diff --git a/src/SVTK/SVTK_FontWidget.h b/src/SVTK/SVTK_FontWidget.h index 6150dfe5f..dde1e4be7 100644 --- a/src/SVTK/SVTK_FontWidget.h +++ b/src/SVTK/SVTK_FontWidget.h @@ -29,19 +29,13 @@ #include "SVTK.h" -#include - -class QToolButton; -class QComboBox; -class QCheckBox; -class QColor; - +#include /*! * Class : SVTK_FontWidget * Description : Dialog for specifynig font */ -class SVTK_EXPORT SVTK_FontWidget : public QWidget +class SVTK_EXPORT SVTK_FontWidget : public ViewerTools_FontWidgetBase { Q_OBJECT @@ -49,22 +43,12 @@ public: SVTK_FontWidget( QWidget* ); virtual ~SVTK_FontWidget(); - void SetColor( const QColor& ); - QColor GetColor() const; - - void SetData( const QColor&, const int, const bool, const bool, const bool ); - - void GetData( QColor&, int&, bool&, bool&, bool& ) const; + virtual void SetData( const QColor&, const int, const bool, const bool, const bool ); -private slots: - void onColor(); + virtual void GetData( QColor&, int&, bool&, bool&, bool& ) const; -private: - QToolButton* myColorBtn; - QComboBox* myFamily; - QCheckBox* myBold; - QCheckBox* myItalic; - QCheckBox* myShadow; +protected: + virtual void InitializeFamilies(); }; #endif diff --git a/src/SVTK/SVTK_InteractorStyle.cxx b/src/SVTK/SVTK_InteractorStyle.cxx index b9cd1aec0..ec679bdcb 100644 --- a/src/SVTK/SVTK_InteractorStyle.cxx +++ b/src/SVTK/SVTK_InteractorStyle.cxx @@ -93,7 +93,8 @@ SVTK_InteractorStyle::SVTK_InteractorStyle(): myControllerIncrement(SVTK_ControllerIncrement::New()), myControllerOnKeyDown(SVTK_ControllerOnKeyDown::New()), myHighlightSelectionPointActor(SVTK_Actor::New()), - myRectBand(0) + myRectBand(0), + myIsAdvancedZoomingEnabled(false) { myPointPicker->Delete(); @@ -289,8 +290,22 @@ void SVTK_InteractorStyle::DollyXY(int dx, int dy) double zoomFactor = pow((double)1.1, dxf + dyf); vtkCamera *aCam = GetCurrentRenderer()->GetActiveCamera(); - if (aCam->GetParallelProjection()) + if (aCam->GetParallelProjection()) { + int x0 = 0, y0 = 0, x1 = 0, y1 = 0; + if( IsAdvancedZoomingEnabled() ) { // zoom relatively to the cursor + int* aSize = GetCurrentRenderer()->GetRenderWindow()->GetSize(); + int w = aSize[0]; + int h = aSize[1]; + x0 = w / 2; + y0 = h / 2; + x1 = myOtherPoint.x(); + y1 = h - myOtherPoint.y(); + TranslateView( x0, y0, x1, y1 ); + } aCam->SetParallelScale(aCam->GetParallelScale()/zoomFactor); + if( IsAdvancedZoomingEnabled() ) + TranslateView( x1, y1, x0, y0 ); + } else{ aCam->Dolly(zoomFactor); // Move camera in/out along projection direction GetCurrentRenderer()->ResetCameraClippingRange(); diff --git a/src/SVTK/SVTK_InteractorStyle.h b/src/SVTK/SVTK_InteractorStyle.h index db3b76cd5..4eac463ce 100644 --- a/src/SVTK/SVTK_InteractorStyle.h +++ b/src/SVTK/SVTK_InteractorStyle.h @@ -127,6 +127,7 @@ class SVTK_EXPORT SVTK_ControllerOnKeyDown : public vtkObject{ }; class vtkPointPicker; +class vtkTDxInteractorStyle; class SALOME_Actor; @@ -228,6 +229,9 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle int CurrentState() const { return State; } + void SetAdvancedZoomingEnabled( const bool theState ) { myIsAdvancedZoomingEnabled = theState; } + bool IsAdvancedZoomingEnabled() const { return myIsAdvancedZoomingEnabled; } + protected: SVTK_InteractorStyle(); ~SVTK_InteractorStyle(); @@ -350,6 +354,8 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle bool myBBFirstCheck; QRubberBand* myRectBand; //!< selection rectangle rubber band + + bool myIsAdvancedZoomingEnabled; }; #ifdef WIN32 diff --git a/src/SVTK/SVTK_NonIsometricDlg.cxx b/src/SVTK/SVTK_NonIsometricDlg.cxx index a1c5c6da0..ac35cdc10 100644 --- a/src/SVTK/SVTK_NonIsometricDlg.cxx +++ b/src/SVTK/SVTK_NonIsometricDlg.cxx @@ -47,9 +47,9 @@ SVTK_NonIsometricDlg ::SVTK_NonIsometricDlg(QtxAction* theAction, SVTK_ViewWindow* theParent, const char* theName): - SVTK_DialogBase(theAction, - theParent, - theName), + ViewerTools_DialogBase(theAction, + theParent, + theName), m_MainWindow(theParent) { setWindowTitle(tr("DLG_TITLE")); diff --git a/src/SVTK/SVTK_NonIsometricDlg.h b/src/SVTK/SVTK_NonIsometricDlg.h index 1e2573d1d..dced659d9 100644 --- a/src/SVTK/SVTK_NonIsometricDlg.h +++ b/src/SVTK/SVTK_NonIsometricDlg.h @@ -29,7 +29,7 @@ #ifndef SVTK_NONISOMETRICDLG_H #define SVTK_NONISOMETRICDLG_H -#include "SVTK_DialogBase.h" +#include class SVTK_ViewWindow; @@ -39,7 +39,7 @@ class QtxAction; class QPushButton; -class SVTK_NonIsometricDlg : public SVTK_DialogBase +class SVTK_NonIsometricDlg : public ViewerTools_DialogBase { Q_OBJECT; diff --git a/src/SVTK/SVTK_SetRotationPointDlg.cxx b/src/SVTK/SVTK_SetRotationPointDlg.cxx index 28ac37ec7..eec869920 100755 --- a/src/SVTK/SVTK_SetRotationPointDlg.cxx +++ b/src/SVTK/SVTK_SetRotationPointDlg.cxx @@ -55,9 +55,9 @@ SVTK_SetRotationPointDlg ::SVTK_SetRotationPointDlg(QtxAction* theAction, SVTK_ViewWindow* theParent, const char* theName): - SVTK_DialogBase(theAction, - theParent, - theName), + ViewerTools_DialogBase(theAction, + theParent, + theName), myMainWindow(theParent), myPriority(0.0), myEventCallbackCommand(vtkCallbackCommand::New()), diff --git a/src/SVTK/SVTK_SetRotationPointDlg.h b/src/SVTK/SVTK_SetRotationPointDlg.h index e87335e3f..ed807b66c 100755 --- a/src/SVTK/SVTK_SetRotationPointDlg.h +++ b/src/SVTK/SVTK_SetRotationPointDlg.h @@ -31,7 +31,7 @@ #include "SVTK.h" -#include "SVTK_DialogBase.h" +#include #include @@ -48,7 +48,7 @@ class QCheckBox; class vtkCallbackCommand; class vtkObject; -class SVTK_EXPORT SVTK_SetRotationPointDlg : public SVTK_DialogBase +class SVTK_EXPORT SVTK_SetRotationPointDlg : public ViewerTools_DialogBase { Q_OBJECT; diff --git a/src/SVTK/SVTK_UpdateRateDlg.cxx b/src/SVTK/SVTK_UpdateRateDlg.cxx index 373471ffe..d73408be7 100644 --- a/src/SVTK/SVTK_UpdateRateDlg.cxx +++ b/src/SVTK/SVTK_UpdateRateDlg.cxx @@ -169,9 +169,9 @@ SVTK_UpdateRateDlg ::SVTK_UpdateRateDlg(QtxAction* theAction, SVTK_ViewWindow* theParent, const char* theName): - SVTK_DialogBase(theAction, - theParent, - theName), + ViewerTools_DialogBase(theAction, + theParent, + theName), myPriority(0.0), myEventCallbackCommand(vtkCallbackCommand::New()), myRWInteractor(theParent->GetInteractor()), diff --git a/src/SVTK/SVTK_UpdateRateDlg.h b/src/SVTK/SVTK_UpdateRateDlg.h index 045c2d35a..61ec0a622 100644 --- a/src/SVTK/SVTK_UpdateRateDlg.h +++ b/src/SVTK/SVTK_UpdateRateDlg.h @@ -29,7 +29,7 @@ #ifndef SVTK_UPDATERATEDLG_H #define SVTK_UPDATERATEDLG_H -#include "SVTK_DialogBase.h" +#include #include @@ -46,7 +46,7 @@ class vtkCallbackCommand; class vtkObject; -class SVTK_UpdateRateDlg : public SVTK_DialogBase +class SVTK_UpdateRateDlg : public ViewerTools_DialogBase { Q_OBJECT; diff --git a/src/SVTK/SVTK_ViewModel.cxx b/src/SVTK/SVTK_ViewModel.cxx index c34ce6ac7..58d4e47d8 100644 --- a/src/SVTK/SVTK_ViewModel.cxx +++ b/src/SVTK/SVTK_ViewModel.cxx @@ -75,10 +75,12 @@ SVTK_Viewer::SVTK_Viewer() { myTrihedronSize = 105; myTrihedronRelative = true; + myIsStaticTrihedronVisible = true; myIncrementSpeed = 10; myIncrementMode = 0; myProjMode = 0; myStyle = 0; + myZoomingStyle = 0; mySpaceBtn[0] = 1; mySpaceBtn[1] = 2; mySpaceBtn[2] = 9; @@ -130,8 +132,10 @@ SUIT_ViewWindow* SVTK_Viewer::createView( SUIT_Desktop* theDesktop ) aViewWindow->setBackgroundColor( backgroundColor() ); aViewWindow->SetTrihedronSize( trihedronSize(), trihedronRelative() ); + aViewWindow->SetStaticTrihedronVisible( isStaticTrihedronVisible() ); aViewWindow->SetProjectionMode( projectionMode() ); aViewWindow->SetInteractionStyle( interactionStyle() ); + aViewWindow->SetZoomingStyle( zoomingStyle() ); aViewWindow->SetIncrementalSpeed( incrementalSpeed(), incrementalSpeedMode() ); aViewWindow->SetSpacemouseButtons( spacemouseBtn(1), spacemouseBtn(2), spacemouseBtn(3) ); @@ -179,6 +183,31 @@ void SVTK_Viewer::setTrihedronSize( const vtkFloatingPointType theSize, const bo } } +/*! + \return visibility status of the static trihedron +*/ +bool SVTK_Viewer::isStaticTrihedronVisible() const +{ + return myIsStaticTrihedronVisible; +} + +/*! + Sets visibility status of the static trihedron + \param theIsVisible - new visibility status +*/ +void SVTK_Viewer::setStaticTrihedronVisible( const bool theIsVisible ) +{ + myIsStaticTrihedronVisible = theIsVisible; + + 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->SetStaticTrihedronVisible( theIsVisible ); + } + } +} /*! \return projection mode @@ -235,6 +264,32 @@ void SVTK_Viewer::setInteractionStyle( const int theStyle ) } } +/*! + \return zooming style +*/ +int SVTK_Viewer::zoomingStyle() const +{ + return myZoomingStyle; +} + +/*! + Sets zooming style: 0 - standard, 1 - advanced (at cursor) + \param theStyle - new zooming style +*/ +void SVTK_Viewer::setZoomingStyle( const int theStyle ) +{ + myZoomingStyle = theStyle; + + 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->SetZoomingStyle( theStyle ); + } + } +} + /*! \return incremental speed value */ diff --git a/src/SVTK/SVTK_ViewModel.h b/src/SVTK/SVTK_ViewModel.h index f6a717a0a..5e038d2c7 100644 --- a/src/SVTK/SVTK_ViewModel.h +++ b/src/SVTK/SVTK_ViewModel.h @@ -78,6 +78,12 @@ public: //! Set size of trihedron of the viewer (see #SVTK_Renderer::SetTrihedronSize) void setTrihedronSize( const vtkFloatingPointType, const bool = true ); + //! Get visibility status of the static trihedron + bool isStaticTrihedronVisible() const; + + //! Set visibility status of the static trihedron + void setStaticTrihedronVisible( const bool ); + //! Gets projection mode int projectionMode() const; @@ -90,6 +96,12 @@ public: //! Sets interaction style void setInteractionStyle( const int ); + //! Gets zooming style + int zoomingStyle() const; + + //! Sets zooming style + void setZoomingStyle( const int ); + //! Get incremental speed (see #SVTK_InteractorStyle::ControllerIncrement) int incrementalSpeed() const; @@ -162,12 +174,14 @@ private: QColor myBgColor; vtkFloatingPointType myTrihedronSize; bool myTrihedronRelative; + bool myIsStaticTrihedronVisible; bool mySelectionEnabled; bool myMultiSelectionEnabled; int myIncrementSpeed; int myIncrementMode; int myProjMode; int myStyle; + int myZoomingStyle; int mySpaceBtn[3]; }; diff --git a/src/SVTK/SVTK_ViewParameterDlg.cxx b/src/SVTK/SVTK_ViewParameterDlg.cxx index 600250b4d..b4400f558 100755 --- a/src/SVTK/SVTK_ViewParameterDlg.cxx +++ b/src/SVTK/SVTK_ViewParameterDlg.cxx @@ -56,7 +56,7 @@ using namespace std; SVTK_ViewParameterDlg::SVTK_ViewParameterDlg(QtxAction* theAction, SVTK_ViewWindow* theParent, const char* theName): - SVTK_DialogBase(theAction, theParent, theName), + ViewerTools_DialogBase(theAction, theParent, theName), myMainWindow(theParent), myPriority(0.0), myEventCallbackCommand(vtkCallbackCommand::New()), diff --git a/src/SVTK/SVTK_ViewParameterDlg.h b/src/SVTK/SVTK_ViewParameterDlg.h index b98770063..acef99e54 100755 --- a/src/SVTK/SVTK_ViewParameterDlg.h +++ b/src/SVTK/SVTK_ViewParameterDlg.h @@ -28,7 +28,7 @@ #include "SVTK.h" -#include "SVTK_DialogBase.h" +#include #include #include @@ -47,7 +47,7 @@ class QButtonGroup; class vtkCallbackCommand; class vtkObject; -class SVTK_EXPORT SVTK_ViewParameterDlg : public SVTK_DialogBase +class SVTK_EXPORT SVTK_ViewParameterDlg : public ViewerTools_DialogBase { Q_OBJECT; diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index d88d66d8b..a0118be86 100755 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -44,6 +44,7 @@ #include #include #include +#include #include "QtxAction.h" @@ -78,6 +79,9 @@ #include "SVTK_Recorder.h" #include "SVTK_RecorderDlg.h" +#include "vtkPVAxesWidget.h" +#include "vtkPVAxesActor.h" + #include "SALOME_ListIteratorOfListIO.hxx" #include "VTKViewer_Algorithm.h" @@ -161,14 +165,15 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) myUpdateRateDlg = new SVTK_UpdateRateDlg( getAction( UpdateRate ), this, "SVTK_UpdateRateDlg" ); myNonIsometricDlg = new SVTK_NonIsometricDlg( getAction( NonIsometric ), this, "SVTK_NonIsometricDlg" ); myCubeAxesDlg = new SVTK_CubeAxesDlg( getAction( GraduatedAxes ), this, "SVTK_CubeAxesDlg" ); + myCubeAxesDlg->initialize(); mySetRotationPointDlg = new SVTK_SetRotationPointDlg ( getAction( ChangeRotationPointId ), this, "SVTK_SetRotationPointDlg" ); myViewParameterDlg = new SVTK_ViewParameterDlg ( getAction( ViewParametersId ), this, "SVTK_ViewParameterDlg" ); - SVTK_InteractorStyle* aStyle = SVTK_InteractorStyle::New(); - myInteractor->PushInteractorStyle(aStyle); - aStyle->Delete(); + myDefaultInteractorStyle = SVTK_InteractorStyle::New(); + myInteractor->PushInteractorStyle(myDefaultInteractorStyle); + myDefaultInteractorStyle->Delete(); myRecorder = SVTK_Recorder::New(); @@ -180,6 +185,24 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) setCentralWidget(myInteractor); + myAxesWidget = vtkPVAxesWidget::New(); + myAxesWidget->SetParentRenderer(aRenderer->GetDevice()); + myAxesWidget->SetViewport(0, 0, 0.25, 0.25); + myAxesWidget->SetInteractor(myInteractor->GetDevice()); + myAxesWidget->SetEnabled(1); + myAxesWidget->SetInteractive(0); + + vtkPVAxesActor* anAxesActor = myAxesWidget->GetAxesActor(); + anAxesActor->GetXAxisTipProperty()->SetColor( 1.0, 0.0, 0.0 ); + anAxesActor->GetXAxisShaftProperty()->SetColor( 1.0, 0.0, 0.0 ); + anAxesActor->GetXAxisLabelProperty()->SetColor( 1.0, 0.0, 0.0 ); + anAxesActor->GetYAxisTipProperty()->SetColor( 0.0, 1.0, 0.0 ); + anAxesActor->GetYAxisShaftProperty()->SetColor( 0.0, 1.0, 0.0 ); + anAxesActor->GetYAxisLabelProperty()->SetColor( 0.0, 1.0, 0.0 ); + anAxesActor->GetZAxisTipProperty()->SetColor( 0.0, 0.0, 1.0 ); + anAxesActor->GetZAxisShaftProperty()->SetColor( 0.0, 0.0, 1.0 ); + anAxesActor->GetZAxisLabelProperty()->SetColor( 0.0, 0.0, 1.0 ); + myView = new SVTK_View(this); Initialize(myView,theModel); @@ -657,6 +680,15 @@ void SVTK_ViewWindow::SetInteractionStyle(const int theStyle) onSwitchInteractionStyle( theStyle==1 ); } +/*! + Sets actual zooming style + \param theStyle - type of zooming style ( 0 - standard, 1 - advanced (at cursor) ) +*/ +void SVTK_ViewWindow::SetZoomingStyle(const int theStyle) +{ + onSwitchZoomingStyle( theStyle==1 ); +} + /*! Switches "keyboard free" interaction style on/off */ @@ -687,6 +719,22 @@ void SVTK_ViewWindow::onSwitchInteractionStyle(bool theOn) if ( a->isChecked() != theOn ) a->setChecked( theOn ); } +/*! + Toogles advanced zooming style (relatively to the cursor position) on/off +*/ +void SVTK_ViewWindow::onSwitchZoomingStyle( bool theOn ) +{ + if( myDefaultInteractorStyle.GetPointer() ) + myDefaultInteractorStyle->SetAdvancedZoomingEnabled( theOn ); + if( myKeyFreeInteractorStyle.GetPointer() ) + myKeyFreeInteractorStyle->SetAdvancedZoomingEnabled( theOn ); + + // update action state if method is called outside + QtxAction* a = getAction( SwitchZoomingStyleId ); + if ( a->isChecked() != theOn ) + a->setChecked( theOn ); +} + /*! Sets incremental speed \param theValue - new incremental speed @@ -957,6 +1005,22 @@ void SVTK_ViewWindow::SetSelectionTolerance(const double& theTolNodes, myView->SetSelectionTolerance(theTolNodes, theTolItems, theTolObjects); } +/*! + Get visibility status of the static trihedron +*/ +bool SVTK_ViewWindow::IsStaticTrihedronVisible() const +{ + return (bool)myAxesWidget->GetEnabled(); +} + +/*! + Set visibility status of the static trihedron +*/ +void SVTK_ViewWindow::SetStaticTrihedronVisible( const bool theIsVisible ) +{ + myAxesWidget->SetEnabled( (int)theIsVisible ); +} + /*! Performs action \param accelAction - action @@ -1510,8 +1574,14 @@ void SVTK_ViewWindow::activateStartPointSelection() */ void SVTK_ViewWindow::onPerspectiveMode() { + bool anIsParallelMode = toolMgr()->action( ParallelModeId )->isChecked(); + + // advanced zooming is not available in perspective mode + if( QtxAction* anAction = getAction( SwitchZoomingStyleId ) ) + anAction->setEnabled( anIsParallelMode ); + vtkCamera* aCamera = getRenderer()->GetActiveCamera(); - aCamera->SetParallelProjection(toolMgr()->action( ParallelModeId )->isChecked()); + aCamera->SetParallelProjection(anIsParallelMode); GetInteractor()->GetDevice()->CreateTimer(VTKI_TIMER_FIRST); } @@ -1596,52 +1666,59 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) // Projections anAction = new QtxAction(tr("MNU_FRONT_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FRONT" ) ), - tr( "MNU_FRONT_VIEW" ), 0, this); + tr( "MNU_FRONT_VIEW" ), 0, this, false, "Viewers:Front view"); anAction->setStatusTip(tr("DSC_FRONT_VIEW")); connect(anAction, SIGNAL(activated()), this, SLOT(onFrontView())); + this->addAction(anAction); mgr->registerAction( anAction, FrontId ); anAction = new QtxAction(tr("MNU_BACK_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BACK" ) ), - tr( "MNU_BACK_VIEW" ), 0, this); + tr( "MNU_BACK_VIEW" ), 0, this, false, "Viewers:Back view"); anAction->setStatusTip(tr("DSC_BACK_VIEW")); connect(anAction, SIGNAL(activated()), this, SLOT(onBackView())); + this->addAction(anAction); mgr->registerAction( anAction, BackId ); anAction = new QtxAction(tr("MNU_TOP_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TOP" ) ), - tr( "MNU_TOP_VIEW" ), 0, this); + tr( "MNU_TOP_VIEW" ), 0, this, false, "Viewers:Top view"); anAction->setStatusTip(tr("DSC_TOP_VIEW")); connect(anAction, SIGNAL(activated()), this, SLOT(onTopView())); + this->addAction(anAction); mgr->registerAction( anAction, TopId ); anAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BOTTOM" ) ), - tr( "MNU_BOTTOM_VIEW" ), 0, this); + tr( "MNU_BOTTOM_VIEW" ), 0, this, false, "Viewers:Bottom view"); anAction->setStatusTip(tr("DSC_BOTTOM_VIEW")); connect(anAction, SIGNAL(activated()), this, SLOT(onBottomView())); + this->addAction(anAction); mgr->registerAction( anAction, BottomId ); anAction = new QtxAction(tr("MNU_LEFT_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_LEFT" ) ), - tr( "MNU_LEFT_VIEW" ), 0, this); + tr( "MNU_LEFT_VIEW" ), 0, this, false, "Viewers:Left view"); anAction->setStatusTip(tr("DSC_LEFT_VIEW")); connect(anAction, SIGNAL(activated()), this, SLOT(onLeftView())); + this->addAction(anAction); mgr->registerAction( anAction, LeftId ); anAction = new QtxAction(tr("MNU_RIGHT_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RIGHT" ) ), - tr( "MNU_RIGHT_VIEW" ), 0, this); + tr( "MNU_RIGHT_VIEW" ), 0, this, false, "Viewers:Right view"); anAction->setStatusTip(tr("DSC_RIGHT_VIEW")); connect(anAction, SIGNAL(activated()), this, SLOT(onRightView())); + this->addAction(anAction); mgr->registerAction( anAction, RightId ); // Reset anAction = new QtxAction(tr("MNU_RESET_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RESET" ) ), - tr( "MNU_RESET_VIEW" ), 0, this); + tr( "MNU_RESET_VIEW" ), 0, this, false, "Viewers:Reset view"); anAction->setStatusTip(tr("DSC_RESET_VIEW")); connect(anAction, SIGNAL(activated()), this, SLOT(onResetView())); + this->addAction(anAction); mgr->registerAction( anAction, ResetId ); // onViewTrihedron: Shows - Hides Trihedron @@ -1718,6 +1795,15 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchInteractionStyle(bool))); mgr->registerAction( anAction, SwitchInteractionStyleId ); + // Switch between zomming 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); + anAction->setStatusTip(tr("DSC_SVTK_ZOOMING_STYLE_SWITCH")); + anAction->setCheckable(true); + connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchZoomingStyle(bool))); + mgr->registerAction( anAction, SwitchZoomingStyleId ); + // Start recording myStartAction = new QtxAction(tr("MNU_SVTK_RECORDING_START"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_RECORDING_START" ) ), @@ -1763,6 +1849,7 @@ void SVTK_ViewWindow::createToolBar() mgr->append( DumpId, myToolBar ); mgr->append( SwitchInteractionStyleId, myToolBar ); + mgr->append( SwitchZoomingStyleId, myToolBar ); mgr->append( ViewTrihedronId, myToolBar ); QtxMultiAction* aScaleAction = new QtxMultiAction( this ); diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h index ac1a5f122..9c2f82700 100755 --- a/src/SVTK/SVTK_ViewWindow.h +++ b/src/SVTK/SVTK_ViewWindow.h @@ -59,10 +59,13 @@ class SVTK_NonIsometricDlg; class SVTK_UpdateRateDlg; class SVTK_CubeAxesDlg; class SVTK_SetRotationPointDlg; +class SVTK_InteractorStyle; class SVTK_KeyFreeInteractorStyle; class SVTK_ViewParameterDlg; class SVTK_Recorder; +class vtkPVAxesWidget; + class vtkObject; class QtxAction; @@ -218,6 +221,9 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow //! Redirect the request to #SVTK_MainWindow::SetInteractionStyle virtual void SetInteractionStyle( const int ); + //! Redirect the request to #SVTK_MainWindow::SetZoomingStyle + virtual void SetZoomingStyle( const int ); + //! Redirect the request to #SVTK_MainWindow::SetSpacemouseButtons virtual void SetSpacemouseButtons( const int, const int, const int ); @@ -238,6 +244,12 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow const double& theTolCell = 0.001, const double& theTolObjects = 0.025); + //! Get visibility status of the static trihedron + bool IsStaticTrihedronVisible() const; + + //! Set visibility status of the static trihedron + virtual void SetStaticTrihedronVisible( const bool ); + //! Methods to save/restore visual parameters of a view (pan, zoom, etc.) virtual QString getVisualParameters(); @@ -286,6 +298,7 @@ public slots: void onViewParameters(bool theIsActivate); void onSwitchInteractionStyle(bool theOn); + void onSwitchZoomingStyle(bool theOn); void onStartRecording(); void onPlayRecording(); @@ -365,6 +378,7 @@ protected: FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate, ParallelModeId, ProjectionModeId, ViewParametersId, SwitchInteractionStyleId, + SwitchZoomingStyleId, StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId }; @@ -373,6 +387,7 @@ protected: SVTK_ViewModelBase* myModel; SVTK_RenderWindowInteractor* myInteractor; + vtkSmartPointer myDefaultInteractorStyle; vtkSmartPointer myKeyFreeInteractorStyle; QString myVisualParams; // used for delayed setting of view parameters @@ -397,6 +412,8 @@ protected: int myToolBar; int myRecordingToolBar; + vtkPVAxesWidget* myAxesWidget; + private: QImage myDumpImage; }; diff --git a/src/SVTK/resources/SVTK_images.ts b/src/SVTK/resources/SVTK_images.ts index 2236a59ba..6150f90b3 100644 --- a/src/SVTK/resources/SVTK_images.ts +++ b/src/SVTK/resources/SVTK_images.ts @@ -56,6 +56,10 @@ ICON_SVTK_STYLE_SWITCH vtk_view_style_switch.png + + ICON_SVTK_ZOOMING_STYLE_SWITCH + vtk_view_zooming_style_switch.png + ICON_SVTK_RECORDING_START vtk_view_recording_start.png diff --git a/src/SVTK/resources/SVTK_msg_en.ts b/src/SVTK/resources/SVTK_msg_en.ts index 9d7454fcf..b717790b9 100644 --- a/src/SVTK/resources/SVTK_msg_en.ts +++ b/src/SVTK/resources/SVTK_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default @@ -208,68 +187,17 @@ MNU_SVTK_STYLE_SWITCH Interaction Style Switch - - - SVTK_CubeAxesDlg - - X_AXIS - X axis - - - Y_AXIS - Y axis - - - Z_AXIS - Z axis - - - CAPTION - Graduated axes - - - IS_VISIBLE - Is visible - - - FONT - Font - - - NAME - Name - - TICK_MARKS - Tick marks + DSC_SVTK_ZOOMING_STYLE_SWITCH + Zooming style switch - LABELS - Labels - - - LENGTH - Length - - - NUMBER - Number - - - OFFSET - Offset - - - AXIS_NAME - Axis name + MNU_SVTK_ZOOMING_STYLE_SWITCH + Zomming style switch SVTK_FontWidget - - BOLD - Bold - ARIAL Arial @@ -278,14 +206,6 @@ TIMES Times - - ITALIC - Italic - - - SHADOW - Shadow - COURIER Courier @@ -534,11 +454,11 @@ Please, refer to the documentation. LBL_TOBBCENTER Set to Bounding Box Center - + LBL_TOORIGIN Set to Origin - + LBL_SELECTPOINT Select Point from View @@ -552,7 +472,7 @@ Please, refer to the documentation. WORLD_COORDINATES - World Coordinates + Absolute Coordinates FOCAL_RELATIVE diff --git a/src/SVTK/resources/SVTK_msg_fr.ts b/src/SVTK/resources/SVTK_msg_fr.ts new file mode 100755 index 000000000..1f220b721 --- /dev/null +++ b/src/SVTK/resources/SVTK_msg_fr.ts @@ -0,0 +1,555 @@ + + + + + @default + + MNU_FRONT_VIEW + Avant + + + ERROR + Erreur + + + MNU_DUMP_VIEW + Sauvegarder la scène... + + + DSC_TOP_VIEW + Vue de dessus + + + MNU_PAN_VIEW + Déplacement + + + MNU_TOP_VIEW + Dessus + + + DSC_GLOBALPAN_VIEW + Sélection d'un nouveau centre de la vue + + + DSC_ROTATE_VIEW + Tourner le point de vue autour du centre de la scène + + + MNU_ZOOM_VIEW + Zoom + + + DSC_PAN_VIEW + Déplacer la vue + + + DSC_LEFT_VIEW + Vue de gauche + + + DSC_FITALL + Redimensionner la scène pour montrer tous les objets + + + MNU_FITALL + Tout afficher + + + MNU_ROTATE_VIEW + Rotation + + + DSC_SHOW_TRIHEDRON + Montrer/cacher le trièdre + + + DSC_FRONT_VIEW + Vue de face + + + MNU_GLOBALPAN_VIEW + Panoramique global + + + INF_APP_DUMP_VIEW + Sauvegarder la vue + + + MNU_BACK_VIEW + Arrière + + + MNU_SHOW_TRIHEDRON + Afficher/cacher le trièdre + + + DSC_CHANGINGROTATIONPOINT_VIEW + Changer le point autour duquel la scène est tournée + + + MNU_BOTTOM_VIEW + Dessous + + + MNU_RESET_VIEW + Restaurer + + + MNU_LEFT_VIEW + Gauche + + + DSC_RIGHT_VIEW + Vue de droite + + + MNU_CHANGINGROTATIONPOINT_VIEW + Changer le point de rotation + + + DSC_FITRECT + Redimensionner la scène pour ne montrer que sa partie choisie par l'encadré + + + MNU_FITRECT + Afficher la zone + + + DSC_BOTTOM_VIEW + Vue de dessous + + + DSC_DUMP_VIEW + Sauvegarder la scène actuelle dans un fichier image + + + DSC_ZOOM_VIEW + Zoomer la vue + + + VTK_IMAGE_FILES + Fichiers images (*.bmp *.png *.jpg *.jpeg) + + + DSC_RESET_VIEW + Restaurer le point de vue + + + ERR_DOC_CANT_SAVE_FILE + Impossible de sauvegarder le fichier + + + MNU_RIGHT_VIEW + Droite + + + LBL_TOOLBAR_LABEL + Opérations de visualisation + + + DSC_BACK_VIEW + Vue arrière + + + SVTK_IMAGE_FILES + Fichiers images (*.bmp *.png *.jpg *.jpeg *.pdf *.ps *.eps) + + + MNU_VIEWPARAMETERS_VIEW + Changer les paramètres de visualisation + + + DSC_VIEWPARAMETERS_VIEW + Changer les paramètres de la vue + + + MNU_SVTK_PARALLEL_MODE + Mode orthogonal + + + DSC_SVTK_PARALLEL_MODE + Choisir la projection orthogonale + + + MNU_SVTK_PERSPECTIVE_MODE + Mode perspective + + + DSC_SVTK_PERSPECTIVE_MODE + Choisir la projection en perspective + + + DSC_SVTK_STYLE_SWITCH + Changer le style d'intéraction + + + MNU_SVTK_STYLE_SWITCH + Changer le style d'interaction + + + + SVTK_FontWidget + + ARIAL + Arial + + + TIMES + Times + + + COURIER + Courier + + + + SVTK_ViewWindow + + DSC_SVTK_UPDATE_RATE + Fréquence de mise à jour + + + DSC_SVTK_SCALING + Mise à l'échelle + + + MNU_SVTK_SCALING + Mise à l'échelle + + + MNU_SVTK_GRADUATED_AXES + Axes gradués + + + DSC_SVTK_GRADUATED_AXES + Axes gradués + + + MNU_SVTK_UPDATE_RATE + Fréquence de mise à jour + + + DSC_SVTK_RECORDING_START + Commencer l'enregistrement + + + MNU_SVTK_RECORDING_START + Commencer l'enregistrement + + + DSC_SVTK_RECORDING_PLAY + Jouer l'enregistrement + + + MNU_SVTK_RECORDING_PLAY + Jouer l'enregistrement + + + DSC_SVTK_RECORDING_PAUSE + Mettre en pause l'enregistrement + + + MNU_SVTK_RECORDING_PAUSE + Mettre en pause l'enregistrement + + + DSC_SVTK_RECORDING_STOP + Arrêter l'enregistrement + + + MNU_SVTK_RECORDING_STOP + Arrêter l'enregistrement + + + LBL_TOOLBAR_RECORD_LABEL + Opérations d'enregistrement + + + MSG_NO_AVI_MAKER + L'outil jpeg2yuv, requis pour enregistrer les fichiers AVI, n'est pas disponible. +Consultez la documentation. + + + + SVTK_NonIsometricDlg + + LBL_X + X: + + + LBL_Y + Y: + + + LBL_Z + Z: + + + MEN_SCALING + Echelle + + + DLG_TITLE + Mise à l'échelle + + + + SVTK_RecorderDlg + + ALL_DISLPAYED_FRAMES + Enregistrer toutes les images affichées + + + CLOSE + Fermer + + + DLG_RECORDER_TITLE + Magnéto + + + FILE_NAME + Sauvegarder dans le fichier : + + + FLT_ALL_FILES + Tous les fichiers (*.*) + + + FLT_AVI_FILES + Fichiers AVI (*.avi) + + + FPS + FPS : + + + HELP + Aide + + + PROGRESSIVE + Progressive + + + QUALITY + Qualité : + + + RECORDING_MODE + Mode : + + + SETTINGS + Réglages + + + SKIPPED_FRAMES + Enregistrer à FPS donné + + + START + Commencer + + + + SVTK_SetRotationPointDlg + + LBL_X + X: + + + LBL_Y + Y: + + + LBL_Z + Z: + + + LBL_CENTER_OF_BOUNDING_BOX + Centre de la boîte englobante + + + RBUTTONGROUP_TITLE + Le type du point de rotation + + + USE_BBCENTER + Utiliser le centre de la boîte englobante + + + LBL_ORIGIN + Origine du système de coordonnées + + + LBL_SELECTED_POINT + Point sélectionné + + + LBL_TOORIGIN + Réinitialiser à l'origine + + + LBL_SELECTPOINT + Choisir un point dans la vue + + + DLG_TITLE + Définir le point de rotation + + + + SVTK_ViewParameterDlg + + LBL_X + X : + + + LBL_Y + Y : + + + LBL_Z + Z : + + + LBL_DX + DX : + + + LBL_DY + DY : + + + LBL_DZ + DZ : + + + PROJECTION_MODE + Mode de projection + + + ORTHOGONAL_MODE + Orthogonal + + + PERSPECTIVE_MODE + Perspective + + + USE_BBCENTER + Utiliser le centre de la boîte englobante + + + LBL_TOBBCENTER + Définir au centre de la boîte englobante + + + LBL_TOORIGIN + Initialiser à l'origine + + + LBL_SELECTPOINT + Choisir un point de la vue + + + FOCAL_POINT + Point focal + + + CAMERA_POSITION + Position de la caméra + + + WORLD_COORDINATES + Coordonnées obsolues + + + FOCAL_RELATIVE + Relatif au point focal + + + PROJECTION_DIRECTION + Direction de la projection : + + + FOCAL_DISTANCE + Distance focale : + + + VIEW_UP_DIRECTION + Direction pour la vue verticale : + + + ZOOMING + Zoom + + + LBL_SCALE + Echelle + + + LBL_VIEW_ANGLE + Angle de visualisation + + + DLG_TITLE + Paramètres de visualisation + + + + SVTK_UpdateRateDlg + + INFORMATION_FRAME_TITLE + Informations + + + STILL + Fréquence réduite de mise à jour , FPS + + + INPUT_FRAME_TITLE + Activer + + + NUMBER_CELLS + Nombre de cellules, - + + + DESIRED + Fréquence de mise à jour requise, FPS + + + CURRENT_FPS + Fréquence actuelle de mise à jour , FPS + + + DLG_TITLE + Fréquence de mise à jour + + + + SVTK_ViewManager + + VTK_VIEW_TITLE + Scène VTK:%1 - visualiseur:%2 + + + + SVTK_Viewer + + MEN_DUMP_VIEW + Sauvegarder la vue... + + + MEN_SHOW_TOOLBAR + Montrer la barre d'outils + + + MEN_CHANGE_BACKGROUD + Changer l'arrière-plan... + + + diff --git a/src/SVTK/resources/vtk_view_zooming_style_switch.png b/src/SVTK/resources/vtk_view_zooming_style_switch.png new file mode 100755 index 0000000000000000000000000000000000000000..8f3a4867098920df40aebdfd7981a0720d638444 GIT binary patch literal 3389 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 + +vtkCxxRevisionMacro(vtkPVAxesActor, "$Revision$"); +vtkStandardNewMacro(vtkPVAxesActor); + +vtkCxxSetObjectMacro( vtkPVAxesActor, UserDefinedTip, vtkPolyData ); +vtkCxxSetObjectMacro( vtkPVAxesActor, UserDefinedShaft, vtkPolyData ); + +//----------------------------------------------------------------------------- +vtkPVAxesActor::vtkPVAxesActor() +{ + this->XAxisLabelText = NULL; + this->YAxisLabelText = NULL; + this->ZAxisLabelText = NULL; + + this->SetXAxisLabelText("X"); + this->SetYAxisLabelText("Y"); + this->SetZAxisLabelText("Z"); + + //colors chosen to match the output of vtkAxes.cxx's LUT. + this->XAxisShaft = vtkActor::New(); + this->XAxisShaft->GetProperty()->SetColor(1, 0, 0); + this->YAxisShaft = vtkActor::New(); + this->YAxisShaft->GetProperty()->SetColor(1, 1, 0); + this->ZAxisShaft = vtkActor::New(); + this->ZAxisShaft->GetProperty()->SetColor(0, 1, 0); + + this->XAxisTip = vtkActor::New(); + this->XAxisTip->GetProperty()->SetColor(1, 0, 0); + this->YAxisTip = vtkActor::New(); + this->YAxisTip->GetProperty()->SetColor(1, 1, 0); + this->ZAxisTip = vtkActor::New(); + this->ZAxisTip->GetProperty()->SetColor(0, 1, 0); + + this->CylinderSource = vtkCylinderSource::New(); + this->CylinderSource->SetHeight(1.0); + + this->LineSource = vtkLineSource::New(); + this->LineSource->SetPoint1( 0.0, 0.0, 0.0 ); + this->LineSource->SetPoint2( 0.0, 1.0, 0.0 ); + + this->ConeSource = vtkConeSource::New(); + this->ConeSource->SetDirection( 0, 1, 0 ); + this->ConeSource->SetHeight( 1.0 ); + + this->SphereSource = vtkSphereSource::New(); + + vtkPolyDataMapper *shaftMapper = vtkPolyDataMapper::New(); + + this->XAxisShaft->SetMapper( shaftMapper ); + this->YAxisShaft->SetMapper( shaftMapper ); + this->ZAxisShaft->SetMapper( shaftMapper ); + + shaftMapper->Delete(); + + vtkPolyDataMapper *tipMapper = vtkPolyDataMapper::New(); + + this->XAxisTip->SetMapper( tipMapper ); + this->YAxisTip->SetMapper( tipMapper ); + this->ZAxisTip->SetMapper( tipMapper ); + + tipMapper->Delete(); + + this->TotalLength[0] = 1.0; + this->TotalLength[1] = 1.0; + this->TotalLength[2] = 1.0; + + this->NormalizedShaftLength[0] = 0.8; + this->NormalizedShaftLength[1] = 0.8; + this->NormalizedShaftLength[2] = 0.8; + + this->NormalizedTipLength[0] = 0.2; + this->NormalizedTipLength[1] = 0.2; + this->NormalizedTipLength[2] = 0.2; + + this->ConeResolution = 16; + this->SphereResolution = 16; + this->CylinderResolution = 16; + + this->ConeRadius = 0.4; + this->SphereRadius = 0.5; + this->CylinderRadius = 0.05; + + this->XAxisLabelPosition = 1; + this->YAxisLabelPosition = 1; + this->ZAxisLabelPosition = 1; + + this->ShaftType = vtkPVAxesActor::LINE_SHAFT; + this->TipType = vtkPVAxesActor::CONE_TIP; + + this->UserDefinedTip = NULL; + this->UserDefinedShaft = NULL; + + this->XAxisVectorText = vtkVectorText::New(); + this->YAxisVectorText = vtkVectorText::New(); + this->ZAxisVectorText = vtkVectorText::New(); + + this->XAxisLabel = vtkFollower::New(); + this->YAxisLabel = vtkFollower::New(); + this->ZAxisLabel = vtkFollower::New(); + + vtkPolyDataMapper *xmapper = vtkPolyDataMapper::New(); + vtkPolyDataMapper *ymapper = vtkPolyDataMapper::New(); + vtkPolyDataMapper *zmapper = vtkPolyDataMapper::New(); + + xmapper->SetInput( this->XAxisVectorText->GetOutput() ); + ymapper->SetInput( this->YAxisVectorText->GetOutput() ); + zmapper->SetInput( this->ZAxisVectorText->GetOutput() ); + + this->XAxisLabel->SetMapper( xmapper ); + this->YAxisLabel->SetMapper( ymapper ); + this->ZAxisLabel->SetMapper( zmapper ); + + xmapper->Delete(); + ymapper->Delete(); + zmapper->Delete(); + + this->UpdateProps(); +} + +//----------------------------------------------------------------------------- +vtkPVAxesActor::~vtkPVAxesActor() +{ + this->CylinderSource->Delete(); + this->LineSource->Delete(); + this->ConeSource->Delete(); + this->SphereSource->Delete(); + + this->XAxisShaft->Delete(); + this->YAxisShaft->Delete(); + this->ZAxisShaft->Delete(); + + this->XAxisTip->Delete(); + this->YAxisTip->Delete(); + this->ZAxisTip->Delete(); + + this->SetUserDefinedTip( NULL ); + this->SetUserDefinedShaft( NULL ); + + this->SetXAxisLabelText( NULL ); + this->SetYAxisLabelText( NULL ); + this->SetZAxisLabelText( NULL ); + + this->XAxisVectorText->Delete(); + this->YAxisVectorText->Delete(); + this->ZAxisVectorText->Delete(); + + this->XAxisLabel->Delete(); + this->YAxisLabel->Delete(); + this->ZAxisLabel->Delete(); +} + +//----------------------------------------------------------------------------- +// Shallow copy of an actor. +void vtkPVAxesActor::ShallowCopy(vtkProp *prop) +{ + vtkPVAxesActor *a = vtkPVAxesActor::SafeDownCast(prop); + if ( a != NULL ) + { + } + + // Now do superclass + this->vtkProp3D::ShallowCopy(prop); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::GetActors(vtkPropCollection *ac) +{ + ac->AddItem(this->XAxisShaft); + ac->AddItem(this->YAxisShaft); + ac->AddItem(this->ZAxisShaft); + ac->AddItem(this->XAxisTip); + ac->AddItem(this->YAxisTip); + ac->AddItem(this->ZAxisTip); + ac->AddItem(this->XAxisLabel); + ac->AddItem(this->YAxisLabel); + ac->AddItem(this->ZAxisLabel); + +} + +//----------------------------------------------------------------------------- +int vtkPVAxesActor::RenderOpaqueGeometry(vtkViewport *vp) +{ + int renderedSomething = 0; + + vtkRenderer *ren = vtkRenderer::SafeDownCast( vp ); + + this->UpdateProps(); + + this->XAxisLabel->SetCamera( ren->GetActiveCamera() ); + this->YAxisLabel->SetCamera( ren->GetActiveCamera() ); + this->ZAxisLabel->SetCamera( ren->GetActiveCamera() ); + + this->XAxisShaft->RenderOpaqueGeometry(vp); + this->YAxisShaft->RenderOpaqueGeometry(vp); + this->ZAxisShaft->RenderOpaqueGeometry(vp); + + this->XAxisTip->RenderOpaqueGeometry(vp); + this->YAxisTip->RenderOpaqueGeometry(vp); + this->ZAxisTip->RenderOpaqueGeometry(vp); + + this->XAxisLabel->RenderOpaqueGeometry(vp); + this->YAxisLabel->RenderOpaqueGeometry(vp); + this->ZAxisLabel->RenderOpaqueGeometry(vp); + + return renderedSomething; +} + +//----------------------------------------------------------------------------- +#if (VTK_MINOR_VERSION>=2) +// porting to VTK 5.0.x +int vtkPVAxesActor::RenderTranslucentPolygonalGeometry(vtkViewport *vp) +{ + int renderedSomething=0; + + this->UpdateProps(); + + renderedSomething += this->XAxisShaft->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->YAxisShaft->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->ZAxisShaft->RenderTranslucentPolygonalGeometry(vp); + + renderedSomething += this->XAxisTip->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->YAxisTip->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->ZAxisTip->RenderTranslucentPolygonalGeometry(vp); + + renderedSomething += this->XAxisLabel->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->YAxisLabel->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->ZAxisLabel->RenderTranslucentPolygonalGeometry(vp); + + return renderedSomething; +} + +//----------------------------------------------------------------------------- +// porting to VTK 5.0.x +int vtkPVAxesActor::HasTranslucentPolygonalGeometry() +{ + int result = 0; + + this->UpdateProps(); + + result |= this->XAxisShaft->HasTranslucentPolygonalGeometry(); + result |= this->YAxisShaft->HasTranslucentPolygonalGeometry(); + result |= this->ZAxisShaft->HasTranslucentPolygonalGeometry(); + + result |= this->XAxisTip->HasTranslucentPolygonalGeometry(); + result |= this->YAxisTip->HasTranslucentPolygonalGeometry(); + result |= this->ZAxisTip->HasTranslucentPolygonalGeometry(); + + result |= this->XAxisLabel->HasTranslucentPolygonalGeometry(); + result |= this->YAxisLabel->HasTranslucentPolygonalGeometry(); + result |= this->ZAxisLabel->HasTranslucentPolygonalGeometry(); + + return result; +} + +#else +//----------------------------------------------------------------------------- +// porting to VTK 5.0.x +int vtkPVAxesActor::RenderTranslucentGeometry(vtkViewport *vp) +{ + int renderedSomething=0; + + this->UpdateProps(); + + renderedSomething += this->XAxisShaft->RenderTranslucentGeometry(vp); + renderedSomething += this->YAxisShaft->RenderTranslucentGeometry(vp); + renderedSomething += this->ZAxisShaft->RenderTranslucentGeometry(vp); + + renderedSomething += this->XAxisTip->RenderTranslucentGeometry(vp); + renderedSomething += this->YAxisTip->RenderTranslucentGeometry(vp); + renderedSomething += this->ZAxisTip->RenderTranslucentGeometry(vp); + + renderedSomething += this->XAxisLabel->RenderTranslucentGeometry(vp); + renderedSomething += this->YAxisLabel->RenderTranslucentGeometry(vp); + renderedSomething += this->ZAxisLabel->RenderTranslucentGeometry(vp); + + return renderedSomething; +} +#endif + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::ReleaseGraphicsResources(vtkWindow *win) +{ + this->XAxisShaft->ReleaseGraphicsResources( win ); + this->YAxisShaft->ReleaseGraphicsResources( win ); + this->ZAxisShaft->ReleaseGraphicsResources( win ); + + this->XAxisTip->ReleaseGraphicsResources( win ); + this->YAxisTip->ReleaseGraphicsResources( win ); + this->ZAxisTip->ReleaseGraphicsResources( win ); + + this->XAxisLabel->ReleaseGraphicsResources( win ); + this->YAxisLabel->ReleaseGraphicsResources( win ); + this->ZAxisLabel->ReleaseGraphicsResources( win ); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::GetBounds(double bounds[6]) +{ + double *bds = this->GetBounds(); + bounds[0] = bds[0]; + bounds[1] = bds[1]; + bounds[2] = bds[2]; + bounds[3] = bds[3]; + bounds[4] = bds[4]; + bounds[5] = bds[5]; +} + +//----------------------------------------------------------------------------- +// Get the bounds for this Actor as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax). +double *vtkPVAxesActor::GetBounds() +{ + double bounds[6]; + int i; + + this->XAxisShaft->GetBounds(this->Bounds); + + this->YAxisShaft->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->ZAxisShaft->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->XAxisTip->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->YAxisTip->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->ZAxisTip->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + double dbounds[6]; + (vtkPolyDataMapper::SafeDownCast(this->YAxisShaft->GetMapper()))-> + GetInput()->GetBounds( dbounds ); + + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (dbounds[2*i+1]>this->Bounds[2*i+1])?(dbounds[2*i+1]):(this->Bounds[2*i+1]); + } + + // We want this actor to rotate / re-center about the origin, so give it + // the bounds it would have if the axes were symmetrical. + for (i = 0; i < 3; i++) + { + this->Bounds[2*i] = -this->Bounds[2*i+1]; + } + + return this->Bounds; +} + +//----------------------------------------------------------------------------- +unsigned long int vtkPVAxesActor::GetMTime() +{ + unsigned long mTime=this->Superclass::GetMTime(); + + + return mTime; +} + +//----------------------------------------------------------------------------- +unsigned long int vtkPVAxesActor::GetRedrawMTime() +{ + unsigned long mTime=this->GetMTime(); + + return mTime; +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetXAxisTipProperty() +{ + return this->XAxisTip->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetYAxisTipProperty() +{ + return this->YAxisTip->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetZAxisTipProperty() +{ + return this->ZAxisTip->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetXAxisShaftProperty() +{ + return this->XAxisShaft->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetYAxisShaftProperty() +{ + return this->YAxisShaft->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetZAxisShaftProperty() +{ + return this->ZAxisShaft->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetXAxisLabelProperty() +{ + return this->XAxisLabel->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetYAxisLabelProperty() +{ + return this->YAxisLabel->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetZAxisLabelProperty() +{ + return this->ZAxisLabel->GetProperty(); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetTotalLength( float x, float y, float z ) +{ + if ( this->TotalLength[0] != x || + this->TotalLength[1] != y || + this->TotalLength[2] != z ) + { + this->TotalLength[0] = x; + this->TotalLength[1] = y; + this->TotalLength[2] = z; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetNormalizedShaftLength( float x, float y, float z ) +{ + if ( this->NormalizedShaftLength[0] != x || + this->NormalizedShaftLength[1] != y || + this->NormalizedShaftLength[2] != z ) + { + this->NormalizedShaftLength[0] = x; + this->NormalizedShaftLength[1] = y; + this->NormalizedShaftLength[2] = z; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetNormalizedTipLength( float x, float y, float z ) +{ + if ( this->NormalizedTipLength[0] != x || + this->NormalizedTipLength[1] != y || + this->NormalizedTipLength[2] != z ) + { + this->NormalizedTipLength[0] = x; + this->NormalizedTipLength[1] = y; + this->NormalizedTipLength[2] = z; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetShaftType( int type ) +{ + if ( this->ShaftType != type ) + { + this->ShaftType = type; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetTipType( int type ) +{ + if ( this->TipType != type ) + { + this->TipType = type; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::UpdateProps() +{ + this->CylinderSource->SetRadius(this->CylinderRadius); + this->CylinderSource->SetResolution(this->CylinderResolution); + + + this->ConeSource->SetResolution(this->ConeResolution); + this->ConeSource->SetRadius(this->ConeRadius); + + this->SphereSource->SetThetaResolution( this->SphereResolution ); + this->SphereSource->SetPhiResolution( this->SphereResolution ); + this->SphereSource->SetRadius(this->SphereRadius); + + switch ( this->ShaftType ) + { + case vtkPVAxesActor::CYLINDER_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInput( this->CylinderSource->GetOutput() ); + break; + case vtkPVAxesActor::LINE_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInput( this->LineSource->GetOutput() ); + break; + case vtkPVAxesActor::USER_DEFINED_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInput( this->UserDefinedShaft ); + } + + switch ( this->TipType ) + { + case vtkPVAxesActor::CONE_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInput( this->ConeSource->GetOutput() ); + break; + case vtkPVAxesActor::SPHERE_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInput( this->SphereSource->GetOutput() ); + break; + case vtkPVAxesActor::USER_DEFINED_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInput( this->UserDefinedTip ); + } + + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + GetInput()->Update(); + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + GetInput()->Update(); + + + + float scale[3]; + double bounds[6]; + + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + GetInput()->GetBounds( bounds ); + + int i; + for ( i = 0; i < 3; i++ ) + { + scale[i] = + this->NormalizedShaftLength[i]*this->TotalLength[i] / + (bounds[3] - bounds[2]); + } + + vtkTransform *xTransform = vtkTransform::New(); + vtkTransform *yTransform = vtkTransform::New(); + vtkTransform *zTransform = vtkTransform::New(); + + xTransform->RotateZ( -90 ); + zTransform->RotateX( 90 ); + + xTransform->Scale( scale[0], scale[0], scale[0] ); + yTransform->Scale( scale[1], scale[1], scale[1] ); + zTransform->Scale( scale[2], scale[2], scale[2] ); + + xTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + yTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + zTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + + + + this->XAxisShaft->SetUserTransform( xTransform ); + this->YAxisShaft->SetUserTransform( yTransform ); + this->ZAxisShaft->SetUserTransform( zTransform ); + + xTransform->Delete(); + yTransform->Delete(); + zTransform->Delete(); + + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + GetInput()->GetBounds( bounds ); + + xTransform = vtkTransform::New(); + yTransform = vtkTransform::New(); + zTransform = vtkTransform::New(); + + xTransform->RotateZ( -90 ); + zTransform->RotateX( 90 ); + + xTransform->Scale( this->TotalLength[0], this->TotalLength[0], this->TotalLength[0] ); + yTransform->Scale( this->TotalLength[1], this->TotalLength[1], this->TotalLength[1] ); + zTransform->Scale( this->TotalLength[2], this->TotalLength[2], this->TotalLength[2] ); + + xTransform->Translate( 0, (1.0 - this->NormalizedTipLength[0]), 0 ); + yTransform->Translate( 0, (1.0 - this->NormalizedTipLength[1]), 0 ); + zTransform->Translate( 0, (1.0 - this->NormalizedTipLength[2]), 0 ); + + xTransform->Scale( this->NormalizedTipLength[0], + this->NormalizedTipLength[0], + this->NormalizedTipLength[0] ); + + yTransform->Scale( this->NormalizedTipLength[1], + this->NormalizedTipLength[1], + this->NormalizedTipLength[1] ); + + zTransform->Scale( this->NormalizedTipLength[2], + this->NormalizedTipLength[2], + this->NormalizedTipLength[2] ); + + xTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + yTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + zTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + + + this->XAxisTip->SetUserTransform( xTransform ); + this->YAxisTip->SetUserTransform( yTransform ); + this->ZAxisTip->SetUserTransform( zTransform ); + + xTransform->Delete(); + yTransform->Delete(); + zTransform->Delete(); + + this->XAxisVectorText->SetText( this->XAxisLabelText ); + this->YAxisVectorText->SetText( this->YAxisLabelText ); + this->ZAxisVectorText->SetText( this->ZAxisLabelText ); + + + float avgScale = + (this->TotalLength[0] + this->TotalLength[1] + this->TotalLength[2])/15; + + this->XAxisShaft->GetBounds(bounds); + this->XAxisLabel->SetScale( avgScale, avgScale, avgScale ); + this->XAxisLabel->SetPosition( bounds[0] + this->XAxisLabelPosition * + (bounds[1]-bounds[0]), + bounds[2] - (bounds[3]-bounds[2])*2.0, + bounds[5] + (bounds[5]-bounds[4])/2.0 ); + + this->YAxisShaft->GetBounds(bounds); + this->YAxisLabel->SetScale( avgScale, avgScale, avgScale ); + this->YAxisLabel->SetPosition( (bounds[0]+bounds[1])/2, + bounds[2] + this->YAxisLabelPosition * + (bounds[3]-bounds[2]), + bounds[5] + (bounds[5]-bounds[4])/2.0 ); + + this->ZAxisShaft->GetBounds(bounds); + this->ZAxisLabel->SetScale( avgScale, avgScale, avgScale ); + this->ZAxisLabel->SetPosition( bounds[0], + bounds[2] - (bounds[3]-bounds[2])*2.0, + bounds[4] + this->ZAxisLabelPosition * + (bounds[5]-bounds[4]) ); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os,indent); + + os << indent << "UserDefinedShaft: "; + if (this->UserDefinedShaft) + { + os << this->UserDefinedShaft << endl; + } + else + { + os << "(none)" << endl; + } + + os << indent << "UserDefinedTip: "; + if (this->UserDefinedTip) + { + os << this->UserDefinedTip << endl; + } + else + { + os << "(none)" << endl; + } + + os << indent << "XAxisLabelText: " << (this->XAxisLabelText ? + this->XAxisLabelText : "(none)") + << endl; + os << indent << "YAxisLabelText: " << (this->YAxisLabelText ? + this->YAxisLabelText : "(none)") + << endl; + os << indent << "ZAxisLabelText: " << (this->ZAxisLabelText ? + this->ZAxisLabelText : "(none)") + << endl; + os << indent << "XAxisLabelPosition: " << this->XAxisLabelPosition << endl; + os << indent << "YAxisLabelPosition: " << this->YAxisLabelPosition << endl; + os << indent << "ZAxisLabelPosition: " << this->ZAxisLabelPosition << endl; + + os << indent << "SphereRadius: " << this->SphereRadius << endl; + os << indent << "SphereResolution: " << this->SphereResolution << endl; + os << indent << "CylinderRadius: " << this->CylinderRadius << endl; + os << indent << "CylinderResolution: " << this->CylinderResolution << endl; + os << indent << "ConeRadius: " << this->ConeRadius << endl; + os << indent << "ConeResolution: " << this->ConeResolution << endl; + + os << indent << "NormalizedShaftLength: " + << this->NormalizedShaftLength[0] << "," + << this->NormalizedShaftLength[1] << "," + << this->NormalizedShaftLength[2] << endl; + os << indent << "NormalizedTipLength: " + << this->NormalizedTipLength[0] << "," + << this->NormalizedTipLength[1] << "," + << this->NormalizedTipLength[2] << endl; + os << indent << "TotalLength: " + << this->TotalLength[0] << "," + << this->TotalLength[1] << "," + << this->TotalLength[2] << endl; +} + +//----------------------------------------------------------------------------- +// porting to VTK 5.0.x +void vtkPVAxesActor::AddToRender( vtkRenderer* theRenderer ) +{ + theRenderer->AddActor(this->XAxisLabel); + theRenderer->AddActor(this->YAxisLabel); + theRenderer->AddActor(this->ZAxisLabel); +} diff --git a/src/SVTK/vtkPVAxesActor.h b/src/SVTK/vtkPVAxesActor.h new file mode 100644 index 000000000..8b9d329cc --- /dev/null +++ b/src/SVTK/vtkPVAxesActor.h @@ -0,0 +1,293 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +// .NAME vtkPVAxesActor - a 3D axes representation +// .SECTION Description +// +// vtkPVAxesActor is used to represent 3D axes in the scene. The user can +// define the geometry to use for the shaft and the tip, and the user can +// set the text for the three axes. The text will follow the camera. + + +#ifndef __vtkPVAxesActor_h +#define __vtkPVAxesActor_h + +#include "SVTK.h" +#include "vtkProp3D.h" + +class vtkRenderer; +class vtkPropCollection; +class vtkMapper; +class vtkProperty; +class vtkActor; +class vtkFollower; +class vtkCylinderSource; +class vtkLineSource; +class vtkConeSource; +class vtkSphereSource; +class vtkPolyData; +class vtkVectorText; + +class SVTK_EXPORT vtkPVAxesActor : public vtkProp3D +{ +public: + static vtkPVAxesActor *New(); + vtkTypeRevisionMacro(vtkPVAxesActor,vtkProp3D); + void PrintSelf(ostream& os, vtkIndent indent); + + + // Description: + // For some exporters and other other operations we must be + // able to collect all the actors or volumes. These methods + // are used in that process. + virtual void GetActors(vtkPropCollection *); + + // Description: + // Support the standard render methods. + virtual int RenderOpaqueGeometry(vtkViewport *viewport); +#if (VTK_MINOR_VERSION>=2) + virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport); // porting to VTK 5.0.x + virtual int HasTranslucentPolygonalGeometry(); // porting to VTK 5.0.x +#else + virtual int RenderTranslucentGeometry(vtkViewport *viewport); // porting to VTK 5.0.x +#endif + + // Description: + // Shallow copy of an axes actor. Overloads the virtual vtkProp method. + void ShallowCopy(vtkProp *prop); + + // Description: + // Release any graphics resources that are being consumed by this actor. + // The parameter window could be used to determine which graphic + // resources to release. + void ReleaseGraphicsResources(vtkWindow *); + + // Description: + // Get the bounds for this Actor as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax). (The + // method GetBounds(double bounds[6]) is available from the superclass.) + void GetBounds(double bounds[6]); + double *GetBounds(); + + // Description: + // Get the actors mtime plus consider its properties and texture if set. + unsigned long int GetMTime(); + + // Description: + // Return the mtime of anything that would cause the rendered image to + // appear differently. Usually this involves checking the mtime of the + // prop plus anything else it depends on such as properties, textures + // etc. + virtual unsigned long GetRedrawMTime(); + + // Description: + // Set the total length of the axes in 3 dimensions. + void SetTotalLength( float v[3] ) + { this->SetTotalLength( v[0], v[1], v[2] ); } + void SetTotalLength( float x, float y, float z ); + vtkGetVectorMacro( TotalLength, float, 3 ); + + // Description: + // Set the normalized (0-1) length of the shaft. + void SetNormalizedShaftLength( float v[3] ) + { this->SetNormalizedShaftLength( v[0], v[1], v[2] ); } + void SetNormalizedShaftLength( float x, float y, float z ); + vtkGetVectorMacro( NormalizedShaftLength, float, 3 ); + + // Description: + // Set the normalized (0-1) length of the tip. + void SetNormalizedTipLength( float v[3] ) + { this->SetNormalizedTipLength( v[0], v[1], v[2] ); } + void SetNormalizedTipLength( float x, float y, float z ); + vtkGetVectorMacro( NormalizedTipLength, float, 3 ); + + // Description: + // Set/get the resolution of the pieces of the axes actor + vtkSetClampMacro(ConeResolution, int, 3, 128); + vtkGetMacro(ConeResolution, int); + vtkSetClampMacro(SphereResolution, int, 3, 128); + vtkGetMacro(SphereResolution, int); + vtkSetClampMacro(CylinderResolution, int, 3, 128); + vtkGetMacro(CylinderResolution, int); + + // Description: + // Set/get the radius of the pieces of the axes actor + vtkSetClampMacro(ConeRadius, float, 0, VTK_LARGE_FLOAT); + vtkGetMacro(ConeRadius, float); + vtkSetClampMacro(SphereRadius, float, 0, VTK_LARGE_FLOAT); + vtkGetMacro(SphereRadius, float); + vtkSetClampMacro(CylinderRadius, float, 0, VTK_LARGE_FLOAT); + vtkGetMacro(CylinderRadius, float); + + // Description: + // Set/get the positions of the axis labels + vtkSetClampMacro(XAxisLabelPosition, float, 0, 1); + vtkGetMacro(XAxisLabelPosition, float); + vtkSetClampMacro(YAxisLabelPosition, float, 0, 1); + vtkGetMacro(YAxisLabelPosition, float); + vtkSetClampMacro(ZAxisLabelPosition, float, 0, 1); + vtkGetMacro(ZAxisLabelPosition, float); + + // Description: + // Set the type of the shaft to a cylinder, line, or user defined geometry. + void SetShaftType( int type ); + void SetShaftTypeToCylinder() + { this->SetShaftType( vtkPVAxesActor::CYLINDER_SHAFT ); } + void SetShaftTypeToLine() + { this->SetShaftType( vtkPVAxesActor::LINE_SHAFT ); } + void SetShaftTypeToUserDefined() + { this->SetShaftType( vtkPVAxesActor::USER_DEFINED_SHAFT ); } + + // Description: + // Set the type of the tip to a cone, sphere, or user defined geometry. + void SetTipType( int type ); + void SetTipTypeToCone() + { this->SetTipType( vtkPVAxesActor::CONE_TIP ); } + void SetTipTypeToSphere() + { this->SetTipType( vtkPVAxesActor::SPHERE_TIP ); } + void SetTipTypeToUserDefined() + { this->SetTipType( vtkPVAxesActor::USER_DEFINED_TIP ); } + + //BTX + // Description: + // Set the user defined tip polydata. + void SetUserDefinedTip( vtkPolyData * ); + vtkGetObjectMacro( UserDefinedTip, vtkPolyData ); + + // Description: + // Set the user defined shaft polydata. + void SetUserDefinedShaft( vtkPolyData * ); + vtkGetObjectMacro( UserDefinedShaft, vtkPolyData ); + + // Description: + // Get the tip properties. + vtkProperty *GetXAxisTipProperty(); + vtkProperty *GetYAxisTipProperty(); + vtkProperty *GetZAxisTipProperty(); + + // Description: + // Get the shaft properties. + vtkProperty *GetXAxisShaftProperty(); + vtkProperty *GetYAxisShaftProperty(); + vtkProperty *GetZAxisShaftProperty(); + + // Description: + // Get the label properties. + vtkProperty *GetXAxisLabelProperty(); + vtkProperty *GetYAxisLabelProperty(); + vtkProperty *GetZAxisLabelProperty(); + //ETX + // + // Description: + // Set the label text. + vtkSetStringMacro( XAxisLabelText ); + vtkSetStringMacro( YAxisLabelText ); + vtkSetStringMacro( ZAxisLabelText ); + +//BTX + enum + { + CYLINDER_SHAFT, + LINE_SHAFT, + USER_DEFINED_SHAFT + }; + + + enum + { + CONE_TIP, + SPHERE_TIP, + USER_DEFINED_TIP + }; + +//ETX + + void AddToRender( vtkRenderer* theRenderer ); // porting to VTK 5.0.x + +protected: + vtkPVAxesActor(); + ~vtkPVAxesActor(); + + vtkCylinderSource *CylinderSource; + vtkLineSource *LineSource; + vtkConeSource *ConeSource; + vtkSphereSource *SphereSource; + + vtkActor *XAxisShaft; + vtkActor *YAxisShaft; + vtkActor *ZAxisShaft; + + vtkActor *XAxisTip; + vtkActor *YAxisTip; + vtkActor *ZAxisTip; + + void UpdateProps(); + + float TotalLength[3]; + float NormalizedShaftLength[3]; + float NormalizedTipLength[3]; + + int ShaftType; + int TipType; + + vtkPolyData *UserDefinedTip; + vtkPolyData *UserDefinedShaft; + + char *XAxisLabelText; + char *YAxisLabelText; + char *ZAxisLabelText; + + vtkVectorText *XAxisVectorText; + vtkVectorText *YAxisVectorText; + vtkVectorText *ZAxisVectorText; + + vtkFollower *XAxisLabel; + vtkFollower *YAxisLabel; + vtkFollower *ZAxisLabel; + + int ConeResolution; + int SphereResolution; + int CylinderResolution; + + float ConeRadius; + float SphereRadius; + float CylinderRadius; + + float XAxisLabelPosition; + float YAxisLabelPosition; + float ZAxisLabelPosition; + +private: + vtkPVAxesActor(const vtkPVAxesActor&); // Not implemented. + void operator=(const vtkPVAxesActor&); // Not implemented. +}; + +#endif + diff --git a/src/SVTK/vtkPVAxesWidget.cxx b/src/SVTK/vtkPVAxesWidget.cxx new file mode 100644 index 000000000..42d80002b --- /dev/null +++ b/src/SVTK/vtkPVAxesWidget.cxx @@ -0,0 +1,869 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +#include "vtkPVAxesWidget.h" + +#include "vtkActor2D.h" +#include "vtkCallbackCommand.h" +#include "vtkCamera.h" +#include "vtkCoordinate.h" +#include "vtkObjectFactory.h" +#include "vtkPoints.h" +#include "vtkPolyData.h" +#include "vtkPolyDataMapper2D.h" +#include "vtkProperty.h" +#include "vtkProperty2D.h" +#include "vtkPVAxesActor.h" +#include "vtkRenderer.h" +#include "vtkRenderWindow.h" +#include "vtkRenderWindowInteractor.h" + +vtkStandardNewMacro(vtkPVAxesWidget); +vtkCxxRevisionMacro(vtkPVAxesWidget, "$Revision$"); + +vtkCxxSetObjectMacro(vtkPVAxesWidget, AxesActor, vtkPVAxesActor); +vtkCxxSetObjectMacro(vtkPVAxesWidget, ParentRenderer, vtkRenderer); + +//---------------------------------------------------------------------------- +class vtkPVAxesWidgetObserver : public vtkCommand +{ +public: + static vtkPVAxesWidgetObserver *New() + {return new vtkPVAxesWidgetObserver;}; + + vtkPVAxesWidgetObserver() + { + this->AxesWidget = 0; + } + + virtual void Execute(vtkObject* wdg, unsigned long event, void *calldata) + { + if (this->AxesWidget) + { + this->AxesWidget->ExecuteEvent(wdg, event, calldata); + } + } + + vtkPVAxesWidget *AxesWidget; +}; + +//---------------------------------------------------------------------------- +vtkPVAxesWidget::vtkPVAxesWidget() +{ + this->StartEventObserverId = 0; + + this->EventCallbackCommand->SetCallback(vtkPVAxesWidget::ProcessEvents); + + this->Observer = vtkPVAxesWidgetObserver::New(); + this->Observer->AxesWidget = this; + this->Renderer = vtkRenderer::New(); + this->Renderer->SetViewport(0.0, 0.0, 0.2, 0.2); + this->Renderer->SetLayer(1); + this->Renderer->InteractiveOff(); + this->Priority = 0.55; + this->AxesActor = vtkPVAxesActor::New(); + this->Renderer->AddActor(this->AxesActor); + this->AxesActor->AddToRender(this->Renderer); // tmp + + this->ParentRenderer = NULL; + + this->Moving = 0; + this->MouseCursorState = vtkPVAxesWidget::Outside; + + this->StartTag = 0; + + this->Interactive = 1; + + this->Outline = vtkPolyData::New(); + this->Outline->Allocate(); + vtkPoints *points = vtkPoints::New(); + vtkIdType ptIds[5]; + ptIds[4] = ptIds[0] = points->InsertNextPoint(1, 1, 0); + ptIds[1] = points->InsertNextPoint(2, 1, 0); + ptIds[2] = points->InsertNextPoint(2, 2, 0); + ptIds[3] = points->InsertNextPoint(1, 2, 0); + this->Outline->SetPoints(points); + this->Outline->InsertNextCell(VTK_POLY_LINE, 5, ptIds); + vtkCoordinate *tcoord = vtkCoordinate::New(); + tcoord->SetCoordinateSystemToDisplay(); + vtkPolyDataMapper2D *mapper = vtkPolyDataMapper2D::New(); + mapper->SetInput(this->Outline); + mapper->SetTransformCoordinate(tcoord); + this->OutlineActor = vtkActor2D::New(); + this->OutlineActor->SetMapper(mapper); + this->OutlineActor->SetPosition(0, 0); + this->OutlineActor->SetPosition2(1, 1); + + points->Delete(); + mapper->Delete(); + tcoord->Delete(); +} + +//---------------------------------------------------------------------------- +vtkPVAxesWidget::~vtkPVAxesWidget() +{ + this->Observer->Delete(); + this->AxesActor->Delete(); + this->OutlineActor->Delete(); + this->Outline->Delete(); + this->SetParentRenderer(NULL); + this->Renderer->Delete(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetEnabled(int enabling) +{ + if (!this->Interactor) + { + vtkErrorMacro("The interactor must be set prior to enabling/disabling widget"); + } + + if (enabling) + { + if (this->Enabled) + { + return; + } + if (!this->ParentRenderer) + { + vtkErrorMacro("The parent renderer must be set prior to enabling this widget"); + return; + } + + this->Enabled = 1; + + if ( this->EventCallbackCommand ) + { + vtkRenderWindowInteractor *i = this->Interactor; + i->AddObserver(vtkCommand::MouseMoveEvent, + this->EventCallbackCommand, this->Priority); + i->AddObserver(vtkCommand::LeftButtonPressEvent, + this->EventCallbackCommand, this->Priority); + i->AddObserver(vtkCommand::LeftButtonReleaseEvent, + this->EventCallbackCommand, this->Priority); + } + + this->ParentRenderer->GetRenderWindow()->AddRenderer(this->Renderer); + if (this->ParentRenderer->GetRenderWindow()->GetNumberOfLayers() < 2) + { + this->ParentRenderer->GetRenderWindow()->SetNumberOfLayers(2); + } + this->AxesActor->SetVisibility(1); + // We need to copy the camera before the compositing observer is called. + // Compositing temporarily changes the camera to display an image. + this->StartEventObserverId = + this->ParentRenderer->AddObserver(vtkCommand::StartEvent,this->Observer,1); + this->InvokeEvent(vtkCommand::EnableEvent, NULL); + } + else + { + if (!this->Enabled) + { + return; + } + + this->Enabled = 0; + this->Interactor->RemoveObserver(this->EventCallbackCommand); + + this->AxesActor->SetVisibility(0); + if (this->ParentRenderer) + { + if (this->ParentRenderer->GetRenderWindow()) + { + this->ParentRenderer->GetRenderWindow()->RemoveRenderer(this->Renderer); + this->AxesActor->ReleaseGraphicsResources(this->ParentRenderer->GetRenderWindow()); + } + if (this->StartEventObserverId != 0) + { + this->ParentRenderer->RemoveObserver(this->StartEventObserverId); + } + } + + this->InvokeEvent(vtkCommand::DisableEvent, NULL); + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ExecuteEvent(vtkObject *vtkNotUsed(o), + unsigned long vtkNotUsed(event), + void *vtkNotUsed(calldata)) +{ + if (!this->ParentRenderer) + { + return; + } + + vtkCamera *cam = this->ParentRenderer->GetActiveCamera(); + double pos[3], fp[3], viewup[3]; + cam->GetPosition(pos); + cam->GetFocalPoint(fp); + cam->GetViewUp(viewup); + + cam = this->Renderer->GetActiveCamera(); + cam->SetPosition(pos); + cam->SetFocalPoint(fp); + cam->SetViewUp(viewup); + this->Renderer->ResetCamera(); + + this->SquareRenderer(); +} + +void vtkPVAxesWidget::UpdateCursorIcon() +{ + if (!this->Enabled) + { + this->SetMouseCursor(vtkPVAxesWidget::Outside); + return; + } + + if (this->Moving) + { + return; + } + + int *parentSize = this->ParentRenderer->GetSize(); + + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + double xNorm = x / (double)parentSize[0]; + double yNorm = y / (double)parentSize[1]; + + double pos[4]; + this->Renderer->GetViewport(pos); + + int pState = this->MouseCursorState; + + if (xNorm > pos[0] && xNorm < pos[2] && yNorm > pos[1] && yNorm < pos[3]) + { + this->MouseCursorState = vtkPVAxesWidget::Inside; + } + else if (fabs(xNorm-pos[0]) < .02 && fabs(yNorm-pos[3]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::TopLeft; + } + else if (fabs(xNorm-pos[2]) < .02 && fabs(yNorm-pos[3]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::TopRight; + } + else if (fabs(xNorm-pos[0]) < .02 && fabs(yNorm-pos[1]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::BottomLeft; + } + else if (fabs(xNorm-pos[2]) < .02 && fabs(yNorm-pos[1]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::BottomRight; + } + else + { + this->MouseCursorState = vtkPVAxesWidget::Outside; + } + + if (pState == this->MouseCursorState) + { + return; + } + + if (this->MouseCursorState == vtkPVAxesWidget::Outside) + { + this->Renderer->RemoveActor(this->OutlineActor); + } + else + { + this->Renderer->AddActor(this->OutlineActor); + } + this->Interactor->Render(); + + this->SetMouseCursor(this->MouseCursorState); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetMouseCursor(int cursorState) +{ + switch (cursorState) + { + case vtkPVAxesWidget::Outside: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_DEFAULT); + break; + case vtkPVAxesWidget::Inside: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZEALL); + break; + case vtkPVAxesWidget::TopLeft: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZENW); + break; + case vtkPVAxesWidget::TopRight: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZENE); + break; + case vtkPVAxesWidget::BottomLeft: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZESW); + break; + case vtkPVAxesWidget::BottomRight: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZESE); + break; + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ProcessEvents(vtkObject* vtkNotUsed(object), + unsigned long event, + void *clientdata, + void* vtkNotUsed(calldata)) +{ + vtkPVAxesWidget *self = + reinterpret_cast(clientdata); + + if (!self->GetInteractive()) + { + return; + } + + switch (event) + { + case vtkCommand::LeftButtonPressEvent: + self->OnButtonPress(); + break; + case vtkCommand::MouseMoveEvent: + self->OnMouseMove(); + break; + case vtkCommand::LeftButtonReleaseEvent: + self->OnButtonRelease(); + break; + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::OnButtonPress() +{ + if (this->MouseCursorState == vtkPVAxesWidget::Outside) + { + return; + } + + this->SetMouseCursor(this->MouseCursorState); + + this->StartPosition[0] = this->Interactor->GetEventPosition()[0]; + this->StartPosition[1] = this->Interactor->GetEventPosition()[1]; + + this->Moving = 1; + this->EventCallbackCommand->SetAbortFlag(1); + this->StartInteraction(); + this->InvokeEvent(vtkCommand::StartInteractionEvent, NULL); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::OnButtonRelease() +{ + if (this->MouseCursorState == vtkPVAxesWidget::Outside) + { + return; + } + + this->Moving = 0; + this->EndInteraction(); + this->InvokeEvent(vtkCommand::EndInteractionEvent, NULL); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::OnMouseMove() +{ + if (this->Moving) + { + switch (this->MouseCursorState) + { + case vtkPVAxesWidget::Inside: + this->MoveWidget(); + break; + case vtkPVAxesWidget::TopLeft: + this->ResizeTopLeft(); + break; + case vtkPVAxesWidget::TopRight: + this->ResizeTopRight(); + break; + case vtkPVAxesWidget::BottomLeft: + this->ResizeBottomLeft(); + break; + case vtkPVAxesWidget::BottomRight: + this->ResizeBottomRight(); + break; + } + + this->UpdateCursorIcon(); + this->EventCallbackCommand->SetAbortFlag(1); + this->InvokeEvent(vtkCommand::InteractionEvent, NULL); + } + else + { + this->UpdateCursorIcon(); + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::MoveWidget() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + double *vp = this->Renderer->GetViewport(); + + double newPos[4]; + newPos[0] = vp[0] + dxNorm; + newPos[1] = vp[1] + dyNorm; + newPos[2] = vp[2] + dxNorm; + newPos[3] = vp[3] + dyNorm; + + if (newPos[0] < 0) + { + this->StartPosition[0] = 0; + newPos[0] = 0; + newPos[2] = vp[2] - vp[0]; + } + if (newPos[1] < 0) + { + this->StartPosition[1] = 0; + newPos[1] = 0; + newPos[3] = vp[3] - vp[1]; + } + if (newPos[2] > 1) + { + this->StartPosition[0] = (int)(size[0] - size[0] * (vp[2]-vp[0])); + newPos[0] = 1 - (vp[2]-vp[0]); + newPos[2] = 1; + } + if (newPos[3] > 1) + { + this->StartPosition[1] = (int)(size[1] - size[1]*(vp[3]-vp[1])); + newPos[1] = 1 - (vp[3]-vp[1]); + newPos[3] = 1; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeTopLeft() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + int useX; + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + useX = 1; + } + else + { + change = dyNorm; + useX = 0; + } + + double *vp = this->Renderer->GetViewport(); + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = useX ? vp[0] + change : vp[0] - change; + newPos[1] = vp[1]; + newPos[2] = vp[2]; + newPos[3] = useX ? vp[3] - change : vp[3] + change; + + if (newPos[0] < 0) + { + this->StartPosition[0] = 0; + newPos[0] = 0; + } + if (newPos[0] >= newPos[2]-0.01) + { + newPos[0] = newPos[2] - 0.01; + } + if (newPos[3] > 1) + { + this->StartPosition[1] = size[1]; + newPos[3] = 1; + } + if (newPos[3] <= newPos[1]+0.01) + { + newPos[3] = newPos[1] + 0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeTopRight() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + } + else + { + change = dyNorm; + } + + double *vp = this->Renderer->GetViewport(); + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = vp[0]; + newPos[1] = vp[1]; + newPos[2] = vp[2] + change; + newPos[3] = vp[3] + change; + + if (newPos[2] > 1) + { + this->StartPosition[0] = size[0]; + newPos[2] = 1; + } + if (newPos[2] <= newPos[0]+0.01) + { + newPos[2] = newPos[0] + 0.01; + } + if (newPos[3] > 1) + { + this->StartPosition[1] = size[1]; + newPos[3] = 1; + } + if (newPos[3] <= newPos[1]+0.01) + { + newPos[3] = newPos[1] + 0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeBottomLeft() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + double *vp = this->Renderer->GetViewport(); + + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + } + else + { + change = dyNorm; + } + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = vp[0] + change; + newPos[1] = vp[1] + change; + newPos[2] = vp[2]; + newPos[3] = vp[3]; + + if (newPos[0] < 0) + { + this->StartPosition[0] = 0; + newPos[0] = 0; + } + if (newPos[0] >= newPos[2]-0.01) + { + newPos[0] = newPos[2] - 0.01; + } + if (newPos[1] < 0) + { + this->StartPosition[1] = 0; + newPos[1] = 0; + } + if (newPos[1] >= newPos[3]-0.01) + { + newPos[1] = newPos[3] - 0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeBottomRight() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + double *vp = this->Renderer->GetViewport(); + + int useX; + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + useX = 1; + } + else + { + change = dyNorm; + useX = 0; + } + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = vp[0]; + newPos[1] = useX ? vp[1] - change : vp[1] + change; + newPos[2] = useX ? vp[2] + change : vp[2] - change; + newPos[3] = vp[3]; + + if (newPos[2] > 1) + { + this->StartPosition[0] = size[0]; + newPos[2] = 1; + } + if (newPos[2] <= newPos[0]+0.01) + { + newPos[2] = newPos[0] + 0.01; + } + if (newPos[1] < 0) + { + this->StartPosition[1] = 0; + newPos[1] = 0; + } + if (newPos[1] >= newPos[3]-0.01) + { + newPos[1] = newPos[3]-0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SquareRenderer() +{ + int *size = this->Renderer->GetSize(); + if (size[0] == 0 || size[1] == 0) + { + return; + } + + double vp[4]; + this->Renderer->GetViewport(vp); + + double deltaX = vp[2] - vp[0]; + double newDeltaX = size[1] * deltaX / (double)size[0]; + double deltaY = vp[3] - vp[1]; + double newDeltaY = size[0] * deltaY / (double)size[1]; + + if (newDeltaX > 1) + { + if (newDeltaY > 1) + { + if (size[0] > size[1]) + { + newDeltaX = size[1] / (double)size[0]; + newDeltaY = 1; + } + else + { + newDeltaX = 1; + newDeltaY = size[0] / (double)size[1]; + } + vp[0] = vp[1] = 0; + vp[2] = newDeltaX; + vp[3] = newDeltaY; + } + else + { + vp[3] = vp[1] + newDeltaY; + if (vp[3] > 1) + { + vp[3] = 1; + vp[1] = vp[3] - newDeltaY; + } + } + } + else + { + vp[2] = vp[0] + newDeltaX; + if (vp[2] > 1) + { + vp[2] = 1; + vp[0] = vp[2] - newDeltaX; + } + } + + this->Renderer->SetViewport(vp); + + this->Renderer->NormalizedDisplayToDisplay(vp[0], vp[1]); + this->Renderer->NormalizedDisplayToDisplay(vp[2], vp[3]); + + vtkPoints *points = this->Outline->GetPoints(); + points->SetPoint(0, vp[0]+1, vp[1]+1, 0); + points->SetPoint(1, vp[2]-1, vp[1]+1, 0); + points->SetPoint(2, vp[2]-1, vp[3]-1, 0); + points->SetPoint(3, vp[0]+1, vp[3]-1, 0); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetInteractive(int state) +{ + if (this->Interactive != state) + { + this->Interactive = state; + } + + if (!state) + { + this->OnButtonRelease(); + this->MouseCursorState = vtkPVAxesWidget::Outside; + this->Renderer->RemoveActor(this->OutlineActor); + if (this->Interactor) + { + this->SetMouseCursor(this->MouseCursorState); + // this->Interactor->Render(); + } + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetOutlineColor(double r, double g, double b) +{ + this->OutlineActor->GetProperty()->SetColor(r, g, b); + if (this->Interactor) + { +// this->Interactor->Render(); + } +} + +//---------------------------------------------------------------------------- +double* vtkPVAxesWidget::GetOutlineColor() +{ + return this->OutlineActor->GetProperty()->GetColor(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetAxisLabelColor(double r, double g, double b) +{ + this->AxesActor->GetXAxisLabelProperty()->SetColor(r, g, b); + this->AxesActor->GetYAxisLabelProperty()->SetColor(r, g, b); + this->AxesActor->GetZAxisLabelProperty()->SetColor(r, g, b); +} + +//---------------------------------------------------------------------------- +double* vtkPVAxesWidget::GetAxisLabelColor() +{ + return this->AxesActor->GetXAxisLabelProperty()->GetColor(); +} + +//---------------------------------------------------------------------------- +vtkRenderer* vtkPVAxesWidget::GetParentRenderer() +{ + return this->ParentRenderer; +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetViewport(double minX, double minY, + double maxX, double maxY) +{ + this->Renderer->SetViewport(minX, minY, maxX, maxY); +} + +//---------------------------------------------------------------------------- +double* vtkPVAxesWidget::GetViewport() +{ + return this->Renderer->GetViewport(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os, indent); + + os << indent << "AxesActor: " << this->AxesActor << endl; + os << indent << "Interactive: " << this->Interactive << endl; +} diff --git a/src/SVTK/vtkPVAxesWidget.h b/src/SVTK/vtkPVAxesWidget.h new file mode 100644 index 000000000..35c152a94 --- /dev/null +++ b/src/SVTK/vtkPVAxesWidget.h @@ -0,0 +1,159 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +// .NAME vtkPVAxesWidget - A widget to manipulate an axe +// +// .SECTION Description +// This widget creates and manages its own vtkPVAxesActor. + + +#ifndef __vtkPVAxesWidget_h +#define __vtkPVAxesWidget_h + +#include "SVTK.h" +#include "vtkInteractorObserver.h" + +class vtkActor2D; +class vtkKWApplication; +class vtkPolyData; +class vtkPVAxesActor; +class vtkPVAxesWidgetObserver; +class vtkRenderer; + +class SVTK_EXPORT vtkPVAxesWidget : public vtkInteractorObserver +{ +public: + static vtkPVAxesWidget* New(); + vtkTypeRevisionMacro(vtkPVAxesWidget, vtkInteractorObserver); + void PrintSelf(ostream& os, vtkIndent indent); + + // Description: + // Set/get the axes actor to be displayed in this 3D widget. + void SetAxesActor(vtkPVAxesActor *actor); + vtkGetObjectMacro(AxesActor, vtkPVAxesActor); + + // Description: + // Enable the 3D widget. + virtual void SetEnabled(int); + + //BTX + // Description: + // Set the renderer this 3D widget will be contained in. + void SetParentRenderer(vtkRenderer *ren); + vtkRenderer* GetParentRenderer(); + //ETX + + // Description: + // Callback to keep the camera for the axes actor up to date with the + // camera in the parent renderer + void ExecuteEvent(vtkObject *o, unsigned long event, void *calldata); + + // Description: + // Set/get whether to allow this 3D widget to be interactively moved/scaled. + void SetInteractive(int state); + vtkGetMacro(Interactive, int); + vtkBooleanMacro(Interactive, int); + + // Description: + // Set/get the color of the outline of this widget. The outline is visible + // when (in interactive mode) the cursor is over this 3D widget. + void SetOutlineColor(double r, double g, double b); + double *GetOutlineColor(); + + // Description: + // Set/get the color of the axis labels of this widget. + void SetAxisLabelColor(double r, double g, double b); + double *GetAxisLabelColor(); + + // Description: + // Set/get the viewport to position/size this 3D widget. + void SetViewport(double minX, double minY, double maxX, double maxY); + double* GetViewport(); + +protected: + vtkPVAxesWidget(); + ~vtkPVAxesWidget(); + + vtkRenderer *Renderer; + vtkRenderer *ParentRenderer; + + vtkPVAxesActor *AxesActor; + vtkPolyData *Outline; + vtkActor2D *OutlineActor; + + static void ProcessEvents(vtkObject *object, unsigned long event, + void *clientdata, void *calldata); + + vtkPVAxesWidgetObserver *Observer; + int StartTag; + + int MouseCursorState; + int Moving; + int StartPosition[2]; + + int Interactive; + + void UpdateCursorIcon(); + void SetMouseCursor(int cursorState); + +//BTX + int State; + + enum AxesWidgetState + { + Outside = 0, + Inside, + TopLeft, + TopRight, + BottomLeft, + BottomRight + }; +//ETX + + void OnButtonPress(); + void OnMouseMove(); + void OnButtonRelease(); + + void MoveWidget(); + void ResizeTopLeft(); + void ResizeTopRight(); + void ResizeBottomLeft(); + void ResizeBottomRight(); + + void SquareRenderer(); + + unsigned long StartEventObserverId; +private: + vtkPVAxesWidget(const vtkPVAxesWidget&); // Not implemented + void operator=(const vtkPVAxesWidget&); // Not implemented +}; + +#endif diff --git a/src/SalomeApp/Makefile.am b/src/SalomeApp/Makefile.am index 9c94a2680..c82f8e5eb 100755 --- a/src/SalomeApp/Makefile.am +++ b/src/SalomeApp/Makefile.am @@ -98,13 +98,16 @@ nodist_libSalomeApp_la_SOURCES = $(MOC_FILES) # python modules salomepython_PYTHON = salome_pluginsmanager.py +dist_salomescript_DATA = addvars2notebook.py + dist_salomeres_DATA = \ resources/SalomeApp.ini \ resources/SalomeApp.xml nodist_salomeres_DATA = \ SalomeApp_images.qm \ - SalomeApp_msg_en.qm + SalomeApp_msg_en.qm \ + SalomeApp_msg_fr.qm libSalomeApp_la_CPPFLAGS = $(PYTHON_INCLUDES) $(QT_INCLUDES) $(QWT_INCLUDES) \ $(CAS_CPPFLAGS) $(VTK_INCLUDES) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ \ diff --git a/src/SalomeApp/SalomeApp_Application.cxx b/src/SalomeApp/SalomeApp_Application.cxx index ed874a3f4..6f049d5f6 100644 --- a/src/SalomeApp/SalomeApp_Application.cxx +++ b/src/SalomeApp/SalomeApp_Application.cxx @@ -84,6 +84,7 @@ #include #include #include +#include #include #include @@ -205,26 +206,45 @@ void SalomeApp_Application::start() // import/execute python scripts if ( pyfiles.count() > 0 && activeStudy() ) { SalomeApp_Study* appStudy = dynamic_cast( activeStudy() ); - if ( appStudy ) { + PyConsole_Console* pyConsole = pythonConsole(); + if ( appStudy && pyConsole ) { _PTR(Study) aStudy = appStudy->studyDS(); if ( !aStudy->GetProperties()->IsLocked() ) { for (uint j = 0; j < pyfiles.count(); j++ ) { QFileInfo fi ( pyfiles[j] ); - PyConsole_Console* pyConsole = pythonConsole(); - if ( pyConsole ) { - QString extension = fi.suffix().toLower(); - if ( fi.exists() ) { - // execute python script - QString command = QString( "execfile(r\"%1\")" ).arg( fi.absoluteFilePath() ); - pyConsole->exec( command ); - } - else { - // import python module - QString command = QString( "import %1" ).arg( pyfiles[j] ); - if ( extension == "py" ) - command = QString( "import %1" ).arg( fi.completeBaseName() ); - pyConsole->exec( command ); - } + QFileInfo fipy ( pyfiles[j] + ".py" ); + QString command = QString( "execfile(r\"%1\")" ); + if ( fi.isAbsolute() ) { + if ( fi.exists() ) + pyConsole->exec( command.arg( fi.absoluteFilePath() ) ); + else if ( fipy.exists() ) + pyConsole->exec( command.arg( fipy.absoluteFilePath() ) ); + else + qDebug() << "Can't execute file" << pyfiles[j]; + } + else { + bool found = false; + QStringList dirs; + dirs << QDir::currentPath(); + if ( ::getenv( "PYTHONPATH" ) ) + dirs += QString( ::getenv( "PYTHONPATH" ) ).split( QRegExp( "[:|;]" ) ); + foreach( QString dir, dirs ) { + qDebug() << "try" << QFileInfo( dir, pyfiles[j] ).absoluteFilePath(); + qDebug() << "try" << QFileInfo( dir, pyfiles[j] + ".py" ).absoluteFilePath(); + if ( QFileInfo( dir, pyfiles[j] ).exists() ) { + pyConsole->exec( command.arg( QFileInfo( dir, pyfiles[j] ).absoluteFilePath() ) ); + found = true; + break; + } + else if ( QFileInfo( dir, pyfiles[j] + ".py" ).exists() ) { + pyConsole->exec( command.arg( QFileInfo( dir, pyfiles[j] + ".py" ).absoluteFilePath() ) ); + found = true; + break; + } + } + if ( !found ) { + qDebug() << "Can't execute file" << pyfiles[j]; + } } } } @@ -310,7 +330,7 @@ void SalomeApp_Application::createActions() // import Python module that manages SALOME plugins PyGILState_STATE gstate = PyGILState_Ensure(); PyObject* pluginsmanager=PyImport_ImportModule((char*)"salome_pluginsmanager"); - PyObject* res=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",0,"salome","Tools","Plugins"); + PyObject* res=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",0,"salome",tr("MEN_DESK_PLUGINS_TOOLS").toStdString().c_str(),tr("MEN_DESK_PLUGINS").toStdString().c_str()); if(res==NULL) PyErr_Print(); Py_XDECREF(res); diff --git a/src/SalomeApp/SalomeApp_NoteBookDlg.cxx b/src/SalomeApp/SalomeApp_NoteBookDlg.cxx index 061976175..9ab2640d2 100644 --- a/src/SalomeApp/SalomeApp_NoteBookDlg.cxx +++ b/src/SalomeApp/SalomeApp_NoteBookDlg.cxx @@ -301,7 +301,12 @@ bool NoteBook_TableRow::IsValidStringValue(const QString theValue) command += "\", "; } command += ") "; + + //rnv: fix for bug 21947 WinTC5.1.4: Wrong error management of "Salome NoteBook" + bool oldSuppressValue = pyConsole->isSuppressOutput(); + pyConsole->setIsSuppressOutput(true); bool aResult = pyInterp->run(command.c_str()); + pyConsole->setIsSuppressOutput(oldSuppressValue); return !aResult; } @@ -472,7 +477,13 @@ bool NoteBook_Table::IsValid() const command += "\","; } command += ")"; + + //rnv: fix for bug 21947 WinTC5.1.4: Wrong error management of "Salome NoteBook" + bool oldSuppressValue = pyConsole->isSuppressOutput(); + pyConsole->setIsSuppressOutput(true); bool aResult = pyInterp->run(command.c_str()); + pyConsole->setIsSuppressOutput(oldSuppressValue); + return !aResult; } @@ -481,7 +492,7 @@ bool NoteBook_Table::IsValid() const * Purpose : renumber row items */ //============================================================================ -void NoteBook_Table::RenamberRowItems(){ +void NoteBook_Table::RenamberRowItems() { for(int i=0; iGetHeaderItem()->setText(QString::number(i+1)); } diff --git a/src/SalomeApp/addvars2notebook.py b/src/SalomeApp/addvars2notebook.py new file mode 100644 index 000000000..6f2375543 --- /dev/null +++ b/src/SalomeApp/addvars2notebook.py @@ -0,0 +1,67 @@ + +import os +import os.path + +def addvars2notebook(filename): + # + vars_and_values = [] + contents = [] + # + directory = os.path.dirname(filename) + base = os.path.basename(filename) + prefix = base[:-3] # remove ".py" + prefix = prefix + '_' + from os import listdir + l = listdir(directory) + for f in l: + if f.find(prefix) != 0: continue + if f[-3:] != ".py": continue + module = f[len(prefix):-3] + try: + mod = __import__("addvars2notebook_%s"%(module)) + except ImportError: + continue + try: + func = mod.addvars2notebook + except AttributeError: + continue + fff = os.path.join(directory, f) + content = func(fff, vars_and_values) + contents.append([fff, content]) + pass + # + if vars_and_values: + stream = open(filename) + content = stream.read() + stream.close() + fields = content.split("import iparameters") + if len(fields) == 2: + begin = fields[0] + if begin.find("## NoteBook E.A.") >= 0: + begin = begin.split("## NoteBook E.A.")[0] + pass + end = "import iparameters" + fields[1] + content = begin + content += "## NoteBook E.A.\n" + for var, value in vars_and_values: + content += "notebook.set(%s,%s)\n"%(var.__repr__(), value) + pass + content += end + stream = open(filename, "w") + stream.write(content) + stream.close() + # + for fff, content in contents: + stream = open(fff, "w") + stream.write(content) + stream.close() + pass + pass + pass + # + return + +if __name__ == "__main__": + import sys + addvars2notebook(sys.argv[1]) + pass diff --git a/src/SalomeApp/resources/SalomeApp.xml b/src/SalomeApp/resources/SalomeApp.xml index 970ca1d78..358809fc3 100644 --- a/src/SalomeApp/resources/SalomeApp.xml +++ b/src/SalomeApp/resources/SalomeApp.xml @@ -42,6 +42,7 @@
    +
    @@ -64,8 +65,11 @@
    + + + @@ -129,6 +133,7 @@ +
    @@ -145,8 +150,10 @@ + + @@ -225,4 +232,27 @@
    + +
    + +
    +
    + + +
    +
    + + + + + + + +
    +
    + + + + +
    diff --git a/src/SalomeApp/resources/SalomeApp_msg_en.ts b/src/SalomeApp/resources/SalomeApp_msg_en.ts index e12a7d532..2b98f7506 100644 --- a/src/SalomeApp/resources/SalomeApp_msg_en.ts +++ b/src/SalomeApp/resources/SalomeApp_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default @@ -87,15 +66,15 @@ Python file must include only letters, digits and underscores and start from let ERR_INCOMPATIBLE_TYPE - Variable with name "%1" has incompatible numeric type + Variable with name "%1" has incompatible numeric type ERR_INVALID_VALUE - Value hasn't been validated + Value hasn't been validated ERR_NO_VARIABLE - Variable with name "%1" doesn't exist + Variable with name "%1" doesn't exist @@ -185,6 +164,10 @@ Do you want to reload it ? TOT_DESK_CATALOG_GENERATOR Catalog generator
    + + TOT_DESK_ADD_VARS_TO_NOTEBOOK + Add vars to notebook + PUBLISH_IN_STUDY Publish in study @@ -261,6 +244,14 @@ Do you want to reload it ? MEN_DESK_TOOLS &Tools + + MEN_DESK_PLUGINS_TOOLS + Tools + + + MEN_DESK_PLUGINS + Plugins + TOT_DESK_FILE_DUMP_STUDY Dump study @@ -277,6 +268,10 @@ Do you want to reload it ? PRP_DESK_CATALOG_GENERATOR Generates XML catalog of a component's interface + + PRP_DESK_ADD_VARS_TO_NOTEBOOK + Add variables of the study to the notebook + PRP_DESK_FILE_DUMP_STUDY Dumps study to the python script @@ -309,6 +304,10 @@ Do you want to reload it ? MEN_DESK_CATALOG_GENERATOR Catalog &Generator + + MEN_DESK_ADD_VARS_TO_NOTEBOOK + Add vars to NoteBook + APPCLOSE_CAPTION Close active study @@ -382,101 +381,101 @@ Do you want to reload it ?
    NoteBook_Table - - REMOVE_VARIABLE_IS_USED - Variable with name "%1" is used in the study. + + REMOVE_VARIABLE_IS_USED + Variable with name "%1" is used in the study. Do you really want to remove it? - - - RENAME_VARIABLE_IS_USED - Variable with name "%1" is used in the study. + + + RENAME_VARIABLE_IS_USED + Variable with name "%1" is used in the study. Do you really want to rename it? - - - VARNAME_COLUMN - Variable Name - - - VARVALUE_COLUMN - Variable Value - - - VARVALUE_INCORRECT - Variable Value Incorrect: %1 - - - VARNAME_INCORRECT - Variable Name Incorrect :%1 - - - VARNAME_EXISTS - Variable with name "%1" exists - + + + VARNAME_COLUMN + Variable Name + + + VARVALUE_COLUMN + Variable Value + + + VARVALUE_INCORRECT + Variable Value Incorrect: %1 + + + VARNAME_INCORRECT + Variable Name Incorrect :%1 + + + VARNAME_EXISTS + Variable with name "%1" exists + SalomeApp_NoteBookDlg - - NOTEBOOK_TITLE - Salome NoteBook - - - BUT_UPDATE_STUDY - &Update Study - - - BUT_REMOVE - &Remove - - - BUT_APPLY_AND_CLOSE - A&pply and Close - - - BUT_HELP - &Help - - - CLOSE_CAPTION - Close NoteBook - - - CLOSE_DESCRIPTION - Do you want to save changes you made to NoteBook? - - - INCORRECT_DATA - At least one variable has been defined incorrectly. + + NOTEBOOK_TITLE + Salome NoteBook + + + BUT_UPDATE_STUDY + &Update Study + + + BUT_REMOVE + &Remove + + + BUT_APPLY_AND_CLOSE + A&pply and Close + + + BUT_HELP + &Help + + + CLOSE_CAPTION + Close NoteBook + + + CLOSE_DESCRIPTION + Do you want to save changes you made to NoteBook? + + + INCORRECT_DATA + At least one variable has been defined incorrectly. Please edit its parameters or remove it from table. - - - ERR_UPDATE_STUDY_FAILED - Failed to update study! - + + + ERR_UPDATE_STUDY_FAILED + Failed to update study! + - SalomeApp_DoubleSpinBox - - VALID_RANGE_VAR_MSG - Specify either a variable name or + SalomeApp_DoubleSpinBox + + VALID_RANGE_VAR_MSG + Specify either a variable name or a floating-point value in range ( %1; %2 ) with %3-digit precision - - - VALID_RANGE_NOVAR_MSG - Specify a floating-point value in range ( %1; %2 ) + + + VALID_RANGE_NOVAR_MSG + Specify a floating-point value in range ( %1; %2 ) with %3-digit precision - + - SalomeApp_IntSpinBox - - VALID_RANGE_VAR_MSG - Specify either a variable name or + SalomeApp_IntSpinBox + + VALID_RANGE_VAR_MSG + Specify either a variable name or an integer value in range ( %1; %2 ) - - - VALID_RANGE_NOVAR_MSG - Specify an integer value in range ( %1; %2 ) - + + + VALID_RANGE_NOVAR_MSG + Specify an integer value in range ( %1; %2 ) +
    diff --git a/src/SalomeApp/resources/SalomeApp_msg_fr.ts b/src/SalomeApp/resources/SalomeApp_msg_fr.ts new file mode 100755 index 000000000..ad1032823 --- /dev/null +++ b/src/SalomeApp/resources/SalomeApp_msg_fr.ts @@ -0,0 +1,481 @@ + + + + + @default + + WRN_FILE_NAME_BAD + Indiquez un nom de fichier correct. +Un fichier Python ne doit être composé que de lettres, chiffres et tirets bas et doit commencer avec une lettre ou un tiret bas. + + + WRN_FILE_NOT_EXIST + Le fichier %1 n'existe pas. + + + CLOSE_LOCKED_STUDY + Fermer l'étude verrouillée? + + + PUBLISH_IN_STUDY + Publier dans l'étude + + + BUT_NEW + &Nouvelle + + + SAVE_POINT_ROOT_NAME + Etats d'IHM + + + SAVE_POINT_ROOT_TOOLTIP + Etats d'IHM persistents + + + SAVE_GUI_STATE + Sauvegarder l'état d'IHM + + + BUT_LOAD + &Charger + + + BUT_OPEN + &Ouvrir + + + SAVE_POINT_OBJECT_TOOLTIP + Etat d'IHM: %1 sauvegardé + + + SAVE_POINT_DEF_NAME + Etat d'IHM: + + + VALUE_COLUMN + Valeur + + + IOR_COLUMN + IOR + + + REFENTRY_COLUMN + Entrée de réf. + + + ERR_INCOMPATIBLE_TYPE + Le type numérique de la variable "%1" n'est pas compatible + + + ERR_INVALID_VALUE + La valeur n'a pas été validée + + + ERR_NO_VARIABLE + La variable "%1" n'existe pas. + + + + SalomeApp_Application + + ALL_FILES_FILTER + Tous les fichiers (*.*) + + + APPCLOSE_UNLOAD + &Déconnecter + + + APPCLOSE_CLOSE + &Fermer sans sauvegarder + + + MEN_WINDOWS_NEW + Nouvelle Fenêtre + + + MEN_DELETE_INVALID_REFERENCE + Supprimer la Référence Invalide + + + TOT_FILE_DESK_PREFERENCES + Préférences + + + MEN_DELETE_VS + Supprimer + + + MEN_OPENWITH + Activer Module %1 + + + MEN_DESK_REGISTRY_DISPLAY + Affichage du registre CORBA + + + APPCLOSE_SAVE + &Sauvegarder && Fermer + + + TOT_DESK_FILE_LOAD_SCRIPT + Exécuter un script python + + + PREF_STORE_VISUAL_STATE + Sauvegarder/restaurer le dernier ètat d'IHM + + + PRP_DESK_FILE_SAVE_GUI_STATE + Sauvegarder l'état actuel des vues 3D, des objets affichés, etc. + + + MEN_DESK_FILE_SAVE_GUI_STATE + Sauvegarder l'état d'IHM + + + TOT_DESK_FILE_SAVE_GUI_STATE + Sauvegarder l'état d'IHM + + + MEN_RESTORE_VS + Restaurer + + + WRN_DUMP_STUDY_FAILED + Impossible de générer le script de l'étude + + + MEN_DESK_PROPERTIES + Pro&priétés... + + + QUE_DOC_ALREADYEXIST + Le document %1 existe déjà dans le gestionnaire d'études. +Voulez-vous le recharger ? + + + MEN_RENAME_VS + Renommer + + + TOT_DESK_CATALOG_GENERATOR + Générateur de catalogue + + + TOT_DESK_ADD_VARS_TO_NOTEBOOK + Ajouter les variables au registre + + + PUBLISH_IN_STUDY + Publier dans l'étude + + + PREF_OBJ_BROWSER_SETTINGS + Paramètres + + + PRP_DESK_REGISTRY_DISPLAY + Visualiser le contenu du registre du serveur CORBA + + + PYTHON_FILES_FILTER + Fichiers PYTHON (*.py) + + + APPCLOSE_DESCRIPTION + Voulez-vous fermer ou décharger l'étude avant de la fermer? + + + PRP_DESK_PROPERTIES + Editer les propriétés de l'étude + + + PREF_TAB_OBJBROWSER + Arbre d'étude + + + STUDY_LOCKED + VERROUILLEE + + + APPCLOSE_CANCEL + &Annuler + + + OBJ_BROWSER_NAME + Objet + + + TOT_DESK_REGISTRY_DISPLAY + Visualiser le registre CORBA + + + OBJ_BROWSER_COLUMN_0 + Entrée + + + OBJ_BROWSER_COLUMN_1 + Valeur + + + OBJ_BROWSER_COLUMN_2 + IOR + + + OBJ_BROWSER_COLUMN_3 + Entrée de référence + + + PREF_CATEGORY_SALOME + SALOME + + + PYTHON_CONSOLE + Console Python + + + MEN_DESK_FILE_LOAD_SCRIPT + Exécuter un scrip&t... + + + MEN_DESK_TOOLS + &Outils + + + MEN_DESK_PLUGINS_TOOLS + Outils + + + MEN_DESK_PLUGINS + Extensions + + + TOT_DESK_FILE_DUMP_STUDY + Générer le script de l'étude + + + MEN_VIEW_WNDS + Fenêtres + + + MEN_DESK_FILE_DUMP_STUDY + &Générer le script de l'étude... + + + PRP_DESK_CATALOG_GENERATOR + Génére un catalogue XML de l'interface du composant + + + PRP_DESK_ADD_VARS_TO_NOTEBOOK + Ajouter les variables de l'étude au registre + + + PRP_DESK_FILE_DUMP_STUDY + Génère le script python de l'étude + + + TOT_DESK_FILE_NOTEBOOK + Ouvrir le Registre + + + MEN_DESK_FILE_NOTEBOOK + Re&gistre... + + + PRP_DESK_FILE_NOTEBOOK + Ouvrir le Registre + + + TOT_DESK_PROPERTIES + Propriétés de l'étude + + + PREF_GROUP_DEF_COLUMNS + Colonnes par défaut + + + PRP_DESK_FILE_LOAD_SCRIPT + Exécute un script Python à partir d'un fichier + + + MEN_DESK_CATALOG_GENERATOR + &Genérateur de Catalogue + + + MEN_DESK_ADD_VARS_TO_NOTEBOOK + Ajouter les variables au Registre + + + APPCLOSE_CAPTION + Fermer l'étude actuelle + + + MEN_DESK_MRU + Dernières études ouvertes + + + TOT_DESK_MRU + Dernières études ouvertes + + + ACTIVATE_MODULE_OP_LOAD + &Charger... + + + + SalomeApp_StudyPropertiesDlg + + PRP_MODE_FROM_SCRATCH + du début + + + PRP_AUTHOR + Auteur + + + PRP_LOCKED + Verrouillée + + + PRP_MODIFICATIONS + Modifications + + + PRP_NO + Non + + + PRP_YES + Oui + + + PRP_MODIFIED + Modifiée + + + PRP_DATE + Créée + + + PRP_MODE + Mode + + + PRP_MODE_FROM_COPYFROM + copier de + + + TLT_STUDY_PROPERTIES + Propriétés de l'étude + + + + SalomeApp_ExitDlg + + SHUTDOWN_SERVERS + Arrêter les serveurs autonomes + + + + NoteBook_Table + + REMOVE_VARIABLE_IS_USED + La variable "%1" est utilisée dans l'étude. +Voulez-vous vraiment la supprimer? + + + RENAME_VARIABLE_IS_USED + La variable "%1" est utilisée dans l'étude. +Voulez-vous vraiment la renommer? + + + VARNAME_COLUMN + Nom de la variable + + + VARVALUE_COLUMN + Valeur de la variable + + + VARVALUE_INCORRECT + La valeur de la variable n'est pas correcte: %1 + + + VARNAME_INCORRECT + Le nom de la variable n'est pas correct: %1 + + + VARNAME_EXISTS + La variable "%1" existe + + + + SalomeApp_NoteBookDlg + + NOTEBOOK_TITLE + Registre Salome + + + BUT_UPDATE_STUDY + &Mettre l'étude à jour + + + BUT_REMOVE + &Supprimer + + + BUT_APPLY_AND_CLOSE + A&ppliquer et Fermer + + + BUT_HELP + &Aide + + + CLOSE_CAPTION + Fermer le Registre + + + CLOSE_DESCRIPTION + Voulez-vous sauvegarder les changements faits au Registre? + + + INCORRECT_DATA + Au moins une variable a été définie incorrectement. +Editez ses paramètres ou retirez la de la liste. + + + ERR_UPDATE_STUDY_FAILED + Impossible de mettre l'étude à jour! + + + + SalomeApp_DoubleSpinBox + + VALID_RANGE_VAR_MSG + Indiquez un nom de variable ou +une valeur réelle dans l'intervalle ( %1; %2 ) +avec une précision de %3 décimales + + + VALID_RANGE_NOVAR_MSG + Indiquez une valeur réelle dans l'intervalle ( %1; %2 ) +avec une précision de %3 décimales + + + + SalomeApp_IntSpinBox + + VALID_RANGE_VAR_MSG + Indiquez un nom de variable ou +une valeur entière dans l'intervalle ( %1; %2 ) + + + VALID_RANGE_NOVAR_MSG + Indiquez une valeur entière dans l'intervalle ( %1; %2 ) + + + diff --git a/src/SalomeApp/salome_pluginsmanager.py b/src/SalomeApp/salome_pluginsmanager.py index 00199335d..da726a837 100644 --- a/src/SalomeApp/salome_pluginsmanager.py +++ b/src/SalomeApp/salome_pluginsmanager.py @@ -77,12 +77,21 @@ plugins={} current_plugins_manager=None def initialize(module,name,basemenuname,menuname): - if plugins.has_key(name):return - plugins[name]=PluginsManager(module,name,basemenuname,menuname) + if not plugins.has_key(name): + if module: + plugins[name]={} + else: + plugins[name]=[] + if module: + studyId=sg.getActiveStudyId() + if plugins[name].has_key(studyId):return + plugins[name][studyId]=PluginsManager(module,name,basemenuname,menuname) + else: + plugins[name].append(PluginsManager(module,name,basemenuname,menuname)) class Context: - def __init__(self,sg): - self.sg=sg + def __init__(self,sgpyqt): + self.sg=sgpyqt self.studyId=salome.sg.getActiveStudyId() self.study= salome.myStudyManager.GetStudyByID(self.studyId) diff --git a/src/Session/SALOME_Session_Server.cxx b/src/Session/SALOME_Session_Server.cxx index 40e5a7ad0..d3d61e2e1 100755 --- a/src/Session/SALOME_Session_Server.cxx +++ b/src/Session/SALOME_Session_Server.cxx @@ -376,7 +376,7 @@ int main( int argc, char **argv ) SUIT_ResourceMgr resMgr( "SalomeApp", QString( "%1Config" ) ); resMgr.setCurrentFormat( "xml" ); resMgr.setWorkingMode( QtxResourceMgr::IgnoreUserValues ); - resMgr.loadLanguage( "LightApp", "en" ); + resMgr.loadLanguage( "LightApp" ); // splash = QtxSplash::splash( QPixmap() ); splash->readSettings( &resMgr ); diff --git a/src/Style/Makefile.am b/src/Style/Makefile.am index 4b2d215a5..ec4efbf62 100644 --- a/src/Style/Makefile.am +++ b/src/Style/Makefile.am @@ -65,3 +65,5 @@ libSalomeStyle_la_LDFLAGS = $(QT_MT_LIBS) \ ../Qtx/libqtx.la dist_salomeres_DATA = resources/SalomeStyle.xml + +nodist_salomeres_DATA = Style_msg_fr.qm diff --git a/src/Style/Style_PrefDlg.cxx b/src/Style/Style_PrefDlg.cxx index 326dbcc03..e748d06c6 100644 --- a/src/Style/Style_PrefDlg.cxx +++ b/src/Style/Style_PrefDlg.cxx @@ -127,7 +127,7 @@ void Style_PrefDlg::PaletteEditor::addColumn( const QString& title ) l->addWidget( myActiveLab = new QLabel( tr( "Active" ), myContainer ), myCurrentRow, myCurrentColumn*4+1 ); l->addWidget( myInactiveLab = new QLabel( tr( "Inactive" ), myContainer ), myCurrentRow, myCurrentColumn*4+2 ); - l->addWidget( myDisabledLab = new QLabel( tr( "Disable" ), myContainer ), myCurrentRow, myCurrentColumn*4+3 ); + l->addWidget( myDisabledLab = new QLabel( tr( "Disabled" ), myContainer ), myCurrentRow, myCurrentColumn*4+3 ); int w = 0; w = qMax( w, myActiveLab->sizeHint().width() ); w = qMax( w, myInactiveLab->sizeHint().width() ); @@ -376,7 +376,7 @@ QString Style_PrefDlg::PaletteEditor::idToName( int id ) case Style_Model::BrightText: // 7 name = tr( "Bright text" ); break; case Style_Model::ButtonText: // 8 - name = tr( "Buttont text" ); break; + name = tr( "Button text" ); break; case Style_Model::Base: // 9 name = tr( "Base" ); break; case Style_Model::Window: // 10 @@ -496,7 +496,7 @@ Style_PrefDlg::Style_PrefDlg( QWidget* parent ) main->setMargin( 0 ); main->setSpacing( SPACING ); // create main widgets - myStyleCheck = new QCheckBox( tr( "Use SALOME Style" ), this ); + myStyleCheck = new QCheckBox( tr( "Enable SALOME Style" ), this ); QFrame* fr = new QFrame( this ); fr->setFrameStyle( QFrame::Box | QFrame::Sunken ); diff --git a/src/Style/Style_Salome.cxx b/src/Style/Style_Salome.cxx index edc398565..3df8e7f66 100644 --- a/src/Style/Style_Salome.cxx +++ b/src/Style/Style_Salome.cxx @@ -413,7 +413,8 @@ void Style_Salome::drawComplexControl( ComplexControl cc, const QStyleOptionComp if (const QStyleOptionSpinBox *spin = qstyleoption_cast(opt)) { bool hover = hasHover() && (opt->state & State_Enabled) && (opt->state & State_MouseOver); QRect optr = opt->rect, arUp = subControlRect( cc, spin, SC_SpinBoxUp, w ); - optr.setWidth( arUp.x()-optr.x()+1 ); + if (spin->buttonSymbols != QAbstractSpinBox::NoButtons) + optr.setWidth( arUp.x()-optr.x()+1 ); double aRad = model()->widgetRounding( Style_Model::EditRadius ); bool antialized = model()->antialiasing(); QColor aBrdTopCol = model()->color( Style_Model::BorderTop ); // Style_Model::border_top_clr diff --git a/src/Style/resources/Style_msg_fr.ts b/src/Style/resources/Style_msg_fr.ts new file mode 100644 index 000000000..29604c9f4 --- /dev/null +++ b/src/Style/resources/Style_msg_fr.ts @@ -0,0 +1,287 @@ + + + + + Style_PrefDlg + + Quick + Rapide + + + Auto + Auto + + + Base colors + Couleurs de base + + + Additional colors + Couleurs supplémentaires + + + Active + Actif + + + Inactive + Inactif + + + Disabled + Désactivé + + + Window text + Texte de la fenêtre + + + Button + Bouton + + + Light + Clair + + + Midlight + Demi-clair + + + Dark + Foncé + + + Mid + Moyen + + + Text + Texte + + + Bright text + Texte éclairé + + + Button text + Texte du bouton + + + Base + Base + + + Window + Fenêtre + + + Shadow + Ombre + + + Highlight + Surligner + + + Highlighted text + Texte surligné + + + Link + Lien + + + Visited link + Lien visité + + + Alternate base + Base alternative + + + Tooltip base + Base d'infobulle + + + Tooltip text + Texte d'infobulle + + + Border top + Frontière de dessus + + + Border bottom + Frontière de dessous + + + Tab border top + Frontière de dessus de l'onglet + + + Tab border bottom + Frontière de dessous de l'onglet + + + Field light + Champ clair + + + Field dark + Champ foncé + + + Slider + Barre de défilement + + + Lines + Lignes + + + Widget center + Composant central + + + Widget border + Composant de frontière + + + Header + Titre + + + Progress bar + Barre d'avancement + + + Pointer + Pointeur + + + Checked + Coché + + + Table grid + Quadrillage du tableau + + + SALOME style preferences + Préférences de style Salomé + + + Enable SALOME Style + Activer le style Salomé + + + Font + Caractères + + + Type + Type + + + None + Aucun + + + Horizontal + Horizontal + + + Inclined + Incliné + + + Transparency + Transparence + + + Widgets rounding + Arrondi des objets-fenêtres + + + Buttons + Boutons + + + Edit boxes + Champs d'édition + + + Frames + Cadres + + + Sliders + Barres de défilement + + + Anti-aliased borders + Frontières anticrénelées + + + Handle + Poignée + + + Horizontal spacing + Espacement horizontal + + + Vertical spacing + Espacement vertical + + + Splitter handle size + Taille de poignée du diviseur + + + Slider handle size + Taille de poignée de la barre de défilement + + + Widget effect + Effet des composants + + + Highlight widgets + Mettre en valeur les composants + + + Auto raise widgets + Activer les composants automatiquement + + + Colors + Couleurs + + + Properties + Paramètres + + + [ Current ] + [ Actuel ] + + + [ Default ] + [ Défaut ] + + + Delete user theme + Supprimer le thème utilisateur + + + Remove theme %1? + Supprimer le thème %1? + + + Custom schema + Schéma personnalisé + + + diff --git a/src/TOOLSGUI/Makefile.am b/src/TOOLSGUI/Makefile.am index 0c41e9a8d..462bb6d65 100755 --- a/src/TOOLSGUI/Makefile.am +++ b/src/TOOLSGUI/Makefile.am @@ -48,7 +48,8 @@ nodist_libToolsGUI_la_SOURCES = $(MOC_FILES) # .po files to transform in .qm nodist_salomeres_DATA = \ - ToolsGUI_msg_en.qm + ToolsGUI_msg_en.qm \ + ToolsGUI_msg_fr.qm libToolsGUI_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) $(BOOST_CPPFLAGS) \ @KERNEL_CXXFLAGS@ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ \ diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.cxx b/src/TOOLSGUI/ToolsGUI_RegWidget.cxx index ef267b1e3..bc4a9f85d 100755 --- a/src/TOOLSGUI/ToolsGUI_RegWidget.cxx +++ b/src/TOOLSGUI/ToolsGUI_RegWidget.cxx @@ -20,48 +20,30 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SALOME RegistryDisplay : GUI for Registry server implementation -// File : ToolsGUI_RegWidget.cxx -// Author : Pascale NOYRET, EDF -// # include "ToolsGUI_RegWidget.h" -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# include -# include -# include -# include - -# include -# include - -# include - -typedef int PIXELS; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include #define MARGIN_SIZE 11 #define SPACING_SIZE 6 #define MIN_SPIN_WIDTH 100 -#define BOLD( text ) ( QString( "" ) + QString( text ) + QString( "" ) ) +#define BOLD( text ) QString( "%1" ).arg( QString( text ) ) static const char* const time_data[] = { "16 16 6 1", @@ -138,315 +120,32 @@ static const char* const refresh_data[] = { "......aaaaa....."}; /*! - \brief Create components list. + \brief Get access to the Registry service \internal \param orb CORBA ORB reference - \return list of registered components + \return reference to the Registry service */ -static Registry::Components_var MakeRegistry( CORBA::ORB_var& orb ) +static Registry::Components_ptr GetRegistry( CORBA::ORB_ptr orb ) { - - const char *registryName="Registry" ; + static const char* registryName = "Registry"; + Registry::Components_var aRegistry; - SALOME_NamingService &naming = *SINGLETON_::Instance() ; - naming.init_orb( orb ) ; + SALOME_NamingService& naming = *SINGLETON_::Instance(); + naming.init_orb( orb ); - // Recuperation de la reference de l'objet - CORBA::Object_var object = 0 ; + CORBA::Object_var object = 0; try { - SCRUTE(registryName) ; - object = naming.Resolve( registryName ) ; - if(CORBA::is_nil(object)) throw CommException( "unable to find the RegistryService" ) ; + object = naming.Resolve( registryName ); + if ( CORBA::is_nil( object ) ) throw CommException( "Unable to find the Registry service" ); + aRegistry = Registry::Components::_narrow( object ); } - catch( const ServiceUnreachable& ex ) + catch( const CORBA::Exception& ex ) { - MESSAGE( ex.what() ) - exit( EXIT_FAILURE ) ; - } - catch( const CORBA::Exception& ) - { - exit( EXIT_FAILURE ) ; - } - - // Specialisation de l'objet generique - - return Registry::Components::_narrow( object ) ; -} - -/*! - \class ToolsGUI_RegWidget::InfoWindow - \brief Information window. - \internal -*/ - -class ToolsGUI_RegWidget::InfoWindow : public QMainWindow -{ -public: - InfoWindow( QWidget* parent ); - - void setText( const QString& text ); - -protected: - void keyPressEvent( QKeyEvent * e ); - -private: - QTextEdit* myTextView; -}; - -/*! - \brief Constructor. - \internal - \param parent parent widget -*/ -ToolsGUI_RegWidget::InfoWindow::InfoWindow( QWidget* parent ) -: QMainWindow( parent ) -{ - setAttribute( Qt::WA_DeleteOnClose ); - - myTextView = new QTextEdit( this ); - myTextView->setReadOnly( true ); - setCentralWidget( myTextView ); - setMinimumSize( 450, 250 ); -} - -/*! - \brief Set text to the information window. - \internal - \param text ionfo text -*/ -void ToolsGUI_RegWidget::InfoWindow::setText( const QString& text ) -{ - myTextView->setText( text ); -} - -/*! - \brief Key press event handler. Closeswindow on \c Escape key pressing. - \internal - \param e key press event -*/ -void ToolsGUI_RegWidget::InfoWindow::keyPressEvent( QKeyEvent * e ) -{ - QMainWindow::keyPressEvent( e ); - if ( e->key() == Qt::Key_Escape ) - close(); -} - -/*! - \class ToolsGUI_RegWidget::HelpWindow - \brief Help window. - \internal -*/ - -class ToolsGUI_RegWidget::HelpWindow : public QMainWindow -{ -public: - HelpWindow( QWidget* parent ); - ~HelpWindow(); - - void setText( const QString& text ); - -private: - QTextEdit* myTextView; -}; - -/*! - \brief Constructor. - \internal - \param parent parent widget -*/ -ToolsGUI_RegWidget::HelpWindow::HelpWindow( QWidget* parent ) -: QMainWindow( parent ) -{ - setAttribute( Qt::WA_DeleteOnClose ); - setWindowTitle( tr( "Help" ) ); - - myTextView = new QTextEdit( this ); - myTextView->setReadOnly( true ); - QPalette pal = myTextView->palette(); - - pal.setBrush( QPalette::Active, QPalette::Highlight, QBrush( QColor( 0, 0, 128 ) ) ); - pal.setBrush( QPalette::Active, QPalette::HighlightedText, QBrush( Qt::white ) ); - pal.setBrush( QPalette::Active, QPalette::Base, QBrush( QColor( 255,255,220 ) ) ); - pal.setBrush( QPalette::Active, QPalette::Text, QBrush( Qt::black ) ); - - pal.setBrush( QPalette::Inactive, QPalette::Highlight, QBrush( QColor( 0, 0, 128 ) ) ); - pal.setBrush( QPalette::Inactive, QPalette::HighlightedText, QBrush( Qt::white ) ); - pal.setBrush( QPalette::Inactive, QPalette::Base, QBrush( QColor( 255,255,220 ) ) ); - pal.setBrush( QPalette::Inactive, QPalette::Text, QBrush( Qt::black ) ); - - pal.setBrush( QPalette::Disabled, QPalette::Highlight, QBrush( QColor( 0, 0, 128 ) ) ); - pal.setBrush( QPalette::Disabled, QPalette::HighlightedText, QBrush( Qt::white ) ); - pal.setBrush( QPalette::Disabled, QPalette::Base, QBrush( QColor( 255,255,220 ) ) ); - pal.setBrush( QPalette::Disabled, QPalette::Text, QBrush( Qt::black ) ); - - myTextView->setPalette( pal ); - - setCentralWidget( myTextView ); - setMinimumSize( 450, 250 ); - - QFile f ( "tmp.txt" ); - if ( f.open( QIODevice::ReadOnly ) ) { - QTextStream t( &f ); - while ( !t.atEnd() ) { - myTextView->append( t.readLine() ); - } + MESSAGE( "Error: can't access Registry server" ); } - f.close(); -} - -/*! - \brief Destructor. - \internal -*/ -ToolsGUI_RegWidget::HelpWindow::~HelpWindow() -{ -}; - -/*! - \brief Set text to the help window. - \internal - \param text help text -*/ -void ToolsGUI_RegWidget::HelpWindow::setText( const QString& text ) -{ - myTextView->setText( text ); -} - -/*! - \class ToolsGUI_RegWidget::IntervalWindow - \brief Dialog box to enter time delay between registry window updates - \internal -*/ - -class ToolsGUI_RegWidget::IntervalWindow : public QDialog -{ -public: - IntervalWindow( QWidget* parent ); - ~IntervalWindow(); - - QPushButton* Ok(); - QPushButton* Cancel(); - - int getValue(); - void setValue( int ); - -private: - QSpinBox* mySpinBox; - QPushButton* myButtonOk; - QPushButton* myButtonCancel; -}; - -/*! - \brief Constructor. - \internal - \param parent parent widget -*/ -ToolsGUI_RegWidget::IntervalWindow::IntervalWindow ( QWidget* parent ) -: QDialog( parent ) -{ - setModal( true ); - setAttribute( Qt::WA_DeleteOnClose ); - - setWindowTitle( tr( "Refresh Interval" ) ); - setSizeGripEnabled( true ); - - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setSpacing( SPACING_SIZE ); - topLayout->setMargin( MARGIN_SIZE ); - - QGroupBox* intervalGrp = new QGroupBox( this ); - intervalGrp->setObjectName( "intervalGrp" ); - QGridLayout* intervalGrpLayout = new QGridLayout( intervalGrp ); - intervalGrpLayout->setAlignment( Qt::AlignTop ); - intervalGrpLayout->setSpacing( SPACING_SIZE ); - intervalGrpLayout->setMargin( MARGIN_SIZE ); - - QHBoxLayout* aBtnLayout = new QHBoxLayout; - aBtnLayout->setSpacing( SPACING_SIZE ); - aBtnLayout->setMargin( 0 ); - - myButtonOk = new QPushButton( this ); - myButtonOk->setObjectName( "buttonOk" ); - myButtonOk->setText( tr( "BUT_OK" ) ); - myButtonOk->setAutoDefault( TRUE ); - myButtonOk->setDefault( TRUE ); - - myButtonCancel = new QPushButton( this ); - myButtonCancel->setObjectName( "buttonCancel" ); - myButtonCancel->setText( tr( "BUT_CANCEL" ) ); - myButtonCancel->setAutoDefault( TRUE ); - - QLabel* TextLabel = new QLabel( intervalGrp ); - TextLabel->setObjectName( "TextLabel" ); - TextLabel->setText( tr( "Please, enter a number of seconds:" ) ); - - mySpinBox = new QSpinBox( intervalGrp ); - mySpinBox->setMinimum( 1 ); - mySpinBox->setMaximum( 999999999 ); - mySpinBox->setSingleStep( 1 ); - mySpinBox->setObjectName( "SpinBox" ); - mySpinBox->setValue( 100 ); - mySpinBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - mySpinBox->setMinimumWidth(MIN_SPIN_WIDTH); - - intervalGrpLayout->addWidget(TextLabel, 0, 0); - intervalGrpLayout->addWidget(mySpinBox, 0, 1); - - aBtnLayout->addWidget( myButtonOk ); - aBtnLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aBtnLayout->addWidget( myButtonCancel ); - - topLayout->addWidget( intervalGrp, 0, 0 ); - topLayout->addLayout( aBtnLayout, 1, 0 ); -} - -/*! - \brief Destructor - \internal -*/ -ToolsGUI_RegWidget::IntervalWindow::~IntervalWindow() -{ -} - -/*! - \brief Set time interval value - \internal - \param size interval value -*/ -void ToolsGUI_RegWidget::IntervalWindow::setValue( const int size ) -{ - mySpinBox->setValue(size); -} - -/*! - \brief Get time interval value - \internal - \return interval value -*/ -int ToolsGUI_RegWidget::IntervalWindow::getValue() -{ - return mySpinBox->value(); -} -/*! - \brief Get \c OK button - \internal - \return a pointer to \c OK button -*/ -QPushButton* ToolsGUI_RegWidget::IntervalWindow::Ok() -{ - return myButtonOk; -} - -/*! - \brief Get \c Cancel button - \internal - \return a pointer to \c Cancel button -*/ -QPushButton* ToolsGUI_RegWidget::IntervalWindow::Cancel() -{ - return myButtonCancel; + return aRegistry._retn(); } /*! @@ -462,7 +161,7 @@ ToolsGUI_RegWidget* ToolsGUI_RegWidget::myRegWidgetPtr = 0; \param orb CORBA ORB reference \param parent parent widget */ -ToolsGUI_RegWidget* ToolsGUI_RegWidget::GetRegWidget( CORBA::ORB_var& orb, +ToolsGUI_RegWidget* ToolsGUI_RegWidget::GetRegWidget( CORBA::ORB_ptr orb, QWidget* parent ) { if ( !myRegWidgetPtr ) @@ -470,99 +169,108 @@ ToolsGUI_RegWidget* ToolsGUI_RegWidget::GetRegWidget( CORBA::ORB_var& orb, return myRegWidgetPtr; } -/*! - \brief This virtual function is reimplenented to disable popup menu on dock areas - (instead of QMainWindow::setDockMenuEnabled( false ) method used in Qt3). - \return always 0 to disable menu -*/ -QMenu* ToolsGUI_RegWidget::createPopupMenu() -{ - QMenu* aPopup = 0; - return aPopup; -} - /*! \brief Constructor \param orb CORBA ORB reference \param parent parent widget */ -ToolsGUI_RegWidget::ToolsGUI_RegWidget( CORBA::ORB_var& orb, QWidget* parent ) -: QMainWindow( parent, Qt::Window ), - _VarComponents( MakeRegistry(orb) ), - _clients( 0 ), - _history( 0 ), - _parent( parent ), - _tabWidget( 0 ), - _refresh( 0 ), - _interval( 0 ), - myInfoWindow( 0 ), - myHelpWindow( 0 ), - myIntervalWindow( 0 ) +ToolsGUI_RegWidget::ToolsGUI_RegWidget( CORBA::ORB_ptr orb, QWidget* parent ) +: QMainWindow( parent ) { - setAttribute( Qt::WA_DeleteOnClose ); + myOrb = CORBA::ORB::_duplicate( orb ); - if ( parent ) - setWindowIcon( parent->windowIcon() ); - - // pixmap for buttons - QPixmap image_refresh ( ( const char** ) refresh_data ); - QPixmap image_interval( ( const char** ) time_data ); - QPixmap image_close ( ( const char** ) close_data ); + // set window attributes + setAttribute( Qt::WA_DeleteOnClose ); + setWindowTitle( tr( "TLT_REGISTRY" ) ); - // Buttons definition - QToolBar* topbar = new QToolBar( tr("Toolbar"), this ); - topbar->setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); - addToolBar( Qt::TopToolBarArea, topbar ); + // show status bar + statusBar(); - _refresh = topbar->addAction(image_refresh, tr( "Refresh" ), this, SLOT( slotListeSelect() )); - _refresh->setToolTip( "" ); - _refresh->setStatusTip( tr("Immediately updates list of components") ); + // get main menu bar + QMenuBar* mainMenu = menuBar(); - /* PAL5540 - this button is needless - QPushButton* help = new QPushButton( tr( "Help" ), topbar ); - connect( help, SIGNAL( clicked() ), this, SLOT( slotHelp() ) ); - QToolTip::add( help, "", toolTipGroup(), tr("Opens Help window") ); - */ + // add 'Actions' menu + QMenu* m = mainMenu->addMenu( tr( "MNU_ACTIONS" ) ); + // add 'Actions' toolbar + QToolBar* tb = addToolBar( tr( "TB_ACTIONS" ) ); + + // create actions + myActions[Refresh] = new QAction( QPixmap( refresh_data ), tr( "MEN_REFRESH" ), this ); + myActions[Refresh]->setStatusTip( tr( "STB_REFRESH" ) ); + connect( myActions[Refresh], SIGNAL( triggered() ), this, SLOT( refresh() ) ); + m->addAction( myActions[Refresh] ); + tb->addAction( myActions[Refresh] ); - _interval = topbar->addAction(image_interval, tr( "Interval" ), this, SLOT( slotSelectRefresh() )); - _interval->setToolTip( "" ); - _interval->setStatusTip( tr("Changes refresh interval") ); - - topbar->addSeparator(); - - _close = topbar->addAction( image_close, tr("Close"), this, SLOT( close() )); - _close->setToolTip( "" ); - _close->setStatusTip( tr("Closes Registry window") ); + myActions[Interval] = new QAction( QPixmap( time_data ), tr( "MEN_INTERVAL" ), this ); + myActions[Interval]->setStatusTip( tr( "STB_INTERVAL" ) ); + connect( myActions[Interval], SIGNAL( triggered() ), this, SLOT( refreshInterval() ) ); + m->addAction( myActions[Interval] ); + tb->addAction( myActions[Interval] ); - // Display area and associated slots definition - _tabWidget = new QTabWidget( this ); - _clients = new QTreeWidget( _tabWidget ); - SetListe(); - _history = new QTreeWidget( _tabWidget ); - SetListeHistory(); - - _tabWidget->addTab( _clients, tr( "Running" ) ); - _tabWidget->addTab( _history, tr( "History" ) ); - connect( _tabWidget, SIGNAL( currentChanged( QWidget* )), this, SLOT( slotListeSelect() ) ); - connect( _clients, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( slotClientChanged( QTreeWidgetItem* , int ) ) ); - connect( _history, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( slotHistoryChanged( QTreeWidgetItem* , int ) ) ); - setCentralWidget( _tabWidget ); + m->addSeparator(); + tb->addSeparator(); + + myActions[Close] = new QAction( QPixmap( close_data ), tr( "MEN_CLOSE" ), this ); + myActions[Close]->setStatusTip( tr( "STB_CLOSE" ) ); + connect( myActions[Close], SIGNAL( triggered() ), this, SLOT( close() ) ); + m->addAction( myActions[Close] ); + tb->addAction( myActions[Close] ); + + // central widget + setCentralWidget( new QWidget( this ) ); + + // Create tab widget: SALOME serives list (running and history) + QTabWidget* tabWidget = new QTabWidget( centralWidget() ); + + myViews[Clients] = new QTreeWidget( tabWidget ); + myViews[Clients]->setColumnCount( 6 ); + myViews[Clients]->setAllColumnsShowFocus( true ); + myViews[Clients]->setRootIsDecorated( false ); + QStringList runningLabels; + runningLabels << tr( "HDR_COMPONENT" ) << tr( "HDR_PID" ) << tr( "HDR_USERNAME" ) + << tr( "HDR_HOSTNAME" ) << tr( "HDR_STARTED" ) << tr( "HDR_HELLO" ); + myViews[Clients]->setHeaderLabels( runningLabels ); + tabWidget->addTab( myViews[Clients], tr( "TAB_RUNNING" ) ); + + myViews[History] = new QTreeWidget( tabWidget ); + myViews[History]->setColumnCount(6); + myViews[History]->setAllColumnsShowFocus( true ); + myViews[History]->setRootIsDecorated( false ); + QStringList historyLabels; + historyLabels << tr( "HDR_COMPONENT" ) << tr( "HDR_PID" ) << tr( "HDR_USERNAME" ) + << tr( "HDR_HOSTNAME" ) << tr( "HDR_STARTED" ) << tr( "HDR_FINISHED" ); + myViews[History]->setHeaderLabels( historyLabels ); + tabWidget->addTab( myViews[History], tr( "TAB_HISTORY" ) ); + + connect( tabWidget, SIGNAL( currentChanged( int ) ), this, SLOT( refresh() ) ); + connect( myViews[Clients], SIGNAL( itemActivated( QTreeWidgetItem*, int ) ), + this, SLOT( showDetails( QTreeWidgetItem*, int ) ) ); + connect( myViews[History], SIGNAL( itemActivated( QTreeWidgetItem*, int ) ), + this, SLOT( showDetails( QTreeWidgetItem*, int ) ) ); + + // create information window + myDetails = new QTextEdit( centralWidget() ); + myDetails->setReadOnly( true ); + myDetails->setMinimumHeight( 100 ); + + // layout widgets + QVBoxLayout* topLayout = new QVBoxLayout( centralWidget() ); + topLayout->setMargin( 0 ); + topLayout->setSpacing( SPACING_SIZE ); + topLayout->addWidget( tabWidget ); + topLayout->addWidget( myDetails ); - // Timer definition (used to automaticaly refresh the display area) - _counter = new QTimer( this ); - connect( _counter, SIGNAL( timeout() ), this, SLOT( slotListeSelect() ) ); - myRefreshInterval = 10; - _counter->start( myRefreshInterval * 1000 ); + // install auto-update timer + myTimer = new QTimer( this ); + connect( myTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) ); + myTimer->start( 10000 ); // 10 seconds by default - PIXELS xpos = 160 ; - PIXELS ypos = 100 ; - PIXELS largeur = 800 ; - PIXELS hauteur = 350 ; - setGeometry( xpos, ypos, largeur, hauteur ) ; - setWindowTitle( tr( "Registry" ) ) ; - statusBar()->showMessage(" "); - - slotListeSelect(); + // resize window and set its position + resize( 800, 400 ); + Qtx::alignWidget( (QWidget*)this, (QWidget*)QApplication::desktop(), Qtx::AlignCenter ); + + // refresh registry information + refresh(); } /*! @@ -570,277 +278,115 @@ ToolsGUI_RegWidget::ToolsGUI_RegWidget( CORBA::ORB_var& orb, QWidget* parent ) */ ToolsGUI_RegWidget::~ToolsGUI_RegWidget() { - _counter->stop(); myRegWidgetPtr = 0; }; /*! - \brief Event filter - \param object event receiver - \param event event being processed - \return \c true if event processing should be stopped -*/ -bool ToolsGUI_RegWidget::eventFilter( QObject* object, QEvent* event ) -{ - if ( object ) { - if ( object == myHelpWindow && event->type() == QEvent::Close ) { - myHelpWindow = 0; - } - else if ( object == myInfoWindow && event->type() == QEvent::Close ) { - myInfoWindow = 0; - } - else if ( object == myIntervalWindow && event->type() == QEvent::Close ) { - myIntervalWindow = 0; - } - else if ( object == _clients && event->type() == QEvent::KeyPress ) { - QKeyEvent* ke = (QKeyEvent*)event; - if ( ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return ) { - slotClientChanged( _clients->currentItem(), 0 ); - } - } - else if ( object == _history && event->type() == QEvent::KeyPress ) { - QKeyEvent* ke = (QKeyEvent*)event; - if ( ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return ) { - slotHistoryChanged( _history->currentItem(), 0 ); - } - } - } - return QMainWindow::eventFilter( object, event ); -} - -/*! - \brief Search item in the list. - \param name component name - \param pid PID - \param machine machine name - \param listclient list of registry data - \return item index or -1 if it is not found. -*/ -int ToolsGUI_RegWidget::numitem( const QString& name, - const QString& pid, - const QString& machine, - const Registry::AllInfos* listclient ) -{ - for (CORBA::ULong i=0; ilength(); i++) { - const Registry::Infos & c_info=(*listclient)[i]; - ASSERT( c_info.name!=NULL); - QString b; - b.setNum(int(c_info.pid)); - if ( (name.compare(QString(c_info.name)) == 0) && - (machine.compare(QString(c_info.machine)) == 0) && - (pid.compare(b) == 0) ) { - return i; - } - } - return -1; -} - -/*! - \brief Get description text, containing information about client. + \brief Get description text, containing information about the service. \param c_info client info data \return formatted client description */ -QString ToolsGUI_RegWidget::setlongText( const Registry::Infos& c_info ) +QString ToolsGUI_RegWidget::getDetails( const Registry::Infos& c_info ) { - ASSERT( c_info.name != NULL ); - QString a = QString( "

    " ) + tr( "Code" ) + QString( " : " ); - a.append( QString( c_info.name ) ); - a.append( "



    " ); - a.append( "" ); // ASV: 28.07.06 : added tags to make the text font be - // fixed width (looks much better on Windows) - a.append( tr( "Process Id" ) + QString( " : " ) ); - a.append( BOLD( QString::number( int( c_info.pid ) ) ) ); - a.append( QString( " " ) + tr( "on machine" ) + QString( " " ) ); - a.append( BOLD( c_info.machine ) ); - a.append( QString( " " ) + tr( "ip address" ) + QString( " : " ) ); - a.append( BOLD( c_info.adip ) ); - a.append( "
    " ); - - a.append( tr( "launched by user" ) + QString( " " ) ); - a.append( BOLD( c_info.pwname ) ); - a.append( QString( " ( " ) + tr( "pid" ) + QString( " : " ) ); - a.append( BOLD( QString::number( int( c_info.uid ) ) ) ); - a.append( QString( " )
    " ) + tr( "in directory" ) + QString( " " )); - a.append( BOLD( c_info.cdir ) ); - - time_t aTime; - a.append( QString( "
    " ) + tr( "begins" ) + QString( " " ) ); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - a.append( BOLD( t1 ) ); - delete [] t1; - a.append( "
    " ); - - if (c_info.tc_hello != 0 ) { - aTime = time_t(c_info.tc_hello); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - a.append( tr( "last signal" ) + QString(" : ") ); - a.append( BOLD( t2 ) ); + QString a; + if ( c_info.name != NULL ) { + time_t aStarted( c_info.tc_start ); + time_t aLastPing( c_info.tc_hello ); + time_t aFinished( c_info.tc_end ); + + a.append( BOLD( tr( "INFO_SERVICE" ).arg( QString( c_info.name ) ) ) ); a.append( "
    " ); - delete [] t2; - } - if ((c_info.tc_end - c_info.difftime) != 0) { - aTime = time_t(c_info.tc_end); - char * t3 = (char * )duplicate(ctime(&aTime)); - t3 [strlen(t3) -1 ] = ' '; - a.append( tr( "ends" ) + QString( " " ) ); - a.append( BOLD( t3 ) ); a.append( "
    " ); - delete [] t3; - } - else { - a.append( tr( "still running" ) + QString( "
    " ) ); - } - - SCRUTE(c_info.difftime); - if (c_info.difftime!= 0) { - a.append( QString( "(" ) + tr( "Time on" ) + QString( " " ) ); - a.append( BOLD( c_info.machine ) ); - a.append( QString( " " ) + tr( "differs from server's time. The difference is" ) + QString( " " )); - a.append( BOLD( QString::number( int( c_info.difftime ) ) ) ); - a.append( QString( " " ) + tr( "seconds" ) + QString( ")
    " ) ); + a.append( tr( "INFO_PROCESS" ).arg( BOLD( QString::number( c_info.pid ) ), + BOLD( c_info.machine ), + BOLD( c_info.adip ), + BOLD( c_info.pwname ), + BOLD( QString::number( c_info.uid ) ), + BOLD( c_info.cdir ) ) ); + a.append( "
    " ); + a.append( "
    " ); + a.append( tr( "INFO_STARTED" ).arg( BOLD( QString( ctime( &aStarted ) ).trimmed() ) ) ); + a.append( "
    " ); + if ( c_info.tc_hello != 0 ) { + a.append( tr( "INFO_LAST_PING" ).arg( BOLD( QString( ctime( &aLastPing ) ).trimmed() ) ) ); + a.append( "
    " ); + } + if ( c_info.tc_end - c_info.difftime != 0 ) { + a.append( tr( "INFO_FINISHED" ).arg( BOLD( QString( ctime( &aFinished ) ).trimmed() ) ) ); + a.append( "
    " ); + } + else { + a.append( tr( "INFO_RUNNING" ) ); + a.append( "
    " ); + } + if ( c_info.difftime != 0 ) { + a.append( tr( "INFO_TIME_DIFF" ).arg( BOLD( c_info.machine ), BOLD( QString::number( c_info.difftime ) ) ) ); + a.append( "
    " ); + } + a.append( "
    " ); // ASV: 28.07.06 : added tags to make the text font be + // fixed width (looks much better on Windows) } - a.append( "" ); // ASV: 28.07.06 : added tags to make the text font be - // fixed width (looks much better on Windows) return a; - } /*! - \brief Close event handler. - \param e close event + \brief Refresh registry information */ -void ToolsGUI_RegWidget::closeEvent( QCloseEvent* e ) +void ToolsGUI_RegWidget::refresh() { - if ( myInfoWindow ) - myInfoWindow->close(); - if ( myHelpWindow ) - myHelpWindow->close(); - if (myIntervalWindow) - myIntervalWindow->close(); - e->accept(); -}; - -/*! - \brief Setup clients list. -*/ -void ToolsGUI_RegWidget::SetListe() -{ - _clients->installEventFilter( this ); - _clients->setColumnCount(6); - _clients->setAllColumnsShowFocus( true ); - QStringList aLabels; - aLabels << tr("Component") << tr("PID") << tr("User Name") << tr("Machine") << tr("begins") << tr("hello"); - _clients->setHeaderLabels( aLabels ); - //_clients->setColumnAlignment( 1, Qt::AlignRight ); -} - -/*! - \brief Setup history list. -*/ -void ToolsGUI_RegWidget::SetListeHistory() -{ - _history->installEventFilter( this ); - _history->setColumnCount(6); - _history->setAllColumnsShowFocus( true ); - QStringList aLabels; - aLabels << tr("Component") << tr("PID") << tr("User Name") << tr("Machine") << tr("begins") << tr("ends"); - _history->setHeaderLabels( aLabels ); - //_history->setColumnAlignment( 1, Qt::AlignRight ); -} - -/*! - \brief Update history list -*/ -void ToolsGUI_RegWidget::InfoHistory() -{ - - _history->clear(); try { - time_t aTime; - _serverhistory = _VarComponents->history(); - for (CORBA::ULong i=0; i<_serverhistory->length(); i++) { - const Registry::Infos & c_info=(*_serverhistory)[i]; - ASSERT( c_info.name!=NULL); - QString a; - a.setNum(int(c_info.pid)); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - aTime = time_t(c_info.tc_end); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - QStringList anItem; - anItem << QString(c_info.name) << a << QString(c_info.pwname) << QString(c_info.machine) << QString(t1) << QString(t2); - QTreeWidgetItem * item = new QTreeWidgetItem(_history, anItem); - item=0 ; - delete [] t1; - delete [] t2; - + // get reference to the Registry service + Registry::Components_var aRegistry = GetRegistry( myOrb ); + if ( aRegistry->_is_nil() ) { + myActions[Interval]->setDisabled( true ); + myActions[Refresh]->setDisabled( true ); + myTimer->stop(); + MESSAGE( "Sorry, no more Registry Server" ); + statusBar()->showMessage( tr( "ERR_NO_REGISTRY" ) ); + return; } - } - catch( ... ) { - _interval->setDisabled( TRUE ) ; - _refresh->setDisabled( TRUE ) ; - _counter->stop(); - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->showMessage( tr( "Sorry, No more Registry Server" ) ) ; - } -} -/*! - \brief Update clients list -*/ -void ToolsGUI_RegWidget::InfoReg() -{ - _clients->clear(); - try { - time_t aTime; - _serverclients = _VarComponents->getall(); - for (CORBA::ULong i=0; i<_serverclients->length(); i++) { - const Registry::Infos & c_info=(*_serverclients)[i]; - ASSERT( c_info.name!=NULL); - QString a; - a.setNum(int(c_info.pid)); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - aTime = time_t(c_info.tc_hello); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - QStringList anItem; - anItem << QString(c_info.name) << a << QString(c_info.pwname) << QString(c_info.machine) << QString(t1) << QString(t2); - QTreeWidgetItem * item = new QTreeWidgetItem(_clients, anItem); - item=0 ; - delete [] t1; - delete [] t2; - + myData[Clients] = aRegistry->getall(); + myData[History] = aRegistry->history(); + + // update current services list + myViews[Clients]->clear(); + for ( int i = 0; i < myData[Clients]->length(); i++ ) { + const Registry::Infos& c_info = (*myData[Clients])[i]; + time_t aStarted = time_t( c_info.tc_start ); + time_t aLastPing = time_t( c_info.tc_hello ); + QStringList aData; + aData << QString( c_info.name ) + << QString::number( c_info.pid ) + << QString( c_info.pwname ) + << QString( c_info.machine ) + << QString( ctime( &aStarted ) ).trimmed() + << QString( ctime( &aLastPing ) ).trimmed(); + myViews[Clients]->addTopLevelItem( new QTreeWidgetItem( aData ) ); } - } - catch( ... ) { - _interval->setDisabled( TRUE ) ; - _refresh->setDisabled( TRUE ) ; - _counter->stop(); - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->showMessage( tr( "Sorry, No more Registry Server" ) ) ; - } -} -/*! - \brief Called when \c Refresh button is clicked -*/ -void ToolsGUI_RegWidget::slotListeSelect() -{ - try { - ASSERT(_tabWidget->currentWidget() != NULL); - if (_tabWidget->currentWidget () == _clients) InfoReg(); - else if (_tabWidget->currentWidget () == _history) InfoHistory(); + // update history + myViews[History]->clear(); + for ( int i = 0; i < myData[History]->length(); i++ ) { + const Registry::Infos& c_info = (*myData[History])[i]; + time_t aStarted = time_t( c_info.tc_start ); + time_t aFinished = time_t( c_info.tc_end ); + QStringList aData; + aData << QString( c_info.name ) + << QString::number( c_info.pid ) + << QString( c_info.pwname ) + << QString( c_info.machine ) + << QString( ctime( &aStarted ) ).trimmed() + << QString( ctime( &aFinished ) ).trimmed(); + myViews[History]->addTopLevelItem( new QTreeWidgetItem( aData ) ); + } } catch( ... ) { - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->showMessage( tr( "Sorry, No more Registry Server" ) ) ; + myActions[Interval]->setDisabled( true ); + myActions[Refresh]->setDisabled( true ); + myTimer->stop(); + MESSAGE( "Sorry, no more Registry Server" ); + statusBar()->showMessage( tr( "ERR_NO_REGISTRY" ) ); } } @@ -848,105 +394,27 @@ void ToolsGUI_RegWidget::slotListeSelect() \brief Called when \c Interval button is clicked (open dialog box to change refresh interval). */ -void ToolsGUI_RegWidget::slotSelectRefresh() +void ToolsGUI_RegWidget::refreshInterval() { - myIntervalWindow = new ToolsGUI_RegWidget::IntervalWindow(this); - myIntervalWindow->installEventFilter( this ); - myIntervalWindow->setValue(myRefreshInterval); - myIntervalWindow->show(); - connect( myIntervalWindow->Cancel(), SIGNAL( clicked() ), myIntervalWindow, SLOT( close() ) ); - connect( myIntervalWindow->Ok(), SIGNAL( clicked() ), this, SLOT( slotIntervalOk() ) ); + bool ok; + int sec = QInputDialog::getInt( this, tr( "TLT_REFRESH_INTERVAL" ), tr( "LAB_REFRESH_INTERVAL" ), + myTimer->interval() / 1000, 1, 24 * 60 * 60, 1, &ok ); + if ( ok ) + myTimer->start( sec * 1000 ); } /*! - \brief Called when IntervalWindow's \c OK button is clicked -*/ -void ToolsGUI_RegWidget::slotIntervalOk() -{ - myRefreshInterval = myIntervalWindow->getValue(); - _counter->start( myRefreshInterval * 1000 ); - SCRUTE(myRefreshInterval); - myIntervalWindow->close(); -} -/*! - \brief Called when \c Help button is clicked + \brief Show details about the chosen service. + \param item item activated by the user + \param column column index */ -void ToolsGUI_RegWidget::slotHelp() +void ToolsGUI_RegWidget::showDetails( QTreeWidgetItem* item, int column ) { - if ( !myHelpWindow ) { - myHelpWindow = new ToolsGUI_RegWidget::HelpWindow( this ); - myHelpWindow->installEventFilter( this ); - } - myHelpWindow->show(); - myHelpWindow->raise(); - myHelpWindow->activateWindow(); + if ( !item || column < 0 ) return; + int i = sender() == myViews[Clients] ? Clients : History; + int idx = myViews[i]->indexOfTopLevelItem( item ); + int size = myData[i]->length(); + if ( idx < 0 || idx > size-1 ) return; + const Registry::Infos& c_info = (*myData[i])[idx]; + myDetails->setText( getDetails( c_info ) ); } - -/*! - \brief Called when user clicks on item in \c Running list - \param item item clicked by the user -*/ -void ToolsGUI_RegWidget::slotClientChanged( QTreeWidgetItem* item, int col ) -{ - if ( !item || col < 0 ) - return; - - blockSignals( true ); // for sure that item will not be deleted when refreshing - - int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverclients); - SCRUTE(numeroItem) ; - SCRUTE(item->text(1).toLatin1().constData()) ; - - ASSERT(numeroItem>=0) ; - ASSERT((size_t)numeroItem<_serverclients->length()) ; - const Registry::Infos & c_info=(*_serverclients)[numeroItem]; - ASSERT( c_info.name!=NULL); - - if ( !myInfoWindow ) { - myInfoWindow = new ToolsGUI_RegWidget::InfoWindow( this ); - myInfoWindow->installEventFilter( this ); - } - QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name ); - myInfoWindow->setWindowTitle(a); - myInfoWindow->setText( ToolsGUI_RegWidget::setlongText( c_info) ); - myInfoWindow->show(); - myInfoWindow->raise(); - myInfoWindow->activateWindow(); - - blockSignals( false ); // enabling signals again -} - -/*! - \brief Called when user clicks on item in \c History list - \param item item clicked by the user -*/ -void ToolsGUI_RegWidget::slotHistoryChanged( QTreeWidgetItem* item, int col ) -{ - if ( !item || col < 0 ) - return; - - blockSignals( true ); // for sure that item will not be deleted when refreshing - - int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverhistory); - - SCRUTE(numeroItem) ; - SCRUTE(item->text(1).toLatin1().constData()) ; - ASSERT(numeroItem>=0) ; - ASSERT((size_t)numeroItem<_serverhistory->length()) ; - const Registry::Infos & c_info=(*_serverhistory)[numeroItem]; - ASSERT( c_info.name!=NULL); - - if ( !myInfoWindow ) { - myInfoWindow = new ToolsGUI_RegWidget::InfoWindow( this ); - myInfoWindow->installEventFilter( this ); - } - QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name ); - myInfoWindow->setWindowTitle(a); - myInfoWindow->setText( ToolsGUI_RegWidget::setlongText( c_info ) ); - myInfoWindow->show(); - myInfoWindow->raise(); - myInfoWindow->activateWindow(); - - blockSignals( false ); // enabling signals again -} - diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.h b/src/TOOLSGUI/ToolsGUI_RegWidget.h index 586cc9867..657bed022 100755 --- a/src/TOOLSGUI/ToolsGUI_RegWidget.h +++ b/src/TOOLSGUI/ToolsGUI_RegWidget.h @@ -20,88 +20,55 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SALOME RegistryDisplay : GUI for Registry server implementation -// File : ToolsGUI_RegWidget.h -// Author : Pascale NOYRET, EDF -// #ifndef TOOLSGUI_REGWIDGET_H #define TOOLSGUI_REGWIDGET_H #include "ToolsGUI.h" #include +#include #include #include CORBA_CLIENT_HEADER(SALOME_Registry) -class QTabWidget; class QTreeWidget; class QTreeWidgetItem; -class QWidget; class QTimer; -class QCloseEvent; class QAction; +class QTextEdit; class TOOLSGUI_EXPORT ToolsGUI_RegWidget : public QMainWindow { Q_OBJECT - class HelpWindow; - class IntervalWindow; - class InfoWindow; + enum { Refresh, Interval, Close }; + enum { Clients, History }; - ToolsGUI_RegWidget( CORBA::ORB_var& orb, QWidget* parent = 0 ); + ToolsGUI_RegWidget( CORBA::ORB_ptr orb, QWidget* parent = 0 ); public: ~ToolsGUI_RegWidget(); - void SetListe(); - void SetListeHistory(); - void InfoReg(); - void InfoHistory(); - - bool eventFilter( QObject* object, QEvent* event ); - - static ToolsGUI_RegWidget* GetRegWidget( CORBA::ORB_var& orb, + static ToolsGUI_RegWidget* GetRegWidget( CORBA::ORB_ptr orb, QWidget* parent = 0 ); - virtual QMenu* createPopupMenu(); +private slots: + void refresh(); + void showDetails( QTreeWidgetItem*, int ); + void refreshInterval(); -public slots: - void slotHelp(); - void slotListeSelect(); - void slotClientChanged( QTreeWidgetItem*, int ); - void slotHistoryChanged( QTreeWidgetItem*, int ); - void slotSelectRefresh(); - void slotIntervalOk(); - -protected: - static QString setlongText( const Registry::Infos& c_info ); - int numitem( const QString& name, - const QString& pid, - const QString& machine, - const Registry::AllInfos* clistclient ); - void closeEvent( QCloseEvent* e ); +private: + static QString getDetails( const Registry::Infos& c_info ); -protected : - QTreeWidget* _clients; - QTreeWidget* _history; - QWidget* _parent; - QTabWidget* _tabWidget; - QAction* _refresh; - QAction* _interval; - QAction* _close; - QTimer* _counter; - Registry::AllInfos* _serverhistory; - Registry::AllInfos* _serverclients; - InfoWindow* myInfoWindow; - HelpWindow* myHelpWindow; - IntervalWindow* myIntervalWindow; - int myRefreshInterval; - private: - const Registry::Components_var _VarComponents; - static ToolsGUI_RegWidget* myRegWidgetPtr; + static ToolsGUI_RegWidget* myRegWidgetPtr; + + CORBA::ORB_var myOrb; + QMap myData; + QMap myActions; + QMap myViews; + QTextEdit* myDetails; + QTimer* myTimer; }; #endif // TOOLSGUI_REGWIDGET_H diff --git a/src/TOOLSGUI/resources/ToolsGUI_msg_en.ts b/src/TOOLSGUI/resources/ToolsGUI_msg_en.ts index 8f25a61e5..5bc21d2f4 100644 --- a/src/TOOLSGUI/resources/ToolsGUI_msg_en.ts +++ b/src/TOOLSGUI/resources/ToolsGUI_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default @@ -98,7 +77,7 @@ File doesn't exist TOOLS_COMP_USERNAME - UserName : + User name : TOOLS_CATALOG_GENERATOR @@ -125,4 +104,119 @@ File doesn't exist IDL : + + ToolsGUI_RegWidget + + TLT_REFRESH_INTERVAL + Refresh Interval + + + LAB_REFRESH_INTERVAL + New refresh interval (in seconds) + + + TLT_REGISTRY + Registry + + + MNU_ACTIONS + Actions + + + TB_ACTIONS + Actions + + + MEN_REFRESH + Refresh + + + STB_REFRESH + Immediately updates list of components + + + MEN_INTERVAL + Refresh interval... + + + STB_INTERVAL + Change refresh interval + + + MEN_CLOSE + Close + + + STB_CLOSE + Close Registry window + + + TAB_RUNNING + Running + + + TAB_HISTORY + History + + + HDR_COMPONENT + Component + + + HDR_PID + PID + + + HDR_USERNAME + User name + + + HDR_HOSTNAME + Host name + + + HDR_STARTED + Started + + + HDR_FINISHED + Finished + + + HDR_HELLO + Last ping + + + ERR_NO_REGISTRY + Error: Registry Server is not found + + + INFO_SERVICE + Service : %1 + + + INFO_PROCESS + Process ( PID : %1 ) on the machine %2 ( ip address : %3 ); launched by the user %4 ( UID : %5 ) in directory %6. + + + INFO_STARTED + Started : %1 + + + INFO_LAST_PING + Last signal : %1 + + + INFO_FINISHED + Finished : %1 + + + INFO_RUNNING + Still running + + + INFO_TIME_DIFF + Time on %1 differs from server's time. The difference is %2 seconds. + + diff --git a/src/TOOLSGUI/resources/ToolsGUI_msg_fr.ts b/src/TOOLSGUI/resources/ToolsGUI_msg_fr.ts new file mode 100755 index 000000000..20a97c711 --- /dev/null +++ b/src/TOOLSGUI/resources/ToolsGUI_msg_fr.ts @@ -0,0 +1,222 @@ + + + + + @default + + TOOLS_WRN_WARNING + Avertissement + + + TOOLS_BUT_BROWSE + Naviguer... + + + TOOLS_ERR_ERROR + Erreur + + + TOOLS_ERR_FILE_NOT_EXIST + %1 +Le fichier n'existe pas + + + TOOLS_BUT_OK + &Ok + + + TOOLS_BUT_APPLY + &Appliquer + + + TOOLS_BUT_CLOSE + &Fermer + + + + ToolsGUI_CatalogGeneratorDlg + + TOOLS_MEN_EXPORT + Exporter + + + TOOLS_MEN_IMPORT + Importer + + + TOOLS_VERSION + Version : + + + TOOLS_COMP_NAME + Nom : + + + TOOLS_COMP_TYPE + Type : + + + TOOLS_XML_FILE + XML : + + + TOOLS_PNG_FILE + Icône : + + + TOOLS_SUPPLEMENT + Données supplémentaires du composant + + + TOOLS_AUTHOR + Auteur : + + + TOOLS_COMP_MULTISTD + Multi-étude : + + + TOOLS_COMP_USERNAME + Nom utilisateur : + + + TOOLS_CATALOG_GENERATOR + Générateur du catalogue + + + TOOLS_FILES + Fichiers + + + TOOLS_MEN_IMPORT_PNG + Fichiers PNG ( *.png ) + + + TOOLS_MEN_IMPORT_IDL + Fichiers IDL ( *.idl ) + + + TOOLS_MEN_EXPORT_XML + Fichiers XML ( *.xml ) + + + TOOLS_IDL_FILE + IDL : + + + + ToolsGUI_RegWidget + + TLT_REFRESH_INTERVAL + Fréquence d'actualisation + + + LAB_REFRESH_INTERVAL + Nouvelle fréquence d'actualisation (en secondes) + + + TLT_REGISTRY + Registre + + + MNU_ACTIONS + Actions + + + TB_ACTIONS + Actions + + + MEN_REFRESH + Actualiser + + + STB_REFRESH + Met à jour la liste des composants + + + MEN_INTERVAL + Fréquence d'actualisation... + + + STB_INTERVAL + Changer la fréquence d'actualisation + + + MEN_CLOSE + Fermer + + + STB_CLOSE + Fermer la fenêtre du Registre + + + TAB_RUNNING + En cours + + + TAB_HISTORY + Historique + + + HDR_COMPONENT + Composant + + + HDR_PID + PID + + + HDR_USERNAME + Nom de l'utilisateur + + + HDR_HOSTNAME + Nom de l'hôte + + + HDR_STARTED + Commencé + + + HDR_FINISHED + Terminé + + + HDR_HELLO + Dernier ping + + + ERR_NO_REGISTRY + Erreur: le serveur de registre n'est pas trouvé + + + INFO_SERVICE + Service : %1 + + + INFO_PROCESS + Le procédé ( PID : %1 ) sur la station %2 ( adresse IP : %3 ); lancé par l'utilisateur %4 ( UID : %5 ) au répertoire %6. + + + INFO_STARTED + Commencé : %1 + + + INFO_LAST_PING + Dernier signal : %1 + + + INFO_FINISHED + Fini : %1 + + + INFO_RUNNING + En cours + + + INFO_TIME_DIFF + Le temps de la station %1 est différent du temps du serveur. La différence est %2 secondes. + + + diff --git a/src/VTKViewer/Makefile.am b/src/VTKViewer/Makefile.am index b5187b295..56da23db4 100755 --- a/src/VTKViewer/Makefile.am +++ b/src/VTKViewer/Makefile.am @@ -59,7 +59,8 @@ salomeinclude_HEADERS = \ VTKViewer_MarkerWidget.h \ VTKViewer_MarkerDlg.h \ VTKViewer_PolyDataMapper.h \ - VTKViewer_DataSetMapper.h + VTKViewer_DataSetMapper.h \ + VTKViewer_CellCenters.h dist_libVTKViewer_la_SOURCES = \ VTKViewer_CellLocationsArray.cxx \ @@ -87,7 +88,8 @@ dist_libVTKViewer_la_SOURCES = \ VTKViewer_MarkerWidget.cxx \ VTKViewer_MarkerDlg.cxx \ VTKViewer_PolyDataMapper.cxx \ - VTKViewer_DataSetMapper.cxx + VTKViewer_DataSetMapper.cxx \ + VTKViewer_CellCenters.cxx MOC_FILES = \ VTKViewer_RenderWindow_moc.cxx \ @@ -131,7 +133,8 @@ dist_salomeres_DATA = \ nodist_salomeres_DATA = \ VTKViewer_images.qm \ - VTKViewer_msg_en.qm + VTKViewer_msg_en.qm \ + VTKViewer_msg_fr.qm libVTKViewer_la_CPPFLAGS = $(QT_INCLUDES) $(VTK_INCLUDES) $(CAS_CPPFLAGS) \ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT diff --git a/src/VTKViewer/VTKViewer_Actor.cxx b/src/VTKViewer/VTKViewer_Actor.cxx index 872ddefcd..7db52596a 100755 --- a/src/VTKViewer/VTKViewer_Actor.cxx +++ b/src/VTKViewer/VTKViewer_Actor.cxx @@ -67,6 +67,7 @@ vtkStandardNewMacro(VTKViewer_Actor); */ VTKViewer_Actor ::VTKViewer_Actor(): + myOpacity(1.0), myIsHighlighted(false), myIsPreselected(false), myRepresentation(VTK_SURFACE), diff --git a/src/VTKViewer/VTKViewer_CellCenters.cxx b/src/VTKViewer/VTKViewer_CellCenters.cxx new file mode 100644 index 000000000..91c998856 --- /dev/null +++ b/src/VTKViewer/VTKViewer_CellCenters.cxx @@ -0,0 +1,184 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "VTKViewer_CellCenters.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +vtkCxxRevisionMacro(VTKViewer_CellCenters, "$Revision$"); +vtkStandardNewMacro(VTKViewer_CellCenters); + +/*! + * Class : VTKViewer_CellCenters + * Description : Filter computing geometrical centers of given cells + * (differs from native vtk filter by small fix for VTK_CONVEX_POINT_SET cells) + */ + +/*! + Constructor +*/ +VTKViewer_CellCenters::VTKViewer_CellCenters() +{ +} + +/*! + Redefined main method +*/ +int VTKViewer_CellCenters::RequestData( + vtkInformation *vtkNotUsed(request), + vtkInformationVector **inputVector, + vtkInformationVector *outputVector) +{ + // get the info objects + vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); + vtkInformation *outInfo = outputVector->GetInformationObject(0); + + // get the input and ouptut + vtkDataSet *input = vtkDataSet::SafeDownCast( + inInfo->Get(vtkDataObject::DATA_OBJECT())); + vtkPolyData *output = vtkPolyData::SafeDownCast( + outInfo->Get(vtkDataObject::DATA_OBJECT())); + + vtkIdType cellId, numCells; + int subId; + vtkCellData *inCD; + vtkPointData *outPD; + vtkPoints *newPts; + vtkCell *cell; + double x[3], pcoords[3]; + double *weights; + + inCD=input->GetCellData(); + outPD=output->GetPointData(); + + if ( (numCells = input->GetNumberOfCells()) < 1 ) + { + vtkWarningMacro(<<"No cells to generate center points for"); + return 1; + } + + newPts = vtkPoints::New(); + newPts->SetNumberOfPoints(numCells); + weights = new double [input->GetMaxCellSize()]; + + int abort=0; + vtkIdType progressInterval = numCells/10 + 1; + int hasEmptyCells = 0; + for (cellId=0; cellId < numCells && !abort; cellId++) + { + if ( ! (cellId % progressInterval) ) + { + vtkDebugMacro(<<"Processing #" << cellId); + this->UpdateProgress (0.5*cellId/numCells); + abort = this->GetAbortExecute(); + } + + cell = input->GetCell(cellId); + if (cell->GetCellType() != VTK_EMPTY_CELL) + { + // fix for VTK_CONVEX_POINT_SET cells + if (cell->GetCellType() == VTK_CONVEX_POINT_SET ) + { + x[0] = x[1] = x[2] = 0; + vtkPoints* aPoints = cell->GetPoints(); + int aNbPoints = aPoints->GetNumberOfPoints(); + for( int i = 0; i < aNbPoints; i++ ) + { + double aCoord[3]; + aPoints->GetPoint( i, aCoord ); + x[0] += aCoord[0]; + x[1] += aCoord[1]; + x[2] += aCoord[2]; + } + x[0] /= aNbPoints; + x[1] /= aNbPoints; + x[2] /= aNbPoints; + } + else + { + subId = cell->GetParametricCenter(pcoords); + cell->EvaluateLocation(subId, pcoords, x, weights); + } + newPts->SetPoint(cellId,x); + } + else + { + hasEmptyCells = 1; + } + } + + if ( this->VertexCells ) + { + vtkIdType pts[1]; + vtkCellData *outCD=output->GetCellData(); + vtkCellArray *verts = vtkCellArray::New(); + verts->Allocate(verts->EstimateSize(1,numCells),1); + + for (cellId=0; cellId < numCells && !abort; cellId++) + { + if ( ! (cellId % progressInterval) ) + { + vtkDebugMacro(<<"Processing #" << cellId); + this->UpdateProgress (0.5+0.5*cellId/numCells); + abort = this->GetAbortExecute(); + } + + cell = input->GetCell(cellId); + if (cell->GetCellType() != VTK_EMPTY_CELL) + { + pts[0] = cellId; + verts->InsertNextCell(1,pts); + } + } + + output->SetVerts(verts); + verts->Delete(); + if (!hasEmptyCells) + { + outCD->PassData(inCD); //only if verts are generated + } + } + + // clean up and update output + output->SetPoints(newPts); + newPts->Delete(); + + if (!hasEmptyCells) + { + outPD->PassData(inCD); //because number of points = number of cells + } + if (weights) + { + delete [] weights; + } + + return 1; +} diff --git a/src/VTKViewer/VTKViewer_CellCenters.h b/src/VTKViewer/VTKViewer_CellCenters.h new file mode 100644 index 000000000..7057d7961 --- /dev/null +++ b/src/VTKViewer/VTKViewer_CellCenters.h @@ -0,0 +1,60 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef VTKVIEWER_CELLCENTERS_H +#define VTKVIEWER_CELLCENTERS_H + +#include "VTKViewer.h" + +#include + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + +/*! + * Class : VTKViewer_CellCenters + * Description : Filter computing geometrical centers of given cells + * (differs from native vtk filter by small fix for VTK_CONVEX_POINT_SET cells) + */ +class VTKVIEWER_EXPORT VTKViewer_CellCenters : public vtkCellCenters +{ +public: + vtkTypeRevisionMacro(VTKViewer_CellCenters,vtkCellCenters); + + static VTKViewer_CellCenters *New(); + +protected: + VTKViewer_CellCenters(); + + virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); + +private: + VTKViewer_CellCenters(const VTKViewer_CellCenters&); // Not implemented. + void operator=(const VTKViewer_CellCenters&); // Not implemented. +}; + +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + +#endif diff --git a/src/VTKViewer/VTKViewer_InteractorStyle.h b/src/VTKViewer/VTKViewer_InteractorStyle.h index 4b2441243..3798ef9d1 100644 --- a/src/VTKViewer/VTKViewer_InteractorStyle.h +++ b/src/VTKViewer/VTKViewer_InteractorStyle.h @@ -32,6 +32,7 @@ class vtkCell; class vtkRenderWindowInteractor; +class vtkTDxInteractorStyle; #include #include diff --git a/src/VTKViewer/resources/VTKViewer_msg_en.ts b/src/VTKViewer/resources/VTKViewer_msg_en.ts index 76b6902fa..c737763d7 100644 --- a/src/VTKViewer/resources/VTKViewer_msg_en.ts +++ b/src/VTKViewer/resources/VTKViewer_msg_en.ts @@ -1,27 +1,6 @@ - - + + + @default diff --git a/src/VTKViewer/resources/VTKViewer_msg_fr.ts b/src/VTKViewer/resources/VTKViewer_msg_fr.ts new file mode 100755 index 000000000..d88ebf2de --- /dev/null +++ b/src/VTKViewer/resources/VTKViewer_msg_fr.ts @@ -0,0 +1,207 @@ + + + + + @default + + MNU_FRONT_VIEW + Avant + + + ERROR + Erreur + + + MNU_DUMP_VIEW + Enregistrer la vue... + + + DSC_TOP_VIEW + Vue de dessus + + + MNU_PAN_VIEW + Déplacement + + + MNU_TOP_VIEW + Dessus + + + DSC_GLOBALPAN_VIEW + Sélection d'un nouveau centre de vue + + + DSC_ROTATE_VIEW + Tourner le point de vue autour du centre de la scène + + + MNU_ZOOM_VIEW + Zoom + + + DSC_PAN_VIEW + Déplacer la vue + + + DSC_LEFT_VIEW + Vue de gauche + + + DSC_FITALL + Redimensionner la scène pour montrer tous les objets + + + MNU_FITALL + Ajuster tout + + + MNU_ROTATE_VIEW + Rotation + + + DSC_SHOW_TRIHEDRON + Montrer/Cacher le trièdre dans la vue actuelle + + + DSC_FRONT_VIEW + Vue de face + + + MNU_GLOBALPAN_VIEW + Déplacement global + + + INF_APP_DUMP_VIEW + Enregistrer la vue + + + MNU_BACK_VIEW + Arrière + + + MNU_SHOW_TRIHEDRON + Montrer/Cacher le trièdre + + + MNU_BOTTOM_VIEW + Dessous + + + MNU_RESET_VIEW + Restaurer le point de vue + + + MNU_LEFT_VIEW + Gauche + + + DSC_RIGHT_VIEW + Vue de droite + + + DSC_FITRECT + Redimensionner la scène à la zone choisie par l'encadré + + + MNU_FITRECT + Ajuster à la zone + + + DSC_BOTTOM_VIEW + Vue de dessous + + + DSC_DUMP_VIEW + Sauvegarde la scène en cours dans un fichier image + + + DSC_ZOOM_VIEW + Zoom la vue + + + VTK_IMAGE_FILES + Fichiers images (*.bmp *.png *.jpg *.jpeg) + + + DSC_RESET_VIEW + Restaurer le Point de Vue + + + ERR_DOC_CANT_SAVE_FILE + Impossible de sauvegarder le fichier + + + MNU_RIGHT_VIEW + Droite + + + LBL_TOOLBAR_LABEL + Opérations de visualisation + + + DSC_BACK_VIEW + Vue de derrière + + + + VTKViewer_MarkerDlg + + SET_MARKER_TLT + Définir le symbole du point + + + + VTKViewer_MarkerWidget + + STANDARD_MARKER + Standard + + + CUSTOM_MARKER + Personnalisé + + + TYPE + Type: + + + SCALE + Echelle: + + + CUSTOM + Texture: + + + BROWSE + Naviguer... + + + LOAD_TEXTURE_TLT + Charger une texture + + + + VTKViewer_ViewManager + + VTK_VIEW_TITLE + VTK scène:%M - visualiseur:%V + + + + VTKViewer_Viewer + + MEN_DUMP_VIEW + Enregistrer la vue... + + + MEN_SHOW_TOOLBAR + Afficher la barre d'outils + + + MEN_CHANGE_BACKGROUD + Changer l'arrière-plan... + + + diff --git a/src/ViewerTools/Makefile.am b/src/ViewerTools/Makefile.am new file mode 100755 index 000000000..7a576f530 --- /dev/null +++ b/src/ViewerTools/Makefile.am @@ -0,0 +1,56 @@ +# Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libViewerTools.la + +salomeinclude_HEADERS= \ + ViewerTools.h \ + ViewerTools_CubeAxesDlgBase.h \ + ViewerTools_DialogBase.h \ + ViewerTools_FontWidgetBase.h + +dist_libViewerTools_la_SOURCES= \ + ViewerTools_CubeAxesDlgBase.cxx \ + ViewerTools_DialogBase.cxx \ + ViewerTools_FontWidgetBase.cxx + +MOC_FILES= \ + ViewerTools_CubeAxesDlgBase_moc.cxx \ + ViewerTools_DialogBase_moc.cxx \ + ViewerTools_FontWidgetBase_moc.cxx + +nodist_libViewerTools_la_SOURCES= $(MOC_FILES) + +nodist_salomeres_DATA = \ + ViewerTools_msg_en.qm \ + ViewerTools_msg_fr.qm + +libViewerTools_la_CPPFLAGS = \ + $(QT_INCLUDES) \ + -I$(srcdir)/../Qtx + +libViewerTools_la_LDFLAGS = \ + $(QT_MT_LIBS) + +libViewerTools_la_LIBADD = ../Qtx/libqtx.la diff --git a/src/ViewerTools/ViewerTools.h b/src/ViewerTools/ViewerTools.h new file mode 100644 index 000000000..b86f555d6 --- /dev/null +++ b/src/ViewerTools/ViewerTools.h @@ -0,0 +1,41 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef VIEWERTOOLS_H +#define VIEWERTOOLS_H + +#ifdef WIN32 +# if defined VIEWERTOOLS_EXPORTS || defined ViewerTools_EXPORTS +# define VIEWERTOOLS_EXPORT __declspec(dllexport) +# else +# define VIEWERTOOLS_EXPORT __declspec(dllimport) +# endif +#else +# define VIEWERTOOLS_EXPORT +#endif + +#if defined WIN32 +#pragma warning ( disable: 4251 ) +#pragma warning ( disable: 4786 ) +#endif + +#endif diff --git a/src/ViewerTools/ViewerTools_CubeAxesDlgBase.cxx b/src/ViewerTools/ViewerTools_CubeAxesDlgBase.cxx new file mode 100644 index 000000000..f3f1e0e08 --- /dev/null +++ b/src/ViewerTools/ViewerTools_CubeAxesDlgBase.cxx @@ -0,0 +1,322 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "ViewerTools_CubeAxesDlgBase.h" + +#include "ViewerTools_FontWidgetBase.h" + +#include "QtxAction.h" +#include "QtxIntSpinBox.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +/*! + * Class : ViewerTools_AxisWidgetBase + * Description : Axis tab widget of the "Graduated axis" dialog box +*/ + +/*! + Constructor +*/ +ViewerTools_AxisWidgetBase::ViewerTools_AxisWidgetBase (QWidget* theParent) +: QFrame(theParent) +{ +} + +/*! + Destructor +*/ +ViewerTools_AxisWidgetBase::~ViewerTools_AxisWidgetBase() +{ +} + +/*! + Initialize controls +*/ +void ViewerTools_AxisWidgetBase::initialize() +{ + QList< QLabel* > aLabels; + + // "Name" grp + + myNameGrp = new QGroupBox(ViewerTools_CubeAxesDlgBase::tr("AXIS_NAME"), this); + myNameGrp->setCheckable( true ); + + QVBoxLayout* aVBox = new QVBoxLayout; + + QHBoxLayout* aHBox = new QHBoxLayout; + aHBox->setSpacing(5); + QLabel* aLabel = new QLabel(ViewerTools_CubeAxesDlgBase::tr("NAME")); + aHBox->addWidget(aLabel); + myAxisName = new QLineEdit; + aHBox->addWidget(myAxisName); + aLabels.append(aLabel); + aVBox->addLayout(aHBox); + + aHBox = new QHBoxLayout; + aHBox->setSpacing(5); + aLabel = new QLabel(ViewerTools_CubeAxesDlgBase::tr("FONT")); + aHBox->addWidget(aLabel); + myNameFont = createFontWidget(myNameGrp); + aHBox->addWidget(myNameFont); + aLabels.append(aLabel); + aVBox->addLayout(aHBox); + + myNameGrp->setLayout(aVBox); + + // "Labels" grp + + myLabelsGrp = new QGroupBox(ViewerTools_CubeAxesDlgBase::tr("LABELS"), this); + myLabelsGrp->setCheckable( true ); + + aVBox = new QVBoxLayout; + + aHBox = new QHBoxLayout; + aHBox->setSpacing(5); + aLabel = new QLabel(ViewerTools_CubeAxesDlgBase::tr("NUMBER")); + aHBox->addWidget(aLabel); + myLabelNumber = new QtxIntSpinBox(2,25,1,myLabelsGrp); + aHBox->addWidget(myLabelNumber); + aLabels.append(aLabel); + aVBox->addLayout(aHBox); + + aHBox = new QHBoxLayout; + aHBox->setSpacing(5); + aLabel = new QLabel(ViewerTools_CubeAxesDlgBase::tr("OFFSET")); + aHBox->addWidget(aLabel); + myLabelOffset = new QtxIntSpinBox(0,100,1,myLabelsGrp); + aHBox->addWidget(myLabelOffset); + aLabels.append(aLabel); + aVBox->addLayout(aHBox); + + aHBox = new QHBoxLayout; + aHBox->setSpacing(5); + aLabel = new QLabel(ViewerTools_CubeAxesDlgBase::tr("FONT")); + aHBox->addWidget(aLabel); + myLabelsFont = createFontWidget(myLabelsGrp); + aHBox->addWidget(myLabelsFont); + aLabels.append(aLabel); + aVBox->addLayout(aHBox); + + myLabelsGrp->setLayout(aVBox); + + // "Tick marks" grp + + myTicksGrp = new QGroupBox(ViewerTools_CubeAxesDlgBase::tr("TICK_MARKS"), this); + myTicksGrp->setCheckable( true ); + + aVBox = new QVBoxLayout; + + aHBox = new QHBoxLayout; + aHBox->setSpacing(5); + aLabel = new QLabel(ViewerTools_CubeAxesDlgBase::tr("LENGTH")); + aHBox->addWidget(aLabel); + myTickLength = new QtxIntSpinBox(0,100,1,myTicksGrp); + aHBox->addWidget(myTickLength); + aLabels.append(aLabel); + aVBox->addLayout(aHBox); + + myTicksGrp->setLayout(aVBox); + + // Layout + + QVBoxLayout* aLay = new QVBoxLayout(this); + aLay->setMargin(5); + aLay->setSpacing(5); + aLay->addWidget(myNameGrp); + aLay->addWidget(myLabelsGrp); + aLay->addWidget(myTicksGrp); + + // init + myNameGrp->setChecked( true ); + myLabelsGrp->setChecked( true ); + myTicksGrp->setChecked( true ); + + // Adjust label widths + QList< QLabel* >::iterator anIter; + int aMaxWidth = 0; + for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) + aMaxWidth = qMax(aMaxWidth, (*anIter)->sizeHint().width()); + for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) + (*anIter)->setFixedWidth(aMaxWidth); +} + +void ViewerTools_AxisWidgetBase::UseName(const bool toUse) +{ + myNameGrp->setChecked(toUse); +} + +void ViewerTools_AxisWidgetBase::SetName(const QString& theName) +{ + myAxisName->setText(theName); +} + +void ViewerTools_AxisWidgetBase::SetNameFont(const QColor& theColor, + const int theFont, + const bool theIsBold, + const bool theIsItalic, + const bool theIsShadow) +{ + myNameFont->SetData(theColor, theFont, theIsBold, theIsItalic, theIsShadow); +} + +/* + Class : ViewerTools_CubeAxesDlgBase + Description : Dialog for specifying cube axes properties +*/ + +/*! + Constructor +*/ +ViewerTools_CubeAxesDlgBase::ViewerTools_CubeAxesDlgBase(QtxAction* theAction, + QWidget* theParent, + const char* theName): + ViewerTools_DialogBase(theAction, + theParent, + theName) +{ + setWindowTitle(tr("CAPTION")); +} + +/*! + Initialize controls +*/ +void ViewerTools_CubeAxesDlgBase::initialize() +{ + QVBoxLayout* aLay = new QVBoxLayout(this); + aLay->setMargin(5); + aLay->setSpacing(5); + aLay->addWidget(createMainFrame(this)); + aLay->addWidget(createButtonFrame(this)); +} + +/*! + Create frame containing dialog's input fields +*/ +QWidget* ViewerTools_CubeAxesDlgBase::createMainFrame(QWidget* theParent) +{ + QFrame* aFrame = new QFrame(theParent); + + myTabWg = new QTabWidget(aFrame); + + myAxes[ 0 ] = createAxisWidget(myTabWg); + myAxes[ 1 ] = createAxisWidget(myTabWg); + myAxes[ 2 ] = createAxisWidget(myTabWg); + + myTabWg->addTab(myAxes[ 0 ], tr("X_AXIS")); + myTabWg->addTab(myAxes[ 1 ], tr("Y_AXIS")); + myTabWg->addTab(myAxes[ 2 ], tr("Z_AXIS")); + + myIsVisible = new QCheckBox(tr("IS_VISIBLE"), aFrame); + + QVBoxLayout* aLay = new QVBoxLayout(aFrame); + aLay->setMargin(0); + aLay->setSpacing(5); + aLay->addWidget(myTabWg); + aLay->addWidget(myIsVisible); + + return aFrame; +} + +/*! + Create frame containing buttons +*/ +QWidget* ViewerTools_CubeAxesDlgBase::createButtonFrame(QWidget* theParent) +{ + QFrame* aFrame = new QFrame(theParent); + aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); + + myOkBtn = new QPushButton(tr("BUT_OK"), aFrame); + myApplyBtn = new QPushButton(tr("BUT_APPLY"), aFrame); + myCloseBtn = new QPushButton(tr("BUT_CLOSE"), aFrame); + + QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); + + QHBoxLayout* aLay = new QHBoxLayout(aFrame); + aLay->setMargin(5); + aLay->setSpacing(5); + + aLay->addWidget(myOkBtn); + aLay->addWidget(myApplyBtn); + aLay->addItem(aSpacer); + aLay->addWidget(myCloseBtn); + + connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); + connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); + connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); + + return aFrame; +} + +/*! + Destructor +*/ +ViewerTools_CubeAxesDlgBase::~ViewerTools_CubeAxesDlgBase() +{ +} + +/*! + Update dialog fields, connect signals and slots, show dialog +*/ +void ViewerTools_CubeAxesDlgBase::Update() +{ +} + +/*! + Verify validity of entry data +*/ +bool ViewerTools_CubeAxesDlgBase::isValid() const +{ + return true; +} + +/*! + Verify validity of entry data +*/ +bool ViewerTools_CubeAxesDlgBase::onApply() +{ + return true; +} + +/*! + SLOT called when "Ok" button pressed. +*/ +void ViewerTools_CubeAxesDlgBase::onOk() +{ + if (onApply()) + onClose(); +} + +/*! + SLOT: called when "Close" button pressed. Close dialog +*/ +void ViewerTools_CubeAxesDlgBase::onClose() +{ + reject(); +} diff --git a/src/ViewerTools/ViewerTools_CubeAxesDlgBase.h b/src/ViewerTools/ViewerTools_CubeAxesDlgBase.h new file mode 100644 index 000000000..d7e7b8539 --- /dev/null +++ b/src/ViewerTools/ViewerTools_CubeAxesDlgBase.h @@ -0,0 +1,119 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef VIEWERTOOLS_CUBEAXESDLGBASE_H +#define VIEWERTOOLS_CUBEAXESDLGBASE_H + +#include "ViewerTools_DialogBase.h" + +#include + +class QWidget; +class QPushButton; +class QTabWidget; +class QCheckBox; +class QGroupBox; +class QLineEdit; + +class QtxAction; +class QtxIntSpinBox; + +class ViewerTools_FontWidgetBase; + +/*! + * Class : ViewerTools_AxisWidgetBase + * Description : Axis tab widget of the "Graduated axis" dialog box +*/ +class VIEWERTOOLS_EXPORT ViewerTools_AxisWidgetBase : public QFrame +{ +public: + ViewerTools_AxisWidgetBase( QWidget* ); + ~ViewerTools_AxisWidgetBase(); + + void UseName( const bool ); + void SetName( const QString& ); + void SetNameFont( const QColor&, const int, const bool, const bool, const bool ); + +public: + virtual void initialize(); + +protected: + virtual ViewerTools_FontWidgetBase* createFontWidget( QWidget* ) = 0; + +protected: + // name + QGroupBox* myNameGrp; + QLineEdit* myAxisName; + ViewerTools_FontWidgetBase* myNameFont; + + // labels + QGroupBox* myLabelsGrp; + QtxIntSpinBox* myLabelNumber; + QtxIntSpinBox* myLabelOffset; + ViewerTools_FontWidgetBase* myLabelsFont; + + // tick marks + QGroupBox* myTicksGrp; + QtxIntSpinBox* myTickLength; +}; + +/*! + * Class : ViewerTools_CubeAxesDlgBase + * Description : Dialog for specifying cube axes properties + */ +class VIEWERTOOLS_EXPORT ViewerTools_CubeAxesDlgBase : public ViewerTools_DialogBase +{ + Q_OBJECT + +public: + ViewerTools_CubeAxesDlgBase(QtxAction* theAction, + QWidget* theParent, + const char* theName); + virtual ~ViewerTools_CubeAxesDlgBase(); + + virtual void initialize(); + + virtual void Update(); + +protected slots: + virtual void onOk(); + virtual bool onApply(); + virtual void onClose(); + +protected: + virtual QWidget* createButtonFrame( QWidget* ); + virtual QWidget* createMainFrame ( QWidget* ); + virtual bool isValid() const; + + virtual ViewerTools_AxisWidgetBase* createAxisWidget( QWidget* ) = 0; + +protected: + QTabWidget* myTabWg; + QCheckBox* myIsVisible; + + QPushButton* myOkBtn; + QPushButton* myApplyBtn; + QPushButton* myCloseBtn; + ViewerTools_AxisWidgetBase* myAxes[ 3 ]; +}; + +#endif diff --git a/src/ViewerTools/ViewerTools_DialogBase.cxx b/src/ViewerTools/ViewerTools_DialogBase.cxx new file mode 100644 index 000000000..2fc0e407b --- /dev/null +++ b/src/ViewerTools/ViewerTools_DialogBase.cxx @@ -0,0 +1,79 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "ViewerTools_DialogBase.h" + +#include "QtxAction.h" + +/*! + Constructor +*/ +ViewerTools_DialogBase +::ViewerTools_DialogBase(QtxAction* theAction, + QWidget* theParent, + const char* theName, + bool theModal, + Qt::WindowFlags theWFalgs): + QDialog(theParent, + theWFalgs | Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + myAction(theAction) +{ + setObjectName(theName); + setModal(theModal); + + connect(theParent, SIGNAL(Show( QShowEvent * )), this, SLOT(onParentShow())); + connect(theParent, SIGNAL(Hide( QHideEvent * )), this, SLOT(onParentHide())); +} + +/* + * Destroys the object and frees any allocated resources + */ +ViewerTools_DialogBase +::~ViewerTools_DialogBase() +{ + // no need to delete child widgets, Qt does it all for us +} + +void +ViewerTools_DialogBase +::onParentShow() +{ + if(myAction->isChecked()) + show(); + else + hide(); +} + +void +ViewerTools_DialogBase +::onParentHide() +{ + hide(); +} + +void +ViewerTools_DialogBase +::done( int r ) +{ + myAction->setChecked( false ); + QDialog::done( r ); +} diff --git a/src/ViewerTools/ViewerTools_DialogBase.h b/src/ViewerTools/ViewerTools_DialogBase.h new file mode 100644 index 000000000..e9fcd56c3 --- /dev/null +++ b/src/ViewerTools/ViewerTools_DialogBase.h @@ -0,0 +1,54 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef VIEWERTOOLS_DIALOGBASE_H +#define VIEWERTOOLS_DIALOGBASE_H + +#include "ViewerTools.h" + +#include + +class QtxAction; + +class VIEWERTOOLS_EXPORT ViewerTools_DialogBase : public QDialog +{ + Q_OBJECT; + +public: + ViewerTools_DialogBase(QtxAction* theAction, + QWidget* theParent, + const char* theName = "", + bool theModal = FALSE, + Qt::WindowFlags theWFalgs = 0); + + ~ViewerTools_DialogBase(); + +protected slots: + void onParentShow(); + void onParentHide(); + virtual void done( int ); + +protected: + QtxAction* myAction; +}; + +#endif // VIEWERTOOLS_DIALOGBASE_H diff --git a/src/ViewerTools/ViewerTools_FontWidgetBase.cxx b/src/ViewerTools/ViewerTools_FontWidgetBase.cxx new file mode 100644 index 000000000..2558546f2 --- /dev/null +++ b/src/ViewerTools/ViewerTools_FontWidgetBase.cxx @@ -0,0 +1,128 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "ViewerTools_FontWidgetBase.h" + +#include +#include +#include +#include +#include + +/*! + * Class : ViewerTools_FontWidgetBase + * Description : Dialog for specifynig font + */ + +/*! + Constructor +*/ +ViewerTools_FontWidgetBase::ViewerTools_FontWidgetBase( QWidget* theParent ) +: QWidget( theParent ) +{ +} + +/*! + Destructor +*/ +ViewerTools_FontWidgetBase::~ViewerTools_FontWidgetBase() +{ +} + +void ViewerTools_FontWidgetBase::Initialize() +{ + myColorBtn = new QToolButton( this ); + myColorBtn->setMinimumWidth( 20 ); + + myFamily = new QComboBox( this ); + InitializeFamilies(); + + myBold = new QCheckBox( tr( "BOLD" ), this ); + myItalic = new QCheckBox( tr( "ITALIC" ), this ); + myShadow = new QCheckBox( tr( "SHADOW" ), this ); + + QHBoxLayout* aHBLayout = new QHBoxLayout; + aHBLayout->setMargin( 0 ); + aHBLayout->setSpacing( 5 ); + aHBLayout->addWidget(myColorBtn); + aHBLayout->addWidget(myFamily); + aHBLayout->addWidget(myBold); + aHBLayout->addWidget(myItalic); + aHBLayout->addWidget(myShadow); + aHBLayout->addStretch(); + this->setLayout(aHBLayout); + + connect( myColorBtn, SIGNAL( clicked() ), SLOT( onColor() ) ); + + if( myFamily->count() == 0 ) + { + myFamily->hide(); + myBold->hide(); + myItalic->hide(); + myShadow->hide(); + } +} + +void ViewerTools_FontWidgetBase::SetColor( const QColor& theColor ) +{ + QPalette palette; + palette.setColor(myColorBtn->backgroundRole(), theColor); + myColorBtn->setPalette(palette); +} + +QColor ViewerTools_FontWidgetBase::GetColor() const +{ + return myColorBtn->palette().color( myColorBtn->backgroundRole() ); +} + +void ViewerTools_FontWidgetBase::onColor() +{ + QColor aColor = QColorDialog::getColor( GetColor(), this ); + if ( aColor.isValid() ) + SetColor( aColor ); +} + +void ViewerTools_FontWidgetBase::SetData( const QColor& theColor, + const int theFamily, + const bool theBold, + const bool theItalic, + const bool theShadow ) +{ + SetColor( theColor ); + + myBold->setChecked( theBold ); + myItalic->setChecked( theItalic ); + myShadow->setChecked( theShadow ); +} + +void ViewerTools_FontWidgetBase::GetData( QColor& theColor, + int& theFamily, + bool& theBold, + bool& theItalic, + bool& theShadow ) const +{ + theColor = GetColor(); + + theBold = myBold->isChecked(); + theItalic = myItalic->isChecked(); + theShadow = myShadow->isChecked(); +} diff --git a/src/ViewerTools/ViewerTools_FontWidgetBase.h b/src/ViewerTools/ViewerTools_FontWidgetBase.h new file mode 100644 index 000000000..9ade57abc --- /dev/null +++ b/src/ViewerTools/ViewerTools_FontWidgetBase.h @@ -0,0 +1,71 @@ +// Copyright (C) 2007-2010 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 +// + +#ifndef VIEWERTOOLS_FONTWIDGETBASE_H +#define VIEWERTOOLS_FONTWIDGETBASE_H + +#include "ViewerTools.h" + +#include + +class QToolButton; +class QComboBox; +class QCheckBox; +class QColor; + +/*! + * Class : ViewerTools_FontWidgetBase + * Description : Dialog for specifying font + */ +class VIEWERTOOLS_EXPORT ViewerTools_FontWidgetBase : public QWidget +{ + Q_OBJECT + +public: + ViewerTools_FontWidgetBase( QWidget* ); + virtual ~ViewerTools_FontWidgetBase(); + + void SetColor( const QColor& ); + QColor GetColor() const; + + virtual void SetData( const QColor&, const int, const bool, const bool, const bool ); + + virtual void GetData( QColor&, int&, bool&, bool&, bool& ) const; + +public: + virtual void Initialize(); + +protected: + virtual void InitializeFamilies() = 0; + +protected slots: + void onColor(); + +protected: + QToolButton* myColorBtn; + QComboBox* myFamily; + QCheckBox* myBold; + QCheckBox* myItalic; + QCheckBox* myShadow; +}; + +#endif diff --git a/src/ViewerTools/resources/ViewerTools_msg_en.ts b/src/ViewerTools/resources/ViewerTools_msg_en.ts new file mode 100644 index 000000000..bfb45c80d --- /dev/null +++ b/src/ViewerTools/resources/ViewerTools_msg_en.ts @@ -0,0 +1,74 @@ + + + + + ViewerTools_CubeAxesDlgBase + + X_AXIS + X axis + + + Y_AXIS + Y axis + + + Z_AXIS + Z axis + + + CAPTION + Graduated axes + + + IS_VISIBLE + Is visible + + + FONT + Font + + + NAME + Name + + + TICK_MARKS + Tick marks + + + LABELS + Labels + + + LENGTH + Length + + + NUMBER + Number + + + OFFSET + Offset + + + AXIS_NAME + Axis name + + + + ViewerTools_FontWidgetBase + + BOLD + Bold + + + ITALIC + Italic + + + SHADOW + Shadow + + + diff --git a/src/ViewerTools/resources/ViewerTools_msg_fr.ts b/src/ViewerTools/resources/ViewerTools_msg_fr.ts new file mode 100755 index 000000000..1fb1f711e --- /dev/null +++ b/src/ViewerTools/resources/ViewerTools_msg_fr.ts @@ -0,0 +1,74 @@ + + + + + ViewerTools_CubeAxesDlgBase + + X_AXIS + Axe X + + + Y_AXIS + Axe Y + + + Z_AXIS + Axe Z + + + CAPTION + Axes gradués + + + IS_VISIBLE + Visible + + + FONT + Couleur + + + NAME + Nom + + + TICK_MARKS + Marques de graduation + + + LABELS + Etiquettes + + + LENGTH + Longueur + + + NUMBER + Nombre + + + OFFSET + Décalage + + + AXIS_NAME + Nom de l'axe + + + + ViewerTools_FontWidgetBase + + BOLD + Gras + + + ITALIC + Italique + + + SHADOW + Ombré + + + -- 2.39.2