From f830c97c748d8f8a6a7eccc8e3a58e19066a1181 Mon Sep 17 00:00:00 2001 From: jfa Date: Fri, 7 Mar 2008 07:44:13 +0000 Subject: [PATCH] Join modifications from BR_Dev_For_4_0 tag V4_1_1. --- AUTHORS | 0 COPYING | 504 ++ ChangeLog | 0 Makefile.am | 56 + Makefile.in | 194 - NEWS | 0 README | 0 adm_local/Makefile.am | 19 + adm_local/unix/Makefile.am | 25 + adm_local/unix/config_files/Makefile.am | 40 + adm_local/unix/config_files/check_GUI.m4 | 8 +- .../unix/config_files/check_QxGraphViewer.m4 | 25 + .../unix/config_files/check_corba_in_GUI.m4 | 2 +- adm_local/unix/config_files/check_opengl.m4 | 35 + adm_local/unix/config_files/check_pyqt.m4 | 33 +- adm_local/unix/config_files/check_qt.m4 | 7 +- adm_local/unix/config_files/check_sip.m4 | 18 + adm_local/unix/config_files/check_vtk.m4 | 141 +- adm_local/unix/make_commence.in | 275 -- adm_local/unix/make_common_starter.am | 54 + adm_local/unix/make_conclude.in | 24 +- adm_local/unix/make_omniorb.in | 50 - bin/Makefile.am | 41 + bin/runLightSalome.csh | 6 +- bin/runLightSalome.sh | 7 +- build_configure | 271 +- clean_configure | 15 + configure.in.base => configure.ac | 300 +- doc/Makefile.am | 27 + doc/Makefile.in | 69 - .../Makefile.in => doc/salome/Makefile.am | 56 +- doc/salome/Makefile.in | 77 - doc/salome/gui/GUI/cshdat_robohelp.htm | 258 - doc/salome/gui/GUI/cshdat_webhelp.htm | 251 - doc/salome/gui/GUI/default.css | 101 - doc/salome/gui/GUI/default_ns.css | 118 - doc/salome/gui/GUI/doxyfile.in | 44 + doc/salome/gui/GUI/dump_study.htm | 172 - doc/salome/gui/GUI/ehelp.xml | 10 - doc/salome/gui/GUI/ehlpdhtm.js | 4239 ----------------- doc/salome/gui/GUI/geom_preferences.htm | 118 - doc/salome/gui/GUI/i_blue.jpg | Bin 1337 -> 0 bytes doc/salome/gui/GUI/images/batchmode.png | Bin 0 -> 67279 bytes .../gui/GUI/images/cataloggenerator.png | Bin 0 -> 15404 bytes doc/salome/gui/GUI/images/choicepage.png | Bin 0 -> 19744 bytes doc/salome/gui/GUI/images/clipping.png | Bin 0 -> 12933 bytes .../gui/GUI/{ => images}/closestudy.png | Bin doc/salome/gui/GUI/images/copy-paste.jpg | Bin 0 -> 1199 bytes doc/salome/gui/GUI/images/dumpstudy.png | Bin 0 -> 22049 bytes doc/salome/gui/GUI/images/geomview-alt.png | Bin 0 -> 73865 bytes doc/salome/gui/GUI/images/graduatedaxes1.png | Bin 0 -> 18919 bytes doc/salome/gui/GUI/images/icon_about.png | Bin 0 -> 148435 bytes doc/salome/gui/GUI/images/image100.gif | Bin 0 -> 1040 bytes doc/salome/gui/GUI/images/image102.gif | Bin 0 -> 2409 bytes doc/salome/gui/GUI/images/image103.gif | Bin 0 -> 1046 bytes doc/salome/gui/GUI/images/image105.gif | Bin 0 -> 1038 bytes doc/salome/gui/GUI/images/image106.gif | Bin 0 -> 984 bytes doc/salome/gui/GUI/images/image108.gif | Bin 0 -> 1046 bytes doc/salome/gui/GUI/images/image109.gif | Bin 0 -> 1009 bytes doc/salome/gui/GUI/images/image157.gif | Bin 0 -> 2858 bytes doc/salome/gui/GUI/{ => images}/image54.jpg | Bin doc/salome/gui/GUI/{ => images}/image65.gif | Bin doc/salome/gui/GUI/{ => images}/image67.gif | Bin doc/salome/gui/GUI/{ => images}/image69.gif | Bin doc/salome/gui/GUI/{ => images}/image70.gif | Bin doc/salome/gui/GUI/{ => images}/image72.gif | Bin doc/salome/gui/GUI/{ => images}/image73.gif | Bin doc/salome/gui/GUI/{ => images}/image75.gif | Bin doc/salome/gui/GUI/images/image77.gif | Bin 0 -> 1022 bytes doc/salome/gui/GUI/images/image86.gif | Bin 0 -> 1017 bytes doc/salome/gui/GUI/images/image88.gif | Bin 0 -> 1000 bytes doc/salome/gui/GUI/images/image89.gif | Bin 0 -> 1020 bytes doc/salome/gui/GUI/images/image91.gif | Bin 0 -> 1010 bytes doc/salome/gui/GUI/{ => images}/image94.gif | Bin doc/salome/gui/GUI/images/image95.gif | Bin 0 -> 2711 bytes doc/salome/gui/GUI/images/image96.gif | Bin 0 -> 1055 bytes doc/salome/gui/GUI/images/image97.gif | Bin 0 -> 1065 bytes doc/salome/gui/GUI/images/image98.gif | Bin 0 -> 1047 bytes doc/salome/gui/GUI/images/image99.gif | Bin 0 -> 1035 bytes doc/salome/gui/GUI/images/import.png | Bin 0 -> 34672 bytes doc/salome/gui/GUI/images/intropage.png | Bin 0 -> 45050 bytes doc/salome/gui/GUI/images/loadscript.png | Bin 0 -> 19952 bytes doc/salome/gui/GUI/images/loadstudy2.png | Bin 0 -> 8181 bytes doc/salome/gui/GUI/images/lockedstudy.png | Bin 0 -> 6140 bytes doc/salome/gui/GUI/images/neo-view2.png | Bin 0 -> 64097 bytes doc/salome/gui/GUI/images/newsticn.jpg | Bin 0 -> 851 bytes doc/salome/gui/GUI/{ => images}/note1.gif | Bin doc/salome/gui/GUI/images/objectbrowser1.png | Bin 0 -> 10900 bytes doc/salome/gui/GUI/images/objectbrowser2.png | Bin 0 -> 16560 bytes doc/salome/gui/GUI/images/open.jpg | Bin 0 -> 928 bytes doc/salome/gui/GUI/images/plot2d_clone.gif | Bin 0 -> 1008 bytes doc/salome/gui/GUI/images/plot2d_legend.gif | Bin 0 -> 1050 bytes .../{image71.gif => images/plot2d_lines.gif} | Bin 899 -> 908 bytes .../images/plot2d_logarithmic_horizontal.gif | Bin 0 -> 988 bytes .../images/plot2d_logarithmic_vertical.gif | Bin 0 -> 983 bytes .../{image68.gif => images/plot2d_points.gif} | Bin 919 -> 966 bytes doc/salome/gui/GUI/images/plot2d_settings.gif | Bin 0 -> 1042 bytes doc/salome/gui/GUI/images/plot2d_splines.gif | Bin 0 -> 970 bytes .../gui/GUI/images/plot2d_view_settings.png | Bin 0 -> 29975 bytes doc/salome/gui/GUI/images/ppref1.png | Bin 0 -> 27312 bytes doc/salome/gui/GUI/images/ppref2.png | Bin 0 -> 25684 bytes doc/salome/gui/GUI/images/ppref3.png | Bin 0 -> 36039 bytes doc/salome/gui/GUI/images/pref11.png | Bin 0 -> 28667 bytes doc/salome/gui/GUI/images/pref12.png | Bin 0 -> 39991 bytes doc/salome/gui/GUI/images/pref13.png | Bin 0 -> 19006 bytes doc/salome/gui/GUI/images/pref14.png | Bin 0 -> 22374 bytes doc/salome/gui/GUI/images/pref15.png | Bin 0 -> 29051 bytes doc/salome/gui/GUI/images/pref21.png | Bin 0 -> 31959 bytes doc/salome/gui/GUI/images/pref22.png | Bin 0 -> 21249 bytes doc/salome/gui/GUI/images/pref23.png | Bin 0 -> 23117 bytes doc/salome/gui/GUI/images/pref24.png | Bin 0 -> 36095 bytes doc/salome/gui/GUI/images/pref31.png | Bin 0 -> 45306 bytes doc/salome/gui/GUI/images/pref33.png | Bin 0 -> 41179 bytes doc/salome/gui/GUI/images/pref34.png | Bin 0 -> 51344 bytes doc/salome/gui/GUI/images/pref37.png | Bin 0 -> 35733 bytes doc/salome/gui/GUI/images/pref38.png | Bin 0 -> 34467 bytes doc/salome/gui/GUI/images/pref39.png | Bin 0 -> 22668 bytes doc/salome/gui/GUI/images/pref40.png | Bin 0 -> 24540 bytes doc/salome/gui/GUI/images/productpage.png | Bin 0 -> 22732 bytes doc/salome/gui/GUI/images/productpage1.png | Bin 0 -> 14266 bytes doc/salome/gui/GUI/images/productpage2.png | Bin 0 -> 23289 bytes doc/salome/gui/GUI/images/progresspage.png | Bin 0 -> 18238 bytes doc/salome/gui/GUI/images/progresspage1.png | Bin 0 -> 11544 bytes doc/salome/gui/GUI/images/readmepage.png | Bin 0 -> 21399 bytes doc/salome/gui/GUI/images/registry1.png | Bin 0 -> 16943 bytes doc/salome/gui/GUI/images/registry3.png | Bin 0 -> 7440 bytes doc/salome/gui/GUI/images/registry4.png | Bin 0 -> 17550 bytes doc/salome/gui/GUI/images/save.jpg | Bin 0 -> 966 bytes doc/salome/gui/GUI/images/selectcolor.png | Bin 0 -> 26899 bytes doc/salome/gui/GUI/images/selectfont.png | Bin 0 -> 23157 bytes .../GUI/images/set_rotation_point_dialog1.png | Bin 0 -> 11693 bytes .../GUI/images/set_rotation_point_dialog2.png | Bin 0 -> 11232 bytes doc/salome/gui/GUI/images/studyproperties.png | Bin 0 -> 10469 bytes doc/salome/gui/GUI/images/updaterate.png | Bin 0 -> 12719 bytes doc/salome/gui/GUI/images/urbutton.png | Bin 0 -> 917 bytes doc/salome/gui/GUI/images/view2.png | Bin 0 -> 15859 bytes .../gui/GUI/images/view_rotation_point.png | Bin 0 -> 293 bytes doc/salome/gui/GUI/index.htm | 180 - doc/salome/gui/GUI/index_csh.htm | 106 - doc/salome/gui/GUI/index_rhc.htm | 106 - doc/salome/gui/GUI/input/about_salome.doc | 12 + .../gui/GUI/input/creating_new_study.doc | 36 + .../gui/GUI/input/displaying_studies.doc | 30 + doc/salome/gui/GUI/input/editing_studies.doc | 19 + .../gui/GUI/input/geometry_preferences.doc | 47 + doc/salome/gui/GUI/input/getting_started.doc | 20 + .../gui/GUI/input/gui_module_chapter.doc | 39 + doc/salome/gui/GUI/input/index.doc | 51 + .../gui/GUI/input/installing_salome.doc | 961 ++++ doc/salome/gui/GUI/input/intro_to_salome.doc | 29 + doc/salome/gui/GUI/input/introduction.doc | 70 + .../gui/GUI/input/introduction_to_gui.doc | 45 + doc/salome/gui/GUI/input/mesh_preferences.doc | 119 + doc/salome/gui/GUI/input/occ_3d_viewer.doc | 125 + doc/salome/gui/GUI/input/opening_studies.doc | 31 + doc/salome/gui/GUI/input/plot2d_viewer.doc | 94 + .../gui/GUI/input/postpro_preferences.doc | 375 ++ doc/salome/gui/GUI/input/running_salome.doc | 110 + .../gui/GUI/input/salome_architecture.doc | 95 + doc/salome/gui/GUI/input/salome_desktop.doc | 74 + .../gui/GUI/input/salome_preferences.doc | 140 + .../GUI/input/saving_and_closing_studies.doc | 81 + .../gui/GUI/input/select_color_and_font.doc | 30 + .../gui/GUI/input/setting_preferences.doc | 29 + .../GUI/input/setting_preferences_chapter.doc | 14 + .../GUI/input/setting_study_properties.doc | 36 + .../GUI/input/study_management_chapter.doc | 15 + .../gui/GUI/input/using_catalog_generator.doc | 65 + .../gui/GUI/input/using_object_browser.doc | 46 + .../gui/GUI/input/using_registry_tool.doc | 49 + doc/salome/gui/GUI/input/viewers_chapter.doc | 11 + doc/salome/gui/GUI/input/vtk_3d_viewer.doc | 144 + .../GUI/input/working_with_python_scripts.doc | 52 + doc/salome/gui/GUI/introduction_to_gui.htm | 192 - doc/salome/gui/GUI/kernel.log | 270 -- doc/salome/gui/GUI/kernel/application.png | Bin 0 -> 5152 bytes doc/salome/gui/GUI/kernel/batchmode.png | Bin 0 -> 67279 bytes doc/salome/gui/GUI/kernel/choicepage.png | Bin 0 -> 19744 bytes doc/salome/gui/GUI/kernel/introduction.bak | 2088 ++++++++ doc/salome/gui/GUI/kernel/intropage.png | Bin 0 -> 45050 bytes doc/salome/gui/GUI/kernel/logocorp.png | Bin 0 -> 2083 bytes doc/salome/gui/GUI/kernel/productpage.png | Bin 0 -> 22732 bytes doc/salome/gui/GUI/kernel/productpage1.png | Bin 0 -> 14266 bytes doc/salome/gui/GUI/kernel/productpage2.png | Bin 0 -> 23289 bytes doc/salome/gui/GUI/kernel/progresspage.png | Bin 0 -> 18238 bytes doc/salome/gui/GUI/kernel/progresspage1.png | Bin 0 -> 11544 bytes doc/salome/gui/GUI/kernel/readme.html | 2754 +++++++---- doc/salome/gui/GUI/kernel/readmepage.png | Bin 0 -> 21399 bytes .../gui/GUI/kernel/running_salome_pro.htm | 6 +- doc/salome/gui/GUI/mesh_preferences.htm | 309 -- doc/salome/gui/GUI/pics/clipping.png | Bin 0 -> 12933 bytes doc/salome/gui/GUI/pics/graduatedaxes1.png | Bin 0 -> 18919 bytes doc/salome/gui/GUI/pics/icon_about.png | Bin 79458 -> 148435 bytes doc/salome/gui/GUI/pics/image100.gif | Bin 0 -> 1040 bytes doc/salome/gui/GUI/pics/image102.gif | Bin 0 -> 2409 bytes doc/salome/gui/GUI/pics/image103.gif | Bin 0 -> 1046 bytes doc/salome/gui/GUI/pics/image105.gif | Bin 0 -> 1038 bytes doc/salome/gui/GUI/pics/image106.gif | Bin 0 -> 984 bytes doc/salome/gui/GUI/pics/image108.gif | Bin 0 -> 1046 bytes doc/salome/gui/GUI/pics/image109.gif | Bin 0 -> 1009 bytes doc/salome/gui/GUI/pics/image157.gif | Bin 0 -> 2858 bytes doc/salome/gui/GUI/pics/image77.gif | Bin 0 -> 1022 bytes doc/salome/gui/GUI/pics/image86.gif | Bin 0 -> 1017 bytes doc/salome/gui/GUI/pics/image88.gif | Bin 0 -> 1000 bytes doc/salome/gui/GUI/pics/image89.gif | Bin 0 -> 1020 bytes doc/salome/gui/GUI/pics/image91.gif | Bin 0 -> 1010 bytes doc/salome/gui/GUI/pics/image95.gif | Bin 0 -> 2711 bytes doc/salome/gui/GUI/pics/image96.gif | Bin 0 -> 1055 bytes doc/salome/gui/GUI/pics/image97.gif | Bin 0 -> 1065 bytes doc/salome/gui/GUI/pics/image98.gif | Bin 0 -> 1047 bytes doc/salome/gui/GUI/pics/image99.gif | Bin 0 -> 1035 bytes doc/salome/gui/GUI/pics/ppref1.png | Bin 0 -> 27312 bytes doc/salome/gui/GUI/pics/ppref2.png | Bin 0 -> 25684 bytes doc/salome/gui/GUI/pics/ppref3.png | Bin 0 -> 34603 bytes doc/salome/gui/GUI/pics/pref15.png | Bin 20075 -> 29051 bytes doc/salome/gui/GUI/pics/pref33.png | Bin 37500 -> 41179 bytes .../GUI/pics/set_rotation_point_dialog1.png | Bin 0 -> 11693 bytes .../GUI/pics/set_rotation_point_dialog2.png | Bin 0 -> 11232 bytes .../gui/GUI/pics/view_rotation_point.png | Bin 0 -> 293 bytes doc/salome/gui/GUI/post-pro_preferences.htm | 677 --- doc/salome/gui/GUI/robohhre.lng | 101 - doc/salome/gui/GUI/select_color_and_font.htm | 129 - doc/salome/gui/GUI/setting_preferences.htm | 147 - doc/salome/gui/GUI/ss_btn_related_topics.gif | Bin 269 -> 0 bytes doc/salome/gui/GUI/static/footer.html | 10 + doc/salome/gui/GUI/static/header.html | 12 + .../gui/GUI/texture_horiz_ltbluebubbles.jpg | Bin 1255 -> 0 bytes doc/salome/gui/GUI/tip1.gif | Bin 1501 -> 0 bytes doc/salome/gui/GUI/webhelp.cab | Bin 89619 -> 0 bytes doc/salome/gui/GUI/webhelp.jar | Bin 134517 -> 0 bytes doc/salome/gui/GUI/whcsh_home.htm | 600 --- doc/salome/gui/GUI/whcshdata.htm | 87 - doc/salome/gui/GUI/whd_dpns.htm | 43 - doc/salome/gui/GUI/whd_hide0.gif | Bin 190 -> 0 bytes doc/salome/gui/GUI/whd_hide1.gif | Bin 190 -> 0 bytes doc/salome/gui/GUI/whd_hide2.gif | Bin 190 -> 0 bytes doc/salome/gui/GUI/whd_next0.gif | Bin 159 -> 0 bytes doc/salome/gui/GUI/whd_next1.gif | Bin 159 -> 0 bytes doc/salome/gui/GUI/whd_next2.gif | Bin 159 -> 0 bytes doc/salome/gui/GUI/whd_nvp10.htm | 15 - doc/salome/gui/GUI/whd_nvp20.htm | 334 -- doc/salome/gui/GUI/whd_prev0.gif | Bin 159 -> 0 bytes doc/salome/gui/GUI/whd_prev1.gif | Bin 159 -> 0 bytes doc/salome/gui/GUI/whd_prev2.gif | Bin 159 -> 0 bytes doc/salome/gui/GUI/whd_show0.gif | Bin 199 -> 0 bytes doc/salome/gui/GUI/whd_show1.gif | Bin 199 -> 0 bytes doc/salome/gui/GUI/whd_show2.gif | Bin 199 -> 0 bytes doc/salome/gui/GUI/whd_sync0.gif | Bin 231 -> 0 bytes doc/salome/gui/GUI/whd_sync1.gif | Bin 231 -> 0 bytes doc/salome/gui/GUI/whd_sync2.gif | Bin 231 -> 0 bytes doc/salome/gui/GUI/whd_tab0.gif | Bin 285 -> 0 bytes doc/salome/gui/GUI/whd_tab1.gif | Bin 237 -> 0 bytes doc/salome/gui/GUI/whd_tab2.gif | Bin 226 -> 0 bytes doc/salome/gui/GUI/whd_tab3.gif | Bin 209 -> 0 bytes doc/salome/gui/GUI/whd_tab4.gif | Bin 198 -> 0 bytes doc/salome/gui/GUI/whd_tab5.gif | Bin 221 -> 0 bytes doc/salome/gui/GUI/whd_tab6.gif | Bin 212 -> 0 bytes doc/salome/gui/GUI/whd_tab7.gif | Bin 236 -> 0 bytes doc/salome/gui/GUI/whd_tab8.gif | Bin 225 -> 0 bytes doc/salome/gui/GUI/whd_tabs.htm | 533 --- doc/salome/gui/GUI/whd_toc1.gif | Bin 153 -> 0 bytes doc/salome/gui/GUI/whd_toc2.gif | Bin 173 -> 0 bytes doc/salome/gui/GUI/whd_toc3.gif | Bin 158 -> 0 bytes doc/salome/gui/GUI/whd_toc4.gif | Bin 953 -> 0 bytes doc/salome/gui/GUI/whd_topic.xml | 85 - doc/salome/gui/GUI/whd_wbsh0.gif | Bin 260 -> 0 bytes doc/salome/gui/GUI/whd_wbsh1.gif | Bin 260 -> 0 bytes doc/salome/gui/GUI/whd_wbsh2.gif | Bin 260 -> 0 bytes doc/salome/gui/GUI/whdata/whftdata0.htm | 4 +- doc/salome/gui/GUI/whdata/whfwdata0.htm | 1321 ++--- doc/salome/gui/GUI/whdata/whtdata0.htm | 5 +- doc/salome/gui/GUI/whfbody.htm | 37 - doc/salome/gui/GUI/whfdhtml.htm | 30 - doc/salome/gui/GUI/whfform.htm | 136 - doc/salome/gui/GUI/whfhost.js | 945 ---- doc/salome/gui/GUI/whform.js | 216 - doc/salome/gui/GUI/whframes.js | 79 - doc/salome/gui/GUI/whgbody.htm | 35 - doc/salome/gui/GUI/whgdef.htm | 98 - doc/salome/gui/GUI/whgdhtml.htm | 150 - doc/salome/gui/GUI/whghost.js | 247 - doc/salome/gui/GUI/whhost.js | 1305 ----- doc/salome/gui/GUI/whibody.htm | 284 -- doc/salome/gui/GUI/whidhtml.htm | 30 - doc/salome/gui/GUI/whiform.htm | 91 - doc/salome/gui/GUI/whihost.js | 424 -- doc/salome/gui/GUI/whlang.js | 453 -- doc/salome/gui/GUI/whmozemu.js | 67 - doc/salome/gui/GUI/whmsg.js | 69 - doc/salome/gui/GUI/whnjs.htm | 25 - doc/salome/gui/GUI/whphost.js | 582 --- doc/salome/gui/GUI/whproj.htm | 24 - doc/salome/gui/GUI/whproj.js | 85 - doc/salome/gui/GUI/whproj.xml | 3 - doc/salome/gui/GUI/whproxy.js | 74 - doc/salome/gui/GUI/whres.xml | 256 - doc/salome/gui/GUI/whskin_blank.htm | 10 - doc/salome/gui/GUI/whskin_homepage.htm | 180 - doc/salome/gui/GUI/whskin_info.htm | 20 - doc/salome/gui/GUI/whskin_pickup.htm | 229 - doc/salome/gui/GUI/whskin_tw.htm | 63 - doc/salome/gui/GUI/whstart.js | 432 -- doc/salome/gui/GUI/whstub.js | 159 - doc/salome/gui/GUI/whtdhtml.htm | 49 - doc/salome/gui/GUI/whthost.js | 1504 ------ doc/salome/gui/GUI/whtopic.js | 725 --- doc/salome/gui/GUI/whutils.js | 527 -- doc/salome/gui/GUI/whver.js | 103 - doc/salome/gui/GUI/whxdata/whftdata0.xml | 4 +- doc/salome/gui/GUI/whxdata/whfwdata0.xml | 1321 ++--- doc/salome/gui/GUI/whxdata/whtdata0.xml | 4 + doc/salome/gui/{Makefile.in => Makefile.am} | 33 +- doc/salome/tui/GUI/sources/doxygen.css | 7 +- doc/salome/tui/{Makefile.in => Makefile.am} | 32 +- idl/Makefile.am | 93 + resources/Makefile.am | 95 + resources/copy.png | Bin 209 -> 245 bytes resources/help.png | Bin 214 -> 910 bytes resources/paste.png | Bin 224 -> 280 bytes resources/plot2d_fitall.png | Bin 319 -> 523 bytes resources/plot2d_fitarea.png | Bin 311 -> 511 bytes resources/plot2d_pan.png | Bin 457 -> 545 bytes resources/plot2d_zoom.png | Bin 375 -> 488 bytes src/CAF/CAF_Study.cxx | 43 +- src/CAF/{Makefile.in => Makefile.am} | 74 +- src/CAM/CAM_Application.cxx | 14 +- src/CAM/CAM_Module.cxx | 47 +- src/CAM/CAM_Module.h | 11 +- src/CAM/CAM_Study.cxx | 4 +- src/CAM/Makefile.am | 59 + src/CASCatch/CASCatch.hxx | 55 + src/CASCatch/CASCatch_CatchSignals.cxx | 333 ++ src/CASCatch/CASCatch_CatchSignals.hxx | 63 + src/CASCatch/CASCatch_ErrorHandler.cxx | 122 + src/CASCatch/CASCatch_ErrorHandler.hxx | 92 + src/CASCatch/CASCatch_Failure.cxx | 126 + src/CASCatch/CASCatch_Failure.hxx | 60 + src/CASCatch/Makefile.am | 41 + src/DDS/DDS_DicGroup.cxx | 38 +- src/DDS/DDS_DicItem.cxx | 190 +- src/DDS/DDS_DicItem.h | 95 +- src/DDS/DDS_Dictionary.cxx | 274 +- src/DDS/DDS_Dictionary.h | 3 - src/DDS/DDS_KeyWords.cxx | 73 + src/DDS/DDS_KeyWords.h | 2 +- src/DDS/{Makefile.in => Makefile.am} | 20 +- src/Event/{Makefile.in => Makefile.am} | 25 +- src/Event/SALOME_Event.hxx | 12 +- src/GLViewer/GLViewer_BaseObjects.cxx | 4 +- src/GLViewer/GLViewer_Drawer.cxx | 4 +- src/GLViewer/GLViewer_Object.cxx | 6 +- src/GLViewer/GLViewer_Object.h | 22 +- src/GLViewer/GLViewer_Tools.cxx | 25 +- src/GLViewer/GLViewer_ViewManager.cxx | 14 +- src/GLViewer/GLViewer_ViewManager.h | 9 +- src/GLViewer/GLViewer_ViewPort2d.cxx | 2 +- src/GLViewer/Makefile.am | 115 + src/GLViewer/Makefile.in | 121 - src/GLViewer/resources/GLViewer_msg_en.po | 3 + src/LightApp/LightApp_Application.cxx | 425 +- src/LightApp/LightApp_Application.h | 19 +- src/LightApp/LightApp_DataModel.cxx | 15 +- src/LightApp/LightApp_DataOwner.cxx | 44 +- src/LightApp/LightApp_DataOwner.h | 6 +- src/LightApp/LightApp_DataSubOwner.cxx | 18 +- src/LightApp/LightApp_DataSubOwner.h | 6 +- src/LightApp/LightApp_Dialog.h | 13 +- src/LightApp/LightApp_Displayer.h | 4 +- src/LightApp/LightApp_EventFilter.cxx | 81 + .../LightApp_EventFilter.h} | 42 +- src/LightApp/LightApp_GLSelector.cxx | 79 +- src/LightApp/LightApp_GLSelector.h | 18 +- src/LightApp/LightApp_Module.cxx | 12 +- src/LightApp/LightApp_Module.h | 10 +- src/LightApp/LightApp_ModuleDlg.cxx | 286 +- src/LightApp/LightApp_ModuleDlg.h | 38 +- src/LightApp/LightApp_OBSelector.cxx | 13 +- src/LightApp/LightApp_OCCSelector.cxx | 20 +- src/LightApp/LightApp_OCCSelector.h | 6 +- src/LightApp/LightApp_PreferencesDlg.cxx | 3 +- src/LightApp/LightApp_Selection.cxx | 15 +- src/LightApp/LightApp_Selection.h | 1 + src/LightApp/LightApp_SelectionMgr.cxx | 57 +- src/LightApp/LightApp_SelectionMgr.h | 3 +- src/LightApp/LightApp_ShowHideOp.cxx | 18 +- src/LightApp/LightApp_VTKSelector.cxx | 39 +- src/LightApp/LightApp_VTKSelector.h | 12 +- src/LightApp/Makefile.am | 250 + src/LightApp/Makefile.in | 225 - src/LightApp/resources/LightApp.ini | 16 +- src/LightApp/resources/LightApp.xml | 33 +- src/LightApp/resources/LightApp_msg_en.po | 66 +- src/LightApp/resources/icon_about.png | Bin 79549 -> 148435 bytes src/LogWindow/{Makefile.in => Makefile.am} | 24 +- src/Makefile.am | 69 + src/Makefile.in | 83 - src/OBJECT/Makefile.am | 71 + src/OBJECT/Makefile.in | 73 - src/OCCViewer/Makefile.am | 98 + src/OCCViewer/Makefile.in | 96 - src/OCCViewer/OCCViewer_ClippingDlg.cxx | 29 +- src/OCCViewer/OCCViewer_ClippingDlg.h | 3 + .../OCCViewer_CreateRestoreViewDlg.cxx | 6 +- .../OCCViewer_SetRotationPointDlg.cxx | 278 ++ src/OCCViewer/OCCViewer_SetRotationPointDlg.h | 82 + src/OCCViewer/OCCViewer_ViewManager.cxx | 17 +- src/OCCViewer/OCCViewer_ViewManager.h | 7 - src/OCCViewer/OCCViewer_ViewModel.cxx | 23 +- src/OCCViewer/OCCViewer_ViewModel.h | 5 +- src/OCCViewer/OCCViewer_ViewPort.cxx | 8 +- src/OCCViewer/OCCViewer_ViewPort.h | 8 + src/OCCViewer/OCCViewer_ViewPort3d.cxx | 116 +- src/OCCViewer/OCCViewer_ViewPort3d.h | 12 +- src/OCCViewer/OCCViewer_ViewSketcher.cxx | 536 +++ src/OCCViewer/OCCViewer_ViewSketcher.h | 137 + src/OCCViewer/OCCViewer_ViewWindow.cxx | 539 ++- src/OCCViewer/OCCViewer_ViewWindow.h | 51 +- src/OCCViewer/resources/OCCViewer_images.po | 3 + src/OCCViewer/resources/OCCViewer_msg_en.po | 38 +- .../resources/view_rotation_point.png | Bin 0 -> 988 bytes .../Makefile.in => ObjBrowser/Makefile.am} | 81 +- src/ObjBrowser/OB_Browser.cxx | 84 +- src/ObjBrowser/OB_Browser.h | 22 +- src/ObjBrowser/OB_FindDlg.cxx | 92 + src/ObjBrowser/OB_FindDlg.h | 34 + src/ObjBrowser/OB_ListItem.cxx | 6 + src/ObjBrowser/OB_ListView.cxx | 5 +- src/ObjBrowser/OB_ObjSearch.cxx | 107 + src/ObjBrowser/OB_ObjSearch.h | 39 + src/ObjBrowser/resources/OB_msg_en.po | 14 + src/Plot2d/Makefile.am | 92 + src/Plot2d/Makefile.in | 93 - src/Plot2d/Plot2d_Curve.cxx | 41 +- src/Plot2d/Plot2d_Curve.h | 10 +- src/Plot2d/Plot2d_SetupCurveDlg.h | 4 +- src/Plot2d/Plot2d_SetupViewDlg.cxx | 20 +- src/Plot2d/Plot2d_SetupViewDlg.h | 2 + src/Plot2d/Plot2d_ToolTip.cxx | 93 + src/Plot2d/Plot2d_ToolTip.h | 50 + src/Plot2d/Plot2d_ViewFrame.cxx | 166 +- src/Plot2d/Plot2d_ViewFrame.h | 21 + src/Plot2d/Plot2d_ViewManager.cxx | 18 +- src/Plot2d/Plot2d_ViewManager.h | 5 - src/Plot2d/Plot2d_ViewModel.cxx | 1 + src/Plot2d/Plot2d_ViewWindow.cxx | 21 +- src/Plot2d/Plot2d_ViewWindow.h | 6 + src/Plot2d/resources/Plot2d_msg_en.po | 3 + src/Plot2d/resources/plot2d_rotate.png | Bin 511 -> 0 bytes src/Prs/{Makefile.in => Makefile.am} | 27 +- src/PyInterp/{Makefile.in => Makefile.am} | 34 +- src/PyInterp/PyInterp.h | 18 +- src/PyInterp/PyInterp_base.cxx | 146 +- src/PyInterp/PyInterp_base.h | 15 +- .../{Makefile.in => Makefile.am} | 41 +- src/PythonConsole/PythonConsole.h | 18 +- src/PythonConsole/PythonConsole_PyConsole.cxx | 12 + src/PythonConsole/PythonConsole_PyConsole.h | 2 +- src/PythonConsole/PythonConsole_PyEditor.cxx | 235 +- src/PythonConsole/PythonConsole_PyEditor.h | 18 +- src/PythonConsole/PythonConsole_PyInterp.cxx | 35 +- src/QDS/{Makefile.in => Makefile.am} | 41 +- src/QDS/QDS.cxx | 56 + src/QDS/QDS.h | 15 +- src/QDS/QDS_CheckBox.cxx | 40 +- src/QDS/QDS_ComboBox.cxx | 57 +- src/QDS/QDS_Datum.cxx | 341 +- src/QDS/QDS_Datum.h | 14 +- src/QDS/QDS_LineEdit.cxx | 67 +- src/QDS/QDS_LineEdit.h | 7 + src/QDS/QDS_RadioBox.cxx | 58 +- src/QDS/QDS_RadioBox.h | 2 +- src/QDS/QDS_SpinBox.cxx | 23 +- src/QDS/QDS_SpinBoxDbl.cxx | 24 +- src/QDS/QDS_Table.cxx | 348 ++ src/QDS/QDS_Table.h | 99 + src/QDS/QDS_TextEdit.cxx | 17 +- src/QDS/QDS_Validator.cxx | 92 +- src/QDS/QDS_Validator.h | 10 +- src/Qtx/Makefile.am | 150 + src/Qtx/Makefile.in | 165 - src/Qtx/Qtx.cxx | 143 + src/Qtx/Qtx.h | 9 + src/Qtx/QtxAction.cxx | 15 +- src/Qtx/QtxAction.h | 10 +- src/Qtx/QtxActionMenuMgr.cxx | 47 +- src/Qtx/QtxDblValidator.h | 4 +- src/Qtx/QtxDialog.cxx | 7 +- src/Qtx/QtxDockWindow.cxx | 11 +- src/Qtx/QtxListAction.cxx | 5 +- src/Qtx/QtxListResourceEdit.cxx | 22 +- src/Qtx/QtxResourceEdit.h | 2 +- src/Qtx/QtxResourceMgr.cxx | 7 +- src/Qtx/QtxResourceMgr.h | 4 +- src/Qtx/QtxSplash.cxx | 94 +- src/Qtx/QtxSplash.h | 4 + src/Qtx/QtxWorkstack.cxx | 38 +- src/QxGraph/Makefile.am | 66 + src/QxGraph/QxGraph.h | 35 + src/QxGraph/QxGraph_ActiveItem.h | 59 + src/QxGraph/QxGraph_Canvas.cxx | 109 + src/QxGraph/QxGraph_Canvas.h | 57 + src/QxGraph/QxGraph_CanvasView.cxx | 761 +++ src/QxGraph/QxGraph_CanvasView.h | 112 + src/QxGraph/QxGraph_Def.h | 34 + src/QxGraph/QxGraph_Prs.cxx | 251 + src/QxGraph/QxGraph_Prs.h | 73 + src/QxGraph/QxGraph_ViewManager.cxx | 56 + src/QxGraph/QxGraph_ViewManager.h | 44 + src/QxGraph/QxGraph_ViewModel.cxx | 157 + src/QxGraph/QxGraph_ViewModel.h | 82 + src/QxGraph/QxGraph_ViewWindow.cxx | 288 ++ src/QxGraph/QxGraph_ViewWindow.h | 95 + src/QxGraph/resources/QxGraph_images.po | 42 + src/QxGraph/resources/QxGraph_msg_en.po | 40 + src/QxGraph/resources/view_fitall.png | Bin 0 -> 523 bytes src/QxGraph/resources/view_fitarea.png | Bin 0 -> 511 bytes src/QxGraph/resources/view_glpan.png | Bin 0 -> 540 bytes src/QxGraph/resources/view_pan.png | Bin 0 -> 545 bytes src/QxGraph/resources/view_reset.png | Bin 0 -> 477 bytes src/QxGraph/resources/view_zoom.png | Bin 0 -> 488 bytes src/RegistryDisplay/HelpWindow.hxx | 13 +- src/RegistryDisplay/IntervalWindow.hxx | 2 + .../{Makefile.in => Makefile.am} | 42 +- src/RegistryDisplay/RegWidget.cxx | 2 + src/RegistryDisplay/RegWidget.h | 14 +- src/ResExporter/{Makefile.in => Makefile.am} | 27 +- src/ResExporter/ResourceExporter.cxx | 2 +- src/SALOME_PY/{Makefile.in => Makefile.am} | 40 +- src/SALOME_PY/SalomePy.cxx | 251 +- src/SALOME_PYQT/{Makefile.in => Makefile.am} | 12 +- .../{Makefile.in => Makefile.am} | 77 +- .../SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx | 256 +- .../SALOME_PYQT_GUI/SALOME_PYQT_Module.h | 30 + src/SALOME_PYQT/SalomePyQt/Makefile.am | 127 + src/SALOME_PYQT/SalomePyQt/Makefile.in | 129 - src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx | 329 +- src/SALOME_PYQT/SalomePyQt/SalomePyQt.h | 41 +- src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip | 39 +- src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip | 142 +- src/SALOME_SWIG/Help.py | 141 + src/SALOME_SWIG/Makefile.am | 116 + src/SALOME_SWIG/Makefile.in | 57 - src/SALOME_SWIG/PyInterp.py | 102 + src/SALOME_SWIG/SALOMEGUI_Swig.cxx | 190 +- src/SALOME_SWIG/SALOMEGUI_Swig.hxx | 11 + src/SALOME_SWIG/SALOMEGUI_Swig.i | 30 +- src/SALOME_SWIG/salome.py | 157 + src/SALOME_SWIG/supervisionexample.py | 103 - src/SALOME_SWIG/supervisionexample.py.in | 10 +- src/SALOME_SWIG/supervisiongeomexample.py | 121 - src/SALOME_SWIG/testattr.py | 109 - src/SOCC/{Makefile.in => Makefile.am} | 45 +- src/SOCC/SOCC_Prs.cxx | 2 +- src/SOCC/SOCC_ViewModel.cxx | 8 +- src/SOCC/SOCC_ViewWindow.cxx | 16 +- src/SPlot2d/Makefile.am | 52 + src/SPlot2d/Makefile.in | 57 - src/SPlot2d/SPlot2d_ViewModel.cxx | 17 +- src/SPlot2d/SPlot2d_ViewModel.h | 2 + src/SPlot2d/SPlot2d_ViewWindow.cxx | 75 + src/SPlot2d/SPlot2d_ViewWindow.h | 46 + src/SPlot2d/{ => resources}/SPlot2d_msg_en.po | 0 src/STD/Makefile.am | 77 + src/STD/Makefile.in | 86 - src/STD/STD_Application.cxx | 141 +- src/STD/STD_Application.h | 15 +- src/STD/resources/STD_msg_en.po | 8 +- src/SUIT/Makefile.am | 123 + src/SUIT/Makefile.in | 126 - src/SUIT/SUIT_Application.cxx | 64 +- src/SUIT/SUIT_Application.h | 25 +- src/SUIT/SUIT_DataObjectKey.h | 2 +- src/SUIT/SUIT_DataOwner.cxx | 36 +- src/SUIT/SUIT_DataOwner.h | 5 +- src/SUIT/SUIT_Desktop.cxx | 14 + src/SUIT/SUIT_Desktop.h | 4 + src/SUIT/SUIT_MsgDlg.cxx | 224 + src/SUIT/SUIT_MsgDlg.h | 66 + src/SUIT/SUIT_PopupClient.h | 2 +- src/SUIT/SUIT_ResourceMgr.cxx | 28 +- src/SUIT/SUIT_SelectionFilter.h | 2 +- src/SUIT/SUIT_Session.cxx | 60 +- src/SUIT/SUIT_Session.h | 11 +- src/SUIT/SUIT_Study.cxx | 23 +- src/SUIT/SUIT_Study.h | 2 +- src/SUIT/SUIT_TreeSync.h | 4 +- src/SUIT/SUIT_ViewManager.cxx | 122 +- src/SUIT/SUIT_ViewManager.h | 21 +- src/SUIT/SUIT_ViewWindow.cxx | 13 +- src/SUIT/SUIT_ViewWindow.h | 2 + src/SUITApp/{Makefile.in => Makefile.am} | 47 +- src/SUITApp/SUITApp.cxx | 16 +- src/SUITApp/SUITApp_Application.cxx | 15 + src/SUPERVGraph/Makefile.am | 53 + src/SUPERVGraph/Makefile.in | 59 - src/SUPERVGraph/SUPERVGraph_ViewFrame.h | 11 +- src/SVTK/{Makefile.in => Makefile.am} | 94 +- src/SVTK/SALOME_Actor.cxx | 2 +- src/SVTK/SALOME_Actor.h | 8 + src/SVTK/SVTK_Actor.cxx | 1 + src/SVTK/SVTK_Actor.h | 8 + src/SVTK/SVTK_CubeAxesActor2D.h | 8 + src/SVTK/SVTK_DeviceActor.cxx | 33 +- src/SVTK/SVTK_DeviceActor.h | 12 +- src/SVTK/SVTK_Event.h | 8 + src/SVTK/SVTK_Extension.cxx | 44 + src/SVTK/SVTK_Extension.h | 35 + src/SVTK/SVTK_FontWidget.h | 4 +- src/SVTK/SVTK_GenericRenderWindowInteractor.h | 7 + src/SVTK/SVTK_InteractorStyle.cxx | 371 +- src/SVTK/SVTK_InteractorStyle.h | 34 +- src/SVTK/SVTK_MainWindow.cxx | 67 +- src/SVTK/SVTK_MainWindow.h | 15 +- src/SVTK/SVTK_RectPicker.cxx | 19 +- src/SVTK/SVTK_RectPicker.h | 8 + src/SVTK/SVTK_RenderWindowInteractor.cxx | 84 +- src/SVTK/SVTK_RenderWindowInteractor.h | 13 +- src/SVTK/SVTK_Renderer.cxx | 14 +- src/SVTK/SVTK_Renderer.h | 16 +- src/SVTK/SVTK_Selector.cxx | 82 +- src/SVTK/SVTK_Selector.h | 17 +- src/SVTK/SVTK_SelectorDef.h | 15 + src/SVTK/SVTK_SetRotationPointDlg.cxx | 325 ++ src/SVTK/SVTK_SetRotationPointDlg.h | 110 + src/SVTK/SVTK_SpaceMouse.cxx | 7 + src/SVTK/SVTK_SpaceMouse.h | 6 + src/SVTK/SVTK_Trihedron.cxx | 8 +- src/SVTK/SVTK_View.cxx | 5 +- src/SVTK/SVTK_View.h | 3 +- src/SVTK/SVTK_ViewManager.cxx | 19 +- src/SVTK/SVTK_ViewManager.h | 7 - src/SVTK/SVTK_ViewModel.cxx | 13 +- src/SVTK/SVTK_ViewModel.h | 6 +- src/SVTK/SVTK_ViewWindow.cxx | 111 +- src/SVTK/SVTK_ViewWindow.h | 29 +- src/SVTK/resources/SVTK_msg_en.po | 41 + src/SalomeApp/Makefile.am | 110 + src/SalomeApp/Makefile.in | 98 - src/SalomeApp/SalomeApp_Application.cxx | 289 +- src/SalomeApp/SalomeApp_Application.h | 20 +- src/SalomeApp/SalomeApp_DataModel.cxx | 17 +- src/SalomeApp/SalomeApp_DataObject.cxx | 15 +- src/SalomeApp/SalomeApp_Displayer.cxx | 210 - src/SalomeApp/SalomeApp_ExceptionHandler.cxx | 35 +- .../SalomeApp_ExitDlg.cxx} | 82 +- .../SalomeApp_ExitDlg.h} | 46 +- src/SalomeApp/SalomeApp_Module.h | 2 +- src/SalomeApp/SalomeApp_Study.cxx | 27 +- src/SalomeApp/SalomeApp_Study.h | 3 + src/SalomeApp/SalomeApp_VisualState.cxx | 4 +- .../Test/{Makefile.in => Makefile.am} | 40 +- src/SalomeApp/resources/SalomeApp.ini | 24 +- src/SalomeApp/resources/SalomeApp.xml | 56 +- src/SalomeApp/resources/SalomeApp_msg_en.po | 32 +- src/Session/InquireServersQThread.h | 12 +- src/Session/Makefile.am | 77 + src/Session/Makefile.in | 69 - src/Session/SALOME_Session.hxx | 47 + src/Session/SALOME_Session_Server.cxx | 246 +- src/Session/SalomeApp_Engine_i.hxx | 10 +- src/Session/Session_ServerCheck.cxx | 34 +- src/Session/Session_ServerCheck.hxx | 8 +- src/Session/Session_ServerLauncher.cxx | 12 +- src/Session/Session_ServerLauncher.hxx | 13 +- src/Session/Session_ServerThread.cxx | 481 +- src/Session/Session_ServerThread.hxx | 6 +- src/Session/Session_Session_i.cxx | 34 +- src/Session/Session_Session_i.hxx | 13 +- src/Session/runSession | 27 - .../Makefile.in => Style/Makefile.am} | 43 +- src/Style/Makefile.in | 79 - src/Style/SalomeStyle.cxx | 36 +- src/Style/SalomeStyle.h | 2 +- src/TOOLSGUI/{Makefile.in => Makefile.am} | 59 +- src/TOOLSGUI/ToolsGUI_HelpWindow.h | 2 + src/TOOLSGUI/ToolsGUI_IntervalWindow.h | 2 + src/TOOLSGUI/ToolsGUI_RegWidget.cxx | 65 +- src/TOOLSGUI/ToolsGUI_RegWidget.h | 27 +- src/VTKViewer/Makefile.am | 117 + src/VTKViewer/Makefile.in | 102 - src/VTKViewer/VTKViewer.cxx | 4 - src/VTKViewer/VTKViewer_Actor.cxx | 6 +- src/VTKViewer/VTKViewer_Actor.h | 12 +- src/VTKViewer/VTKViewer_AppendFilter.cxx | 96 +- src/VTKViewer/VTKViewer_AppendFilter.h | 31 +- src/VTKViewer/VTKViewer_CellLocationsArray.h | 2 +- src/VTKViewer/VTKViewer_CellRectPicker.cxx | 443 -- src/VTKViewer/VTKViewer_CellRectPicker.h | 98 - src/VTKViewer/VTKViewer_ConvexTool.cxx | 507 +- src/VTKViewer/VTKViewer_ConvexTool.h | 104 +- .../VTKViewer_ExtractUnstructuredGrid.cxx | 35 +- .../VTKViewer_ExtractUnstructuredGrid.h | 14 +- src/VTKViewer/VTKViewer_GeometryFilter.cxx | 50 +- src/VTKViewer/VTKViewer_GeometryFilter.h | 20 +- src/VTKViewer/VTKViewer_InteractorStyle.h | 8 + src/VTKViewer/VTKViewer_PassThroughFilter.cxx | 19 +- src/VTKViewer/VTKViewer_PassThroughFilter.h | 3 +- src/VTKViewer/VTKViewer_RectPicker.cxx | 894 ---- src/VTKViewer/VTKViewer_RectPicker.h | 78 - src/VTKViewer/VTKViewer_ShrinkFilter.cxx | 29 +- src/VTKViewer/VTKViewer_ShrinkFilter.h | 10 +- src/VTKViewer/VTKViewer_TransformFilter.cxx | 23 +- src/VTKViewer/VTKViewer_TransformFilter.h | 3 +- src/VTKViewer/VTKViewer_Trihedron.cxx | 40 +- src/VTKViewer/VTKViewer_Trihedron.h | 18 +- src/VTKViewer/VTKViewer_Utilities.cxx | 135 + src/VTKViewer/VTKViewer_Utilities.h | 7 + src/VTKViewer/VTKViewer_VectorText.cxx | 3 +- src/VTKViewer/VTKViewer_VectorText.h | 7 +- src/VTKViewer/VTKViewer_ViewManager.cxx | 14 +- src/VTKViewer/VTKViewer_ViewManager.h | 7 - src/VTKViewer/VTKViewer_ViewModel.cxx | 11 + src/VTKViewer/VTKViewer_ViewWindow.cxx | 6 +- src/VTKViewer/resources/VTKViewer_images.po | 3 + src/VTKViewer/resources/VTKViewer_msg_en.po | 2 +- .../resources/view_rotation_point.png | Bin 0 -> 988 bytes 716 files changed, 27207 insertions(+), 29405 deletions(-) create mode 100644 AUTHORS create mode 100755 COPYING create mode 100644 ChangeLog create mode 100644 Makefile.am delete mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 adm_local/Makefile.am create mode 100644 adm_local/unix/Makefile.am create mode 100644 adm_local/unix/config_files/Makefile.am create mode 100644 adm_local/unix/config_files/check_QxGraphViewer.m4 delete mode 100644 adm_local/unix/make_commence.in create mode 100644 adm_local/unix/make_common_starter.am delete mode 100644 adm_local/unix/make_omniorb.in create mode 100644 bin/Makefile.am create mode 100755 clean_configure rename configure.in.base => configure.ac (64%) create mode 100644 doc/Makefile.am delete mode 100644 doc/Makefile.in rename adm_local/Makefile.in => doc/salome/Makefile.am (69%) delete mode 100644 doc/salome/Makefile.in delete mode 100755 doc/salome/gui/GUI/cshdat_robohelp.htm delete mode 100755 doc/salome/gui/GUI/cshdat_webhelp.htm delete mode 100755 doc/salome/gui/GUI/default.css delete mode 100755 doc/salome/gui/GUI/default_ns.css create mode 100755 doc/salome/gui/GUI/doxyfile.in delete mode 100755 doc/salome/gui/GUI/dump_study.htm delete mode 100755 doc/salome/gui/GUI/ehelp.xml delete mode 100755 doc/salome/gui/GUI/ehlpdhtm.js delete mode 100755 doc/salome/gui/GUI/geom_preferences.htm delete mode 100755 doc/salome/gui/GUI/i_blue.jpg create mode 100644 doc/salome/gui/GUI/images/batchmode.png create mode 100755 doc/salome/gui/GUI/images/cataloggenerator.png create mode 100644 doc/salome/gui/GUI/images/choicepage.png create mode 100644 doc/salome/gui/GUI/images/clipping.png rename doc/salome/gui/GUI/{ => images}/closestudy.png (100%) create mode 100755 doc/salome/gui/GUI/images/copy-paste.jpg create mode 100755 doc/salome/gui/GUI/images/dumpstudy.png create mode 100755 doc/salome/gui/GUI/images/geomview-alt.png create mode 100644 doc/salome/gui/GUI/images/graduatedaxes1.png create mode 100755 doc/salome/gui/GUI/images/icon_about.png create mode 100644 doc/salome/gui/GUI/images/image100.gif create mode 100644 doc/salome/gui/GUI/images/image102.gif create mode 100644 doc/salome/gui/GUI/images/image103.gif create mode 100644 doc/salome/gui/GUI/images/image105.gif create mode 100644 doc/salome/gui/GUI/images/image106.gif create mode 100644 doc/salome/gui/GUI/images/image108.gif create mode 100644 doc/salome/gui/GUI/images/image109.gif create mode 100644 doc/salome/gui/GUI/images/image157.gif rename doc/salome/gui/GUI/{ => images}/image54.jpg (100%) rename doc/salome/gui/GUI/{ => images}/image65.gif (100%) rename doc/salome/gui/GUI/{ => images}/image67.gif (100%) rename doc/salome/gui/GUI/{ => images}/image69.gif (100%) rename doc/salome/gui/GUI/{ => images}/image70.gif (100%) rename doc/salome/gui/GUI/{ => images}/image72.gif (100%) rename doc/salome/gui/GUI/{ => images}/image73.gif (100%) rename doc/salome/gui/GUI/{ => images}/image75.gif (100%) create mode 100644 doc/salome/gui/GUI/images/image77.gif create mode 100644 doc/salome/gui/GUI/images/image86.gif create mode 100644 doc/salome/gui/GUI/images/image88.gif create mode 100644 doc/salome/gui/GUI/images/image89.gif create mode 100644 doc/salome/gui/GUI/images/image91.gif rename doc/salome/gui/GUI/{ => images}/image94.gif (100%) create mode 100644 doc/salome/gui/GUI/images/image95.gif create mode 100644 doc/salome/gui/GUI/images/image96.gif create mode 100644 doc/salome/gui/GUI/images/image97.gif create mode 100644 doc/salome/gui/GUI/images/image98.gif create mode 100644 doc/salome/gui/GUI/images/image99.gif create mode 100755 doc/salome/gui/GUI/images/import.png create mode 100644 doc/salome/gui/GUI/images/intropage.png create mode 100755 doc/salome/gui/GUI/images/loadscript.png create mode 100755 doc/salome/gui/GUI/images/loadstudy2.png create mode 100755 doc/salome/gui/GUI/images/lockedstudy.png create mode 100755 doc/salome/gui/GUI/images/neo-view2.png create mode 100755 doc/salome/gui/GUI/images/newsticn.jpg rename doc/salome/gui/GUI/{ => images}/note1.gif (100%) create mode 100755 doc/salome/gui/GUI/images/objectbrowser1.png create mode 100755 doc/salome/gui/GUI/images/objectbrowser2.png create mode 100755 doc/salome/gui/GUI/images/open.jpg create mode 100644 doc/salome/gui/GUI/images/plot2d_clone.gif create mode 100644 doc/salome/gui/GUI/images/plot2d_legend.gif rename doc/salome/gui/GUI/{image71.gif => images/plot2d_lines.gif} (77%) mode change 100755 => 100644 create mode 100644 doc/salome/gui/GUI/images/plot2d_logarithmic_horizontal.gif create mode 100644 doc/salome/gui/GUI/images/plot2d_logarithmic_vertical.gif rename doc/salome/gui/GUI/{image68.gif => images/plot2d_points.gif} (72%) mode change 100755 => 100644 create mode 100644 doc/salome/gui/GUI/images/plot2d_settings.gif create mode 100644 doc/salome/gui/GUI/images/plot2d_splines.gif create mode 100644 doc/salome/gui/GUI/images/plot2d_view_settings.png create mode 100755 doc/salome/gui/GUI/images/ppref1.png create mode 100755 doc/salome/gui/GUI/images/ppref2.png create mode 100755 doc/salome/gui/GUI/images/ppref3.png create mode 100755 doc/salome/gui/GUI/images/pref11.png create mode 100755 doc/salome/gui/GUI/images/pref12.png create mode 100755 doc/salome/gui/GUI/images/pref13.png create mode 100755 doc/salome/gui/GUI/images/pref14.png create mode 100755 doc/salome/gui/GUI/images/pref15.png create mode 100755 doc/salome/gui/GUI/images/pref21.png create mode 100755 doc/salome/gui/GUI/images/pref22.png create mode 100644 doc/salome/gui/GUI/images/pref23.png create mode 100755 doc/salome/gui/GUI/images/pref24.png create mode 100755 doc/salome/gui/GUI/images/pref31.png create mode 100755 doc/salome/gui/GUI/images/pref33.png create mode 100755 doc/salome/gui/GUI/images/pref34.png create mode 100755 doc/salome/gui/GUI/images/pref37.png create mode 100755 doc/salome/gui/GUI/images/pref38.png create mode 100755 doc/salome/gui/GUI/images/pref39.png create mode 100755 doc/salome/gui/GUI/images/pref40.png create mode 100644 doc/salome/gui/GUI/images/productpage.png create mode 100644 doc/salome/gui/GUI/images/productpage1.png create mode 100644 doc/salome/gui/GUI/images/productpage2.png create mode 100644 doc/salome/gui/GUI/images/progresspage.png create mode 100644 doc/salome/gui/GUI/images/progresspage1.png create mode 100644 doc/salome/gui/GUI/images/readmepage.png create mode 100755 doc/salome/gui/GUI/images/registry1.png create mode 100755 doc/salome/gui/GUI/images/registry3.png create mode 100755 doc/salome/gui/GUI/images/registry4.png create mode 100755 doc/salome/gui/GUI/images/save.jpg create mode 100755 doc/salome/gui/GUI/images/selectcolor.png create mode 100755 doc/salome/gui/GUI/images/selectfont.png create mode 100644 doc/salome/gui/GUI/images/set_rotation_point_dialog1.png create mode 100644 doc/salome/gui/GUI/images/set_rotation_point_dialog2.png create mode 100755 doc/salome/gui/GUI/images/studyproperties.png create mode 100755 doc/salome/gui/GUI/images/updaterate.png create mode 100755 doc/salome/gui/GUI/images/urbutton.png create mode 100755 doc/salome/gui/GUI/images/view2.png create mode 100644 doc/salome/gui/GUI/images/view_rotation_point.png delete mode 100755 doc/salome/gui/GUI/index.htm delete mode 100755 doc/salome/gui/GUI/index_csh.htm delete mode 100755 doc/salome/gui/GUI/index_rhc.htm create mode 100644 doc/salome/gui/GUI/input/about_salome.doc create mode 100644 doc/salome/gui/GUI/input/creating_new_study.doc create mode 100644 doc/salome/gui/GUI/input/displaying_studies.doc create mode 100644 doc/salome/gui/GUI/input/editing_studies.doc create mode 100644 doc/salome/gui/GUI/input/geometry_preferences.doc create mode 100644 doc/salome/gui/GUI/input/getting_started.doc create mode 100644 doc/salome/gui/GUI/input/gui_module_chapter.doc create mode 100644 doc/salome/gui/GUI/input/index.doc create mode 100644 doc/salome/gui/GUI/input/installing_salome.doc create mode 100644 doc/salome/gui/GUI/input/intro_to_salome.doc create mode 100644 doc/salome/gui/GUI/input/introduction.doc create mode 100644 doc/salome/gui/GUI/input/introduction_to_gui.doc create mode 100644 doc/salome/gui/GUI/input/mesh_preferences.doc create mode 100644 doc/salome/gui/GUI/input/occ_3d_viewer.doc create mode 100644 doc/salome/gui/GUI/input/opening_studies.doc create mode 100644 doc/salome/gui/GUI/input/plot2d_viewer.doc create mode 100644 doc/salome/gui/GUI/input/postpro_preferences.doc create mode 100644 doc/salome/gui/GUI/input/running_salome.doc create mode 100644 doc/salome/gui/GUI/input/salome_architecture.doc create mode 100644 doc/salome/gui/GUI/input/salome_desktop.doc create mode 100644 doc/salome/gui/GUI/input/salome_preferences.doc create mode 100644 doc/salome/gui/GUI/input/saving_and_closing_studies.doc create mode 100644 doc/salome/gui/GUI/input/select_color_and_font.doc create mode 100644 doc/salome/gui/GUI/input/setting_preferences.doc create mode 100644 doc/salome/gui/GUI/input/setting_preferences_chapter.doc create mode 100644 doc/salome/gui/GUI/input/setting_study_properties.doc create mode 100644 doc/salome/gui/GUI/input/study_management_chapter.doc create mode 100644 doc/salome/gui/GUI/input/using_catalog_generator.doc create mode 100644 doc/salome/gui/GUI/input/using_object_browser.doc create mode 100644 doc/salome/gui/GUI/input/using_registry_tool.doc create mode 100644 doc/salome/gui/GUI/input/viewers_chapter.doc create mode 100644 doc/salome/gui/GUI/input/vtk_3d_viewer.doc create mode 100644 doc/salome/gui/GUI/input/working_with_python_scripts.doc delete mode 100755 doc/salome/gui/GUI/introduction_to_gui.htm delete mode 100755 doc/salome/gui/GUI/kernel.log create mode 100644 doc/salome/gui/GUI/kernel/application.png create mode 100644 doc/salome/gui/GUI/kernel/batchmode.png create mode 100644 doc/salome/gui/GUI/kernel/choicepage.png create mode 100644 doc/salome/gui/GUI/kernel/introduction.bak create mode 100644 doc/salome/gui/GUI/kernel/intropage.png create mode 100644 doc/salome/gui/GUI/kernel/logocorp.png create mode 100644 doc/salome/gui/GUI/kernel/productpage.png create mode 100644 doc/salome/gui/GUI/kernel/productpage1.png create mode 100644 doc/salome/gui/GUI/kernel/productpage2.png create mode 100644 doc/salome/gui/GUI/kernel/progresspage.png create mode 100644 doc/salome/gui/GUI/kernel/progresspage1.png create mode 100644 doc/salome/gui/GUI/kernel/readmepage.png delete mode 100755 doc/salome/gui/GUI/mesh_preferences.htm create mode 100644 doc/salome/gui/GUI/pics/clipping.png create mode 100644 doc/salome/gui/GUI/pics/graduatedaxes1.png create mode 100644 doc/salome/gui/GUI/pics/image100.gif create mode 100644 doc/salome/gui/GUI/pics/image102.gif create mode 100644 doc/salome/gui/GUI/pics/image103.gif create mode 100644 doc/salome/gui/GUI/pics/image105.gif create mode 100644 doc/salome/gui/GUI/pics/image106.gif create mode 100644 doc/salome/gui/GUI/pics/image108.gif create mode 100644 doc/salome/gui/GUI/pics/image109.gif create mode 100644 doc/salome/gui/GUI/pics/image157.gif create mode 100644 doc/salome/gui/GUI/pics/image77.gif create mode 100644 doc/salome/gui/GUI/pics/image86.gif create mode 100644 doc/salome/gui/GUI/pics/image88.gif create mode 100644 doc/salome/gui/GUI/pics/image89.gif create mode 100644 doc/salome/gui/GUI/pics/image91.gif create mode 100644 doc/salome/gui/GUI/pics/image95.gif create mode 100644 doc/salome/gui/GUI/pics/image96.gif create mode 100644 doc/salome/gui/GUI/pics/image97.gif create mode 100644 doc/salome/gui/GUI/pics/image98.gif create mode 100644 doc/salome/gui/GUI/pics/image99.gif create mode 100755 doc/salome/gui/GUI/pics/ppref1.png create mode 100755 doc/salome/gui/GUI/pics/ppref2.png create mode 100755 doc/salome/gui/GUI/pics/ppref3.png create mode 100644 doc/salome/gui/GUI/pics/set_rotation_point_dialog1.png create mode 100644 doc/salome/gui/GUI/pics/set_rotation_point_dialog2.png create mode 100644 doc/salome/gui/GUI/pics/view_rotation_point.png delete mode 100755 doc/salome/gui/GUI/post-pro_preferences.htm delete mode 100755 doc/salome/gui/GUI/robohhre.lng delete mode 100755 doc/salome/gui/GUI/select_color_and_font.htm delete mode 100755 doc/salome/gui/GUI/setting_preferences.htm delete mode 100755 doc/salome/gui/GUI/ss_btn_related_topics.gif create mode 100755 doc/salome/gui/GUI/static/footer.html create mode 100755 doc/salome/gui/GUI/static/header.html delete mode 100755 doc/salome/gui/GUI/texture_horiz_ltbluebubbles.jpg delete mode 100755 doc/salome/gui/GUI/tip1.gif delete mode 100755 doc/salome/gui/GUI/webhelp.cab delete mode 100755 doc/salome/gui/GUI/webhelp.jar delete mode 100755 doc/salome/gui/GUI/whcsh_home.htm delete mode 100755 doc/salome/gui/GUI/whcshdata.htm delete mode 100755 doc/salome/gui/GUI/whd_dpns.htm delete mode 100755 doc/salome/gui/GUI/whd_hide0.gif delete mode 100755 doc/salome/gui/GUI/whd_hide1.gif delete mode 100755 doc/salome/gui/GUI/whd_hide2.gif delete mode 100755 doc/salome/gui/GUI/whd_next0.gif delete mode 100755 doc/salome/gui/GUI/whd_next1.gif delete mode 100755 doc/salome/gui/GUI/whd_next2.gif delete mode 100755 doc/salome/gui/GUI/whd_nvp10.htm delete mode 100755 doc/salome/gui/GUI/whd_nvp20.htm delete mode 100755 doc/salome/gui/GUI/whd_prev0.gif delete mode 100755 doc/salome/gui/GUI/whd_prev1.gif delete mode 100755 doc/salome/gui/GUI/whd_prev2.gif delete mode 100755 doc/salome/gui/GUI/whd_show0.gif delete mode 100755 doc/salome/gui/GUI/whd_show1.gif delete mode 100755 doc/salome/gui/GUI/whd_show2.gif delete mode 100755 doc/salome/gui/GUI/whd_sync0.gif delete mode 100755 doc/salome/gui/GUI/whd_sync1.gif delete mode 100755 doc/salome/gui/GUI/whd_sync2.gif delete mode 100755 doc/salome/gui/GUI/whd_tab0.gif delete mode 100755 doc/salome/gui/GUI/whd_tab1.gif delete mode 100755 doc/salome/gui/GUI/whd_tab2.gif delete mode 100755 doc/salome/gui/GUI/whd_tab3.gif delete mode 100755 doc/salome/gui/GUI/whd_tab4.gif delete mode 100755 doc/salome/gui/GUI/whd_tab5.gif delete mode 100755 doc/salome/gui/GUI/whd_tab6.gif delete mode 100755 doc/salome/gui/GUI/whd_tab7.gif delete mode 100755 doc/salome/gui/GUI/whd_tab8.gif delete mode 100755 doc/salome/gui/GUI/whd_tabs.htm delete mode 100755 doc/salome/gui/GUI/whd_toc1.gif delete mode 100755 doc/salome/gui/GUI/whd_toc2.gif delete mode 100755 doc/salome/gui/GUI/whd_toc3.gif delete mode 100755 doc/salome/gui/GUI/whd_toc4.gif delete mode 100755 doc/salome/gui/GUI/whd_topic.xml delete mode 100755 doc/salome/gui/GUI/whd_wbsh0.gif delete mode 100755 doc/salome/gui/GUI/whd_wbsh1.gif delete mode 100755 doc/salome/gui/GUI/whd_wbsh2.gif delete mode 100755 doc/salome/gui/GUI/whfbody.htm delete mode 100755 doc/salome/gui/GUI/whfdhtml.htm delete mode 100755 doc/salome/gui/GUI/whfform.htm delete mode 100755 doc/salome/gui/GUI/whfhost.js delete mode 100755 doc/salome/gui/GUI/whform.js delete mode 100755 doc/salome/gui/GUI/whframes.js delete mode 100755 doc/salome/gui/GUI/whgbody.htm delete mode 100755 doc/salome/gui/GUI/whgdef.htm delete mode 100755 doc/salome/gui/GUI/whgdhtml.htm delete mode 100755 doc/salome/gui/GUI/whghost.js delete mode 100755 doc/salome/gui/GUI/whhost.js delete mode 100755 doc/salome/gui/GUI/whibody.htm delete mode 100755 doc/salome/gui/GUI/whidhtml.htm delete mode 100755 doc/salome/gui/GUI/whiform.htm delete mode 100755 doc/salome/gui/GUI/whihost.js delete mode 100755 doc/salome/gui/GUI/whlang.js delete mode 100755 doc/salome/gui/GUI/whmozemu.js delete mode 100755 doc/salome/gui/GUI/whmsg.js delete mode 100755 doc/salome/gui/GUI/whnjs.htm delete mode 100755 doc/salome/gui/GUI/whphost.js delete mode 100755 doc/salome/gui/GUI/whproj.htm delete mode 100755 doc/salome/gui/GUI/whproj.js delete mode 100755 doc/salome/gui/GUI/whproj.xml delete mode 100755 doc/salome/gui/GUI/whproxy.js delete mode 100755 doc/salome/gui/GUI/whres.xml delete mode 100755 doc/salome/gui/GUI/whskin_blank.htm delete mode 100755 doc/salome/gui/GUI/whskin_homepage.htm delete mode 100755 doc/salome/gui/GUI/whskin_info.htm delete mode 100755 doc/salome/gui/GUI/whskin_pickup.htm delete mode 100755 doc/salome/gui/GUI/whskin_tw.htm delete mode 100755 doc/salome/gui/GUI/whstart.js delete mode 100755 doc/salome/gui/GUI/whstub.js delete mode 100755 doc/salome/gui/GUI/whtdhtml.htm delete mode 100755 doc/salome/gui/GUI/whthost.js delete mode 100755 doc/salome/gui/GUI/whtopic.js delete mode 100755 doc/salome/gui/GUI/whutils.js delete mode 100755 doc/salome/gui/GUI/whver.js rename doc/salome/gui/{Makefile.in => Makefile.am} (71%) rename doc/salome/tui/{Makefile.in => Makefile.am} (78%) create mode 100644 idl/Makefile.am create mode 100644 resources/Makefile.am rename src/CAF/{Makefile.in => Makefile.am} (55%) create mode 100755 src/CAM/Makefile.am create mode 100644 src/CASCatch/CASCatch.hxx create mode 100644 src/CASCatch/CASCatch_CatchSignals.cxx create mode 100644 src/CASCatch/CASCatch_CatchSignals.hxx create mode 100644 src/CASCatch/CASCatch_ErrorHandler.cxx create mode 100644 src/CASCatch/CASCatch_ErrorHandler.hxx create mode 100644 src/CASCatch/CASCatch_Failure.cxx create mode 100644 src/CASCatch/CASCatch_Failure.hxx create mode 100644 src/CASCatch/Makefile.am rename src/DDS/{Makefile.in => Makefile.am} (80%) rename src/Event/{Makefile.in => Makefile.am} (77%) create mode 100644 src/GLViewer/Makefile.am delete mode 100644 src/GLViewer/Makefile.in create mode 100644 src/LightApp/LightApp_EventFilter.cxx rename src/{SalomeApp/SalomeApp_Displayer.h => LightApp/LightApp_EventFilter.h} (54%) create mode 100755 src/LightApp/Makefile.am delete mode 100755 src/LightApp/Makefile.in rename src/LogWindow/{Makefile.in => Makefile.am} (70%) create mode 100755 src/Makefile.am delete mode 100755 src/Makefile.in create mode 100755 src/OBJECT/Makefile.am delete mode 100755 src/OBJECT/Makefile.in create mode 100755 src/OCCViewer/Makefile.am delete mode 100755 src/OCCViewer/Makefile.in create mode 100644 src/OCCViewer/OCCViewer_SetRotationPointDlg.cxx create mode 100644 src/OCCViewer/OCCViewer_SetRotationPointDlg.h create mode 100755 src/OCCViewer/OCCViewer_ViewSketcher.cxx create mode 100755 src/OCCViewer/OCCViewer_ViewSketcher.h create mode 100755 src/OCCViewer/resources/view_rotation_point.png rename src/{CAM/Makefile.in => ObjBrowser/Makefile.am} (55%) create mode 100644 src/ObjBrowser/OB_FindDlg.cxx create mode 100644 src/ObjBrowser/OB_FindDlg.h create mode 100644 src/ObjBrowser/OB_ObjSearch.cxx create mode 100644 src/ObjBrowser/OB_ObjSearch.h create mode 100755 src/Plot2d/Makefile.am delete mode 100755 src/Plot2d/Makefile.in create mode 100644 src/Plot2d/Plot2d_ToolTip.cxx create mode 100644 src/Plot2d/Plot2d_ToolTip.h delete mode 100755 src/Plot2d/resources/plot2d_rotate.png rename src/Prs/{Makefile.in => Makefile.am} (73%) rename src/PyInterp/{Makefile.in => Makefile.am} (68%) rename src/PythonConsole/{Makefile.in => Makefile.am} (60%) rename src/QDS/{Makefile.in => Makefile.am} (64%) create mode 100644 src/QDS/QDS_Table.cxx create mode 100644 src/QDS/QDS_Table.h create mode 100755 src/Qtx/Makefile.am delete mode 100755 src/Qtx/Makefile.in create mode 100755 src/QxGraph/Makefile.am create mode 100644 src/QxGraph/QxGraph.h create mode 100644 src/QxGraph/QxGraph_ActiveItem.h create mode 100644 src/QxGraph/QxGraph_Canvas.cxx create mode 100644 src/QxGraph/QxGraph_Canvas.h create mode 100644 src/QxGraph/QxGraph_CanvasView.cxx create mode 100644 src/QxGraph/QxGraph_CanvasView.h create mode 100644 src/QxGraph/QxGraph_Def.h create mode 100644 src/QxGraph/QxGraph_Prs.cxx create mode 100644 src/QxGraph/QxGraph_Prs.h create mode 100644 src/QxGraph/QxGraph_ViewManager.cxx create mode 100644 src/QxGraph/QxGraph_ViewManager.h create mode 100644 src/QxGraph/QxGraph_ViewModel.cxx create mode 100644 src/QxGraph/QxGraph_ViewModel.h create mode 100644 src/QxGraph/QxGraph_ViewWindow.cxx create mode 100644 src/QxGraph/QxGraph_ViewWindow.h create mode 100644 src/QxGraph/resources/QxGraph_images.po create mode 100644 src/QxGraph/resources/QxGraph_msg_en.po create mode 100755 src/QxGraph/resources/view_fitall.png create mode 100755 src/QxGraph/resources/view_fitarea.png create mode 100755 src/QxGraph/resources/view_glpan.png create mode 100644 src/QxGraph/resources/view_pan.png create mode 100644 src/QxGraph/resources/view_reset.png create mode 100755 src/QxGraph/resources/view_zoom.png rename src/RegistryDisplay/{Makefile.in => Makefile.am} (63%) rename src/ResExporter/{Makefile.in => Makefile.am} (74%) rename src/SALOME_PY/{Makefile.in => Makefile.am} (56%) rename src/SALOME_PYQT/{Makefile.in => Makefile.am} (88%) rename src/SALOME_PYQT/SALOME_PYQT_GUI/{Makefile.in => Makefile.am} (53%) create mode 100644 src/SALOME_PYQT/SalomePyQt/Makefile.am delete mode 100644 src/SALOME_PYQT/SalomePyQt/Makefile.in create mode 100755 src/SALOME_SWIG/Help.py create mode 100755 src/SALOME_SWIG/Makefile.am delete mode 100755 src/SALOME_SWIG/Makefile.in create mode 100755 src/SALOME_SWIG/PyInterp.py create mode 100755 src/SALOME_SWIG/salome.py delete mode 100755 src/SALOME_SWIG/supervisionexample.py delete mode 100755 src/SALOME_SWIG/supervisiongeomexample.py delete mode 100755 src/SALOME_SWIG/testattr.py rename src/SOCC/{Makefile.in => Makefile.am} (58%) create mode 100644 src/SPlot2d/Makefile.am delete mode 100644 src/SPlot2d/Makefile.in create mode 100644 src/SPlot2d/SPlot2d_ViewWindow.cxx create mode 100644 src/SPlot2d/SPlot2d_ViewWindow.h rename src/SPlot2d/{ => resources}/SPlot2d_msg_en.po (100%) create mode 100755 src/STD/Makefile.am delete mode 100755 src/STD/Makefile.in create mode 100755 src/SUIT/Makefile.am delete mode 100755 src/SUIT/Makefile.in create mode 100644 src/SUIT/SUIT_MsgDlg.cxx create mode 100644 src/SUIT/SUIT_MsgDlg.h rename src/SUITApp/{Makefile.in => Makefile.am} (52%) create mode 100755 src/SUPERVGraph/Makefile.am delete mode 100755 src/SUPERVGraph/Makefile.in rename src/SVTK/{Makefile.in => Makefile.am} (58%) create mode 100755 src/SVTK/SVTK_Extension.cxx create mode 100755 src/SVTK/SVTK_Extension.h create mode 100755 src/SVTK/SVTK_SetRotationPointDlg.cxx create mode 100755 src/SVTK/SVTK_SetRotationPointDlg.h create mode 100755 src/SalomeApp/Makefile.am delete mode 100755 src/SalomeApp/Makefile.in delete mode 100644 src/SalomeApp/SalomeApp_Displayer.cxx rename src/{STD/STD_CloseDlg.cxx => SalomeApp/SalomeApp_ExitDlg.cxx} (53%) rename src/{STD/STD_CloseDlg.h => SalomeApp/SalomeApp_ExitDlg.h} (53%) rename src/SalomeApp/Test/{Makefile.in => Makefile.am} (65%) create mode 100755 src/Session/Makefile.am delete mode 100755 src/Session/Makefile.in create mode 100755 src/Session/SALOME_Session.hxx delete mode 100755 src/Session/runSession rename src/{ObjBrowser/Makefile.in => Style/Makefile.am} (63%) mode change 100755 => 100644 delete mode 100644 src/Style/Makefile.in rename src/TOOLSGUI/{Makefile.in => Makefile.am} (52%) create mode 100755 src/VTKViewer/Makefile.am delete mode 100755 src/VTKViewer/Makefile.in delete mode 100755 src/VTKViewer/VTKViewer_CellRectPicker.cxx delete mode 100755 src/VTKViewer/VTKViewer_CellRectPicker.h delete mode 100755 src/VTKViewer/VTKViewer_RectPicker.cxx delete mode 100755 src/VTKViewer/VTKViewer_RectPicker.h create mode 100755 src/VTKViewer/resources/view_rotation_point.png diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..e69de29bb diff --git a/COPYING b/COPYING new file mode 100755 index 000000000..b1e3f5a26 --- /dev/null +++ b/COPYING @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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, or (at your option) any later version. + + 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 + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..e69de29bb diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..62e21b1b5 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,56 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Patrick GOLDBRONN (CEA) +# Date : 28/06/2001 +# $Header$ +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +if GUI_ENABLE_CORBA + IDLDIR = idl +else !GUI_ENABLE_CORBA + IDLDIR = +endif + +SUBDIRS = $(IDLDIR) adm_local resources src doc bin + +DIST_SUBDIRS = idl adm_local resources src doc bin + +DISTCLEANFILES = a.out aclocal.m4 configure + +salomeinclude_DATA=GUI_version.h + +EXTRA_DIST+= \ + build_configure \ + clean_configure \ + LICENCE + +dist-hook: + rm -rf `find $(distdir) -name CVS` + +usr_docs: + (cd doc && $(MAKE) $(AM_MAKEFLAGS) usr_docs) + +docs:usr_docs + +dev_docs: + (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs) diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 81a618ac4..000000000 --- a/Makefile.in +++ /dev/null @@ -1,194 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 28/06/2001 -# $Header$ -# - -# source path -top_srcdir=@top_srcdir@ -top_builddir=. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/bin:./bin/salome:@top_srcdir@/resources:./bin:@top_srcdir@/idl - - -@COMMENCE@ - -SUBDIRS = src doc adm_local - -RESOURCES_FILES = \ -back.xpm \ -cascade.png \ -close.png \ -default.png \ -dl_delete.png \ -dl_insert.png \ -dl_moveup.png \ -dl_movedown.png \ -forward.xpm \ -help.png \ -home.xpm \ -new.png \ -open.png \ -print.png \ -reset.png \ -save.png \ -select1.png \ -tile.png \ -Tools_en.xml \ -view_back.png \ -view_bottom.png \ -view_camera_dump.png \ -view_fitall.png \ -view_fitarea.png \ -view_front.png \ -view_glpan.png \ -view_left.png \ -view_pan.png \ -view_reset.png \ -view_right.png \ -view_rotate.png \ -view_top.png \ -view_triedre.png \ -view_zoom.png \ -copy.png \ -paste.png \ -plot2d_dump.png \ -plot2d_fitall.png \ -plot2d_fitarea.png \ -plot2d_legend.png \ -plot2d_linear.png \ -plot2d_linear_y.png \ -plot2d_lines.png \ -plot2d_log.png \ -plot2d_log_y.png \ -plot2d_pan.png \ -plot2d_points.png \ -plot2d_settings.png \ -plot2d_splines.png \ -plot2d_zoom.png \ -uc_add.png \ -uc_current.png \ -uc_del.png \ -uc_new.png \ -uc_clear.png \ -channel.cfg \ - -BIN_SCRIPT= VERSION \ -runLightSalome.csh \ -runLightSalome.sh - -# copy header files in common directory -OWN_CONFIG_H=@OWN_CONFIG_H@ - -include_list = include/salome/SALOMEconfig.h \ - include/salome/GUI_version.h - -ifeq ($(OWN_CONFIG_H),yes) - include_list += include/salome/config.h -endif - -ifneq ($(HAVE_SSTREAM),yes) - include_list += include/salome/sstream -endif - -inc: idl $(include_list) - -bin: bin/salome/VERSION - -bin/salome/VERSION : bin/VERSION - -$(RM) $@ - $(LN_S) ../../$< $@ - -include/salome/SALOMEconfig.h: salome_adm/unix/SALOMEconfig.ref - -$(RM) $@ - $(LN_S) ../../$< $@ - -# test if SALOMEconfig.h has changed (contents) -salome_adm/unix/SALOMEconfig.ref: salome_adm/unix/SALOMEconfig.h - @if ! [ -a $@ ]; then \ - cp -p $< $@; \ - fi; \ - if ! cmp $< $@; then \ - cp -p $< $@; \ - fi; \ - -include/salome/config.h: salome_adm/unix/config.h - -$(RM) $@ - $(LN_S) ../../$< $@ - -include/salome/sstream: salome_adm/unix/sstream - -$(RM) $@ - $(LN_S) ../../$< $@ - -include/salome/GUI_version.h: GUI_version.h - -$(RM) $@ - $(LN_S) ../../$< $@ - -depend: -#depend: depend_idl -#depend_idl: -# (cd idl ; $(MAKE) $@) || exit 1 - -# doc is already build : if you want to had documents, go manually to doc and run 'make doc' -#doc: -# (cd doc && $(MAKE) $@) || exit 1 - -# Install make_commence make_conclude ... for other modules -install-make: - ($(INSTALL) -d $(incmakedir) || exit 1); - (sed 's/^prefix=/#prefix=/' $(top_builddir)/adm_local/unix/make_commence > $(incmakedir)/make_commence || exit 1); - - -install-end: -# finish libtool install -# @$(LT) --mode=finish $(libdir) - -install-include: $(include_list) - $(INSTALL) -d $(includedir) - @for f in X $(include_list); do \ - if test $$f != X; then \ - (cp -p $$f $(includedir) || exit 1); \ - fi; \ - done - -# install script in $(bindir) : -install-bin: $(BIN_SCRIPT) - $(INSTALL) -d $(bindir) - $(INSTALL_PROGRAM) $^ $(bindir) - -uninstall: -#uninstall: uninstall-idl -#uninstall-idl: -# $(RM) $(idldir)/*.idl - -distclean: distclean-other - -distclean-other: - -$(RM) salome_adm/unix/*~ salome_adm/unix/*% salome_adm/unix/*.bak salome_adm/unix/*.new salome_adm/unix/*.old - -$(RM) salome_adm/unix/make_* - -$(RM) salome_adm/unix/depend salome_adm/unix/SALOMEconfig.h salome_adm/unix/config.h - -$(RM) config.cache config.log config.status - -@MODULE@ - -install: install-bin install-include install-make install-end - diff --git a/NEWS b/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/README b/README new file mode 100644 index 000000000..e69de29bb diff --git a/adm_local/Makefile.am b/adm_local/Makefile.am new file mode 100644 index 000000000..7ae83a6fc --- /dev/null +++ b/adm_local/Makefile.am @@ -0,0 +1,19 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +SUBDIRS = unix diff --git a/adm_local/unix/Makefile.am b/adm_local/unix/Makefile.am new file mode 100644 index 000000000..f9243d2f5 --- /dev/null +++ b/adm_local/unix/Makefile.am @@ -0,0 +1,25 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SUBDIRS = config_files + +# this is for LIGHT module compatibility +dist_admlocalunix_DATA=make_conclude.in \ No newline at end of file diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am new file mode 100644 index 000000000..de8790b70 --- /dev/null +++ b/adm_local/unix/config_files/Makefile.am @@ -0,0 +1,40 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +dist_admlocalm4_DATA=\ +check_disable_Corba.m4 \ +check_GLViewer.m4 \ +check_GUI.m4 \ +check_msg2qm.m4 \ +check_OCCViewer.m4 \ +check_opengl.m4 \ +check_Plot2dViewer.m4 \ +check_PyConsole.m4 \ +check_pyqt.m4 \ +check_qt.m4 \ +check_qwt.m4 \ +check_SalomeObject.m4 \ +check_sip.m4 \ +check_SupervGraphViewer.m4 \ +check_vtk.m4 \ +check_VTKViewer.m4 \ +check_corba_in_GUI.m4 \ +check_QxGraphViewer.m4 \ +README diff --git a/adm_local/unix/config_files/check_GUI.m4 b/adm_local/unix/config_files/check_GUI.m4 index ff090e7b9..e0b0e24ae 100755 --- a/adm_local/unix/config_files/check_GUI.m4 +++ b/adm_local/unix/config_files/check_GUI.m4 @@ -27,14 +27,14 @@ if test "x${SALOME_GUI_DIR}" = "x" ; then # search Salome binaries in PATH variable AC_PATH_PROG(TEMP, $1) if test "x${TEMP}" != "x" ; then - AC_MSG_RESULT(libLightApp.so was found at : ${TEMP}) + AC_MSG_RESULT($1 was found at : ${TEMP}) SALOME_BIN_DIR=`dirname ${TEMP}` SALOME_GUI_DIR=`cd ${SALOME_BIN_DIR}/../..; pwd` fi fi fi -if test -f ${SALOME_GUI_DIR}/lib${LIB_LOCATION_SUFFIX}/salome/$1 ; then +if test -f ${SALOME_GUI_DIR}/bin/salome/$1 ; then SalomeGUI_ok=yes AC_MSG_RESULT(Using SALOME GUI distribution in ${SALOME_GUI_DIR}) @@ -58,6 +58,6 @@ AC_MSG_RESULT(for $2: ${SalomeGUI_ok}) ])dnl AC_DEFUN([CHECK_SALOME_GUI],[ - CHECK_GUI([libLightApp.so], + CHECK_GUI([SUITApp], [SALOME GUI]) -])dnl \ No newline at end of file +])dnl diff --git a/adm_local/unix/config_files/check_QxGraphViewer.m4 b/adm_local/unix/config_files/check_QxGraphViewer.m4 new file mode 100644 index 000000000..1ef9f7314 --- /dev/null +++ b/adm_local/unix/config_files/check_QxGraphViewer.m4 @@ -0,0 +1,25 @@ +# +# Check configure option --disable-qxGraphViewer=[yes|no|DIR] taking into account that +# DISABLE_QXGRAPHVIEWER may be already set during build_configure, +# Set DISABLE_QXGRAPHVIEWER to yes|no +# +# Author : Edawrd AGAPOV (OCC, 2005) +# + +AC_DEFUN([CHECK_QXGRAPHVIEWER],[ + +AC_ARG_WITH(qxGraphViewer, + [ --disable-qxGraphViewer default=no ], + disable_qxGraphViewer="$withval",disable_qxGraphViewer="${DISABLE_QXGRAPHVIEWER}") + +case $disable_qxGraphViewer in + yes) +# AC_MSG_RESULT(************************************************) +# AC_MSG_RESULT(******* DISABLE QxGraphViewer configuration ********) +# AC_MSG_RESULT(************************************************) + DISABLE_QXGRAPHVIEWER="yes" + AC_SUBST(DISABLE_QXGRAPHVIEWER) +esac + + +])dnl diff --git a/adm_local/unix/config_files/check_corba_in_GUI.m4 b/adm_local/unix/config_files/check_corba_in_GUI.m4 index 20be4514f..381bf3b7d 100755 --- a/adm_local/unix/config_files/check_corba_in_GUI.m4 +++ b/adm_local/unix/config_files/check_corba_in_GUI.m4 @@ -4,7 +4,7 @@ #------------------------------------------------------------ AC_DEFUN([CHECK_CORBA_IN_GUI],[ - CHECK_GUI([libSalomeApp.so], + CHECK_GUI([SALOME_Session_Server], [CORBA SALOME GUI]) CORBA_IN_GUI=${SalomeGUI_ok} AC_SUBST(CORBA_IN_GUI) diff --git a/adm_local/unix/config_files/check_opengl.m4 b/adm_local/unix/config_files/check_opengl.m4 index 8a56e0f54..a1eb48ee2 100644 --- a/adm_local/unix/config_files/check_opengl.m4 +++ b/adm_local/unix/config_files/check_opengl.m4 @@ -162,6 +162,40 @@ if test "x${OpenGL_libs_ok}" = "xyes" ; then break fi done + + # workaround a problem with libGL library location + for idir in $dirs; do + if test -r "${idir}/libGLU.la"; then + GLU_LA_PATH="${idir}/libGLU.la" + GL_LA_PATH_TO_CHECK=`cat ${GLU_LA_PATH} | awk '{ for(i=1;i0) print $i } }'` + if test -z ${GL_LA_PATH_TO_CHECK} || test -r ${GL_LA_PATH_TO_CHECK}; then + # nothing to do + break + fi + for jdir in $dirs; do + if test -r "${jdir}/libGL.la"; then + GL_LA_PATH="${jdir}/libGL.la" + # copy the libGLU.la file and set correct libGL.la path in it + NEW_GLU_LA_PATH=${ROOT_BUILDDIR} + NEW_GLU_LA_FILE="${NEW_GLU_LA_PATH}/libGLU.la" + sed -e "s%${GL_LA_PATH_TO_CHECK}%${GL_LA_PATH}%" ${GLU_LA_PATH} > "${NEW_GLU_LA_FILE}" + chmod -f --reference=${GLU_LA_PATH} "${NEW_GLU_LA_FILE}" + # set a new libGLU.la path + GLU_LIB_PATH="-L${NEW_GLU_LA_PATH}" + # create a simbolic link to libGLU.so + for kdir in $dirs; do + if test -r "${kdir}/libGLU.so"; then + cp -fs "${kdir}/libGLU.so" "${NEW_GLU_LA_PATH}/libGLU.so" + break + fi + done + break + fi + done + break + fi + done + LDFLAGS_old="${LDFLAGS}" LDFLAGS="${LDFLAGS} ${OGL_LIBS} ${GLU_LIB_PATH}" AC_CHECK_LIB([GLU], @@ -193,3 +227,4 @@ AC_SUBST(OGL_LIBS) AC_LANG_RESTORE ])dnl + diff --git a/adm_local/unix/config_files/check_pyqt.m4 b/adm_local/unix/config_files/check_pyqt.m4 index 7be124e24..f63479879 100644 --- a/adm_local/unix/config_files/check_pyqt.m4 +++ b/adm_local/unix/config_files/check_pyqt.m4 @@ -49,6 +49,16 @@ if test "x$pyqt_uic_ok" == "xno"; then fi fi fi +if test "x$pyqt_uic_ok" == "xno"; then + dnl try in $PATH + AC_PATH_PROG(PYUIC, pyuic) + if test "x$PYUIC" != x; then + PYQTDIR=$PYUIC + PYQTDIR=`dirname $PYQTDIR` + PYQTDIR=`dirname $PYQTDIR` + pyqt_uic_ok=yes + fi +fi if test "x$pyqt_uic_ok" == "xno"; then dnl try ${SIPDIR} if test "x${SIPDIR}" != "x"; then @@ -106,8 +116,8 @@ if test "x${PYQTDIR}" != "x"; then fi fi if test "x$pyqt_lib_ok" == "xno"; then - dnl try {PYQTDIR}/lib - if test -d {PYQTDIR}/lib; then + dnl try ${PYQTDIR}/lib + if test -d ${PYQTDIR}/lib; then AC_CHECK_FILE(${PYQTDIR}/lib/libqtcmodule.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) if test "x$pyqt_lib_ok" == "xyes"; then PYQT_LIBS="-L${PYQTDIR}/lib -lqtcmodule" @@ -120,8 +130,8 @@ if test "x${PYQTDIR}" != "x"; then fi fi if test "x$pyqt_lib_ok" == "xno"; then - dnl try {PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages - if test -d {PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages; then + dnl try ${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages + if test -d ${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages; then AC_CHECK_FILE(${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/libqtcmodule.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) if test "x$pyqt_lib_ok" == "xyes"; then PYQT_LIBS="-L${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages -lqtcmodule" @@ -220,6 +230,17 @@ if test "x$pyqt_sips_ok" == "xno"; then fi fi fi +if test "x$pyqt_sips_ok" == "xno"; then + dnl try ${PYQTDIR}/share/sip/qt + if test "x${PYQTDIR}" != "x"; then + if test -d ${PYQTDIR}/share/sip/qt ; then + AC_CHECK_FILE(${PYQTDIR}/share/sip/qt/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) + if test "x$pyqt_sips_ok" == "xyes"; then + PYQT_SIPS="${PYQTDIR}/share/sip/qt" + fi + fi + fi +fi if test "x$pyqt_sips_ok" == "xno"; then dnl try ${SIPDIR}/sip if test "x${SIPDIR}" != "x"; then @@ -291,12 +312,16 @@ else CXXFLAGS=$CXXFLAGS_old LIBS=$LIBS_old fi +# get latest Qt version supported +QT_VERS=`grep -e "[[[:space:]]]*Qt_[[[:digit:]_]]\+}" ${PYQT_SIPS}/versions.sip | sed -e "s/\(.*\)[[[:space:]]]*\(Qt_[[[:digit:]_]]\+\)}/\2/g"` +AC_MSG_RESULT(Latest Qt version supported by PyQt is $QT_VERS) AC_SUBST(PYQT_INCLUDES) AC_SUBST(PYQT_LIBS) AC_SUBST(PYQT_SIPS) AC_SUBST(PYUIC) AC_SUBST(PYQT_SIPFLAGS) +AC_SUBST(QT_VERS) AC_LANG_RESTORE diff --git a/adm_local/unix/config_files/check_qt.m4 b/adm_local/unix/config_files/check_qt.m4 index ab5348319..1aea9c3a2 100644 --- a/adm_local/unix/config_files/check_qt.m4 +++ b/adm_local/unix/config_files/check_qt.m4 @@ -48,9 +48,8 @@ else qt_inc_ok=no QTINC="" AC_CHECK_FILE(${QTDIR}/include/qt3/qglobal.h,QTINC="/qt3",QTINC="") - QT_VERS=`grep "QT_VERSION_STR" ${QTDIR}/include${QTINC}/qglobal.h | sed -e 's%^#define QT_VERSION_STR\([[:space:]]*\)%%g' -e 's%\"%%g'` - AC_MSG_RESULT(Qt version is $QT_VERS) - QT_VERS="Qt_"`echo $QT_VERS | sed -e 's%\"%%g' -e 's%\.%_%g'` + QT_VERSION=`grep "QT_VERSION_STR" ${QTDIR}/include${QTINC}/qglobal.h | sed -e 's%^#define QT_VERSION_STR\([[:space:]]*\)%%g' -e 's%\"%%g'` + AC_MSG_RESULT(Qt version is $QT_VERSION) fi if test "x$qt_ok" = "xyes" @@ -169,7 +168,7 @@ AC_SUBST(QT_INCLUDES) AC_SUBST(QT_MT_INCLUDES) AC_SUBST(QT_LIBS) AC_SUBST(QT_MT_LIBS) -AC_SUBST(QT_VERS) +AC_SUBST(QT_VERSION) AC_LANG_RESTORE diff --git a/adm_local/unix/config_files/check_sip.m4 b/adm_local/unix/config_files/check_sip.m4 index 83af9a907..88cbe5951 100644 --- a/adm_local/unix/config_files/check_sip.m4 +++ b/adm_local/unix/config_files/check_sip.m4 @@ -44,11 +44,26 @@ else SIP_VERS=v4_old ;; 4.2*) SIP_VERS=v4_new ;; + 4.3*) + SIP_VERS=v4_new ;; + 4.4*) + SIP_VERS=v4_new ;; + 4.5*) + SIP_VERS=v4_new ;; + 4.6*) + SIP_VERS=v4_new ;; + 4.7*) + SIP_VERS=v4_new ;; *) AC_MSG_RESULT(sip version $version not supported) SIP_VERS=unsupported ;; esac + if test "x$SIPDIR" = "x" ; then + SIPDIR=`dirname $SIP` + SIPDIR=`dirname $SIPDIR` + fi + sip_ok=no dnl Search sip.h file if test "x$SIPDIR" != "x" ; then @@ -163,6 +178,9 @@ AC_SUBST(SIP_INCLUDES) AC_SUBST(SIP_LIBS) AC_SUBST(SIP_VERS) +AM_CONDITIONAL(IS_SIP_V4, [test $SIP_VERS == v4_old || test $SIP_VERS == v4_new]) +AM_CONDITIONAL(IS_SIP_NEW, [test $SIP_VERS == v3_new || test $SIP_VERS == v4_new]) + AC_MSG_RESULT(for sip: $sip_ok) ])dnl diff --git a/adm_local/unix/config_files/check_vtk.m4 b/adm_local/unix/config_files/check_vtk.m4 index a0733ebc3..5e4fc444e 100644 --- a/adm_local/unix/config_files/check_vtk.m4 +++ b/adm_local/unix/config_files/check_vtk.m4 @@ -20,13 +20,34 @@ dnl dnl dnl -AC_DEFUN([CHECK_VTK],[ +dnl +dnl OPTIONS_VTK +dnl ------------------------------------------------------------------------ +dnl Adds the --with-vtk=path and --with-vtk-version 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)])], + [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"]) +]) + +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_CHECKING(for VTK) AC_LANG_SAVE @@ -59,34 +80,80 @@ then LXLIB="" fi -if test "x$x_libraries" = "x/usr/lib" -then - LXLIB="" -fi - -if test "x$x_libraries" = "x/usr/lib" +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 $OGL_LIBS $LXLIB -lX11 -lXt" +LOCAL_LIBS="-lvtkCommon -lvtkGraphics -lvtkImaging -lvtkFiltering -lvtkIO -lvtkRendering -lvtkHybrid -lvtkParallel -lvtkWidgets $OGL_LIBS $LXLIB -lX11 -lXt" TRY_LINK_LIBS="-lvtkCommon $OGL_LIBS $LXLIB -lX11 -lXt" -if test -z $VTKHOME -then - AC_MSG_WARN(undefined VTKHOME variable which specify where vtk was compiled) - if test -f /usr/include/vtk/vtkPlane.h ; then - AC_MSG_RESULT(trying /usr) - VTKHOME="/usr" - fi +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 -if test ! -z $VTKHOME -then - LOCAL_INCLUDES="-I$VTKHOME/include/vtk $LOCAL_INCLUDES" - LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk -L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk/python $LOCAL_LIBS" - TRY_LINK_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk -L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk/python $TRY_LINK_LIBS" +dnl VTK install dir +if test -z $with_vtk ; then + with_vtk="" +fi +if test "x$with_vtk" = "xyes" ; then + dnl in case user wrote --with-vtk=yes + with_vtk="" +fi +if test "x$with_vtk" = "xno" ; then + dnl in case user wrote --with-vtk=no + with_vtk="" + AC_MSG_WARN(Value "no", specified for option --with-vtk, is not supported) +fi + +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 + else + if test -f ${d}/include/vtk-5.0/vtkPlane.h ; then + AC_MSG_RESULT(trying ${d}) + VTKHOME="${d}" + VTKSUFFIX="-5.0" + break + else + if test -f ${d}/include/vtk/vtkPlane.h ; then + AC_MSG_RESULT(trying ${d}) + VTKHOME="${d}" + VTKSUFFIX="" + break + fi + fi + fi + done + fi +fi + +LOCAL_INCLUDES="-I$VTKHOME/include/vtk${VTKSUFFIX} $LOCAL_INCLUDES" +LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk${VTKSUFFIX} $LOCAL_LIBS" +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 + LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX} $LOCAL_LIBS" fi dnl vtk headers @@ -95,34 +162,34 @@ CPPFLAGS="$CPPFLAGS $LOCAL_INCLUDES" AC_CHECK_HEADER(vtkPlane.h,vtk_ok="yes",vtk_ok="no") - CPPFLAGS="$CPPFLAGS_old" +CPPFLAGS="$CPPFLAGS_old" - if test "x$vtk_ok" = "xyes" - then +if test "x$vtk_ok" = "xyes" +then VTK_INCLUDES="$LOCAL_INCLUDES" - dnl vtk libraries + dnl vtk libraries AC_MSG_CHECKING(linking VTK library) - LIBS_old="$LIBS" -# LIBS="$LIBS $TRY_LINK_LIBS" - LIBS="$LIBS $LOCAL_LIBS" - CPPFLAGS_old="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $VTK_INCLUDES" + LIBS_old="$LIBS" + LIBS="$LIBS $TRY_LINK_LIBS" + #LIBS="$LIBS $LOCAL_LIBS" + CPPFLAGS_old="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $VTK_INCLUDES" - dnl VTKPY_MODULES="$VTKHOME/python" + dnl VTKPY_MODULES="$VTKHOME/python" AC_CACHE_VAL(salome_cv_lib_vtk,[ - AC_TRY_LINK([#include "vtkPlane.h"], + 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" - + ]) + vtk_ok="$salome_cv_lib_vtk" + LIBS="$LIBS_old" + CPPFLAGS="$CPPFLAGS_old" fi if test "x$vtk_ok" = "xno" @@ -142,4 +209,4 @@ AC_LANG_RESTORE # Save cache AC_CACHE_SAVE -])dnl \ No newline at end of file +])dnl diff --git a/adm_local/unix/make_commence.in b/adm_local/unix/make_commence.in deleted file mode 100644 index 0a5de34a2..000000000 --- a/adm_local/unix/make_commence.in +++ /dev/null @@ -1,275 +0,0 @@ -# common directories to put headerfiles -inc_builddir=$(top_builddir)/include/salome - -GUI_DISABLE_CORBA=@GUI_DISABLE_CORBA@ -DISABLE_GLVIEWER=@DISABLE_GLVIEWER@ -DISABLE_PYCONSOLE=@DISABLE_PYCONSOLE@ -DISABLE_PLOT2DVIEWER=@DISABLE_PLOT2DVIEWER@ -DISABLE_SUPERVGRAPHVIEWER=@DISABLE_SUPERVGRAPHVIEWER@ -DISABLE_OCCVIEWER=@DISABLE_OCCVIEWER@ -DISABLE_VTKVIEWER=@DISABLE_VTKVIEWER@ -DISABLE_SALOMEOBJECT=@DISABLE_SALOMEOBJECT@ -@SET_MAKE@ -SHELL=/bin/sh - -# header missing - -HAVE_SSTREAM=@HAVE_SSTREAM@ - - -LIBS=@LIBS@ -LIBSFORBIN=@LIBS@ -LDFLAGS=@LDFLAGS@ -L$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome -LDFLAGSFORBIN=@LDFLAGS@ -L$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome -# add libstdc++ to link c++ library with libtool ! -LDFLAGS+= -lstdc++ -LDFLAGSFORBIN+= -lstdc++ - -CP=@CP@ - -# CPP - -CPP=@CPP@ -CXXCPP=@CXXCPP@ -CPPFLAGS=@CPPFLAGS@ -I$(inc_builddir) -I$(srcdir) -I. - -# C - -CC = @CC@ -CFLAGS = @CFLAGS@ -C_DEPEND_FLAG = @C_DEPEND_FLAG@ - -# C++ - -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CXX_DEPEND_FLAG = @CXX_DEPEND_FLAG@ - -# BOOST Library - -BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ - -# JAVA - -JAVA_INCLUDES = @JAVA_INCLUDES@ -JAVA_LIBS = @JAVA_LIBS@ -JAVA_LDPATH = @JAVA_LDPATH@ - -# PYTHON - -PYTHON = @PYTHON@ -PYTHONHOME = @PYTHONHOME@ -PYTHON_INCLUDES = @PYTHON_INCLUDES@ -PYTHON_LIBS = @PYTHON_LIBS@ -PYTHON_VERSION = @PYTHON_VERSION@ -PYTHON_SITE = $(prefix)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages -PYTHON_SITE_INSTALL = $(prefix)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome -# QT - -QT_ROOT = @QT_ROOT@ -QT_INCLUDES = @QT_INCLUDES@ -QT_MT_INCLUDES = @QT_INCLUDES@ -DQT_THREAD_SUPPORT -QT_LIBS = @QT_LIBS@ -QT_MT_LIBS = @QT_MT_LIBS@ -QT_VERS = @QT_VERS@ - -MOC = @MOC@ -UIC = @UIC@ - -# msg2qm -MSG2QM = @MSG2QM@ - -#QWT - -QWT_INCLUDES=@QWT_INCLUDES@ -QWT_LIBS=@QWT_LIBS@ - -# SIP -SIP = @SIP@ -SIP_INCLUDES = @SIP_INCLUDES@ -SIP_LIBS = @SIP_LIBS@ -SIP_VERS = @SIP_VERS@ - -# PYQT -PYQT_SIPS = @PYQT_SIPS@ -PYQT_LIBS = @PYQT_LIBS@ -PYQT_INCLUDES = @PYQT_INCLUDES@ -PYUIC = @PYUIC@ -PYQT_SIPFLAGS = @PYQT_SIPFLAGS@ - -# openGL -OGL_INCLUDES=@OGL_INCLUDES@ -OGL_LIBS=@OGL_LIBS@ - -# VTK -VTK_INCLUDES=@VTK_INCLUDES@ -VTK_LIBS=@VTK_LIBS@ - -# HDF5 - -HDF5_INCLUDES=@HDF5_INCLUDES@ -HDF5_LIBS=@HDF5_LIBS@ -HDF5_MT_LIBS=@HDF5_MT_LIBS@ - -# OpenCasCade - -OCC_INCLUDES=@CAS_CPPFLAGS@ -OCC_CXXFLAGS=@CAS_CXXFLAGS@ - -CAS_KERNEL=@CAS_KERNEL@ -CAS_MATH=@CAS_MATH@ -CAS_OCAF=@CAS_OCAF@ -CAS_OCAFVIS=@CAS_OCAFVIS@ -CAS_TKTopAlgo=@CAS_TKTopAlgo@ -CAS_VIEWER=@CAS_VIEWER@ -CAS_MODELER=@CAS_MODELER@ -CAS_DATAEXCHANGE=@CAS_DATAEXCHANGE@ -CAS_LDPATH=@CAS_LDPATH@ - -# MPICH - -MPICH_INCLUDES=@MPICH_INCLUDES@ -MPICH_LIBS=@MPICH_LIBS@ - -# Swig C++ Python - -SWIG = @SWIG@ -SWIG_FLAGS = @SWIG_FLAGS@ -I$(inc_builddir) -I$(srcdir) -I. - -# OMNIORB - -OMNIORB_ROOT = @OMNIORB_ROOT@ -OMNIORB_INCLUDES = @OMNIORB_INCLUDES@ -OMNIORB_LIBS = @OMNIORB_LIBS@ -OMNIORB_CXXFLAGS = @OMNIORB_CXXFLAGS@ - -OMNIORB_IDL = @OMNIORB_IDL@ -OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@ -OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(top_srcdir)/idl -I$(KERNEL_ROOT_DIR)/idl/salome - -OMNIORB_IDL_CLN_H = @OMNIORB_IDL_CLN_H@ -OMNIORB_IDL_CLN_CXX = @OMNIORB_IDL_CLN_CXX@ -OMNIORB_IDL_CLN_OBJ = @OMNIORB_IDL_CLN_OBJ@ - -OMNIORB_IDL_SRV_H = @OMNIORB_IDL_SRV_H@ -OMNIORB_IDL_SRV_CXX = @OMNIORB_IDL_SRV_CXX@ -OMNIORB_IDL_SRV_OBJ = @OMNIORB_IDL_SRV_OBJ@ - -# Default ORB - -CORBA_ROOT = @CORBA_ROOT@ -CORBA_INCLUDES = @CORBA_INCLUDES@ -CORBA_LIBS = @CORBA_LIBS@ -CORBA_CXXFLAGS = @CORBA_CXXFLAGS@ - -IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_srcdir)/idl -I$(KERNEL_ROOT_DIR)/idl/salome -IDLPYFLAGS = @IDLPYFLAGS@ - -IDL = @IDL@ - -IDL_CLN_H = @IDL_CLN_H@ -IDL_CLN_CXX = @IDL_CLN_CXX@ -IDL_CLN_OBJ = @IDL_CLN_OBJ@ - -IDL_SRV_H = @IDL_SRV_H@ -IDL_SRV_CXX = @IDL_SRV_CXX@ -IDL_SRV_OBJ = @IDL_SRV_OBJ@ - -CPPFLAGS+= $(CORBA_INCLUDES) -CXXFLAGS+= $(CORBA_CXXFLAGS) - -DOXYGEN = @DOXYGEN@ -DOXYGEN_WITH_PYTHON = @DOXYGEN_WITH_PYTHON@ -DOXYGEN_WITH_STL = @DOXYGEN_WITH_STL@ - -## Shared libraries -LT_STATIC_EXEC=@LT_STATIC_EXEC@ -DYNAMIC_DIRS=@DYNAMIC_DIRS@ -LT_LIB=libtool -LT=$(top_builddir)/libtool -LT_COMPILE=$(LT) --mode=compile $(CC) -LT_LINK_LIB=$(LT_LIB) --mode=link $(CC) -rpath $(libdir) -LT_LINK_EXE=$(LT) --mode=link $(CC) $(LT_STATIC_EXEC) -dlopen self -rpath $(bindir) $(DYNAMIC_DIRS) -LT_RUN=$(LT) --mode=execute -LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM) -LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA) -LT_UNINSTALL=$(LT) --mode=uninstall $(RM) - -INSTALL=@INSTALL@ -INSTALL_PROGRAM=@INSTALL_PROGRAM@ -INSTALL_DATA=@INSTALL_DATA@ - -# create a symbolic link (or a copie ?) -LN_S=@LN_S@ - -KERNEL_ROOT_DIR=@KERNEL_ROOT_DIR@ -KERNEL_SITE_DIR=@KERNEL_SITE_DIR@ - -KERNEL_LDFLAGS=@KERNEL_LDFLAGS@ -KERNEL_CXXFLAGS=@KERNEL_CXXFLAGS@ - -## Installation points -prefix=@prefix@ -exec_prefix=@exec_prefix@ -bindir=@exec_prefix@/bin/salome -libdir=@exec_prefix@/lib@LIB_LOCATION_SUFFIX@/salome -# warning : if user give this path in configure we could have salome/salome :-( -includedir=@includedir@/salome -datadir=@datadir@/salome -idldir=${prefix}/idl/salome -sharedpydir=@exec_prefix@/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome/shared_modules -incmakedir=${prefix}/salome_adm/unix - -docdir=${prefix}/doc/salome - -# -# begin of package rules -# - -.PHONY: all lib bin inc resources data docs tests install uninstall dep depend depend_idl cleandep mostlyclean clean distclean - -.SUFFIXES: .cxx .cc .c .f .o .lo .idl .py .i .ui .po .qm - -all: - $(MAKE) inc - $(MAKE) depend_idl - $(MAKE) depend - $(MAKE) lib - $(MAKE) bin - $(MAKE) resources - -# -# add target to build administrative files -# - -Makefile: $(top_builddir)/config.status $(srcdir)/Makefile.in - cd $(top_builddir) ; ./config.status - -LOCAL_MAKE = make_commence make_conclude make_omniorb - -KERNEL_MAKE = make_module depend SALOMEconfig.h F77config.h sstream envScript - -$(top_builddir)/config.status: $(top_srcdir)/configure \ - $(LOCAL_MAKE:%=$(top_srcdir)/adm_local/unix/%.in) \ - $(KERNEL_MAKE:%=$(KERNEL_ROOT_DIR)/salome_adm/unix/%.in) - cd $(top_builddir) ; ./config.status --recheck - -# VPATH contain $(srcdir), so make configure is good in top_srcdir and we must add target configure otherwise :-) -ifneq ($(top_srcdir),$(srcdir)) -configure: $(top_srcdir)/configure -endif - -$(top_srcdir)/configure: $(top_srcdir)/configure.in $(top_srcdir)/aclocal.m4 - cd $(top_srcdir) ; autoconf - -$(top_srcdir)/configure.in: $(top_srcdir)/configure.in.base - cd $(top_srcdir) && ./build_configure - - -ACLOCAL_SRC = \ -check_qt.m4 check_vtk.m4 check_qwt.m4 \ -check_sip.m4 check_msg2qm.m4 check_pyqt.m4 \ -check_opengl.m4 - -$(top_srcdir)/aclocal.m4: $(ACLOCAL_SRC:%=$(top_srcdir)/adm_local/unix/config_files/%) - cd $(top_srcdir) ; aclocal -I adm_local/unix/config_files -I @KERNEL_ROOT_DIR@/salome_adm/unix/config_files diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am new file mode 100644 index 000000000..16a5054e5 --- /dev/null +++ b/adm_local/unix/make_common_starter.am @@ -0,0 +1,54 @@ +# +# ============================================================ +# This file defines the common definitions used in several +# Makefile. This file must be included, if needed, by the file +# Makefile.am. +# ============================================================ +# + +# Standard directory for installation +salomeincludedir = $(includedir)/@PACKAGE@ +libdir = $(prefix)/lib@LIB_LOCATION_SUFFIX@/@PACKAGE@ +bindir = $(prefix)/bin/@PACKAGE@ +salomescriptdir = $(bindir) + +# Directory for installing idl files +salomeidldir = $(prefix)/idl/@PACKAGE@ + +# Directory for installing resource files +salomeresdir = $(prefix)/share/@PACKAGE@/resources/@MODULE_NAME@ + +# Directories for installing admin files +admlocaldir = $(prefix)/adm_local +admlocalunixdir = $(admlocaldir)/unix +admlocalm4dir = $(admlocaldir)/unix/config_files + +# Shared modules installation directory +sharedpkgpythondir =$(pkgpythondir)/shared_modules + +# Documentation directory +docdir = $(datadir)/doc/@PACKAGE@ + +# common rules + +# moc-files generation +%_moc.cxx: %.h + $(MOC) $< -o $@ + +# qm-files generation +%.qm: resources/%.po + $(MSG2QM) $< $@ + +EXTRA_DIST=$(MOC_FILES:%_moc.cxx=%.h) $(nodist_salomeres_DATA:%.qm=resources/%.po) + +mostlyclean-local: + rm -f @builddir@/*_moc.cxx + rm -f @builddir@/*.qm + +# tests +tests: unittest + +unittest: $(UNIT_TEST_PROG) + @if test "x$(UNIT_TEST_PROG)" != "x"; then \ + $(UNIT_TEST_PROG); \ + fi; diff --git a/adm_local/unix/make_conclude.in b/adm_local/unix/make_conclude.in index 897154a7a..da7a678e1 100644 --- a/adm_local/unix/make_conclude.in +++ b/adm_local/unix/make_conclude.in @@ -191,11 +191,11 @@ RESOURCES_FILES ?= $(RESOURCES_FILES_ALL) resources: resources-po resources-cp -resources-po: $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm) +resources-po: $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm) -resources-cp: $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%) +resources-cp: $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%) -$(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%): $(top_builddir)/share/salome/resources/% : % +$(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%): $(top_builddir)/share/salome/resources/$(MODULE_NAME)/% : % cp -fr $< $@; # Make installation directories if they don't exist. @@ -255,19 +255,19 @@ $(EXPORT_SHAREDPYSCRIPTS:%=install-%): install-%: % # generic rule to install .qm files : install-qm: resources - $(INSTALL) -d $(datadir)/resources - @for f in X $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm); do \ + $(INSTALL) -d $(datadir)/resources/$(MODULE_NAME) + @for f in X $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm); do \ if test $$f != X; then \ - ($(INSTALL_DATA) $$f $(datadir)/resources/. || exit 1); \ + ($(INSTALL_DATA) $$f $(datadir)/resources/$(MODULE_NAME)/. || exit 1); \ fi; \ done # generic rule to install resources files (png, ini ...): install-res: resources - $(INSTALL) -d $(datadir)/resources - @for f in X $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%); do \ + $(INSTALL) -d $(datadir)/resources/$(MODULE_NAME) + @for f in X $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%); do \ if test $$f != X; then \ - ($(INSTALL_DATA) $$f $(datadir)/resources/. || exit 1); \ + ($(INSTALL_DATA) $$f $(datadir)/resources/$(MODULE_NAME)/. || exit 1); \ fi; \ done @@ -318,7 +318,7 @@ uninstall: # Uninstall qm files @for f in X $(PO_FILES:%.po=%.qm); do \ if test $$f != X; then \ - $(LT_UNINSTALL) $(datadir)/resources/$$f ; \ + $(LT_UNINSTALL) $(datadir)/resources/$(MODULE_NAME)/$$f ; \ fi; \ done @@ -363,7 +363,7 @@ clean: mostlyclean # distclean: clean #remove qm file ! - -$(RM) $(PO_FILES:%.po=%.qm) $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm) + -$(RM) $(PO_FILES:%.po=%.qm) $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm) #remove include files -$(RM) $(DEST_HEADERS) -$(RM) $(DISTCLEAN) *.bak *.old *.new .dep* @@ -410,7 +410,7 @@ distclean: clean %_wrap.cxx : %.i $(SWIG) $(SWIG_FLAGS) -o $@ $< -$(top_builddir)/share/salome/resources/%.qm: %.po +$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm: %.po $(MSG2QM) $< $@ ; \ #------------------------------------------------------------------------------ diff --git a/adm_local/unix/make_omniorb.in b/adm_local/unix/make_omniorb.in deleted file mode 100644 index b65865eac..000000000 --- a/adm_local/unix/make_omniorb.in +++ /dev/null @@ -1,50 +0,0 @@ -#======================================================================= -# Begin specific part to omniorb -# (include from file adm/unix/make_omniorb generated by -# adm/unix/make_omniorb.in) -#======================================================================= -# -* Makefile *- -# -# - -# Client and server object are the same with omniorb -# There are one header file and one source file generate - -#IDLOBJ=$(IDLSRC:%.idl=%$(IDL_CLN_OBJ)) - -# dependancies between idl and it's generated files -%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${KERNEL_ROOT_DIR}/idl/salome/%.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< - -%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${top_srcdir}/idl/%.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< - -# dependncies between idl files -depend_idl: .depidl - -# we use cpp to generate dependencies between idl files. -# we change cpp output to keep only idl file and transform it to get a suitable rule -.depidl: $(IDL_FILES) - @touch $@ - @for dep in $? dummy; do \ - if [ $$dep != "dummy" ]; then \ - echo Building dependencies for $$dep; \ - basedep=`basename $$dep .idl`; \ - header="$$basedep"$(IDL_CLN_H); \ - sed '\%^'"$$header"':%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@; \ - $(CPP) $(C_DEPEND_FLAG) -I$(srcdir) $$dep 2>/dev/null | \ - sed `echo "s%$$basedep\\.idl%$$header:%g"` | \ - sed 's% $(srcdir)/% %g' | \ - sed 's% $(top_srcdir)/% %g' | \ - sed 's% $(top_builddir)/% %g' | \ - sed 's%^.*:\.o: *%%' | sed 's%^ *\\ *%%'| sed 's%^ *\(.*\):%\1:%' | \ - sed 's/\.idl/$(IDL_CLN_H)/' >>$@; \ - echo '' >>$@; \ - fi; \ - done ; - --include .depidl - -#======================================================================= -# End specific part to omniorb -#======================================================================= diff --git a/bin/Makefile.am b/bin/Makefile.am new file mode 100644 index 000000000..a0f5c8488 --- /dev/null +++ b/bin/Makefile.am @@ -0,0 +1,41 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# -* Makefile *- +# +# Author : Guillaume Boulant (CSSI) +# Module : KERNEL +# $Header$ +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# +# =============================================================== +# Files to be installed +# =============================================================== +# + +# These files are data, module or lib files +nodist_salomescript_DATA= VERSION + +EXTRA_DIST+= VERSION.in + +# These files are executable scripts +dist_salomescript_SCRIPTS=\ + runLightSalome.csh \ + runLightSalome.sh diff --git a/bin/runLightSalome.csh b/bin/runLightSalome.csh index 85675de23..3a751e993 100755 --- a/bin/runLightSalome.csh +++ b/bin/runLightSalome.csh @@ -1,9 +1,7 @@ #!/bin/csh -f -if ( ! $?SUITRoot ) setenv SUITRoot ${GUI_ROOT_DIR}/share/salome - # this variable necessary for loading .ini or .xml file -if ( ! $?LightAppConfig ) setenv LightAppConfig ${GUI_ROOT_DIR}/share/salome/resources -if ( ! $?LightAppResources ) setenv LightAppResources ${GUI_ROOT_DIR}/share/salome/resources +if ( ! $?LightAppConfig ) setenv LightAppConfig ${GUI_ROOT_DIR}/share/salome/resources/gui +if ( ! $?LightAppResources ) setenv LightAppResources ${GUI_ROOT_DIR}/share/salome/resources/gui SUITApp LightApp -style salome $* & diff --git a/bin/runLightSalome.sh b/bin/runLightSalome.sh index b2f67d65e..df19ca7ba 100755 --- a/bin/runLightSalome.sh +++ b/bin/runLightSalome.sh @@ -18,15 +18,12 @@ # #!/bin/bash -f -if [ -z "$SUITRoot" ] ; then - export SUITRoot=${GUI_ROOT_DIR}/share/salome -fi # this variable necessary for loading .ini or .xml file if [ -z "$LightAppConfig" ] ; then - export LightAppConfig=${GUI_ROOT_DIR}/share/salome/resources + export LightAppConfig=${GUI_ROOT_DIR}/share/salome/resources/gui fi if [ -z "$LightAppResources" ] ; then - export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources + export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources/gui fi SUITApp LightApp -style salome $* & diff --git a/build_configure b/build_configure index b36fde32a..733a8cea6 100755 --- a/build_configure +++ b/build_configure @@ -1,215 +1,100 @@ #!/bin/bash # -# Tool for updating list of .in file for the SALOME project +# Tool for updating list of .in file for the SALOME project # and regenerating configure script # # Author : Marc Tajchman - CEA # Date : 10/10/2002 # $Header$ # +# 26/10/2006: Mikhail PONIKAROV - OCN +# Reorganization for uage of autotools ORIG_DIR=`pwd` CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` -######################################################################## +# ____________________________________________________________________ # Test if the KERNEL_ROOT_DIR is set correctly if test ! -d "${KERNEL_ROOT_DIR}"; then echo "failed : KERNEL_ROOT_DIR variable is not correct !" exit fi -# Test if the KERNEL_SRC is set correctly - -#if test ! -d "${KERNEL_SRC}"; then -# echo "failed : KERNEL_SRC variable is not correct !" -# exit -#fi -######################################################################## -# find_in - utility function -# -# usage : -# find_in directory filename -# -# Finds files following the *.in pattern, recursively in the -# directory (first argument). -# Results are appended into the file (second argument) -# -# Difference from the standard unix find is that files are tested -# before directories -# - -find_in() -{ - local i - local f=$2 - -# if the first argument is not a directory, returns - - if [ ! -d "$1" ] ; then - return - fi - -# dont look in the CVS directories - - case $1 in - */CVS) return ;; - */adm_local/*) return ;; - *) ;; - esac - -# for each regular file contained in the directory -# test if it's a .in file - - for i in "$1"/* - do - if [ -f "$i" ] ; then - case $i in - *.in) echo " "$i" \\" >> $f;; - *) ;; - esac - fi - done - -# for each subdirectory of the first argument, proceeds recursively - - for i in "$1"/* - do - if [ -d "$i" ] ; then - find_in "$i" "$f" - fi - done -} - - -####################################################################### -# Generate list of .in files (Makefile.in, config.h.in, etc) -# appending it in file configure.in - cd ${CONF_DIR} ABS_CONF_DIR=`pwd` -# -# Common part of the configure.in file -# -chmod u+w configure.in.base -if ! \cp -f configure.in.base configure.in_tmp1 -then - echo - echo "error : can't create files in" ${CONF_DIR} - echo "aborting ..." - chmod u-w configure.in.base - exit -fi -chmod u-w configure.in.base - -if [ -e "${CONF_DIR}/salome_adm" ] ; then - \rm -rf ${CONF_DIR}/salome_adm -fi - -# make a link allowing AC_OUTPUT to find the salome_adm/.../*.in files -echo "" >> configure.in_tmp1 -echo 'ln -fs ${KERNEL_ROOT_DIR}/salome_adm ${ROOT_SRCDIR}/.' >> configure.in_tmp1 - -echo "" >> configure.in_tmp1 -echo "AC_OUTPUT([ \\" >> configure.in_tmp1 - -# -# List of .in files in the adm/unix directory -# These files MUST be on top of AC_OUTPUT list so we -# put them "manually" -# - -echo " ./salome_adm/unix/SALOMEconfig.h \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/F77config.h \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/sstream \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/depend \\" >> configure.in_tmp1 -echo " ./adm_local/unix/make_omniorb:${ABS_CONF_DIR}/adm_local/unix/make_omniorb.in \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/envScript \\" >> configure.in_tmp1 -echo " ./adm_local/unix/make_commence:${ABS_CONF_DIR}/adm_local/unix/make_commence.in \\" >> configure.in_tmp1 -echo " ./adm_local/unix/make_conclude:${ABS_CONF_DIR}/adm_local/unix/make_conclude.in \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/make_module \\" >> configure.in_tmp1 - -\rm -f configure.in_tmp2 configure.in_tmp3 -touch configure.in_tmp2 -find_in . configure.in_tmp2 -sed -e '/^...salome_adm/d' configure.in_tmp2 > configure.in_tmp3 -sed -e '/^...adm_local.unix.make_omniorb/d' configure.in_tmp3 > configure.in_tmp2 -sed -e '/^...adm_local.unix.make_commence/d' configure.in_tmp2 > configure.in_tmp3 -sed -e '/configure.in/d' configure.in_tmp3 > configure.in_tmp2 -sed -e 's/.in / /' configure.in_tmp2 >> configure.in_tmp1 -#sed '/^.salome_adm/d' configure.in_tmp2 > configure.in_tmp3 -#sed '/configure.in/d' configure.in_tmp3 > configure.in_tmp2 -#sed 's/.in / /' configure.in_tmp2 >> configure.in_tmp1 - -echo "])" >> configure.in_tmp1 - -# delete the link created for AC_OUTPUT -echo "" >> configure.in_tmp1 -#echo 'rm -f ${ROOT_SRCDIR}/salome_adm' >> configure.in_tmp1 -\mv configure.in_tmp1 configure.in_new -\rm -f configure.in_tmp2 configure.in_tmp3 - - -######################################################################## -# Create new (or replace old) configure.in file -# Print a message if the file is write protected -# - -echo -if test ! -f configure.in -then - echo -n "Creating new file 'configure.in' ... " - if \mv configure.in_new configure.in >& /dev/null - then - echo "done" - else - echo "error, check your file permissions" - fi -else - echo -n "Updating 'configure.in' file ... " - if ! \cp configure.in configure.in_old >& /dev/null - then - echo - echo - echo "Can't backup previous configure.in" - echo -n "Continue (you will not be able to revert) - (Y/N) ? " - read R - case "x$R" in - xn*) exit;; - xN*) exit;; - esac - echo - echo -n " " - fi - if \cp configure.in_new configure.in >& /dev/null - then - echo "done" - else - echo - echo "error, can't update previous configure.in" - fi -fi - -######################################################################## -# Use autoconf to rebuild the configure script -# - -if test -f configure -then - echo -n "Updating 'configure' script ... " -else - echo -n "Creating 'configure' script ... " -fi - -aclocal -I adm_local/unix/config_files -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files -if autoconf -then - echo "done" -else - echo "failed (check file permissions and/or user quotas ...)" -fi - -cd ${ORIG_DIR} - -echo +mkdir -p salome_adm/unix/config_files +#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files/* salome_adm/unix/config_files +#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/pythonbe.py salome_adm/unix + +# remove KERNEL deprecated configure files +#for deprecated in ac_cc_warnings.m4 ac_cxx_partial_specialization.m4 \ +# check_mico.m4 config.guess ltmain.sh ac_cxx_bool.m4 ltconfig \ +# ac_cxx_typename.m4 check_pthreads.m4 config.sub libtool.m4 ac_cxx_mutable.m4 +#do +# rm salome_adm/unix/config_files/${deprecated} +#done + +# remove KERNEL CVS directories in subdirectory salome_adm +#for deprecated in CVS unix/CVS unix/config_files/CVS +#do +# rm -rf salome_adm/${deprecated} +#done + +cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/SALOMEconfig.h.in salome_adm/unix + +# ____________________________________________________________________ +# aclocal creates the aclocal.m4 file from the standard macro and the +# custom macro embedded in the directory salome_adm/unix/config_files +# and KERNEL config_files directory. +# output: +# aclocal.m4 +# autom4te.cache (directory) +echo "====================================================== aclocal" + +aclocal -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ + -I adm_local/unix/config_files || exit 1 + +# ____________________________________________________________________ +# libtoolize creates some configuration files (ltmain.sh, +# config.guess and config.sub). It only depends on the libtool +# version. The files are created in the directory specified with the +# AC_CONFIG_AUX_DIR() tag (see configure.ac). +# output: +# salome_adm/unix/config_files/config.guess +# salome_adm/unix/config_files/config.sub +# salome_adm/unix/config_files/ltmain.sh +#echo "====================================================== libtoolize" + +libtoolize --force --copy --automake || exit 1 + +# ____________________________________________________________________ +# make link to KERNEL configuration files to +#ln -sf ${KERNEL_ROOT_DIR}/salome_adm . + +# ____________________________________________________________________ +# autoconf creates the configure script from the file configure.ac (or +# configure.in if configure.ac doesn't exist) +# output: +# configure +echo "====================================================== autoconf" + +autoconf + +# ____________________________________________________________________ +# automake creates some scripts used in building process +# (install-sh, missing, ...). It only depends on the automake +# version. The files are created in the directory specified with the +# AC_CONFIG_AUX_DIR() tag (see configure.ac). This step also +# creates the Makefile.in files from the Makefile.am files. +# output: +# salome_adm/unix/config_files/compile +# salome_adm/unix/config_files/depcomp +# salome_adm/unix/config_files/install-sh +# salome_adm/unix/config_files/missing +# salome_adm/unix/config_files/py-compile +# Makefile.in (from Makefile.am) +echo "====================================================== automake" + +automake --copy --gnu --add-missing diff --git a/clean_configure b/clean_configure new file mode 100755 index 000000000..be0b5427f --- /dev/null +++ b/clean_configure @@ -0,0 +1,15 @@ +#!/bin/sh + +rm -rf autom4te.cache aclocal.m4 configure make_config +find . -name "*~" -print -exec rm {} \; +find . -name "*.pyc" -print -exec rm {} \; +#exit +# ==================== ON SORT AVANT + +find bin -name Makefile.in | xargs rm -f +find doc -name Makefile.in | xargs rm -f +find idl -name Makefile.in | xargs rm -f +find resources -name Makefile.in | xargs rm -f +find salome_adm -name Makefile.in | xargs rm -f +find src -name Makefile.in | xargs rm -f +rm -f Makefile.in diff --git a/configure.in.base b/configure.ac similarity index 64% rename from configure.in.base rename to configure.ac index 4b7af75f9..a1ec14bbf 100644 --- a/configure.in.base +++ b/configure.ac @@ -1,67 +1,88 @@ # -# PLEASE DO NOT MODIFY configure.in FILE -# -# ALL CHANGES WILL BE DISCARDED BY THE NEXT -# build_configure COMMAND -# -# CHANGES MUST BE MADE IN configure.in.base FILE -# -# # Author : Marc Tajchman (CEA) # Date : 28/06/2001 # Modified by : Patrick GOLDBRONN (CEA) # Modified by : Marc Tajchman (CEA) +# Modified by : Mikhail PONIKAROV (OCN) - autotools usage # # Created from configure.in.base # - - -AC_INIT(src) -AC_CONFIG_AUX_DIR(${KERNEL_ROOT_DIR}/salome_adm/unix/config_files) +AC_INIT([Salome2 Project GUI module], [4.1.1], [webmaster.salome@opencascade.com], [salome]) +AC_CONFIG_AUX_DIR(salome_adm/unix/config_files) AC_CANONICAL_HOST +AC_CANONICAL_TARGET +AM_INIT_AUTOMAKE -PACKAGE=salome -AC_SUBST(PACKAGE) - -VERSION=3.2.0 -XVERSION=0x030200 -AC_SUBST(VERSION) +XVERSION=`echo $VERSION | awk -F. '{printf("0x%02x%02x%02x",$1,$2,$3)}'` AC_SUBST(XVERSION) +# set up MODULE_NAME variable for dynamic construction of directories (resources, etc.) +MODULE_NAME=gui +AC_SUBST(MODULE_NAME) + +echo +echo --------------------------------------------- +echo Initialize source and build root directories +echo --------------------------------------------- +echo + ######################################################################## # Check --disable-corba-gen and other --disable-* options -GUI_DISABLE_CORBA="no" -DISABLE_PYCONSOLE="no" -DISABLE_GLVIEWER="no" -DISABLE_PLOT2DVIEWER="no" -DISABLE_SUPERVGRAPHVIEWER="no" -DISABLE_OCCVIEWER="no" -DISABLE_VTKVIEWER="no" -DISABLE_SALOMEOBJECT="no" +if test "x${enable_corba_gen}" != "xno" ; then + GUI_DISABLE_CORBA="no" +else + GUI_DISABLE_CORBA="yes" +fi + +if test "x${enable_pyConsole}" != "xno" ; then + DISABLE_PYCONSOLE="no" +else + DISABLE_PYCONSOLE="yes" +fi + +if test "x${enable_glViewer}" != "xno" ; then + DISABLE_GLVIEWER="no" +else + DISABLE_GLVIEWER="yes" +fi + +if test "x${enable_plot2dViewer}" != "xno" ; then + DISABLE_PLOT2DVIEWER="no" +else + DISABLE_PLOT2DVIEWER="yes" +fi + +if test "x${enable_supervGraphViewer}" != "xno" ; then + DISABLE_SUPERVGRAPHVIEWER="no" +else + DISABLE_SUPERVGRAPHVIEWER="yes" +fi + +if test "x${enable_occViewer}" != "xno" ; then + DISABLE_OCCVIEWER="no" +else + DISABLE_OCCVIEWER="yes" +fi + +if test "x${enable_vtkViewer}" != "xno" ; then + DISABLE_VTKVIEWER="no" +else + DISABLE_VTKVIEWER="yes" +fi + +if test "x${enable_salomeObject}" != "xno" ; then + DISABLE_SALOMEOBJECT="no" +else + DISABLE_SALOMEOBJECT="yes" +fi + +if test "x${enable_qxGraphViewer}" != "xno" ; then + DISABLE_QXGRAPHVIEWER="no" +else + DISABLE_QXGRAPHVIEWER="yes" +fi -for option -do - case $option in - -disable-corba-gen=yes | --disable-corba-gen=yes | -disable-corba-gen | --disable-corba-gen) - GUI_DISABLE_CORBA="yes";; - -disable-pyConsole=yes | --disable-pyConsole=yes | -disable-pyConsole | --disable-pyConsole) - DISABLE_PYCONSOLE="yes";; - -disable-glViewer=yes | --disable-glViewer=yes | -disable-glViewer | --disable-glViewer) - DISABLE_GLVIEWER="yes";; - -disable-plot2dViewer=yes | --disable-plot2dViewer=yes | -disable-plot2dViewer | --disable-plot2dViewer) - DISABLE_PLOT2DVIEWER="yes";; - -disable-supervGraphViewer=yes | --disable-supervGraphViewer=yes | \ - -disable-supervGraphViewer | --disable-supervGraphViewer) - DISABLE_SUPERVGRAPHVIEWER="yes";; - -disable-occViewer=yes | --disable-occViewer=yes | -disable-occViewer | --disable-occViewer) - DISABLE_OCCVIEWER="yes";; - -disable-vtkViewer=yes | --disable-vtkViewer=yes | -disable-vtkViewer | --disable-vtkViewer) - DISABLE_VTKVIEWER="yes";; - -disable-salomeObject=yes | --disable-salomeObject=yes | -disable-salomeObject | --disable-salomeObject) - DISABLE_SALOMEOBJECT="yes";; - esac -done dnl dnl Initialize source and build root directories @@ -99,9 +120,14 @@ echo AC_PROG_MAKE_SET AC_PROG_INSTALL -dnl +dnl dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques ! +echo +echo --------------------------------------------- +echo Coniguring production +echo --------------------------------------------- +echo AC_ENABLE_DEBUG(yes) AC_DISABLE_PRODUCTION @@ -120,7 +146,7 @@ dnl Fix up the INSTALL macro if it s a relative path. We want the dnl full-path to the binary instead. case "$INSTALL" in *install-sh*) - INSTALL='\${KERNEL_ROOT_DIR}'/salome_adm/unix/config_files/install-sh + INSTALL='\${ROOT_BUILDDIR}'/salome_adm/unix/config_files/install-sh ;; esac @@ -146,7 +172,7 @@ AC_CHECK_LIB(dl,dlopen) dnl add library libm : AC_CHECK_LIB(m,ceil) -dnl +dnl dnl Well we use sstream which is not in gcc pre-2.95.3 dnl We must test if it exists. If not, add it in include ! dnl @@ -205,6 +231,7 @@ echo testing swig echo --------------------------------------------- echo +AM_PATH_PYTHON(2.3) CHECK_SWIG fi @@ -332,7 +359,7 @@ echo Testing qwt echo --------------------------------------------- echo -CHECK_QWT +CHECK_QWT echo echo --------------------------------------------- @@ -397,6 +424,15 @@ echo CHECK_SALOMEOBJECT echo "DISABLE_SALOMEOBJECT = "$DISABLE_SALOMEOBJECT +echo +echo --------------------------------------------- +echo Testing QxGraphViewer +echo --------------------------------------------- +echo + +CHECK_QXGRAPHVIEWER +echo "DISABLE_QXGRAPHVIEWER = "$DISABLE_QXGRAPHVIEWER + if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then if test "x${DISABLE_PYCONSOLE}" == "xyes" ; then echo "failed : for full configuration of GUI module necessary enable PyConsole !" @@ -426,13 +462,17 @@ if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then echo "failed : for full configuration of GUI module necessary enable SalomeObject !" exit fi + if test "x${DISABLE_QXGRAPHVIEWER}" == "xyes" ; then + echo "failed : for full configuration of GUI module necessary enable QxGraphViewer !" + exit + fi fi echo echo --------------------------------------------- echo Testing html generators echo --------------------------------------------- -echo +echo CHECK_HTML_GENERATORS @@ -451,23 +491,33 @@ echo CHECK_CPPUNIT +echo +echo --------------------------------------------- +echo Testing libxml2 +echo --------------------------------------------- +echo + +CHECK_LIBXML + echo echo --------------------------------------------- echo Summary echo --------------------------------------------- echo -if test "$GUI_DISABLE_CORBA" == "yes"; then +if test "$GUI_DISABLE_CORBA" == "yes"; then echo "Configure (without Corba)" else echo Configure fi -if test "$GUI_DISABLE_CORBA" != "yes"; then -variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok msg2qm_ok vtk_ok hdf5_ok omniORB_ok boost_ok occ_ok sip_ok pyqt_ok qwt_ok doxygen_ok graphviz_ok Kernel_ok" +if test "$GUI_DISABLE_CORBA" != "yes"; then +variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok msg2qm_ok vtk_ok hdf5_ok +omniORB_ok boost_ok occ_ok sip_ok pyqt_ok qwt_ok doxygen_ok graphviz_ok Kernel_ok" else -variables="cc_ok lex_yacc_ok python_ok threads_ok OpenGL_ok qt_ok msg2qm_ok vtk_ok hdf5_ok boost_ok occ_ok sip_ok pyqt_ok qwt_ok doxygen_ok graphviz_ok Kernel_ok" +variables="cc_ok lex_yacc_ok python_ok threads_ok OpenGL_ok qt_ok msg2qm_ok vtk_ok hdf5_ok boost_ok +occ_ok sip_ok pyqt_ok qwt_ok doxygen_ok graphviz_ok Kernel_ok" fi for var in $variables @@ -478,7 +528,7 @@ done echo "---Optional:" variables="cppunit_ok" - + for var in $variables do eval toto=\$$var @@ -488,19 +538,11 @@ do fi done -if test "$GUI_DISABLE_CORBA" != "yes"; then +if test "$GUI_DISABLE_CORBA" != "yes"; then echo echo "Default ORB : $DEFAULT_ORB" echo fi -dnl generals files which could be included in every makefile - -AC_SUBST_FILE(COMMENCE) COMMENCE=adm_local/unix/make_commence -AC_SUBST_FILE(CONCLUDE) CONCLUDE=adm_local/unix/make_conclude -AC_SUBST_FILE(MODULE) MODULE=salome_adm/unix/make_module - -dnl les dependences -AC_SUBST_FILE(DEPEND) DEPEND=salome_adm/unix/depend dnl We don t need to say when we re entering directories if we re using dnl GNU make becuase make does it for us. @@ -510,44 +552,26 @@ else AC_SUBST(SETX) SETX="set -x" fi -# make other build directories -if test "$GUI_DISABLE_CORBA" == "yes"; then - dir_variables="salome_adm adm_local doc bin/salome include/salome lib${LIB_LOCATION_SUFFIX}/salome share/salome/resources idl" -else - dir_variables="salome_adm adm_local doc bin/salome include/salome lib${LIB_LOCATION_SUFFIX}/salome share/salome/resources" -fi - -for rep in $dir_variables -do -# if test ! -d $rep ; then -# eval mkdir $rep -# fi - $INSTALL -d $rep -done +AM_CONDITIONAL(GUI_ENABLE_CORBA, [test "$GUI_DISABLE_CORBA" = no]) +AM_CONDITIONAL(ENABLE_PYCONSOLE, [test "$DISABLE_PYCONSOLE" = no]) +AM_CONDITIONAL(ENABLE_GLVIEWER, [test "$DISABLE_GLVIEWER" = no]) +AM_CONDITIONAL(ENABLE_PLOT2DVIEWER, [test "$DISABLE_PLOT2DVIEWER" = no]) +AM_CONDITIONAL(ENABLE_SUPERVGRAPHVIEWER, [test "$DISABLE_SUPERVGRAPHVIEWER" = no]) +AM_CONDITIONAL(ENABLE_OCCVIEWER, [test "$DISABLE_OCCVIEWER" = no]) +AM_CONDITIONAL(ENABLE_VTKVIEWER, [test "$DISABLE_VTKVIEWER" = no]) +AM_CONDITIONAL(ENABLE_SALOMEOBJECT, [test "$DISABLE_SALOMEOBJECT" = no]) +AM_CONDITIONAL(ENABLE_QXGRAPHVIEWER, [test "$DISABLE_QXGRAPHVIEWER" = no]) -echo +echo echo --------------------------------------------- -echo copying resource files, shell scripts, and +echo copying resource files, shell scripts, and echo xml files echo --------------------------------------------- echo -dnl copy resources directories - -#for i in `find $ROOT_SRCDIR -name 'resources' -print` -#do -# local_res=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` -# local_res_dir=`echo $local_res | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` -# mkdir -p $local_res_dir -# cd $local_res_dir -# ln -fs $i -# echo $local_res -# cd $ROOT_BUILDDIR -#done - dnl copy shells and utilities contained in the bin directory -dnl excluding .in files (treated in AC-OUTPUT below) and CVS +dnl excluding .in files (treated in AC-OUTPUT below) and CVS dnl directory mkdir -p bin/salome @@ -564,20 +588,6 @@ do done cd $ROOT_BUILDDIR -AC_SUBST_FILE(ENVSCRIPT) ENVSCRIPT=salome_adm/unix/envScript - -dnl copy xml files to the build tree (lib directory) -dnl pourquoi ???? - -#cd lib -#for i in `find $ROOT_SRCDIR -name "*.xml" -print` -#do -# ln -fs $i -# echo `echo $i | sed -e "s,$ROOT_SRCDIR,.,"` -#done -#cd $ROOT_BUILDDIR - - echo echo --------------------------------------------- echo generating Makefiles and configure files @@ -585,7 +595,71 @@ echo --------------------------------------------- echo AC_OUTPUT_COMMANDS([ \ - chmod +x ./bin/* \ + chmod +x ./bin/*; \ + chmod +x ./bin/salome/*; \ ]) -## do not delete this line +# This list is initiated using autoscan and must be updated manually +# when adding a new file .in to manage. When you execute +# autoscan, the Makefile list is generated in the output file configure.scan. +# This could be helpfull to update de configuration. +AC_OUTPUT([ \ + ./salome_adm/unix/SALOMEconfig.h \ + ./adm_local/Makefile \ + ./adm_local/unix/Makefile \ + ./adm_local/unix/config_files/Makefile \ + ./bin/VERSION \ + ./bin/Makefile \ + ./GUI_version.h \ + ./doc/Makefile \ + ./doc/salome/Makefile \ + ./doc/salome/gui/Makefile \ + ./doc/salome/gui/GUI/doxyfile \ + ./doc/salome/tui/Makefile \ + ./doc/salome/tui/GUI/doxyfile \ + ./src/Makefile \ + ./src/CASCatch/Makefile \ + ./src/Qtx/Makefile \ + ./src/Style/Makefile \ + ./src/DDS/Makefile \ + ./src/QDS/Makefile \ + ./src/SUIT/Makefile \ + ./src/STD/Makefile \ + ./src/CAF/Makefile \ + ./src/CAM/Makefile \ + ./src/SUITApp/Makefile \ + ./src/LogWindow/Makefile \ + ./src/ObjBrowser/Makefile \ + ./src/Prs/Makefile \ + ./src/OBJECT/Makefile \ + ./src/GLViewer/Makefile \ + ./src/VTKViewer/Makefile \ + ./src/SVTK/Makefile \ + ./src/OCCViewer/Makefile \ + ./src/SOCC/Makefile \ + ./src/PyInterp/Makefile \ + ./src/PythonConsole/Makefile \ + ./src/Plot2d/Makefile \ + ./src/SPlot2d/Makefile \ + ./src/SUPERVGraph/Makefile \ + ./src/QxGraph/Makefile \ + ./src/LightApp/Makefile \ + ./src/ResExporter/Makefile \ + ./src/RegistryDisplay/Makefile \ + ./src/TOOLSGUI/Makefile \ + ./src/Event/Makefile \ + ./src/Session/Makefile \ + ./src/SalomeApp/Makefile \ + ./src/SalomeApp/Test/Makefile \ + ./src/SALOME_SWIG/Makefile \ + ./src/SALOME_SWIG/supervisionexample.py \ + ./src/SALOME_SWIG/supervisiongeomexample.py \ + ./src/SALOME_PY/Makefile \ + ./src/SALOME_PYQT/Makefile \ + ./src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile \ + ./src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_SipDefs.h \ + ./src/SALOME_PYQT/SalomePyQt/Makefile \ + ./resources/Makefile \ + ./idl/Makefile \ + Makefile +]) diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 000000000..6a2c2428b --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,27 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# -* Makefile *- +# +# Author : Patrick GOLDBRONN (CEA) +# Date : 30/11/2001 +# $Header$ +# + +SUBDIRS= salome diff --git a/doc/Makefile.in b/doc/Makefile.in deleted file mode 100644 index 4a62d64a2..000000000 --- a/doc/Makefile.in +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 30/11/2001 -# $Header$ -# -# source path -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -SUBDIRS= salome - -@COMMENCE@ - -docs: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -usr_docs: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -dev_docs: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -clean: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -distclean: clean - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -install: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -uninstall: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done diff --git a/adm_local/Makefile.in b/doc/salome/Makefile.am similarity index 69% rename from adm_local/Makefile.in rename to doc/salome/Makefile.am index 23b57e707..29f7e1854 100644 --- a/adm_local/Makefile.in +++ b/doc/salome/Makefile.am @@ -16,46 +16,26 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# source path -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ -VPATH=.:$(srcdir)/adm_local +# -* Makefile *- +# +# Author : Patrick GOLDBRONN (CEA) +# Date : 30/11/2001 +# $Header$ +# -all: resources - -install: - cp -rf @top_srcdir@/adm_local @prefix@ - -bin: - -resources : - cp -rf @top_srcdir@/adm_local $(top_builddir) - -inc: - -lib: - -depend: - -depend_idl: - -install-end: - -install-include: - -install-bin: - -uninstall: - -uninstall-idl: - -distclean: - -clean: +SUBDIRS= tui gui +SUBDIRSTUI= tui +SUBDIRSGUI= gui -tests: +usr_docs: + @@SETX@; for d in $(SUBDIRSGUI); do \ + (cd $$d && $(MAKE) $@) || exit 1; \ + done; -distclean-other: +docs: usr_docs +dev_docs: + @@SETX@; for d in $(SUBDIRSTUI); do \ + (cd $$d && $(MAKE) $@) || exit 1; \ + done; diff --git a/doc/salome/Makefile.in b/doc/salome/Makefile.in deleted file mode 100644 index 72b2d98ad..000000000 --- a/doc/salome/Makefile.in +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 30/11/2001 -# $Header$ -# -# source path -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -SUBDIRS= tui gui -SUBDIRSTUI= tui -SUBDIRSGUI= gui - -@COMMENCE@ - -usr_docs: - @@SETX@; for d in $(SUBDIRSGUI); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done; \ - -docs: usr_docs - -dev_docs: - @@SETX@; for d in $(SUBDIRSTUI); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done; \ - -clean: - @@SETX@; for d in $(SUBDIRS); do \ - if test -d $$d/GUI; then \ - (cd $$d && $(MAKE) $@) || exit 1; \ - fi; \ - done - -distclean: clean - @@SETX@; for d in $(SUBDIRS); do \ - if test -d $$d/GUI; then \ - (cd $$d && $(MAKE) $@) || exit 1; \ - fi; \ - done - -install: - $(MAKE) docs - @@SETX@; for d in $(SUBDIRS); do \ - if test -d $$d/GUI; then \ - (cd $$d && $(MAKE) $@); \ - fi; \ - done - -uninstall: - @@SETX@; for d in $(SUBDIRS); do \ - if test -d $$d/GUI; then \ - (cd $$d && $(MAKE) $@) || exit 1; \ - fi; \ - done; \ diff --git a/doc/salome/gui/GUI/cshdat_robohelp.htm b/doc/salome/gui/GUI/cshdat_robohelp.htm deleted file mode 100755 index 366ca9f9b..000000000 --- a/doc/salome/gui/GUI/cshdat_robohelp.htm +++ /dev/null @@ -1,258 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/cshdat_webhelp.htm b/doc/salome/gui/GUI/cshdat_webhelp.htm deleted file mode 100755 index e0927b0bf..000000000 --- a/doc/salome/gui/GUI/cshdat_webhelp.htm +++ /dev/null @@ -1,251 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/default.css b/doc/salome/gui/GUI/default.css deleted file mode 100755 index de2e5d955..000000000 --- a/doc/salome/gui/GUI/default.css +++ /dev/null @@ -1,101 +0,0 @@ -BODY { - background-color:#ffffff; - font-family:"Times New Roman" , serif; } -H1 { - font-weight:bold; - font-size:24.0pt; } -LI.kadov-H1 { - font-weight:bold; - font-size:24.0pt; } -H2 { - font-weight:bold; - font-size:18.0pt; } -LI.kadov-H2 { - font-weight:bold; - font-size:18.0pt; } -H3 { - font-weight:bold; - font-size:14.0pt; } -LI.kadov-H3 { - font-weight:bold; - font-size:14.0pt; } -H4 { - font-weight:bold; - font-size:12.0pt; } -LI.kadov-H4 { - font-weight:bold; - font-size:12.0pt; } -H5 { - font-weight:bold; - font-size:10.0pt; } -LI.kadov-H5 { - font-weight:bold; - font-size:10.0pt; } -H6 { - font-weight:bold; - font-size:8.0pt; } -LI.kadov-H6 { - font-weight:bold; - font-size:8.0pt; } -P { - font-size:12.0pt; - margin-top:0pt; - margin-bottom:0pt; } -LI.kadov-P { - font-size:12.0pt; } -A.expandspot { - color:#008000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.expandtext { - font-style:italic; - font-weight:normal; - color:#ff0000; } -A.dropspot { - cursor:hand; - color:#008000; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -A.glossterm { - color:#800000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.glosstext { - font-style:italic; - font-weight:normal; - color:#0000ff; } -OL { - margin-top:0px; - margin-bottom:0px; } -UL { - margin-top:0px; - margin-bottom:0px; } -A:active { } -A:hover { - x-text-underline:Off; - text-decoration:none; } -A:link { - x-text-underline:Off; - text-decoration:none; } -A:visited { - x-text-underline:Off; - text-decoration:none; } -P.TODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } -LI.kadov-P-CTODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } diff --git a/doc/salome/gui/GUI/default_ns.css b/doc/salome/gui/GUI/default_ns.css deleted file mode 100755 index 3eeb3c496..000000000 --- a/doc/salome/gui/GUI/default_ns.css +++ /dev/null @@ -1,118 +0,0 @@ -BODY { - background-color:#ffffff; - font-family:"Times New Roman" , serif; } -H1 { - font-weight:bold; - font-size:24.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H1 { - font-weight:bold; - font-size:24.0pt; } -H2 { - font-weight:bold; - font-size:18.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H2 { - font-weight:bold; - font-size:18.0pt; } -H3 { - font-weight:bold; - font-size:14.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H3 { - font-weight:bold; - font-size:14.0pt; } -H4 { - font-weight:bold; - font-size:12.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H4 { - font-weight:bold; - font-size:12.0pt; } -H5 { - font-weight:bold; - font-size:10.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H5 { - font-weight:bold; - font-size:10.0pt; } -H6 { - font-weight:bold; - font-size:8.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H6 { - font-weight:bold; - font-size:8.0pt; } -P { - font-size:12.0pt; - margin-top:1pt; - margin-bottom:1pt; - font-family:"Times New Roman" , serif; } -LI.kadov-P { - font-size:12.0pt; } -A.expandspot { - color:#008000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.expandtext { - font-style:italic; - font-weight:normal; - color:#ff0000; } -A.dropspot { - cursor:hand; - color:#008000; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -A.glossterm { - color:#800000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.glosstext { - font-style:italic; - font-weight:normal; - color:#0000ff; } -OL { - margin-top:0px; - margin-bottom:0px; - font-family:"Times New Roman" , serif; } -UL { - margin-top:0px; - margin-bottom:0px; - font-family:"Times New Roman" , serif; } -A:active { } -A:hover { - x-text-underline:Off; - text-decoration:none; } -A:link { - x-text-underline:Off; - text-decoration:none; } -A:visited { - x-text-underline:Off; - text-decoration:none; } -P.TODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } -LI.kadov-P-CTODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } -ol ol { - margin-top:1px; } -ol ul { - margin-top:1px; } -ul ul { - margin-top:1px; } -ul ol { - margin-top:1px; } diff --git a/doc/salome/gui/GUI/doxyfile.in b/doc/salome/gui/GUI/doxyfile.in new file mode 100755 index 000000000..dfb7f3614 --- /dev/null +++ b/doc/salome/gui/GUI/doxyfile.in @@ -0,0 +1,44 @@ +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "GUI Module Reference Manual v.@VERSION@" +OUTPUT_DIRECTORY = ./ +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +TAB_SIZE = 5 + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = @srcdir@/input +FILE_PATTERNS = *.doc +IMAGE_PATH = @srcdir@/images + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = ./ +HTML_HEADER = @srcdir@/static/header.html +HTML_FOOTER = @srcdir@/static/footer.html +#HTML_STYLESHEET = @srcdir@/static/doxygen.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO \ No newline at end of file diff --git a/doc/salome/gui/GUI/dump_study.htm b/doc/salome/gui/GUI/dump_study.htm deleted file mode 100755 index 660565d85..000000000 --- a/doc/salome/gui/GUI/dump_study.htm +++ /dev/null @@ -1,172 +0,0 @@ - - - - - -Dump Study - - - - - - - - - - - - - -

Working with Python Scripts

- -

SALOME Platform can be launched - in the batch mode, without Graphical User Interface, and operated with - the use of Python scripts, which can fulfill most of the necessary tasks, - however, the process of scripting is quite time consuming and rather error-prone. -

- -

This problem has been resolved by the possibility to automatically generate - a set of Python scripts from data created with SALOME GUI, which greatly - increases the productivity of using SALOME platform in the batch mode. - This mechanism can convert a SALOMEDS Study in one or several Python scripts, - which can be stored and imported later to re-create the content of the - original study. The first script is a SALOMEDS document, which re-creates - the SALOMEDS Study, adds the stored Salome components to the SALOMEDS - and automatically calls Python scripts of the second type containing component - specific Python function calls. This architecture gives great flexibility - in manual modification of the generated scripts because you can modify - only one of the component specific Python scripts without touching others, - thus avoiding expert knowledge of Python API of unused components.

- -

 

- -

To Dump a  SALOME - Study in one or several scripts, in the main menu select File - --> Dump study

- -

The following dialog box allowing to browse for the location and define - the name for a Python file will appear:

- -

 

- -

- -

 

- -
    - -
  • Publish - in study - if checked in, the component objects created by Python - commands will be published in the created Study when the script is played, - otherwise the objects will not be published in the Study.

  • - -
  • Save - GUI state - if checked in, the current application layout will - be saved in the Python file.  

  • -
- -

 

- -

To - confirm your choice click Save.

- -

 

- -

Reversibly it is possible to load a saved - Python Script selecting in the main menu File - -> Load Script.

- -

 

- -

- -

 

- -

To - confirm your choice click Open.

- -

 

- - - - diff --git a/doc/salome/gui/GUI/ehelp.xml b/doc/salome/gui/GUI/ehelp.xml deleted file mode 100755 index 9884c422c..000000000 --- a/doc/salome/gui/GUI/ehelp.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - WebSearch - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/ehlpdhtm.js b/doc/salome/gui/GUI/ehlpdhtm.js deleted file mode 100755 index 6cfd2e463..000000000 --- a/doc/salome/gui/GUI/ehlpdhtm.js +++ /dev/null @@ -1,4239 +0,0 @@ -// eHelp® Corporation Dynamic HTML JavaScript -// Copyright© 1998-2003 eHelp® Corporation.All rights reserved. -// Version=4.82 - -// Warning:Do not modify this file.It is generated by RoboHELP® and changes will be overwritten. - -//// Segment Begin -- (JavaScript 1.0) - -/// Section Begin - General and relative topics(JavaScript 1.0) - -//{{HH_SYMBOL_SECTION -var HH_ChmFilename = ""; -var HH_WindowName = ""; -var HH_GlossaryFont = ""; -var HH_Glossary = ""; -var HH_Avenue = ""; -var HH_ActiveX = false; -//}}HH_SYMBOL_SECTION - -//Begin to support previous generic parameters -//Get the information about the browser. -var gstrBsAgent = navigator.userAgent.toLowerCase(); -var gnBsVer = parseInt(navigator.appVersion); - -var gbBsOpera = (gstrBsAgent.indexOf('opera') != -1); -var gbBsKonqueror = (gstrBsAgent.indexOf('konqueror') != -1); -var gbBsSafari = (gstrBsAgent.indexOf('safari') != -1); -var gbBsIE = (gstrBsAgent.indexOf('msie') != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari; -var gbBsNS = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1)) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari; - -var gbBsMac = (gstrBsAgent.indexOf('mac') != -1); -var gbBsWindows = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1)); -var gbBsSunOS = (gstrBsAgent.indexOf("sunos") != -1); - -var gbBsIE3Before = ((gbBsIE) && (gnBsVer <= 2)); -var gbBsNS3Before = ((gbBsNS) && (gnBsVer <= 3)); - -var gbBsNS2 = ((gbBsNS) && (gnBsVer <= 2)); -var gbBsNS3 = ((gbBsNS) && (gnBsVer == 3)); -var gbBsIE300301 = ((gbBsIE) && (gnBsVer == 2) && ((gstrBsAgent.indexOf("3.00") != -1)||(gstrBsAgent.indexOf("3.0a") != -1)||(gstrBsAgent.indexOf("3.0b")!=-1)||(gstrBsAgent.indexOf("3.01")!=-1))); -var gbBsIE302 = ((gbBsIE) && (gnBsVer == 2) && (gstrBsAgent.indexOf("3.02") != -1)); - -var gbBsNS4 = ((gbBsNS) && (gnBsVer >= 4)); -var gbBsNS6 = ((gbBsNS) && (gnBsVer >= 5)); -var gbBsNS7 = false; - -var gbBsIE4 = ((gbBsIE) && (gnBsVer >= 4)); -var gbBsIE5 = false; -var gbBsIE55 = false; - -var gbBsOpera6 = false; -var gbBsOpera7 = false; - -var gbBsKonqueror3 = false; - - - -gbBsIE = (navigator.appName.indexOf("Microsoft") != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;; -if (gbBsIE) -{ - if (parseInt(navigator.appVersion) >= 4) { - gbBsIE4 = true; - if (gbBsIE4) { - var nPos = gstrBsAgent.indexOf("msie"); - var strIEversion = gstrBsAgent.substring(nPos + 5); - var nVersion = parseFloat(strIEversion); - if (nVersion >= 5) - gbBsIE5 = true; - if (nVersion >= 5.5) - gbBsIE55 = true; - } - } -} -if (gbBsNS6) -{ - var nPos=gstrBsAgent.indexOf("gecko"); - if(nPos!=-1) - { - var nPos2=gstrBsAgent.indexOf("/", nPos); - if(nPos2!=-1) - { - var nVersion=parseFloat(gstrBsAgent.substring(nPos2+1)); - if (nVersion>=20020823) - gbBsNS7=true; - } - } -} -if (gbBsOpera) -{ - var nPos = gstrBsAgent.indexOf("opera"); - if(nPos!=-1) - { - var nVersion = parseFloat(gstrBsAgent.substring(nPos+6)); - if (nVersion >= 6) - { - gbBsOpera6=true; - if (nVersion >=7) - gbBsOpera7=true; - } - } -} -if (gbBsKonqueror) -{ - var nPos = gstrBsAgent.indexOf("konqueror"); - if(nPos!=-1) - { - var nVersion = parseFloat(gstrBsAgent.substring(nPos+10)); - if (nVersion >= 3) - { - gbBsKonqueror3=true; - } - } -} - -function insertAdjacentHTML(obj, where, htmlStr) -{ - if (gbBsIE || gbBsOpera7) - { - obj.insertAdjacentHTML(where, htmlStr); - } - else if (gbBsNS6 || gbBsSafari) - { - var r = obj.ownerDocument.createRange(); - r.setStartBefore(obj); - var parsedHTML = r.createContextualFragment(htmlStr); - - switch (where){ - case 'beforeBegin': - obj.parentNode.insertBefore(parsedHTML,obj); - break; - case 'afterBegin': - obj.insertBefore(parsedHTML,obj.firstChild); - break; - case 'beforeEnd': - obj.appendChild(parsedHTML); - break; - case 'afterEnd': - if (obj.nextSibling){ - obj.parentNode.insertBefore(parsedHTML,obj.nextSibling); - } else { - obj.parentNode.appendChild(parsedHTML); - } - break; - } - } -} - -// Utilities functions. -function BsscHasExtJs() -{ - if( gbBsIE3Before || gbBsNS3Before) - return false; - return true; -} - -// Register event handler -var gBsOnLoads = new Array(); // An array holds all the onload event handler. -var gBsOnClicks = new Array(); // An array holds all the onClick event handler. -var gBsOnUnLoads = new Array(); // An array holds all the OnUnLoad event handler. -var gBsOnMouseOvers = new Array(); // An array holds all the OnMouseOver event handler. -var gBsOnMouseOuts = new Array(); // An array holds all the OnMouseOut event handler. - -var gbOrignalOnMouseDown = null; - -function BsscRegisterOnLoad(funcHandler) -{ - var nLength = gBsOnLoads.length; - gBsOnLoads[nLength] = funcHandler; -} - -function BsscRegisterOnClick(funcHandler) -{ - var nLength = gBsOnClicks.length; - gBsOnClicks[nLength] = funcHandler; -} - -function BsscRegisterOnUnLoad(funcHandler) -{ - var nLength = gBsOnUnLoads.length; - gBsOnUnLoads[nLength] = funcHandler; -} - -function BsscRegisterOnMouseOver(funcHandler) -{ - var nLength = gBsOnMouseOvers.length; - gBsOnMouseOvers[nLength] = funcHandler; -} - -function BsscRegisterOnMouseOut(funcHandler) -{ - var nLength = gBsOnMouseOuts.length; - gBsOnMouseOuts[nLength] = funcHandler; -} - -function BsGeneralOnLoad() -{ - if (!gbBsIE4 && !gbBsNS4) - return; - - // Make everything visible in navigator - if (gbBsNS4 && !gbBsNS6) { - // Make some special effects items visible - for (var iLayer = 0; iLayer < document.layers.length; iLayer++) { - document.layers[iLayer].visibility = "show"; - document.layers[iLayer].left = 0; - } - } -} - -// If resize the netscape browser, need to reload it. -function BsReDo() -{ - if (innerWidth != origWidth || innerHeight != origHeight) - location.reload(); -} -// End of the local functions. - -// The following functions are used by the html files. -function BSSCOnLoad() -{ - if( !BsscHasExtJs() ) - return; - for (var nElement = gBsOnLoads.length - 1; nElement >= 0; nElement--) - gBsOnLoads[nElement](); -} - -function BSSCOnClick() -{ - if (!BsscHasExtJs()) return; - - for (var nElement = gBsOnClicks.length - 1; nElement >= 0; nElement--) - gBsOnClicks[nElement](); -} - -function BSSCOnUnload() -{ - if (!BsscHasExtJs()) return; - for (var nElement = gBsOnUnLoads.length - 1; nElement >= 0; nElement--) - gBsOnUnLoads[nElement](); -} - -function BSSCOnMouseOver() -{ - if (!BsscHasExtJs()) return; - for (var nElement = gBsOnMouseOvers.length - 1; nElement >= 0; nElement--) - gBsOnMouseOvers[nElement](); -} - -function BSSCOnMouseOut() -{ - if (!BsscHasExtJs()) return; - for (var nElement = gBsOnMouseOuts.length - 1; nElement >= 0; nElement--) - { - gBsOnMouseOuts[nElement](); - } -} -// End of invocation of the event handle functions. - -// Add the GereralOnLoad to the onload array. -if (typeof(BsscRegisterOnLoad) != "undefined") -{ - BsscRegisterOnLoad(BsGeneralOnLoad); -} -if (gbBsNS4&&!gbBsNS6) { - origWidth = innerWidth; - origHeight = innerHeight; - onresize = BsReDo; -} -//End to support previous generic parameters - -//Begin to support previous HHActiveX invoking -function BsHHActivateComponents() -{ - if( HH_ActiveX && (HH_ChmFilename != "") && ((self == top) || (self == top.frames[0]))) - { - var objBody = getElementsByTag(document,"BODY")[0]; - if( typeof(objBody) == "object" ) - { - insertAdjacentHTML(objBody, "beforeEnd", ''); - if (HHComponentActivator.object) - HHComponentActivator.Activate(HH_ChmFilename, HH_WindowName, HH_GlossaryFont, HH_Glossary, HH_Avenue); - } - } -} - -function BsHHActivXOnLoad() -{ - if( gbBsIE4 ) - BsHHActivateComponents(); -} - -if( typeof(BsscRegisterOnLoad) != "undefined" ) -{ - BsscRegisterOnLoad(BsHHActivXOnLoad); -} -//End to support previous HHActiveX invoking - -//Begin to support previous relative topics -//If webHelp needs Related Topics DHTMLcode, it's supposed to add it here -var gbPopupMenuTimeoutExpired = false; -var gbInPopupMenu = false; -var gbPopupMenuTopicList = null; -var gOlddocumentClick = null; - -////////////////////////////////////////////////////////////////////////////////////////// -// -// Popup Menu code -// -////////////////////////////////////////////////////////////////////////////////////////// - -var g_bIsPopupMenuInit = false; -function _WritePopupMenuLayer() -{ - if (!g_bIsPopupMenuInit) - { - if (gbBsNS4&&!gbBsNS6) { -//Do not try to write ininle styles for NS! NS can not handle it and will not stop downloading the html page... - document.write("
"); - } else{ - document.write(""); - if (!(gbBsNS4&&!gbBsNS6)) { - document.write(""); - } - } - g_bIsPopupMenuInit = true; - } -} - -//Seek for the bsscright frame -function _SeekFrameByName( cRoot, strName ) -{ - if( cRoot == null ) return null; - if( cRoot.frames == null ) return null; - if( cRoot.frames[strName] != null ) return cRoot.frames[strName]; - for (var i=0; i'; - } else { - strMenu += '' + gbPopupMenuTopicList[fn_arguments[i]].strTitle + ''; - } - strMenu += ''; - - if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) { - i += 2; - } else { - i += 1; - } - } - strMenu += ""; - - if (gbBsMac) { - // totally hack. because ie5 in mac need something. is one of them. mac is mad. - strMenu +="
"; - } - - var layerPopup = null; - var stylePopup = null; - var nEventX = 0; - var nEventY = 0; - var nWindowWidth = 0; - if (gbBsIE4 || gbBsOpera7) { - - layerPopup = getElement("PopupMenu"); - layerPopup.innerHTML = strMenu; - stylePopup = layerPopup.style; - - _BSPSGetClientSize(); - - // Get the position of the item causing the event (relative to its parent) - nEventX = window.event.clientX; - nEventY = window.event.clientY; - - if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) { - nEventY += document.body.scrollTop + 10; - } else { - nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20; - } - stylePopup.top = nEventY; - - var nPopupWidth = layerPopup.scrollWidth; - if (gbBsMac) { - nPopupWidth = 80; // we have no idea how to get the dynamic width of the popup. - } - if (nEventX + nPopupWidth + 20 > gBsClientWidth) { - if (gBsClientWidth - nPopupWidth < 5) { - stylePopup.left = 5; - } else { - stylePopup.left = gBsClientWidth - nPopupWidth - 5; - } - } else { - stylePopup.left = nEventX + document.body.scrollLeft + 20; - } - - stylePopup.visibility = "visible"; - if (!gOlddocumentClick && document.onclick) - gOlddocumentClick = document.onclick; - document.onclick = PopupMenu_HandleClick; - - } else if (gbBsNS6 || gbBsKonqueror3||gbBsSafari) { - layerPopup = getElement("PopupMenu"); - layerPopup.style.visibility = "hidden"; - - if (gbBsNS6) - { - var e = fn_arguments[0]; - nEventX = e.pageX; - nEventY = e.pageY; - } - else - { - nEventX = window.event.clientX; - nEventY = window.event.clientY; - } - _BSPSGetClientSize(); - layerPopup.innerHTML = strMenu; - - if (nEventY + layerPopup.offsetHeight + 20 < window.pageYOffset + gBsClientHeight) { - nEventY += 20; - } else { - nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20; - } - - if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) { - if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) { - nEventX = 5; - } else { - nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20; - } - } else { - nEventX += 20; - } - layerPopup.style.top = nEventY; - layerPopup.style.left = nEventX; - // set again to avoid the stupid frash in netscape 6. - layerPopup.innerHTML = strMenu; - layerPopup.style.visibility = "visible"; - //window.captureEvents(Event.MOUSEDOWN); - if (!gOlddocumentClick && document.onclick) - gOlddocumentClick = document.onclick; - window.onclick = PopupMenu_HandleClick; - } - else if (gbBsNS4) { - layerPopup = document.layers.PopupMenu; - layerPopup.visibility = "hide"; - stylePopup = layerPopup.document; - stylePopup.write(strMenu); - stylePopup.close(); - var e = fn_arguments[0]; - nEventX = e.pageX; - nEventY = e.pageY; - _BSPSGetClientSize(); - if (nEventY + layerPopup.clip.height + 20 < window.pageYOffset + gBsClientHeight) { - nEventY += 20; - } else { - nEventY = gBsClientHeight + window.pageYOffset- layerPopup.clip.height - 20; - } - layerPopup.top = nEventY; - - if (nEventX + layerPopup.clip.width + 20 > gBsClientWidth + window.pageXOffset) { - if (gBsClientWidth + window.pageXOffset - layerPopup.clip.width < 20) { - nEventX = 5; - } else { - nEventX = gBsClientWidth + window.pageXOffset - layerPopup.clip.width - 20; - } - } else { - nEventX += 20; - } - - layerPopup.left = nEventX; - - layerPopup.visibility = "show"; - - window.captureEvents(Event.MOUSEDOWN); - if (!gOlddocumentClick && document.onmousedown) - gOlddocumentClick = document.onmousedown; - window.onmousedown = PopupMenu_HandleClick; - } - - window.gbInPopupMenu = true; - window.gbPopupMenuTimeoutExpired = false; - setTimeout("PopupMenu_Timeout();", 100); - return false; -} - -function PopupMenu_Timeout() -{ - window.gbPopupMenuTimeoutExpired = true; -} - -function PopupMenu_Over(e) -{ - if (gbBsIE4||gbBsOpera7) - e.srcElement.className = "PopupOver"; - else if (gbBsNS6) - e.target.parentNode.className = "PopupOver"; - return; -} - -function PopupMenu_Out(e) -{ - if (gbBsIE4||gbBsOpera7) - e.srcElement.className = "PopupNotOver"; - else if (gbBsNS6) - e.target.parentNode.className = "PopupNotOver"; - return; -} - -function PopupMenu_HandleClick(e) -{ - if (window.gbPopupMenuTimeoutExpired) { - window.gbInPopupMenu = false; - if (gbBsNS4 && !gbBsNS6) { - window.releaseEvents(Event.MOUSEDOWN); - } - - var layerPopup = null; - if (gbBsNS4&&!gbBsNS6) { - layerPopup = document.layers.PopupMenu; - layerPopup.visibility = "hide"; - } else { - layerPopup = getElement("PopupMenu"); - layerPopup.style.visibility = "hidden"; - } - - if (gOlddocumentClick) - { - if (gbBsNS4 && !gbBsNS6) - document.onmousedown = gOlddocumentClick; - else - document.onclick = gOlddocumentClick; - } - } - return; -} - -function BSSCPopup_ClickMac() -{ - if ((!DHTMLPopupSupport()) && (gbBsIE4 || gbBsOpera7)) - { - var bClickOnAnchor = false; - var el; - if ((window.event != null) && - (window.event.srcElement != null)) - { - el = window.event.srcElement; - while (el != null) - { - if ((el.tagName == "A") || (el.tagName == "AREA")) { - bClickOnAnchor = true; - break; - } - if (el.tagName == "BODY") { - break; - } - el = getParentNode(el); - } - } - if (BSSCPopup_IsPopup()) - { - if (!bClickOnAnchor) { - parent.window.gPopupWindow = null; - self.close(); - } - } - else - { - bClosePopupWindow = true; - if ((bClickOnAnchor) && - (el.href) && - ((el.href.indexOf("javascript:BSSCPopup") != -1) || (el.href.indexOf("javascript:null") != -1) || (el.href.indexOf("javascript:void(0)") != -1))) - { - bClosePopupWindow = false; - } - if (bClosePopupWindow) - { - if (window.gPopupWindow != null && !window.gPopupWindow.closed ) - { - window.gPopupWindow.close(); - } - } - } - } -} - -function BsPopupOnClick() -{ - if (!gbBsIE4 && !gbBsOpera7) - return; - - BSSCPopup_ClickMac(); -} - -function _BSSCOnError(message) -{ - if(-1 != message.indexOf("denied") - || -1 != message.indexOf("Object required")) - return true; -} - -//End to support previous relative topics - -/// Section End - General and relative topics (JavaScript 1.0) - -/// Section Begin - Popup (JavaScript 1.0) -//Begin to support previous popup functions - -//variables used to isolate the browser type -var gBsStyVisShow = null; -var gBsStyVisHide = null; -var gBsClientWidth = 640; -var gBsClientHeight = 480; - -// here is the varible for judge popup windows size. these parameter is for IE5.0, it may need adjust for others. -var gBRateH_W = 0.618; // 1.618 Golden cut. -var gBMaxXOfParent = 0.8; -var gBMaxYOfParent = 0.8; -var gBscrollHeight = 16; -var gBscrollWidth = 16; -var gBpermitXDelta = 3; -var gBpermitYDelta = 3; - - -var arrayPopupURL = new Array(); -var arrayAbsPopupURL = new Array(); - -var arrayDirty = new Array(); - -function setAbsPopupURL(nIndex, strURL) -{ - arrayAbsPopupURL[nIndex] = strURL; -} - -function getAbsPopupURL(nIndex) -{ - if (nIndex == -1 || arrayAbsPopupURL.length <= nIndex) return null; - else - return arrayAbsPopupURL[nIndex]; -} - -function getPopupURL(nIndex) -{ - if (nIndex == -1 || arrayPopupURL.length <= nIndex) return null; - else - return arrayPopupURL[nIndex]; -} - -function getPopupID(nIndex) -{ - return gstrPopupID + nIndex; -} - -function getPopupShadowID(nIndex) -{ - return gstrPopupShadowID + nIndex; -} - -function getPopupTopicID(nIndex) -{ - return gstrPopupTopicID + nIndex; -} - -function getPopupIFrameID(nIndex) -{ - return gstrPopupIFrameID + nIndex; -} - -function getPopupIFrameName(nIndex) -{ - return gstrPopupIFrameName + nIndex; -} - - -function getPopupTopicStyle(nIndex) -{ - return getElement(getPopupTopicID(nIndex)).style; -} - -function getPopupShadowStyle(nIndex) -{ - return getElement(getPopupShadowID(nIndex)).style; -} - -function getPopupIFrame(nIndex) -{ - if (gbBsNS6) - return eval("window.frames['" + getPopupIFrameName(nIndex) + "']"); - else - return eval("document.frames['" + getPopupIFrameName(nIndex) + "']"); -} - -function getPopupDivStyle(nIndex) -{ - return getElement(getPopupID(nIndex)).style; -} - -function getPopupIFrameStyle(nIndex) -{ - return getElement(getPopupIFrameID(nIndex)).style; -} - - -function findDiv(strURL) -{ - for (var i = 0; i < arrayPopupURL.length; i ++ ) { - if (arrayPopupURL[i] == strURL) { - return i; - } - } - return -1; -} - -var gnToken = -1; -function takeToken() -{ - gnToken ++; - if (gnToken > 10000) gnToken = 0; - return gnToken; -} - -function IsValidToken(nToken) -{ - return (gnToken == nToken); -} - -function addDiv(strURL) -{ - for (var i = 0; i < arrayPopupURL.length; i ++) { - if (arrayPopupURL[i] == null) { - arrayPopupURL[i] = strURL; - return i; - } - } - arrayPopupURL[i] = strURL; - arrayDirty[i] = true; - return i; -} - -function setDirty() -{ - for (var i = 0; i < arrayPopupURL.length; i ++ ) - arrayDirty[i] = true; -} - -function IsDirty(nIndex) -{ - if (nIndex == -1) - return true; - else - if (arrayDirty.length > nIndex) - return arrayDirty[nIndex]; - else - return true; -} - -function hideAll() -{ - for (var i = 0; i < arrayPopupURL.length; i ++ ) - { - getPopupDivStyle(i).visibility = gBsStyVisHide; - getPopupIFrameStyle(i).visibility = gBsStyVisHide; - } -} - -function getCurrentPopupIFrame() -{ - for (var i = 0; i < arrayPopupURL.length; i ++) - if (getPopupDivStyle(i).visibility == gBsStyVisShow) - return getPopupIFrame(i); - return null; -} - -function setClear(nIndex) -{ - if (nIndex != -1) - arrayDirty[nIndex] = false; -} - -function _BSSCCreatePopupDiv(strURL) -{ - var nIndex = findDiv(strURL); - if (nIndex == -1 ) { - nIndex = addDiv(strURL); - BsPopup_CreateDiv(nIndex); - } - else { - if (IsDirty(nIndex)) { - if("object" == typeof(getPopupIFrame(nIndex).document)) - getPopupIFrame(nIndex).document.location.href = strURL; - } - } - return nIndex; -} - -//Here is the browser type -function _BSPSGetBrowserInfo() -{ - if (gbBsNS4&&!gbBsNS6) - { - gBsStyVisShow = "show"; - gBsStyVisHide = "hide"; - } - else - { - gBsStyVisShow = "visible"; - gBsStyVisHide = "hidden"; - } -} - -_BSPSGetBrowserInfo(); - -//Get client size info -function _BSPSGetClientSize() -{ - if (gbBsNS4||gbBsKonqueror3||gbBsSafari) - { - gBsClientWidth = innerWidth; - gBsClientHeight = innerHeight; - } - else if (gbBsIE4 || gbBsOpera7) - { - gBsClientWidth = document.body.clientWidth; - gBsClientHeight = document.body.clientHeight; - } -} - -var gstrPopupID = 'BSSCPopup'; -var gstrPopupShadowID = 'BSSCPopupShadow'; -var gstrPopupTopicID = 'BSSCPopupTopic'; -var gstrPopupIFrameID = 'BSSCPopupIFrame'; -var gstrPopupIFrameName = 'BSSCPopupIFrameName'; - -var gstrPopupSecondWindowName = 'BSSCPopup'; - -var gPopupWindow = null; -var gnPopupClickX = 0; -var gnPopupClickY = 0; - -var gnPopupScreenClickX = 0; -var gnPopupScreenClickY = 0; - -var gbPopupTimeoutExpired = false; - -function DHTMLPopupSupport() -{ - if (((gbBsIE4) && (!gbBsMac))||gbBsOpera7|| gbBsNS7) { - return true; - } - return false; -} - -function BSSCPopup_IsPopup() -{ - if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) { - return true; - } else if ((gbBsNS4 || gbBsIE4 || gbBsOpera7) && (this.name.indexOf(gstrPopupID) != -1)) { - return true; - } else { - return false; - } -} - -// If there is a hyperlink in a popup window, display the hyperlink in -// the original window. (bsscright) -if (BSSCPopup_IsPopup() && !gbBsIE4 && !gbBsOpera7) { - document.write(""); -} - -// Local functions. -function BsPopup_CreateDiv(nIndex) -{ - if(!DHTMLPopupSupport()) - return; - // DO NOT SET Width and height for the div, otherwize it will make IE4 popup do not work when view the topic alone. - var strPopupDiv = ""; - - var objBody = getElementsByTag(document, "BODY")[0]; - if( typeof(objBody) != "object" ) - return; - - insertAdjacentHTML(objBody, "beforeEnd", strPopupDiv); -} - -function handleLoadNS() -{ - if (this.id) - { - var nIndex = parseInt(this.id.substring(gstrPopupIFrameID.length)); - BSSCPopup_PostWork(nIndex); - } -} - -function BSSCPopup_PostWork(nIndex) -{ - getPopupDivStyle(nIndex).visibility = gBsStyVisShow; - getPopupIFrameStyle(nIndex).visibility =gBsStyVisShow; - - setClear(nIndex); - window.gbPopupTimeoutExpired = true; - - BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document); - if (gbBsNS6) - getPopupIFrame(nIndex).document.body.addEventListener("click",BSSCPopupClicked,false); - else - getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked; - - if (!gbOrignalOnMouseDown && document.onmousedown) - gbOrignalOnMouseDown = document.onmousedown; - - if (gbBsNS6) - document.addEventListener("mousedown", BSSCPopupParentClicked,false); - else - document.onmousedown = BSSCPopupParentClicked; -} - -function BSSCPopup_Timeout(nIndex, nToken) -{ - if (!IsValidToken(nToken)) return; - - if (gbBsNS6||((getPopupIFrame(nIndex).document.readyState == "complete") && - (getPopupIFrame(nIndex).document.body != null))) { - BSSCPopup_PostWork(nIndex); - } else { - setTimeout("BSSCPopup_Timeout(" + nIndex + "," + nToken + ")", 100); - } -} - -// VH 08/10/00 -// do not change target to parent if the href is using javascript -function BSSCPopup_ChangeTargettoParent(tagsObject) -{ - var collA = getElementsByTag(tagsObject, "A"); - BSSCPopup_ChangeTargettoParent2(collA); - - var collIMG = getElementsByTag(tagsObject,"IMG"); - BSSCPopup_ChangeTargettoParent2(collIMG); -} - -function BSSCPopup_ChangeTargettoParent2(colls) -{ - if (colls != null) { - for (var j = 0; j < colls.length; j ++ ) - { - var strtemp = colls[j].href; - if (strtemp) - { - strtemp = strtemp.toLowerCase(); - if (strtemp.indexOf("javascript:") == -1) - if (colls[j].target == "") - colls[j].target = "_parent"; - } - } - } -} - -function BSPSPopupTopicWinHelp(strURL) -{ - _BSSCPopup(strURL); - return; -} - -function _BSSCPopup(strURL, width, height) -{ - var cuswidth = 0; - var cusheight = 0; - if ("undefined" != typeof(width) && "undefined" != typeof(height)) { - cuswidth = width; - cusheight= height; - } - - if (DHTMLPopupSupport()) { - var nToken = takeToken(); // take token first. - var nIndex = _BSSCCreatePopupDiv(strURL); - window.gbPopupTimeoutExpired = false; - var ntWidth = gBsClientWidth; - var ntHeight = gBsClientHeight; - _BSPSGetClientSize(); - if (ntWidth != gBsClientWidth || ntHeight != gBsClientHeight) { - setDirty(); - } - - if (IsDirty(nIndex)) { - if (gbBsMac) { - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight +")", 400); - } else { - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 100); - } - } - else { - MoveDivAndShow(nIndex ,nToken, cuswidth, cusheight); - } - } else { - _BSSCPopup2(strURL, cuswidth, cusheight); - } - return; -} - -if (gbBsIE55) -{ - var ehlpdhtm_fOldBefureUnload = window.onbeforeunload; - var gnBsUnload=0; - window.onbeforeunload = window_BUnload; -} - -function window_BUnload() -{ - gnBsUnload++; - if (gnBsUnload>1) - return; - for (var i = 0; i < arrayPopupURL.length; i ++) - removeThis(document.all(getPopupID(i))); - arrayPopupURL.length = 0; - if (ehlpdhtm_fOldBefureUnload) - ehlpdhtm_fOldBefureUnload(); -} - -function _BSSCPopup2(strURL, width, height) -{ - if (gbBsOpera6&&gbBsMac) - { - var wmTemp = window.open(document.location.href, gstrPopupSecondWindowName); - wmTemp.close(); - setTimeout("_BSSCPopup3(\""+strURL+"\","+width+","+height+");",100); - } - else - _BSSCPopup3(strURL, width, height); -} - -function _BSSCPopup3(strURL, width, height) -{ - if (window.name == gstrPopupSecondWindowName) { - window.location = strURL; - } else { - if (!gbBsMac || !gbBsNS4) { - BSSCHidePopupWindow(); - } - var nX = 0; - var nY = 0; - var nHeight = 300; - var nWidth = 400; - if (width > 0 && height > 0) { - nHeight = height; - nWidth = width; - } - _BSPSGetClientSize(); - - nX = window.gnPopupScreenClickX; - nY = window.gnPopupScreenClickY; - - if (nY + nHeight + 40 > screen.availHeight) { - nY = screen.availHeight - nHeight - 40; - } - if (nX + nWidth + 40 > screen.availWidth) { - nX = screen.availWidth - nWidth - 40; - } - - // Launch a separate window - var strParam="titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes"; - if (gbBsNS) { - if (gbBsNS6) { - strParam += ",Height=" + nHeight + ",Width=" + nWidth; - strParam += ",screenX=" + nX + ",screenY=" + nY; - strParam += ",dependent=yes"; - } - else { - strParam += ",OuterHeight=" + nHeight + ",OuterWidth=" + nWidth; - strParam += ",screenX=" + nX + ",screenY=" + nY; - strParam += ",dependent=yes"; - } - } - else { - strParam += ",height=" + nHeight + ",width=" + nWidth; - strParam += ",left=" + nX + ",top=" + nY; - } - if (gbBsSafari) - { - if (window.gPopupWindow) - window.gPopupWindow.close(); - window.gPopupWindow = window.open(strURL, "", strParam); - window.gPopupWindow.name = gstrPopupSecondWindowName; - window.gPopupWindow.moveTo(nX, nY); - widnow.gPopupWindow.document.location.reload(); - } - else - { - var wmTemp=null; - if (gbBsKonqueror3) - { - if (window.gPopupWindow) - window.gPopupWindow.close(); - } - if (gbBsOpera&&gbBsMac) - { - wmTemp= window.open(document.location.href, "Temp", strParam); - } - window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam); - if (!gbBsIE) - window.gPopupWindow.focus(); - - if (wmTemp) - wmTemp.close(); - } - - if (gbBsNS4) - setEventHandle(); - else if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) - setTimeout("setPopupFocus();", 100); - } - return; -} - -function setEventHandle() -{ - window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUR); - window.gPopupWindow.onclick = NonIEPopup_HandleClick; - window.gPopupWindow.onblur = NonIEPopup_HandleBlur; -} - -function setPopupFocus() -{ - window.gPopupWindow.focus(); -} - -function NonIEPopup_HandleBlur(e) -{ - window.gPopupWindow.focus(); -} - -function NonIEPopup_HandleClick(e) -{ - // Because navigator will give the event to the handler before the hyperlink, let's - // first route the event to see if we are clicking on a Popup menu in a popup. - document.routeEvent(e); - - // If a popup menu is active then don't do anything with the click - if (window.gPopupWindow.gbInPopupMenu) { - window.gPopupWindow.captureEvents(Event.CLICK); - window.gPopupWindow.onclick = NonIEPopup_HandleClick; - return false; - } - - // Close the popup window - if(e.target.href) - { - if(e.target.href.indexOf("javascript:")==-1) - { - if (e.target.target=="") - window.location.href = e.target.href; - else - window.open(e.target.href, e.target.target); - this.close(); - } - } - else - this.close(); - return false; -} - -function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight) -{ - if (!window.getPopupIFrame(nIndex).document) { - _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight); - return; - } - - if (!IsValidToken(nToken)) return; - - if (gbBsNS6) - { - setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url. - BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight); - return; - } - - if ((window.getPopupIFrame(nIndex).document.readyState == "complete") && - (window.getPopupIFrame(nIndex).document.body != null)) { - if (window.getPopupIFrame(nIndex).document.location.href.indexOf("about:blank") != -1) { // add this check. IE will use about:blank" as the default vaule for Iframe. - window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex); - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); - } - else - { - setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url. - BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight); - } - } else { - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); - } -} - -function BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight) -{ - if (window.gbPopupTimeoutExpired) return; - - if (!IsValidToken(nToken)) return; - - getPopupDivStyle(nIndex).visibility = gBsStyVisHide; - getPopupIFrameStyle(nIndex).visibility = gBsStyVisHide; - - // Determine the width and height for the window - _BSPSGetClientSize(); - - var size = new BSSCSize(0, 0); - - if (cuswidth <= 0 || cusheight <= 0) - BSSCGetContentSize(window.getPopupIFrame(nIndex), size); - else { - size.x = cuswidth; - size.y = cusheight; - } - - // Determine the width and height for the window - var nWidth = size.x; - var nHeight = size.y; - - // for small popup size, we should allow any size. - // The popup size should be ok if bigger than 0 - if (nWidth < 0 || nHeight < 0) return; // there must be something terribly wrong. - - getPopupDivStyle(nIndex).width = nWidth; - getPopupDivStyle(nIndex).height = nHeight; - - getPopupShadowStyle(nIndex).width = nWidth; - getPopupShadowStyle(nIndex).height = nHeight; - getPopupTopicStyle(nIndex).width = nWidth; - getPopupTopicStyle(nIndex).height = nHeight; - if (gbBsIE55) - { - getPopupShadowStyle(nIndex).width = nWidth + 2; - getPopupShadowStyle(nIndex).height = nHeight + 2; - getPopupTopicStyle(nIndex).width = nWidth + 2; - getPopupTopicStyle(nIndex).height = nHeight + 2; - } - - getPopupIFrameStyle(nIndex).width = nWidth; - getPopupIFrameStyle(nIndex).height = nHeight; - if (gbBsIE55 || gbBsNS6) - { - getPopupIFrameStyle(nIndex).top = 0; - getPopupIFrameStyle(nIndex).left = 0; - } - - var strURL = getPopupURL(nIndex); - if (strURL.indexOf("#") != -1&&gbBsNS6) - getPopupIFrame(nIndex).location.reload(); - else if (strURL.indexOf("#") != -1||gbBsNS6) - getPopupIFrame(nIndex).location.href = strURL; // reload again, this will fix the bookmark misunderstand in IE5. - - MoveDivAndShow(nIndex, nToken, cuswidth, cusheight); -} - -function getScrollLeft() -{ - if (document.body.scrollLeft) - return document.body.scrollLeft; - else if (window.pageXOffset) - return window.pageXOffset; - else - return 0; -} - -function getScrollTop() -{ - if (document.body.scrollTop) - return document.body.scrollTop; - else if (window.pageYOffset) - return window.pageYOffset; - else - return 0; -} - - -function MoveDivAndShow(nIndex, nToken, cuswidth, cusheight) -{ - if (window.getPopupIFrame(nIndex).document.location.href != getAbsPopupURL(nIndex)) { // if redirect, reload again. - window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex); - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); - return; - } - - // Determine the position of the window - var nClickX = window.gnPopupClickX; - var nClickY = window.gnPopupClickY; - var nTop = 0; - var nLeft = 0; - - var nWidth = parseInt(getPopupDivStyle(nIndex).width); - var nHeight = parseInt(getPopupDivStyle(nIndex).height); - - if (nClickY + nHeight + 20 < gBsClientHeight + getScrollTop()) { - nTop = nClickY + 10; - } else { - nTop = (getScrollTop() + gBsClientHeight) - nHeight - 20; - } - if (nClickX + nWidth < gBsClientWidth + getScrollLeft()) { - nLeft = nClickX; - } else { - nLeft = (getScrollLeft() + gBsClientWidth) - nWidth - 8; - } - - if (nTop < getScrollTop()) nTop = getScrollTop() + 1; - if (nLeft< getScrollLeft()) nLeft = getScrollLeft() + 1; - - getPopupDivStyle(nIndex).left = nLeft; - getPopupDivStyle(nIndex).top = nTop; - - // Set the location of the background blocks - getPopupShadowStyle(nIndex).left = 6; - getPopupShadowStyle(nIndex).top = 6; - if (gbBsIE55) - { - getPopupShadowStyle(nIndex).left = 4; - getPopupShadowStyle(nIndex).top = 4; - } - - if (gbBsMac&&gbBsIE4) { - // Total hack on the iMac to get the IFrame to position properly - getPopupIFrameStyle(nIndex).pixelLeft = 100; - getPopupIFrameStyle(nIndex).pixelLeft = 0; - // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it - getPopupIFrame(nIndex).window.BSSCOnLoad(); - } - - if (gbBsNS6&&IsDirty(nIndex)) - getElement(getPopupIFrameID(nIndex)).addEventListener("load", handleLoadNS, false); - else - BSSCPopup_Timeout(nIndex , nToken ); - return; -} - -function BSSCSize(x, y) -{ - this.x = x; - this.y = y; -} - -function BSSCGetContentSize(thisWindow, size) -{ - if (!gbBsIE4 && !gbBsOpera7 && !gbBsNS4) - return; - - if ((gbBsMac&&gbBsIE4)||gbBsNS4||gbBsOpera7) { - size.x = 320; - size.y = 180; - return; - } - - // Resize the width until it is wide enough to handle the content - // The trick is to start wide and determine when the scrollHeight changes - // because then we know a scrollbar is necessary. We can then go back - // to the next widest size (for no scrollbar) - - var ClientRate = gBsClientHeight / gBsClientWidth; - - - var GoldenSize = new BSSCSize(0,0); - GoldenSize.x = gBsClientWidth * gBMaxXOfParent; - GoldenSize.y = gBsClientHeight *gBMaxYOfParent ; - - if (ClientRate > gBRateH_W) { - GoldenSize.y = GoldenSize.x * gBRateH_W; - } - else { - GoldenSize.x = GoldenSize.y / gBRateH_W; - } - - // Try to using parent specified max x. - var x = 0; - var maxgoldx = GoldenSize.x; - var maxx = gBsClientWidth * gBMaxXOfParent; - - // This double resize causes the document to re-render (and we need it to) - if (!gbBsIE5) - thisWindow.moveTo(10000,10000); // this is used to fix the flash on IE4. - - thisWindow.resizeTo(1, 1); - thisWindow.resizeTo(1, 1); - thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight); - thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight); - - var miny = thisWindow.document.body.scrollHeight + gBscrollHeight; - - if (miny > GoldenSize.y) // the popup does not fix in the parent wanted golden area. so try to expand itself as large as it can - { - thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight); - thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight); - - miny = thisWindow.document.body.scrollHeight + gBscrollHeight; - maxy = gBsClientHeight * gBMaxYOfParent; - - if (miny > maxy) { // the popup must have a scroll, OK let it be. - miny = maxy; - size.x = maxx; - size.y = maxy; - thisWindow.document.body.scroll = 'yes'; // At this time we do want to show scroll any more. so it will looks better a little. - } - else { // popup still can fit in the parent area by someway. now we choose the same h/w rate as parent. - size.y = miny; - - // downsize from maxx , now I try to using binary divide. - x = maxx; - deltax = -maxx/2; - //j = 0; - while (true) { - x = x + deltax; - thisWindow.resizeTo(x, miny); - thisWindow.resizeTo(x, miny); - diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * ClientRate; - if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter - deltax = Math.abs(deltax) /2; - else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter - deltax = -Math.abs(deltax) /2; - else - // the y is close enough to wanted. - break; - if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore. - break; - } - size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth; - size.y = thisWindow.document.body.scrollHeight;// + gBscrollHeight; - thisWindow.document.body.scroll = 'no'; - } - } - else { - if (thisWindow.document.body.scrollWidth > maxgoldx) { - size.x = maxx; - size.y = miny; - thisWindow.document.body.scroll = 'yes'; - } - else { - // downsize from maxgoldx , now I try to using binary divide. - x = maxgoldx; - deltax = -maxgoldx/2; - while (true) { - x = x + deltax; - thisWindow.resizeTo(x, miny); - thisWindow.resizeTo(x, miny); - diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * gBRateH_W; - if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter - deltax = Math.abs(deltax) /2; - else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter - deltax = -Math.abs(deltax) /2; - else - // the y is close enough to wanted. - break; - if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore. - break; - } - size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth; - size.y = thisWindow.document.body.scrollHeight ; - thisWindow.document.body.scroll = 'no'; // At this time we do not want to show scroll any more. so it will looks better a little. - thisWindow.resizeTo(size.x, size.y); - if (thisWindow.document.body.scrollWidth > size.x) - { - size.x = thisWindow.document.body.scrollWidth; - } - if (thisWindow.document.body.scrollHeight > size.y) - { - size.y = thisWindow.document.body.scrollHeight; - } - } - } - thisWindow.resizeTo(size.x, size.y); - thisWindow.resizeTo(size.x, size.y); - return; -} - -function BSSCPopupParentClicked() -{ - if (!window.gbPopupTimeoutExpired) { - return false; - } - - document.onmousedown = gbOrignalOnMouseDown; - - // Simply hide the popup - hideAll(); - - window.gbPopupTimeoutExpired = false; - - return true; -} - -function isInsideHyperLink(obj) -{ - if (obj&&obj!=getParentNode(obj)) - { - if (obj.tagName=="A"||obj.tagName=="IMG") - return true; - else - return isInsideHyperLink(getParentNode(obj)); - } - else - return false; -} - -function BSSCPopupClicked(e) -{ - if (!window.gbPopupTimeoutExpired) { - return false; - } - - var popupIFrame = getCurrentPopupIFrame(); - if (popupIFrame == null) { - return true; - } - - if (gbBsIE4 && (!((popupIFrame.window.event != null) && - (popupIFrame.window.event.srcElement != null) && - isInsideHyperLink(popupIFrame.window.event.srcElement)))) { - document.onmousedown = gbOrignalOnMouseDown; - - // Simply hide the popup - hideAll(); - window.gbPopupTimeoutExpired = false; - return true; - } - else if (gbBsNS6 && (!((e != null) && - (e.target!= null) && isInsideHyperLink(e.target)))) - { - document.addEventListener("mousedown", gbOrignalOnMouseDown,false); - // Simply hide the popup - hideAll(); - window.gbPopupTimeoutExpired = false; - return true; - } -} - -//trace the mouse over's position for hotspot -function BSPSPopupOnMouseOver(event) -{ - if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) { - window.gnPopupClickX = event.clientX + getScrollLeft(); - window.gnPopupClickY = event.clientY + getScrollTop(); - window.gnPopupScreenClickX = event.screenX; - window.gnPopupScreenClickY = event.screenY; - } else if (gbBsSafari) { - window.gnPopupClickX = event.clientX + getScrollLeft(); - window.gnPopupClickY = event.clientY + getScrollTop(); - window.gnPopupScreenClickX = event.screenX + window.screenX; - window.gnPopupScreenClickY = event.screenY + window.screenY; - } else if (gbBsNS4) { - window.gnPopupClickX = event.pageX - window.pageXOffset; - window.gnPopupClickY = event.pageY - window.pageYOffset; - window.gnPopupScreenClickX = event.screenX - window.pageXOffset; - window.gnPopupScreenClickY = event.screenY - window.pageYOffset; - } -} - -function BSSCHidePopupWindow() -{ - if (window.gPopupWindow != null) { - if (gbBsNS4) { - if ((typeof window.gPopupWindow != "undefined") && (!window.gPopupWindow.closed)) { - window.gPopupWindow.close(); - window.gPopupWindow = null; - } - } - } - return; -} - -// Add the PopupOnClick to the onclick array. -if (typeof(BsscRegisterOnClick) != "undefined") -{ - BsscRegisterOnClick(BsPopupOnClick); -} -//End to support previous popup functions - -/// Section End - Popup (JavaScript 1.0) - -/// Section Begin - Embedded Stub (JavaScript 1.0) - -function BSSCCreatePopupDiv() -{ - return; -} - -function WritePopupMenuLayer() -{ - if (BsscHasExtJs()) {_WritePopupMenuLayer();} -} - -function BSSCPopup(strURL, width, height) -{ - var re = new RegExp("'", 'g'); - strURL = strURL.replace(re, "%27"); - - if (BsscHasExtJs()) { - _BSSCPopup(strURL, width, height); - }else{ - //Create a temporary window first to ensure the real popup comes up on top - var wndTemp = null; - if (!gbBsNS3) { - wndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4"); - } - // Create the real popup window - var wndPopup = window.open(strURL, "BSSCPopup", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=300,width=400"); - // Close the temporary - if (!gbBsNS3) { - wndTemp.close(); - } else { - wndPopup.focus(); - } - } -} - -var gbWndTemp = null, gbWndPopupLinks = null; -var gbstrParaTotal = ""; - -function PopupMenu_Invoke() -{ - if (typeof(wfRelatedTopic) == 'function' && typeof(IsFlashSupported) == 'function') - { - if (Number(gsSkinVersion) > 2 && IsFlashSupported()) - { - return wfRelatedTopic(PopupMenu_Invoke.arguments); - } - } - if (BsscHasExtJs()) { - return _PopupMenu_Invoke(PopupMenu_Invoke.arguments); - } - if (gbBsNS3Before || gbBsIE3Before ) { - var argLen = PopupMenu_Invoke.arguments.length; - if (argLen < 5) { - window.document.location.href = PopupMenu_Invoke.arguments[3]; - return false; - } - gbWndTemp = null; - gbWndPopupLinks = null; - gbstrParaTotal = ""; - for (var i = 0; i < (argLen - 2) / 2; i++) { - var strParaLine = ""; - if (gbBsNS2){ - strParaLine += "" - strParaLine += PopupMenu_Invoke.arguments[2 * i + 2]; - strParaLine += ""; - } else { - strParaLine += ""); - if (gbBsNS2) { - gbWndPopupLinks.document.write(""); - } else { - //YJ: IE301,302 and NS3.x works fine - gbWndPopupLinks.document.write("<"); - gbWndPopupLinks.document.write("script>"); - gbWndPopupLinks.document.write("function gotoUrl(aUrl) {opener.window.location=aUrl; close();}"); - gbWndPopupLinks.document.write("<"); - gbWndPopupLinks.document.write("/script>"); - } - gbWndPopupLinks.document.write(""); - gbWndPopupLinks.document.write(gbstrParaTotal); - gbWndPopupLinks.document.write(""); - gbWndPopupLinks.document.close(); - - // Close the temporary - if (!gbBsNS3 && gbWndTemp != null) { - gbWndTemp.close(); - }else { - gbWndPopupLinks.focus(); - } - - return true; - } - return false; -} - -/// Section End - Embedded Stub (JavaScript 1.0) - -//// Segment End -- (JavaScript 1.0) - -//// Segment Begin -- (JavaScript 1.2) -/// Section Begin - kadov DHTM (JavaScript 1.2) - -//Begin to support extended and dropdown text effects. -function kadovIsParagraph(el) -{ - return( el.tagName == "P" || el.tagName.indexOf("H") == 0 ) ? true : false; -} - -function kadovInitEachChild(el) -{ - for(var i=0; i "") ) - child.style.setAttribute( "x-on-pageload", "" ); - } - - var href = child.getAttribute("href") - if( href != null && href > "" && href.indexOf( "BSSCPopup" ) >= 0 ) - kadovFilePopupInit(child.id); // Init for Popup - else if( child.className == "dropspot" || child.className == "expandspot" || - child.className == "glossterm" ) - kadovTextPopupInit(child.id);// Init for Expanding/Glossary or DropDown text - else if( child.className == "trigger") - kadovInitTrigger(child.id);// Init for Trigger - else - { - kadovInitEffects(child.id);// Init for DHTML effects - CEngine.SetOneTargetInitialState( child.id ); - } - } - - if( (child.tagName == "IMG") && (child.getAttribute("dynsrc") > "") ) - child.start = "mouseover";// to start a AVI file. fileopen doesn't work - - kadovInitEachChild(child); - } -} - -function kadovRetrieveTextInner(el) -{ - var x = ""; - if( (!el) || (el.tagName == "!") || (el.tagName == "SCRIPT" )) - return x; - - if( kadovIsParagraph(el) ) - { - var strNewID = " "; - if( el.id != "" ) - strNewID += "id=" + el.id + "_NewSpan "; - x = "" + el.innerHTML + ""; - } - else - { - for(var i=0; i 0 ) - if( (nTagClose - nTagOpen) != nDistance ) - return strRawHTML; - - var strCleanOnce = strRawHTML.substring(0, nTagOpen) + strRawHTML.substr(nTagClose + strTagClose.length) ; - return kadovRetrieveCleanHTML( strCleanOnce, strTagOpen, strTagClose ); -} - -function kadovAdjustObjectTag(strRawHTML, nStartPos) -{// adjust object tag for related topics HTML control, because innerHTML misses out the item settings - - //Is there any DTC? - var strDTCTagOpen = ''; - var nDTCTagOpen = strRawHTML.indexOf( strDTCTagOpen, nStartPos ); - if( nDTCTagOpen < 0 ) - return strRawHTML; - var nDTCTagClose = strRawHTML.indexOf( strDTCTagClose, nDTCTagOpen ); - if( nDTCTagClose < nDTCTagOpen) - return strRawHTML; // no Design Time Controls; - - //Is the DTC HTML Help Control? - var strRTObjTagOpen = 'classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11'; - var strRTObjTagClose = ''; - var nRTObjTagOpen = strRawHTML.indexOf( strRTObjTagOpen, nDTCTagOpen ); - if( nRTObjTagOpen < nDTCTagOpen ) - return strRawHTML; - var nRTObjTagClose = strRawHTML.indexOf( strRTObjTagClose, nRTObjTagOpen ); - if( nRTObjTagClose < nRTObjTagOpen ) - return strRawHTML; // is not a HTML help control - - // Is it a related Topics html help control? - var strRTObjLabel = ''; - } - - // to insert the reconstructed item params into runtime object tag - var strAdjustedHTML = strRawHTML.substring(0,nRTObjTagClose) + strRunTimeItemParam + strRawHTML.substring(nRTObjTagClose, strRawHTML.length); - return kadovAdjustObjectTag(strAdjustedHTML, nDTCTagClose + strDTCTagClose.length); -} - -function kadovTextPopupOnLoad( el ) -{ - if( typeof(el) == "string" ) - el = getElement(el); - - var src = el.getAttribute( "x-use-popup" ); - var bNeedMove=true; - if(!src&&el.id) - { - for (var i=0;i"); - strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, ""); - - //work around the bug in HH.exe that highlight the phrases when use Search tab - //this approach is just removing the tag inserted by Microsoft in the runtime - strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "", 52); - - var strStyle = " style='display:none; position:relative;"; - var newDiv = "
" + strCleanHTML + "
"; - - removeThis(srcDiv); // empty the original DIV tag - var elParentPra = kadovFindParentParagraph(el); - if( elParentPra ) - insertAdjacentHTML(elParentPra, "afterEnd", newDiv ); - } - else if( type == "expanding" ) - { - var inner = kadovRetrieveTextInner(srcDiv); - if( inner == "" ) - inner = srcDiv.innerHTML; - var strAdjust = kadovAdjustObjectTag(inner,0); - var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, ""); - strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, ""); - var strClassName = (el.className == "glossterm") ? "glosstext" : "expandtext"; - var newSpan = ""; - removeThis(srcDiv); // empty the original DIV tag - insertAdjacentHTML(el, "afterEnd", newSpan ); - } - } - } - else - { - srcDiv.style.display = "none"; - } - return 0; -} - -function getElementsByTag(obj,sTagName) -{ - if(obj.getElementsByTagName) - return obj.getElementsByTagName(sTagName); - else if(obj.all) - return obj.all.tags(sTagName); - return null; -} - -function getElement(sID) -{ - if(document.getElementById) - return document.getElementById(sID); - else if(document.all) - return document.all(sID); - return null; -} - -function getParentNode(obj) -{ - if(obj.parentNode) - return obj.parentNode; - else if(obj.parentElement) - return obj.parentElement; - return null; -} - -function getChildNodes(obj) -{ - if(obj.childNodes) - { - var children = new Array(); - for (var i = 0; i < obj.childNodes.length; i++) - { - if (obj.childNodes[i].nodeType == 1) - children[children.length] = obj.childNodes[i]; - } - return children; - } - else if(obj.children) - return obj.children; - return null; -} - -function removeThis(obj) -{ - if(obj.parentNode) - obj.parentNode.removeChild(obj); - else - obj.outerHTML=""; -} - -function kadovTextPopup( el ) -{ - if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3 ) - return; - - var bNeedMove=true; - - if (window.event) - window.event.cancelBubble = true; - - if( typeof(el) == "string" ) - el = getElement(el); - - if (!el||el==window) - return; - - var src = el.getAttribute( "x-use-popup" ); - if(!src&&el.id) - { - for (var i=0;i= 0 && nNext < values.length ) - { - functions[nIdx] = values.substr( nStart, nNext-nStart+1); - nStart = nNext + 1; - nIdx++; - nNext = values.indexOf( "\)", nStart); - } - - for( var i=0; i= 0 ) - { - nPageClick = arrForClickCount[j].indexOf("="); - if( nPageClick > 0 ) - { - nClickTimes = arrForClickCount[j].substring( nPageClick + 1, arrForClickCount[j].length) * 1; - break; - } - } - } - var args = srcargs; - if( j < arrForClickCount.length ) - {// to strip out the "clicks=99" from the arguments string - args = ""; - for( var k = 0; k < arrForClickCount.length; k ++ ) - { - if( k != j ) - { - args += arrForClickCount[k]; - if( k < arrForClickCount.length - 1 ) - args += ","; - } - } - } - bsscFXInit( null, id, translatedProp, fnname, args, nClickTimes ); - } -} - -function kadovTranslateProp( prop ) -{ - switch( prop ) - { - case "x-on-hover" : return "bsschover"; - case "x-on-pageclick" : return "bsscpageclick"; - case "x-on-pageload" : return "bsscpageload"; - case "x-on-trigger-1" : return "bssctrigger1"; - case "x-on-trigger-2" : return "bssctrigger2"; - } - return null; -} -//End to convert iWrite format to RoboEditor Format for DHTML effects - -//Begin the definition of one entry to DHTML effects -function bsscFXInit( trigger_ID, target_ID, event_type, - action_type, action_setting, event_addional ) -{ - if( (!gbBsWindows && !gbBsSunOS && !(gbBsMac&&gbBsIE5)) || typeof(target_ID) != "string" )//MUST have a target_ID - return; // we don't support Navigator yet - - if( typeof(event_type) == "string" ) - event_type = event_type.toLowerCase(); - if( typeof(action_type) == "string" ) - action_type = action_type.toLowerCase(); - if( typeof(action_setting) == "string" ) - action_setting = action_setting.toLowerCase(); - - // to get the target element then add it to the target list - var eleTarget = CCSSP.GetObject( target_ID ); - if( (eleTarget != null) && (event_type != null) && (action_type != null) ) - { - CEngine.AddOneTarget( target_ID, eleTarget ); - CEngine.BuildTargetObject(target_ID, event_type, action_type, action_setting, event_addional); - } - - // to validate the trigger_ID parameter - if( typeof(trigger_ID) == "string" && trigger_ID != "" ) - CEngine.BuildTriggerObject( trigger_ID, target_ID ); -} -//End the definition of one entry to DHTML effects - -/// Section End - kadov DHTM (JavaScript 1.2) - -/// Section Begin - CCSSP DHTM (JavaScript 1.2) - -//Begin JavaScript libary for cross-platform positioning object. -function CCSSP(){} // constructor of CCSSP class - -CCSSP.GetObject = function( obj ) -{//convert object name string or reference into a valid object reference - if( typeof(obj) == "object" ) - return obj; - else if( typeof(obj) == "string" && obj != "") - { - if( gbBsNS4 ) - return eval("document." + obj); - else - return eval("document.all(\"" + obj + "\")"); - } - else - return null; -} - -CCSSP.MoveObjectTo = function(obj, x, y) -{//positioning an object at a specific pixel coordinate - if( gbBsNS4 ) - obj.moveTo(x,y); - else - { - obj.style.pixelLeft = x; - obj.style.pixelTop = y; - } -} - -CCSSP.MoveObjectBy = function(obj, dx, dy) -{//moveing a object by x and/or y pixel - if( gbBsNS4 ) - obj.moveBy(dx,dy); - else - { - obj.style.pixelLeft += dx; - obj.style.pixelTop += dy; - } -} - -CCSSP.SetObjectBGColor = function(obj, color) -{//set the background color of an object - if( gbBsNS4 ) - obj.bgColor = color; - else - obj.style.backgroundColor = color; -} - -CCSSP.ShowObject = function(obj, bShow) -{// set the object to be visible or invisible - if( gbBsNS4 ) - obj.visibility = (bShow == true) ? 'show' : 'hide'; - else - obj.style.visibility = (bShow == true) ? 'visible' : 'hidden';// when hidden, it still occupy some space. -} - -CCSSP.GetObjectLeft = function(obj) -{// retrieve the x coordinate of a posionable object - if( gbBsNS4 ) - return obj.left; - else - return obj.style.pixelLeft; -} - -CCSSP.GetObjectTop = function(obj) -{// retrieve the y coordinate of a posionable object - if( gbBsNS4 ) - return obj.top; - else - return obj.style.pixelTop; -} - -CCSSP.GetObjectContainLeft = function(obj) -{// retrieve the x coordinate of a posionable object relative to it's parent element - if( gbBsNS4 ) - return obj.pageX; - else - { - if( obj == document.body ) - return obj.clientLeft; - else - return obj.offsetLeft; - } -} - -CCSSP.GetObjectWindowLeft = function(obj) -{// retrieve the x coordinate of a posionable object relative to browser window - if( gbBsNS4 ) - return obj.pageX; - else - { - var nOffsetWindowLeft = 0; - for(var element = obj; element; element = element.offsetParent) - nOffsetWindowLeft += CCSSP.GetObjectContainLeft(element); - return nOffsetWindowLeft; - } -} - -CCSSP.GetObjectContainTop = function(obj) -{// retrieve the y coordinate of a posionable object relative to it's parent element - if( gbBsNS4 ) - return obj.pageY; - else - { - if( obj == document.body ) - return obj.clientTop; - else - return obj.offsetTop; - } -} - -CCSSP.GetObjectWindowTop = function(obj) -{// retrieve the y coordinate of a posionable object relative to browser window - if( gbBsNS4 ) - return obj.pageY; - else - { - var nOffsetWindowTop = 0; - for(var element = obj; element; element = element.offsetParent) - nOffsetWindowTop += CCSSP.GetObjectContainTop(element); - return nOffsetWindowTop; - } -} - -CCSSP.GetObjectHeight = function(obj) -{// retrieve the height of a posionable object - if( gbBsNS4 ) - return obj.clip.height; - else - return obj.offsetHeight; -} - -CCSSP.GetObjectWidth = function(obj) -{// retrieve the width of a posionable object - if( gbBsNS4 ) - return obj.clip.width; - else - return obj.offsetWidth; -} - -CCSSP.RegisterEventHandler = function( srcObj, rawEventName, funcHandler ) -{ // to add the "funcHandler" as the "rawEventName" 's handler to the "srcObj" object,the original event handler will be combined - if (gbBsNS4 && !gbBsNS6) - return ; - - var oldHandler = ""; - - if (gbBsMac &&gbBsIE4&&!gbBsIE5) - { - if (typeof(srcObj[rawEventName.toLowerCase()])=="unknown") - { //search for - - - - - - - - - -

Geometry preferences

- -

In the Geometry module you can - set preferences for visualisation of geometrical figures which can be - used in later sessions with this module.

- -

 

- -

- -

 

- -
- -

 

- - - - diff --git a/doc/salome/gui/GUI/i_blue.jpg b/doc/salome/gui/GUI/i_blue.jpg deleted file mode 100755 index ed3acfac2eb212d536dbbfc2b4d47c959747109a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1337 zcmaKodo-CSk zj7%T`3dul2X$#ZEkV8G0ltU*gehncg)*}8p1R}!#K@GMrDHws1q(OBN+#sIJxo6n( z+Tur7x+dNaR1`B|GC~GFfD$j;xSwmXa&I3Wuz00I>AhjwxFIb&zn(SSKEKIz_U5hH z$Z8yPI%={7Pu$)ZVh%U(mWG|M_AHNH7VT6BnZFpx9E=en$p|1APcm z@qG9k8ejTuRDy$@gTLl!%EfX*57!`EA{i8FuwdQ7bAzGlO+2{O2S_&UyWRqzJlW_y z(LgXxaC~pwk$R^J(#W`8ENwQNuVeAZr+({bMA7W3 zMoHR6xTnO((?!{>B>ZwBtiNq@@b-o7S8p%L-JGpk;?JrR4kj8|OsC<@=$eg9dP z6*;$Q=>`9?L)+lS>yA~n9j|-um>8NG<(NG#R}Kz1ZD0IHMP5Mq5gGAb$;iCPxDso~ z>wTj!Xen&T(rU<+II%C%=Zkh+$StVT$q~m*SZ5o`&rfP*9dbx7H8M6$e@CGToG%MK zSD$VZZ3|JWvk!H(5lI$a2BA#e*e9RJZfT&IU&pJxSjU5-ArHi(gpp%4ygr1wYwusu z(y-sJv6_)ylu>Zlvf_eUM?`E#P3!boUw$jK*OxYtEEHtcaM6Sz-$T87b@FRJS2w-6 zG^KX1GwOripJ`*nGX1#X=+XQ(>-Le`=8-9us$DaI4KJnUOrkUD{8H35Fw3Sj7h5h! z>HVyE^NZrNr10uKjw+{d0(PEwuJ!vef zuvoWW#$hPkwQ?;;nvEB3Vpm-|p6$i;@5tD08b~YAA&{RxEVXPUZ-JG+QPUr|V_F$@I zXS;1p=(tK8FGE-@oN>#YkwF_a1tYA7egj zW^n6ief`ATK1SFn+ag+w|Mfht$g_4nx(AM=>_}YPPhzXae;aiDO3h>4b)9F{f3T?% zo#IdMPb9KtvZ9;I)c()C6Dqm=1DdZu@k`x^exwvg}d zoC|z$oF{fzlv{Tlz2o%x$(;6>oL)xZGz)qR2<7%s?>*6}l!k_=7}1b~)FhaZe!Mi* ntsV1Q$ocz}1}2fD+RUKR+?970I}4cV<-EX|YKN=(__MzOO5YZJ diff --git a/doc/salome/gui/GUI/images/batchmode.png b/doc/salome/gui/GUI/images/batchmode.png new file mode 100644 index 0000000000000000000000000000000000000000..c439d7ebb2cf51c7cf63b51bb6c21a1583aa5cb1 GIT binary patch literal 67279 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 b{7FlDU-`S=T0ED6|EHm*qxwSS@TLC+SY{5G literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/cataloggenerator.png b/doc/salome/gui/GUI/images/cataloggenerator.png new file mode 100755 index 0000000000000000000000000000000000000000..51a0f2786546ce8989fa8831832ca18ccd5d8d65 GIT binary patch literal 15404 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 H@a_KtedGHD literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/choicepage.png b/doc/salome/gui/GUI/images/choicepage.png new file mode 100644 index 0000000000000000000000000000000000000000..e3afcc58819b4376ee7b7971b286478f665e8d44 GIT binary patch literal 19744 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/clipping.png b/doc/salome/gui/GUI/images/clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..6d738558ef738fb4d486114723a367e9821e145e GIT binary patch literal 12933 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≦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 B^Rxf} literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/dumpstudy.png b/doc/salome/gui/GUI/images/dumpstudy.png new file mode 100755 index 0000000000000000000000000000000000000000..f899e778ce5d3dd07f61b18942fc1e956a2e70ca GIT binary patch literal 22049 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/geomview-alt.png b/doc/salome/gui/GUI/images/geomview-alt.png new file mode 100755 index 0000000000000000000000000000000000000000..e797b085d3a214c0f6f26413c7e19326e0e7138f GIT binary patch literal 73865 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/graduatedaxes1.png b/doc/salome/gui/GUI/images/graduatedaxes1.png new file mode 100644 index 0000000000000000000000000000000000000000..cf021ba4281dc156c488d4dd03bd27c2baf37096 GIT binary patch literal 18919 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 H{rCSL?m0qN literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/icon_about.png b/doc/salome/gui/GUI/images/icon_about.png new file mode 100755 index 0000000000000000000000000000000000000000..0cfa37ae050a1c9a07e31e61a0c072c9fe048e8b GIT binary patch literal 148435 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

NF_sL1hSAC!NjFo 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 V?#}S`6jJycKA@tQxKIDD{{nm~h#LR^ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/newsticn.jpg b/doc/salome/gui/GUI/images/newsticn.jpg new file mode 100755 index 0000000000000000000000000000000000000000..94c8ee971ad77ee3d385eed1bdcc4c781dabe251 GIT binary patch literal 851 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`E2%BVw~$GS!x@I+)g1wm8O5nWvUfC2jT1 ziv1o})=j&1_=s3|I1gvUg5B;(?CK50q3^E7ADbt^!zh<~o~8b>*jjnDHvG^o zzl9|scVce2>$JKtrUm$mu62-@bvW+U>se~cvzOh8U%F(nWK!efaK^=2{O3+t&5ye9 zpP}V)z<-8?=28C{_FtR-r)up*2Z?_on|55TQC@uG?(wI0Zr?mAvT{P%h5(Ke5B`a6 KbQNLze-i-eS~>;* literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/note1.gif b/doc/salome/gui/GUI/images/note1.gif similarity index 100% rename from doc/salome/gui/GUI/note1.gif rename to doc/salome/gui/GUI/images/note1.gif diff --git a/doc/salome/gui/GUI/images/objectbrowser1.png b/doc/salome/gui/GUI/images/objectbrowser1.png new file mode 100755 index 0000000000000000000000000000000000000000..16ab896a21ecfbfde70947b74086b95c1d636478 GIT binary patch literal 10900 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/objectbrowser2.png b/doc/salome/gui/GUI/images/objectbrowser2.png new file mode 100755 index 0000000000000000000000000000000000000000..e010ef2b0f355bfe72f08ce2ae156415b1998316 GIT binary patch literal 16560 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/open.jpg b/doc/salome/gui/GUI/images/open.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5829aef523cc7cacca1697127f7feab94a69e417 GIT binary patch literal 928 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!#DmdzW*6)m;7hg*XvlhYT5jp>*CY*xo9`U zc^a^$yjrjG>)!Nbx_7p1h*|PpXTyYbW~|CAO$<+-cReZX7pa~7mNR{gZ?);R$2s?J zX1zEk()jtE+!8V7o$In@tSWhaQuo-Rn=hvAS`>F^a&+9!jXUnFnUo^S+n-l6aLwtP!*xWS_W%QL)d$8497+Ef9%b|Y6U*EBpTTaM{P(y28Gh`t zf0*_<{`2d^{|t5a|1)&2c@?-k@Lr)$=9VhA$xEU#u6gHX%3XbRrZU}b$#>JLJ$6Dudv zACr|^)Pv`9&SPTjn)r%gwe#GxyI$L#g)d4J_cP_b_QGuv7xRj(H@7Ws*v&M@iTA+t z^@pZ~@p8!7EZA_PwdnsXnKcO;k`E?rot66MhT++EUCr>e9+SsO2Yb!Ak9qId-}bU^+B9jg3i;U2H~KcTQ|ve2hti zzeC1z(~^@D6~sjpBp0MMOg7+O5@UHOm4T5x=T%LoQHt+$CN>!Xhb=2E&eMuy60J&T zxV${TRm@{T!!wV?KFNz*8V-7dkxc@3Yu aSFhjSM7Qo6>|yuM?cM$T{S{^=25SI|qKmBn literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/image71.gif b/doc/salome/gui/GUI/images/plot2d_lines.gif old mode 100755 new mode 100644 similarity index 77% rename from doc/salome/gui/GUI/image71.gif rename to doc/salome/gui/GUI/images/plot2d_lines.gif index 26fcc670f54ef92a0098486dc07f8442a1d5df69..8d1dc2313e469f3feea1e0f678c86559b545938f GIT binary patch literal 908 zcmZ?wbh9u|6lV};_|5Tu+h;i9YS5)O0ma4=W{07C;hF8}}l literal 899 zcmZ?wbh9u|6k`x)_|5?tT9J`Tzg_!D6GtXb6mm5YPen5|kGhI5HSm zIb=LGEI7!-%ApZ+VuPYH1Ba|vjs`>0p-u^Hw<8vTk6rutY@4QN6sfp&tNG{otlXgD z&7>E3%*XO_%2`IPLZJ&gH>5GN+HC$`m?mY*B_s`$IfBzi_{(t}f|3AYh7!85p9s)Wb z4}$Un1IIxIb`BYj4GRu7GYe?MoY=7NaJzuA*Bp;T; zXVy9V=DH?bQP6mRiAh8tp~B$tvHoC$`m?mY*B_s`$IfBzi_{(t}f|3AYh7!85p9s)Wb z4}$Un1IHc)b`BYj4GSEbIE1ufPHb3sxLrWmYt9S-2iI;9NhSt?14+kQr48-2oS3N0 zG?~kqtz*R{6?aDQcsHG$L1|7?4aDVc?EL)n7y~2Amp__Qo-;CgOlC7xP+$mNsz2Fl zt`@_}hE+j}{qCMJU3qO?0&h!y)i%duGkFka=iv7{nyXdp5CtK zx7YDE*EZ=H@9rI}`Q9hm5K-`u$wA(H-RT+cuAZ7~{8{zD&dtxyFR+!D@vU-jV6X-N Dz&&b^ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/image68.gif b/doc/salome/gui/GUI/images/plot2d_points.gif old mode 100755 new mode 100644 similarity index 72% rename from doc/salome/gui/GUI/image68.gif rename to doc/salome/gui/GUI/images/plot2d_points.gif index f8ea563bb4033d5c88d61bca670488df6099a52c..6700f0078b07372ed258446f7cf0120d8dba505d GIT binary patch delta 233 zcmV0^QEAV&6Q>RstWoG%#%CQ1#)#M{!+-!g*Z*N& literal 919 zcmZ?wbh9u|6laiS_|5?tT9J`Tzg_!D6GtXb6mm5YPen5|kGhIBFO; zIb=LGEI8QAA*>Zsv7zB`yMVlw&VdOG3@sw!Tsv+|c<9z6XDM}N#fN0~UM22HJ{d(R z9uqVYr}=mms2-Z86+dr|W^seVe3phsYb*^K92T=o;FHbx{2-{&m)A~JVC#b`t60{* elF?kS`uh5~Ogc>nzU`}g00;Q#mk|Nlc(jZ&i_ zFziA=2jnAAUSQz(&cMqd536l7?eZos&NXM@lZ=jludhvs-Lc<9dRAUZ?G^T1N?xi*|Ep&twz zFS9U+Na=cgU3zAU{(QBJUnZ+AvIhI|d8{&RWLz6~Q11^{!hr^+2+k?Cx4$Od+Lq5P za$?ogb(gmY+!ia?6`mKrC1Ecg>+f$b@9pe}Hml3}u`+%|r|^7{m@>Vl^BfGfYq@uQ zN#DG*eU(`Bfs#yCHlN*deXGl|ug_QBb?x+S^ZYwIlbPl1V$452Ue>D|FZZ$G^YaUf Sy{GqW*j3uCXvoIGU=08&XNPkD literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/plot2d_splines.gif b/doc/salome/gui/GUI/images/plot2d_splines.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d50b2097130ed74ad0cd8cf38a7cbbf03160c98 GIT binary patch literal 970 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/ppref1.png b/doc/salome/gui/GUI/images/ppref1.png new file mode 100755 index 0000000000000000000000000000000000000000..dd91013ce058ed9ff4787523113ccce30ec26ebc GIT binary patch literal 27312 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 Mcl~n8#aqAs9}73RkpKVy literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref11.png b/doc/salome/gui/GUI/images/pref11.png new file mode 100755 index 0000000000000000000000000000000000000000..26ddbe9b9f6d860adc9379275d5e38738d153d5d GIT binary patch literal 28667 zcmb@u1z42r+BH04prW84AZ-xR-Q^>QG|~-9O2^PCA|N0j-5^SL*8oE!Inp_F$Ivy@ ze~r(6_qX@E-~ao+|2RI51Cg1z@B7MiuC>ndBJi#JoBMZ3??NDu`%;qPN)QOv4*2%J zeG9z8ge=O0K%PLP#Q#$H;IoNz)loUT?ARUcDX!JlLIut@q-V~5qQ4yl%Vy3*4p{46 zr0E{!4!3b>*O`sh#+YPA``^`C{Ir$sC#Y3pWS*800sHg`tGVa=@=55E$>PA)vs0Io zouqxF$co^8Hp1hgk7RJEJGS$8m5sjOGt8I0jOInZxpI3+Br+wX?091oaoICvtf8Y* zq9;Qi?gKq@c-OU5dtR}6$U1X?jS=;p1zRGR7%HTHy+tBbM=v6ha(Qt! zc_zvqOmt`w>-6>SoBR6G$(Ov}g=3x(**Q5mDRLC=ToSpPvxE-+0=|CfhexiFvMf_4 z$&MDsDX}M7j%^af^9D?8KJI{EmW#`Jjy@vrtBJ-a`C$s1DPgEnISRetK+slznpoUle?b0|MToUrPV4$~UWDE+9CWPMD~uz8y$ z&%*rtr@TBy7I}KUMCB4q-5QrR!bIk6aab$*l9Lx9iAYXPvbDE!qMcjkmW?YmRKH}w z41qU4i~QR>2?p*wjgq)zNjbUasQK6VJYMO;w3B9sPFUUtA{G4y&_bS9k#2`r*3mdY>8yVG)O5)_GQ7u+baJ% z!EN!MyJKq{PVo=dhktrq+^VjrdC!w5RhAi^6xG`Q6K;2YatD>|NH?6TlIhdg=hv#z z*S<7bB~x;A->AD+j#e3sI&IC%d53t>o6nk7+o~$_zVe#V(aF}z;JCjnxir;g zL9J7oo0Pd~1;6N(l?!$1CH`XeE?|8V z+TnYLp_aewDDiQn$5lYfR;p_$XDmTc37dn0PY2P%hY!Qyp)vOvZQnRL=T~yEwCVrw zx|La@=D5&R9_r?bv4v-BWuwE4N)R+r(WqOr5Iy+^xv_=Sb1X0z#V`CaD`n9r$lNL%>@?_dadQRCkiM>H> zmOlos&sl0tQ$e=F$sm%_(mzak6I$EbBW(Gfjy7C-&Rb=Qj>#ox9A4yFm@J?jOof@* ztNL~i&8DAH;-W%+?545uyVcy>Rn_~ryvD8ckum2bL;7(-g0|`D`j|J-miClSu*JQyL1|t+65v5ouDHjJnp7eSJ9hOEMpc zNFhQl5DNI}5lZog%L1D`WS!ojWwXQHJMgOMrA}|zN6sEXG2^G4W3MV9D)2Rq>R7pG>7zj^E7%_o zJ5fjLgtm50O>J#7!e$Ll_w$CO_qZ7Y1J&*9Io_9zOG?#9C@JBavg&b92=EIoY$jcv zbdXl*B3?t+C(SEJJx#}o8xtF@sz^S5i`9b8o!^wDCFtwxJ3YGp7+|}WWpiul9S?iy zxytGrT&ICYjsz!`Z*Bz2Tj319(UZ;G&~|0&Lk+>t*drna=@wzz4L?om zDek3`Jx8Tzw?(E&hVIx6W7)5Z~r{FxsQ5OB~m=Roh9``=(f__RO9S&Qdk&pKol}lTysD zp;8SM$67pw(9j50! z0jyQ+p%i(&{&{&ag`Q%|rsA2VtMT|Q+U?3_#roc_JtBAfC6-Y`aa2nD! zbfq92p_>a~oPqgX8#dG#A!!CTiA~_JXad+w^Pu;8c0?3r!!IuGl-zK0u+P*wTu%~m z42oJb0-^kx3$=@P;Z{UsBzt1-l$|NFQsMZ?>1u{$jhVbB3k$2%#?+Wa1k!Z|lnH_8ro`*J;dQub-o z`@{{Maz8RN$FHZf*w_8pi}YUF-a@^;o(W1YHD&`tg$Gnr3d6aonrCnp{t@2zo;caH z$!v?^LbG5_At0MAbzKIIb^F zI9tn3Pfs6-PEoS%h-1d-OVmwyd6UaS4fhm}9qajd7JLedklzf365+%wt!GtFV935ssJfZG zI(GthZRDgiEF_qi#hxAYOf8SFY+TmdoIy%TDv2NJPe3RCHba`Q)@e&Rx=Z!+q+9>? z*(O^j{diUNn5C0^GCauC*PP2DY5KUPY=zJLh{?>%EKZhoU|^uy?U2E=FKO<0#yiVC zy31i>gn6a`szhTIhVOy_veS)VSW1M0+4(LOfUA+Dqd`E@qTTJi=%I6@FV#D7O!ITw?Qq?IC$R=x16oT>M+ZGzS7jo? z2_fbFVb~E0uDN}+uD)C}7HK-en;TL2M*9OM45y!eP=Pbx9h$ZO{zyBeHr%V>8gRhO zLdc-fXvwp$y-Cw7BG}WRe<3|Z(}BMku_-8qT+EQ3eGM*MEb7I?>P*%zwS3yEzxQxG z1V*z|BPY#N;H0XIFk6%XKKz`rBMci+YS&@sbs+M%gLoPVnSOE!=WF z)_wc;?Zmsj)pp9T$2vXuGcEIcG&_I(WBg?>gxD+i+}*78>7N()cXqTRmZt7BM%W## zAj(sO9QSDbssDZ}M;RtxsUs}xQx(T{?dBC_{@)8Goeb(o2cZkD{KNIXOa)o@3}4C4 z%8gx%jQP_Sacg?s<@L2Yb>m+t1T(*eaR0fTy-YQ`y28x$Z6hpLgfnKI!nJ!tYS4$m zJANnh>X;WE(rbbXy{*&OFKS*CQR`vGbWtsWU%e{4#IM~_+Pg5lvj0ybrj$5V)<+3k zg7N=xC>Q;piU59X~df4>~0`XdX~f_T>y_mFgCOPSA@h*9x7-6mzHBm<3?^{iiL? zSZs-xbsArUM1+KrBrdn@4mRixoI$vd$-5?lbJ-lFi2aOmrRo=4Im^lHjXm@}3CCvz zk<;|@mKOwE>Q(-cS@JPXx1T**Y7eQY#i%H~iZu|94Dyl@A}+t@uGqqGNKL7Clw97x zy|A8)5}x$ovB1ZlMklNeKfmU(82(0@KO)g|sVjPE-7EMN)X_qt#y$hA;PAwB`7MD1 zvWxKWJpIeV-UC9Hj|Z&{vobr<)4?o;G$Oo&$Yguwvpjn!lyU2Ub?%-M{B>Fl{=@LS z7tq3#6q1Q1>r&;o8`I&;Pa>-7BAnl1=~G5koiX3-jRyN&kauxi9>TLZWZK#Zi=4234kt& z*V$cUed+ih{7y5}@ZNz{k0_-%&PSxRX@9P#xTS!36xI2G-H+qcq#9OZ3aj)uwXb#DkoYMP^3|fhzh9@?)UF@)?MCpCL`zl0z!oGH9 zyv!5|#ET(EJX>O~!|HDzz&<8lu%gb8b*`MkZU--HVTr=q{Jn&YKG(6w8a!ck(*@eR zT9uY&Nr-sPfE?wl<*~}_<8PBwOWc`Yf&K(rA{lbY?)D-jC1vyL^y?wso9?wOA&fgk za;TB7>^uOzoOn$mP za0Kk(oIYi%L4)4Pe)i*qYWvs3689{{4jHU93V2?L3O5ES$6ha?=&W<@g`sFn(c-&phFCM;@JI2^NKBb$V|#=G|*jZUcDxq3+)-Axj@zCefIaC zUtgDoIc-7g>t~wV2|>((!@Yeb#w;rnMZh=@r-=oORag-Jd=r-W%I~gDy<0S%==nG4 zXomiBGi8V@t#aX{O^_R2O|Pz=p@~}3cE%@$-jdhit?a4!Zp0sd+3;{&70BuvFz1u0 z&*rH*Ep7TSzH}QPhn}Mu+;2LYPE=)gibaYTk9(t>U-)?MHSyGy+tS&^MqK*>B1f>z z_Pf2+Pzfx&oql3C+h#*%&)E((WgVQJ%JUQlabB;iXtSO90<6MhL57E^-=Zu|#XPl3 zw*nT(`6=HNkVZeAh7;n%Y-0^jy@~o3*W4Tp%hu1k+k!4%JQkhbvoYndTlRRSZykE= zo$lgO7P?Hx+dLB*N|N6R&aa$T$lSf`rQHM^R$m$!Q3Lv{!9+AaKQAdOo32@A0s`PC zUtiayXmtp9#RyP>){YLt5{<_^mXE>6E==0M+d4b%*x1;N6zL;6Bk4#uP42O?vx~oZ zv;XUP*y04y6F$DjtgNh|l)}i ztQoXM*ui<*RrAyebhe)YN9p(Pw}pE3L6MOJ3+*8by}UEjG&FvGIK&)w^WvbT0L5rP zpan8?7d-K8z1tyq2YS{QZ!g*Tqt#?(^q7v-OhYnQE6_=+D&zPfgy>aLrPUr~-OY_?z2d>c@Bzie z8<*{bC&m`u%Vo|1#akVb;#;9hkwu1*GG*6hX9}(MI?IY0Q?r~R~`+>iE( z&}BuZo1vN?m;q}eX(9ze+l{@$&Du}z0yJhaBjjW-Qw|0l_Ix#DrJ$96`Cy1K5LXU*TIKh;XmJen5<+L zwYm(%J$7iU|Kwijl$Mruf_*XwR=s?RP-oB*V;qO$-QEOVLooIyHD`8vi&B6Q**e)R zw+0e$S&ZD{b*|Exe1$eQ28idflZJiG#blkc$K}0$$-4H~#du9cw+HfPIQ9x66=Bc3 zaME5a;&SB+CiWTir_f}9fuC>il$4Zg?d;}iyhS^P=#^bjGl*-&mo0}58`B|$y0B8u zGba#1UDl}-miS_x@8j+)#p=h5=_HGICeX?yzAMrAY9W`vGv|vZ!nQuSKL7h$~@$Nr&9aIqh4m1mzW%)xj&rQXHyXugBW zdvUjeig!IhmUiJJR^MxGs%C@g90&_LXK0pLWTr>;rdY8rhDej~EcUE%o`VH^k4l8x znfF*{(&TG@h7561@}Ov3`G@{bzoXL}P*d@^6aur0Djvs)r(RDyQJng)T|TIeD^g5W z_TJS=hp4TiV=s?&`)U94H>dEDs{n9s;X3zXFC<#0!`^6G#;uT}&{TfbibuPW{{V$b z-Vo-u#|!O2hU}4Y?h7sRtc2E?LK7xG)rGwlPq(B$0<2=@s=8;}TgPOJmtEXX=tjCt z!P-P2Zm&?TVO3Vqmr0+iIm|CyU%G07u48h<}h$NlX+ z!QJD<$N{A>;hlicl%J+6{vP#*>H`CoalM&LXMKhW`acXe1U5xINIxc2sV+{n9c;841)^01Qc_?}Q5#}#bl~E3B1Af46fuax0l$4dtM)EZaw@mty z0)vBPDn-mk@}(RcxOx+~fBxlri=5y7GjyeIZf?$J4N>I0GBRSxqg-Qeyx`IN`3|{& z!s#2>-o)picafAAqp3yKWQTYO`ic+0!z6SQfb5v7r?|pUkQKnJO?a@9yCp$a# zi21s9%!t|-l5%}$1R!cQkRE8qOiSwztU%Mmq9jyjzq_pw%06f`+_lG|Z{HoU%u^NG z@b|#(@y1%q3e|7tSP0E$#&=lhd{Myqj;N>14?HK_eweq)Zcm7$ytB}{c0-_|FxvEL z+w+`Yu-!$mUK)MHhKW_DR~yX{VcuP8&KPjo^JbMP)hFUB1;I8o(sZ65ddVS%rM3Gq zb>zma^7$-%d9o!@$}btHWL1}98!}3iH*fOf2xk|ES_kK497l-qHz#-86r;D>ME5oZ z6LO=0B;2eSaa>fm1(1ULN+nM(WTZg5%%~IJ?O-)Lg9!>d+L|OFBs5OyxO`|qUS&Sa z;AwM!v@&yd*51Q1dlJu%FHOW zUy?>2Z6z9>hIlSIUkN&+WNl2b)OppXrjUSQwcB;aFrQwYZQDVe4UbVsunV4zmXHIp zHz^OyX$iPmX;2Bg`MfuwJ&2I;v5<>xOl7;UCp?je8QPHbqYoLfE5Kpm1x=ax2Y6Jo z75M^on}WfQbbYAa?RDvd;r0p@MnoU-ULzz`f=R1_RR+n*bJYi#X&2uX4QaD9&|bCu z$z*haV7iCw9-RzT%=yIGt-oOrRS$EcB6B8ZeVb(Lj^}}5Ro=|uGf-$-(z*&r4PDWw zoJ&kC9XfLu^m$bw2u0!Rr@}5>`t-d86D^RRer%tBOQw&^ddHKxGHmX<}e$p1<%n9?IBxcFXBgR3nvav5iNQ$ zJ$q&x{3nCtw5hSc9-$CM)zPU;M`13+@_`)eNi=)bvo6VLg=CTFf_$KAJO~{v&e;Zg zAK2P3LY~0`nU*B2DdE#z7zy-)dYJ(*i8(yHl}PTJ?w_q)mq#ZNb5{x=3(-H6qZ_cl zG6?6?vJ4AX+0%1)t?6@>*R_S?IMTPX+{Hog451j-O+xub$sjAItiE z9vxlfS^19-F`P&47;Gs3t)6an^OES>%v}%INQjLASC#)>rD#LeOG&&zzAgPcF>YczLJnV8h<0% zd0O*s_!Mbh61{fVbwYXt^U+-0iKk#`Y67>x`0~>!?l5yWYl(CxM`8~@?a{Mm8B$le z_z&rYUtd0@`=f$uT%#H>X|yjUoi;l7nAn(%anK9V`(-3L4%N%-ZlJHkO!@lG1Xl_~{Hg@WtP}dW8inDo%6~ zpWQRe-Sn@}#LwS^a-lWKOzwlGey~#r`_r88NA6hOvyIm#DysJ@s-s2^P*s-kow*Wa6d3Uhd-zLEO z$EkR&`V8U28!ro~L$Bw3_Vas4MTOXgU*R_L&Umzd1@^V}&Ye5$yD`k#w{dW;zia*S zP-wr0Qxi=t;=u<2ooqBI+XeR|U7=IZyV}jEYp-VS1D9dVE-toS#}jJIRn2?M_6`z& zN0q5wr0186g_-qme8o-19cHca*{oDAtl4qXRAVp^fZdZV@g#--;#>lHaI`tz68`)R zInIz}ds|x@pR=Q5n?cE<#%Mn~aHp)T0X-m45Nawl?!JBJ&U?_XcI@y{%i}`ijT7wI zjRhIJZOWcx!O<7p9y$+t6S-Lnccfo0pHZ^Cdr2>W>AI3_TS{XXg<#A|ihC%ddLhJi zYl3^z38v_Eb#YtK>kbsz& zc)2&RVM_$nPJoaX>JCi)qg8?(R^oDvspU&Oo{p z0p$Gr97w5F1Og9&Xiw3cFxE2`^*ZM}zBv^DPZec_&;LwA{#Px)L8;wE9xL2H=QrQN z`94C_^t^g^++fFYv$KcTWPW9(!}HoP$j|OF8FOYLo-~Sn+?uQ+AS3Grw!!YBU``7tME8kok}K_C1a&t7<@j%8-D59SA*HC zQVik3I}06QrspS{f#ffN)H?+uWY1&)HX6`xy(LUQu7jBl#pKhj)_)L_(BZ!1GKtjPhW8IQTu@y_WIu_+P&y6L>A;jf{*M4CPWq zk^#F-nhU!}=V1JTo}M0Za&)xhN38ec=~ExDlL&~2+LaZAqYLW6<^zBLw8gD7MzMGi zPXW;Mn*(r34`&!G{?q`ye@f-P$?h*IH1*hGqTEaZS%;42u_85W4{e&9O!URZ<1m}2 z7P*?=C-3;R)v&*A*tf}VIoS|mKAdapTC{X5fa&=u;onYPQ2h+R!0uc?R+M2*RzORr zO{DQr3keC0mVV{!PM3=HUT(O)DGsa(4D5`e4gY2eAPn4shQX7yhEB`Rk4cEs1^u zvkdvE%1ZyQ>tPa<_b3D&74_-WjFe4o{q0~&%E&-JoWJoGZ5F*cRbbJrZT*%ecK5tZ zA0(IZ@+^EN7F$iq04VstVD4!hzw*LfZ?hP5gi?GC2p}LOG8babp%ziagowqZk<&mG z`iF`$uSxWui8$;$;5Hv(>*@gr^Gv&YLax!On-?lv3@$lSPjvjm_JgKA;xr<*wB>!yG`$;J!$slLyXl#)ub zTWDuGv(=OrGpgC{*;_Z9{~Xxb)&^3SUzx=*@RrfExV2?PCFsQTw=LH;xX@v@H`IBq z9dUV6Wa}D>2)|WFwr-wN=qTs%rP^3CJFqm|4maDrH~HE#9b0Zn^@PWfci;U{jmAJW zy_xHh`NF4m5A($+5vmZ{|o}uuc_m^}7Ez>Z;lFDP}8U(~H5#Xft zDR~`jY64a+lgMKQ9J}i?-dFXCM?jbkmKw`|4JsDPqWg8Dr~%E8Ea=?c(&DQidQnc@ zj47UYShEx@iFLKpg16uQhAJEs$Y6q)h=)te9tc+nKqFxaKR`rmk7GCdTDp?zox-eL zSqxqiIosrfgOWXz<|242ZtxA)!ebiK(gS&(KaI zhMZzd7Dn9Kj3%bh88t-$L#7yxUmVXMe!LEj1Kb4y%*r3iS@ICTeZHm$yAKrV3MO!w zDJjiGGlC^RnC)dPdiJN3C!lxqMtn)b22j4!qxc$D zJ00t*XA$we*04K&inS!)uf=L)yc8mJV>_SAS0E$>frawEFuD2m_}Cy{ilB3$ozT0+ zkK`LyXEokXn=tpX;m#=x=aO{&aYOGerrybgCL9!pK!C#}rK6*h=9O)+3kwce_{yxp zt5s!90fM$wiX&!tx(LAfeFrKF`f`g^A;8An+t~>yi<+qxn6A^@xAZ(YJq?eG`;wZf zA8N(1u2bs}`0?XMoefBmsCP>EbBTFCK|Xpz&W^UaOQr`hWY%156g)gV)@F)Czg-q# zi`09pB4NBfzSl!K5*zlq7~8|buk~DP>kzT%XnfzrG(h?jz6*WvU%uF2N&cm!MY=Is zV7fEgbQATQgChdi!w*SFG}8qjV5|&##@H>V%EMi4`WE7I5Q`c%AiCsh!$U(7c}hLn z?4Nj&Au?@vcY%M&W--E)DW9C+73O>EVaX*r$Xi_ehVQNW48L74Q$mxblJe@gv36S! z;o4ZvbJqG3dGu`>N&D9UL4(z&d)|p_Iu2j?aLIBI?zCe29JTaU+P6 zeC{aA7;j@+2O%(M;St}Nxs+Z2Ub3>76X~!y#ICIg_8v%p;6XMc6b z>$msIE37a&Fm6itY&-F@wL3Q^Cu#-}PpddYes^`)&7`I?-C z)Ou-v`VZx6mNhP56iw6(nw_Q3!zRozRAxc^_>l{TVgYz09bR5u?SsY;jQvACiExMN z`Jj7s==SY^b?)lC3p;JUv^(h-FBCrbEhYrM+fShg;n)n1h0Kug2|j@o%s!ENam37p zLZQknMneJp03SFm2AzL($O&EU!QX-l-ND1_u;dUte}h?~*1ByCST?{06>duPJR(sL zK71s4d1B~u=DHBV3(!#_4PB*GpurULO8jcnVf`Ry0QWD&d90iAXF$G0snR4g7HL%kWy&RDv3Z@l zNQ6=LUS6D$02IPNyW;lgN~$T)SDQ2NRD{UcS7G;~w>9=l9;vACnyd11E&->_Um)-D zv8c%ApSNsl@M|}(z`!3+Q`wqjw86xzx88x90HJhk4e`KxIer7Kx3;m-ovrv2L$J}Lf`ct}br4Mb^3DM-opmzgSH^kyWj+{c5@Qzm7E z=r{Ize>RqQdVa0ho%1@^{l{Q)6~QkBRC86{gWW7K4w{JBhhSr=>w6M@1Y1!iMC3@??2Pdvu} zhLZn31Nnan`NX3~r1ZjnhYS}NzAX7vhP1zn2VO)q#uEHTI7qwEKn{v5Pe)3|t$3f} zW1d9MwB-|vbv7T&nyn1O1;k&oaC^EU5po5=fax64w+6amLVtBIs8Dm&aJIX@{}bp5 zSJe1Q@%Vr!n+wko*SfLDpOVOYutRTFI`wJ+5u^b#VUEm_mn4yLo4>2j(kwB!i7DvNOnr`to8%ciQg;`DIPd^Eu?LM{0^1}u zg9#*yv?|Q6ftk zZ1$~^9&V?ru)l(UE+3Gv=v2Q12nG_* zxDag~o6b`2E9v=YgJ4DQ*z|OIAL4+vj*c?pZX&RjzjPWkn^yoY&&3P95A+8_h}3nq z|CcYYB<6?5yFW|IB~w+9Ozz%{v< zd>6AJm3|Vs*o{qaTihWfj#|=!dtG4GxNfZj2x=HH2#SC}jF~$e)#qJ5#XgCQN^1S` zM&g@^-19>%24Hi6%xgeL>i;GZfs_pQIR6iZiBSVcaaoEYB$w>Dlf(dA(YTRAy+t^99S%l#?@p_T71!;C)L`+u4`5aLMBg zH8Cn9Y@h53D6@I+&C!?Yj;di=BIC8{8Oa3dxDIxL6fz_PeXLQX_hH2bW|xfMjX%&p z3m)L3oTU(rsZ0S-Bzr)khIu2LL;UY@dPx$%`Y@|A{hlHg>;D&AJ@{wc(BGw1|I=;k z7`7nkiy=6q>fh18@=X%(%>Df1&oh63$`g5yy-qsZ;j)Q*n!k<5M}GJx_N~@cE7~0< zRmjhhf7()9j;(js=zlV*Jo3oc-hH%7;z#w2%Cx{!&v=iIs;e5e?vgq0oAlxg%Y*Bs zLE#tuH?ViuRx0>0q|XL^76U3ZNR5MMbaiGg^G628O9>u6d{1r~D!6|*P;8A9Xt+R4 zVpTD2Rf7e)xD1BkCO)XK1BoF>u?7>D*}x5msHiAD0Re!|>rZ%iFt-Erwfnn|@0XAe zZZyX8`MSn=dk60wptJu0N8NUoz)b4#cux!X#}u(G6-bcqcI}bctPNxw)K$>|=jUL1 zbY_(?tD3V=&>jzDurd%Ao;&NCuYn7bvS1ve4F^~LgF!PL&gkv%Y%{y!eIyw)-Dxbw zhK!XO;{a|sKHtY!349@_exv8f+3EhC46ERy*yjr?&Iruxdqe>=#N=nd^UfD?ydTtZ zL=6q8KmeZSsN_V1Gu^_*<~*O9!;BfmJOy?Ri6MKpGq3aQpnOWe~*<4_GC;K4FAIt^OVMAxySfC?W3 zY@ztQ81Q+Z)0zjkfIdfvEi4V&SeLlCx|U$j;0T56j%HK`$1sdn`jUYJr0H<&Vy*;K zbN^%^Y~OKl6tjz>qM|$&?2XRPQJP@NgZ@mpR3z>0T2|^nfjcj-ec}X+%|j1=I7@Ky z*|I^z{Bhr_AF%xF`D5saE_ie=GuQ1j;{c7q4!F?#!UB{+v`S>36!ACi7F%x#FsNkD z?$j?k6IY) zDm#t3cv;@Gvu=_DPeih5jh;*C9c75n&WFV&kXqSYPZIX&2?H+a@bEBS)wm_-#4HM> zm-L>L=)XhmYt$e(+OoN6nPe*eIoMqYh*Y2hJJwb6)`m(5n6)b3ZHyG0Uruhf6Vbjg zWX#!>F~Hz1wW${11%YUmE*J8pG~WQgZu}KZcoIv-2dKo>hTDP_{h>EgE z6=@Lp{Q2|a75Agf&WghRm5B<6qjgIighd??gTQ$0I#?Uz-x>6=^fU<-Ec-MiW^x*$ z9_LkGSEo^J`xL-v6R`dhV z=?!db(4nuuasmXbR&jZITcIeW{>ub;n+$8cIEZt>M9e>wmZX_9il2;%nD!>LMRh7` z5LO07MLiOQBY%{ZCcGN#jp4+&%eIqu@)trpKgpFcm zT>REX^MZ*%z+6cQJ${?^>ZT4-XLns`$NM6VA4;omc_Br_swoR1Oxd}N=oyhYn63el(1cXK&@hnlL9&|F@a zKj;}U1(jUt;b-(YCmeu#GC54v8Q|!W1c6zscR$W_KStFZ%*(ijjspkbRomj~dDMXr z=(OZC2D@Yd7v(SNeGlZA#~HHf9y#Cd7ux5jd8}j8iezjKpGw>+n=x_9PKp(|Z3a<|55w}o22Ar8QJUpDsW+Vx~F9gVAlFJ=ie^HJk zP(~t~$PheALu|4Ueyg3n}cyl{ZkWR+rp7B|4e z9JK+u^cr%xEcMns3x5k}$6S4kEx zyQXcj4ChX**ch=t9Wegk{CZ`Qh4r-UoBDY?p@}tUR{96bN^<4eYXo&qV6n92m8tto z0%@tEs~ZCSCw0|ar=g*-JKZxjq#5gXf&@?NwgMG?8xN0;iz%wOxY!_!l@*hLnNHka z9m*j9+^+nCmnUKUlM-&TiO($oxPzstGVLK$9o4%Fr5;kly}cpejM4K-0ARpW+Y4cZ zKi&%xE&JEG755}I77E?_-6Zx$5^*N>j#;jSr5&u#x1k-^v?WFgHD$8;lI^z!|ApK_ zfC`PaM#2cIDbkCcIR7tCh6Z0>4-l3dT^J99F{bF(-fhIWLHA}!2c;pf$w3Vz;m4t& zAtq1P;~f*A9ok(rG#(@CVJl?%UhIp6-pg)&@nnFu(UW2%6o?G}?`A%0{Q*88A52>1 zU!XNDxMj>7eQCa=jRv4vMx^MQ)c zrluxLQ$J4_U-PPTF5@bn&v$E&}e>(3ToY;Y* z9|LLaKy5#yq||GE8bby2c9&CuQ^5qk9wP26smnh1tiOYbpFCjP$SHd!f@qeiF)P(G zsH_ZX7Jz|dr6+%T{Olli7Jvp7@wgxbiTz|RF{Hzq$c4fu%-1XvcbU$Ad*y4$gGzCCpyIG3~PD;~jGWp(i zM8SRlhypfPy`0&v(4+9XT>ju_u0hEou5trKJNVset02>ohS3hett-VJH z0ZH0fpZ9o>Vjz?OvOqLy9q5I(w*rg8STD{FS$F;$A5!TRUKsEY2gf1Rs4xsf^Z#a`N@zB8Za$HOBkf z=D$Y6^$7rh2c)zNkYw@>FR-^C{|ER3M%o4-+GT!Qq1bs_uTU2z0S?`O3aoSxoFF~_ zhW0ofGof`vn7I`33kZn)^%EZ582jG!B2KwIk*127EAo;%5Y&HA@v8Icc`YrGpN*Be z;sC>`{WQ9jvAv|z=m*FyYW88{lHYy_WDvh6x?GXyzxfs$d26mDDBS|%6b?xU;s2vpI#$YC!Q#`YH6rH8>@k4DR%su8}jI+;V;o#8qm^l zP?S>MidMtYZznubMuKzNHEv4`W;tfSoB$-x&(aY<41j}b7|fKhOoOSqww83|??lhS zlo1C>$A8E0=^t;|S9qMPfg6ycUPPIvUXZEWAz%Js{1d1g+&i;@4`QkW{^saq5faA# zRSWPh7Rk+8o8MvPfM5LT1ypEh2vFBJ0Y?U)K<1)j_1Oy(drd&2ApaoT#(;3s4`~Dj z1`ZYKl6@rXR)1GDNnu{)rHkfC1P;f*cpkLyu&&lcw+Pr3$pX%`ddo{~AiW2)BaWV) zp2x{t0I-54PCh>TcZcNB%-`AA8<=eDQaN^mb#iTWb@c;2>IZqlU5(eSj|0&NmLte~ z59XP&0{@8}llhQMX$ILGjJH#5XBgvIo!`iQLjlJ`a`r*4dXYS9svd4Z3W$~lp{=vq zD`A~R2A%FQ_627HGOQ0DJ!%C@EnB4qABTvEtqZi7-TTr5wdR6{IrB8!OIXCBCvn<( zhX7P=wt$Q_Ir+V}mdDJP1&4nLuXo1_`%!l$dO2?SgtC}&Rr!9lDDLh{Ml7w{lGIsp zd^fP3{(jkX*E2F{J{Th)xJfja0@T^V-Q$jRrxV72_{I}^ryP7V5>kD zMNqGdSZSSiyuO!q4SYiO)kkdb3L6j%&U)YU@a{j5Xi^H%clv`H@f^@`u_&^hTMAEc>RC+QT5ygeo*~S96)#LX^mKVa<>DZ zIuO0u7ww%;&yr6Ts;mLkKcq-~nH*i2t%UkvJP71G3^F61B99ToM0on4W=pPe+BPYcj6$IAG~$e(j9{)`?ktCQqS ze};8~TraonY@QdR1{CklW;-fAgU5PEkcA%DQe>!Vxv43ChH( zVrq0)kZv0V_5#TX9L7PVrKKKP%Tf{&{`ha`%(eS@3cB^PW@pzs?k_GbX0IZjSs`mx z$H&JLxGiF+JJ%d?f#qp^-35G}Rz5D<>h&bo`{o_%Gfw6W25=M9=CONqPB>E0l`^CV-4S__) zBTC9b6cV-(!aH3&BItIIeG88=f4bfsB%ogb!#@IZ3L=@KTNrO|#Qp4(l9W-Ie4l3mXRMMk!VgY2E7QnWntg<_|gcLAUq3=>(e9ttAR7H1%27W2Erur*0gUY|&$FX7V)%(4rN<8FdH>#0w<8z>PvA>x z)wz^Vy3Afn9lZ&GF#FP#R9*)MOZ&k^jv(&<`U@5i_*XdoFrBb4F)~YJaB#4~w*S@P z_Kg10($c!4dl9V_-HR8Jpz7~~Ei45S)X<;}Q}19v(#RzXsDe|jDoRQb6$RkXX_%*6 z5}#rOFc+zXkH!qG&nm_(rKP08sqa5#dkJ!d@spR9Jc+|Iy3WXqt}f||MLN-vOc@!t zd(u8=QFLtViqj-E9_0|ovmAnS8E-X$8yw@w1t!=UNMoqm+7^p|lga<+3**jKBbiMd zrY6P=p?~z@I0ZRz)~|;Isu<+SVuv$r#nPyAzJGsty%~E*b7qpm8JP3wp!h~Am(pEd zRh34Hfss-9!-s5Y`r~LFiv|^nc1A|VjYC2awsY845$oHlYZso=Ha3@_kaD9Zo^yR5 zBbd7=GbJeKuBwWP#y+U8P!-<$^?ah%G0!o89EL3HW`Xq>>No5hTw9#K1axbt#PCg? zE+{YJR_Rcm@z@UmIx|=FVogB}*-#D6k(Iw|!lDpzc?+mZK2!%FqW6Q@NuN)LH%Ubd zT#{Wu@^gfZ6x?_Id0P;)b!};h)dIKnF&-EjnS8Ju z(6}E$l^dBQ&j6CzTHvod$SZ~`9-@Y+}>Ub?KSR7Dk|x#s~;@T zpbljuMR>RcI#Q@>;mNL=+i;hHge1o_#Z>|@9*g3l1QBX_R#pW-IplH+*im3-TTEJv zbx zk1Q4C@otM=ZHR8jni?6sc>cU)3!M@}NJZ~-Ccwp|vVk))YLOZdVQ`-$JRKCiOu5yA z#aQKubQqLlU}AF6RtIPF98R|HhvgKNm<`f`bb4RHWee5ici@e$PFNHT1AVpbQ4PpR zZo|nuj;fm4x-Kz$Gf#<`P|lXZ)zz$0pJ?_@jEOpY4Uo`GsetkR;GRS>Mo znZNq{3CGQZE+Ar-%K&nC$ubx5V79-I>j)LL&A7TnX`g zFpD7t|M6oo5QVJmp0j-+z@R0z5MT~!tS?zQ3zCw^y<@@WAN;<(v-KHi9Xq(D(hqx` za5%;!jNW)dR?*PCWS-Wwu5~m}Dp543RRL~(0}IPT@DW&sAoDF1L939EzncA_t-YPW zOf~|SO2o1PXM-ejT(gXjins_kw8c%8!9*-d&0lWZzekk~N>)}ud9f<^)erCXC@9*> zugp?N9a)r$BqX5tc~b4NH3Qd=ShVF+QB$K0Xql@>hE1sDYoz^p8XgoF+W+fwIJ4V1 zXz_XAS!0!$pP%1)|IdK*^{0%ZGq&~AYrki3F(-Dwf{daDP>`)KBa$F!Q%JoQQ>-mi z=~$yv`}E*e{pm=efbHzZ_OFyb!3YTNjXcNvI-oT8h?tm8s;j4GsC;ek(Zh!zONqM{ z9v}8$a58bxLBR3Ms;YaoVeV2*dIb2<6FSh`6S=NGF0<;SLq_K*CB~}JE zK&(S~kDWiY-v?;+l+X_H5bq)yAx%v4+ z*{zBr2cV*@pmI`ltZ;tbzyhr^&R@mtZsBZa1-3aRJOLJCcJgH|M34_W5m2)#0&c@u z)|ix(Lcd_5T<`yuz4N<{uSYAuSg6cdzcUQ;-}hXD2dB zD#~b?+UO1dIWcKzRNY|wL)h(0eBjNkb}g++ft~mFtr&yB=$hO4Ja&3q0@)lqeR8uO zY^K(>ww;a@x8Ym5wWR;^)vH%;aB@;nG=DM7%SDT-QW{>qZh4zgfB-eM6DfHCmFJG2r(BW#1 zRezIs;qmm*0?rH&U~qU9WT}7xbXTC0HS~_DGO14#b=U|powds;uJ0cIVq8*j@sePS zUG4=7vW4X<^QATQ`$8KsgOi+T4j<#TMtI=o3;ol#`lMPg-P29W7Q@0uZMcT|zy4Te zpt!@pptENiygWVT+ul_$zQe<7;8E|guPz?kY~t6w@Vjcc4NJcG-aRh}!>qF~nOaY^ zBBKYJ{&<(Mnp$1RX4dY!%!Y9?*c?m39UvDq<^-RTUIM3-eg#)6yDj%|&}|(-fo;eH z`)-IA^K+&%#oCrL;9rh)R)SX`AbivdZqWSJ>e8*SeS+O4UXNL13;Pvo4qPVcMrh=N zVSfaO%_^)7x6k|b*^%!TAaS-XGb7_i0By*Mggd06u3ixPi)f{lg~grga!L+9j4m^C z^O${lwg{>=_ACS2Sx-il&7YR>s!0q7*aY3+Hwaq)-dM{4P;(GRE6+84peaEU5c;Fh zg9PxI88*1MHl7Z(uQZ+;dA4-wnUx98BbO1CC*!UYTZ?^D{;5$ou*VHGC7}a791Qb?$-{_g$%G@lH*-^prE1O(k<>J zqht_GoExo6935Gyxx?lBc{k8@5~tg4VT(ede%QUcf|ov?J4gx9zESq%gK?9j}gMVH>>5on_34`G#NZI z3gx0bi+GMaO=@LfJrS&B zZZ9Gg%{D&Bc(?WXp0_q$f7+aeRNarg*>JZ6&erK-72a=GJo4O5MR@1I^Jg`1xfYPg zMzi2*eOD1lWW^=n1!)#@xyoVFKOsvNf&6+&6o;hr^eq5=YZ5Q8Uu?#)$4g9bvku}n zmP6g;Rx>j**axMD;qDnv+1c9W0=nQs=FBJXI1&*7{Z%WNi1QdFDDlK2fyo#3H=s~1 zjw?g=c7Qqylju}K9NNarEJD`=@N!H{%&L49WkTcnS z!pUQFVtkBsqoNNE^w%}=(-(HAtD7px?#Y2Nf>jCh^PxkB2PJa6DY|fOW;`Y_kpyZ9 zsST5o_h@HSL2s^1h_Co(?C3{%`uhmY;wnc5#PEIViOtEotZ-p7nSh96?%!|CF$CX| z=o3|?qpPw6+33M?QZmN0Vc}g%IhfFlGk$mUp=v;f2bb4{RC;mjOsZJ_2$lv13!ZWP zV7(6@UgLjDL3Dcp1##`We^C%btLsLulMSo@sctlKnbq<0B6Ck5@ z1~+)Xj^XX2|K1|5MavL4IMw=cLXyI~-?uis95NsSNv~Mt`=8D~!`*~&+20EXq}8Ee z1)w0d>asBb`Bh6$m(6SA&cOQpD{A@UlfLUW7Hck`sYN3RrL)VH#F28Fzgg53(V}!f z+ubOsabSG+1FY;K<)PJbDhKVVXE&e{^9xj5mh>-{1#GmX8vLB$ahLUOPRX}iKn?@! zQD=cjyZ1tF(+vo=p^^(Cz8TWLnt?OAc3i`VQ>)=uZ#@gM+~9q&b7?5H2C4 zb(L$JMHfn9TNI{DJt}5pdJxEUIg>;p)#$~I*`dNcZqKTga3u$xZCKJ{5xB5{KNAOh zczJ)jC=O_mV=*#!z6?8=DR-ilhuKe8u~8*LcxZI zKw2w98p|loOVIdP72Z35B>>i9x?oMb2V4oitAwn@oEtM7hn`x24d~Jwz#kibIDd2X zCjH)Q+1Awdu>+GN|Via-N53*>Jxz-lPU!oKp@Ya6fMB&W})`dKO3ykAGUzRoj;~a1SsM(A#Ig13(x!0TnUC-dJF!c^DIu z2_S1v!{j#`uwr7zrdLg|xyUjtE*-bC23eFOJqE*6 zTZ?#V{9|LBszHhc0qFTAlMGsQzke=7GzijAuo|+)AeeBJDHTx(kY%LUms^4roy^<}@Gl_yt}rT2s^9D(hIQ!bb(s=T0jiF({ZS8_*>J{Qa#byze73 z4vZ%dt|QkN|M0^P5A_XCaUy8$XQhUJ7+DyUL_K06P2Q{R>7f;(w|RAW&T!%Uw$i(L zKAlLPDDy5_sg(0`HL)(;wqwq4{2bT=SP&5Xet}(Dp%6N?ybItruzu0)RGdkQzTaa) zglKIA*FpP7w(=4t5D|tprvWk8QSU;d&Osn_G|=b{2$tmIsf^QmxPcFv1-Q?U(6I6L z&d;FR3_vFFe^VhUQ){HwA(h2VF|DlCw$1y-SN556wuCdO-MPdjAj5Bm&2oA?;H#PP zn)j9r@k;EpD@U$&Xl>p4L|((E64q5_Ru&(w`kv9-e5WIKb<3LISjI9b306~20=ux*fG=`{0`J3K%r%s-{2WN=m@zSXqm!X{UfQgNq zEtNDSldwuK&SV2Y#jg926~8ys^Yd{!mBGTmZk0G(S|7Vlb65K8M2?Q_LcX} zsoJ~0M!Z<0($bSHTBtEPtGtivdcNHWCd&3iUXklv&IKp~UNtndLDozsY%WOd#3-$b z>m77y-`1^Lk^02c($+SC(C{ndZ}~5jd>*PoEa-K%-L3C@i!Z#yR$QO}MB55bc{qH2 zmO}R`PTjw9IC`R$cb6Y|WlB`JdrN3_(2%U`V*Y%2*T-rgjDNX)-7MN4S1-zKf=&VM zTspt!C@|Aa)L8{TpKAz7bNpj}zq{{q$268`a(Bd?TeK!zboc7DUJZA0UFe}L!8u`Bl&d1&%rwWeIu!d@T5GF=fv9GZI*2lFdTL^g_V+7DrI{z z?8PLI8CfYtFzeG{*74|L%4^m=;qhMQ4W!cfV9vH}Wz4w_~2l8c=r% zwi@@TkIVavCTC`5xsOKI8haI)yRC=5GT7)3-Sp$P=gV&H8bP%vT%^n6w)CW~zLJS{ z=yv<$pi@QoazFX7pWBJ4m1!@bemKfb7466zH>LSW*(Uris<;9yTsi>pK z!*8zy)~!SyULJ^vO&l0rqqQ7xi)`Q0R)rDcrI)jI&+Nf|b+K48Qt8LvfQ;73w3OZz z!Y@~eUo0K}^yFU((b^~NfUUaJ7FRyH_|On=+3fQT2wzpb1upOJAAb+Q-?QL9dLj4; z?@Xdla;eDQ2>5%s{=HoPUatSq%k}?biPlK9P`qtwY6}7r>Z^O(Wu}2N93U-G272`E z0`I)#vW|MSiiuxkIUkk~s&~nYFWWr6=>7P@lcO`Hc>vaE=Qn#{{rwBU;co9^TsQH? z?^u#bUGYq?VHPNJeobY8Q3kHln|ikm0>>U_{ms6ROSA3@J2o8X#Phtl;<1!K(l%HVLredzjJ#vn28U8wu)eF z4X7$?aF;LuM?0X<5|nVkRu(2Azm$?c3IK_=EpXTT2g@||xEm>`(uyCN3ExAp;a zlE_S`88TGDo&e2srdS9WvkBp)VLdzaZ$hLwy zIhQSWslMNTrlRnL!l3&oyx8sD1)Xw~Jo54bA^ z-3QU7yTbyx1hzYGE*M*WE>m|H%t?v++z~Ql9cX`03z{R$PnDRj34uWKFGz(VzfsIp zj!y-HN89}06p^Z_=IOkXAMPDRJUr*0zI5ra311G1;-MAm)qnc&DsoF>8|@~5YtVp) zz%b!q%n4l~A>pxqaq_T|QgrP`{YL47FOvA1Y*3dK9WF{`z$kg5XI?tB4TJNY?Q9Oq z0%E=$FBnSh6^8N$yOrG{mybZ-A4}k$1g`}gDiwZz{Hys;#FOO|O`@(0@U})f9;PwozTeT8TtD*n>a# zZmE}MSC)-G&OM7UZUQb9r2{@KNj{8R=Y}|U2v6}_88>*Lg5wAstneClGMkb;<@y&- z5w<}?L!&+0N5zX*Xq#DQE?5{U>0~K$u*o<`+|J?{)Np6o+schvHmvO>g7Yo|DSsRJ zx>Buej_dNYPa={6@F@knor$|lom3aJgl3_UvG#)u$T~)C(zOJo7Mj36yt7WF6=6Ep zRD636p)MfAe*f9KlR!Z=B^&h7&YGIudhsWV50^F$Cgy7{uj3!Bl2Hn*mABE!rS3lm zK7of1RZaQaic%oPbv67R>JrC3)Ef>NF-(GnyN3J{KBjK>wC!%!5w@+O#4(P3HNN|fSZ<~In>M?sYI++CUa7`kU-WG%2}8Fz(qzv^U!>d zf$Lq0U~R#_gY|i8&PAPx&PpaJ(^f{HNkOA7s*YZ;XOT$h=4utgJY}PhGi@L;bd~u% z0g~09D#*;v#>1WE_b{0-0XhVe^x;ktNdtI#MDl^gAT@@uRmIj|Hn9d3lJ$Xd${}?a zm%r*fNVkMAiQ*O)=;r+b}oUK#CVt7cb)%uUNjkH6liHVsft!9unwbIXb?TU zofL-3PzN-n$b*vE)=PHJI*8}UZ;O5adgG&cu_?34l83g9{oBRqpJ+aa;e{xEx^LleLvp3hDt^(2=e|zY* zNtwMCP$V*)S3&g4OOt$dCGf(*xrZpN9$q{wc%{g$&8gU#9&ju@xS#N-z|@HV`?-dO zA*o5eSFI?ueZsws0K%81;r6b+j(7hf4Y6MkC^ zv;^9Q6X>J|u{&(v7o>I7$)g;vmrd&vC5`OFi8fP`FXq!+=|>3WzMCxlq^26;b0FRg+u4%M~ ztNQBZv$X;+ay3M0XCxnm>lih$&eV`OdwO1)a3virL1C>9)-`hEkKw4^3JkmUoW#om zj!!#+Q2PaVazZOl-5N75^^OexRaG+n+&0&&5ZB061fXzvzrPrV6U-%0DT9ut8V0Af zcV=kXcSj)t)7PqL^8$PfG0cMQt5)G?D*kMp;Hfvbv0_(H3`ka}u3y?*t5{5n(>UKa zt*@r7=EYc=hN(@6@{+XVrbgizBt?ape{gK@Z82aJ>|f z+av=1yk$&=mQj8O%jAxC5f0uK{0wil72kfZ%*$zxAgkCDxHb)BYIXQo2g&rLPjf}M zEZBNLpP!zrYbY&@uZ zD5;+NB;Ih2+0$OmSKeV7NBBDWd|To`YgzLD91dtqJd9+ZTAa1Gc-C?F=roA@#Xhwy)ZqbSEn=YtzQ3+xjpL_&-HH} zA{CnU;Y`>EnAW?~mRrE)mC3a>mo?;-nl*iBK~b2v8QI je&L=m$;*L9o?qlI{MqRvSN1u41C;3@iy!k3I9~lP3b|JE literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref12.png b/doc/salome/gui/GUI/images/pref12.png new file mode 100755 index 0000000000000000000000000000000000000000..8cafab810e6091eb1660a669c17b268d20e15b29 GIT binary patch literal 39991 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 I(eu~;50n>k_5c6? literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref13.png b/doc/salome/gui/GUI/images/pref13.png new file mode 100755 index 0000000000000000000000000000000000000000..4cfe950cf841780d7bd446dd47a060aec8148dea GIT binary patch literal 19006 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 J`p-vy{SQXV2rmEt literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref14.png b/doc/salome/gui/GUI/images/pref14.png new file mode 100755 index 0000000000000000000000000000000000000000..2f8bcfb3c9994bcfc8fb39f939172688cc270848 GIT binary patch literal 22374 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 QUjP6A07*qoM6N<$f(ki=CIA2c literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref15.png b/doc/salome/gui/GUI/images/pref15.png new file mode 100755 index 0000000000000000000000000000000000000000..10053fb116654ba52217722216fa7c83f91077a5 GIT binary patch literal 29051 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 SAOWFJnBzvjl<1zh@_zu8vh|t( literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref21.png b/doc/salome/gui/GUI/images/pref21.png new file mode 100755 index 0000000000000000000000000000000000000000..8f7ad1d3468c0f566e1fbd0f0ef107843437c471 GIT binary patch literal 31959 zcmaI8Wmr~S+bw*F3W^{Ks5B}qAkqzrgouKGGy($BA>ANKNlGKBbR*K;UDDm%-SwRp z-uLsp?|$~Ne|RX!wbq(*o-xKa$KvZ7aS=>(0(1ldfhqbzPzr%S*?>Q8*HGa*bfZ~` z2*iDasNl1=I?gMjHu5sPN0poFeDhCIsX1dgr|H~qIMmQT=Y%Lex*5FJO;njnw4{Dh zL4`Ggj$pMU>`bg{kl%4@Up1ipY%{RpJivTU z!j0;5JSaS(;xv_!`Kz3_Fj*9r1=AiruOB6A6grN@J+q)9CoC{f77sgs! zTjMpnKBsJvV4zr?$NT#ubYe;I>KUQ}N%65VU4N)iF@))DAR6H4t^;*rqF($o*& z7ujgJo%McZT)-o?Tsu4TwR%j$UXk=4_gsgGtrk?MUyd|bCc zz24oc^r*RRxGZkCxD?+HaJko#6g1XmEd6U`&9=QasYWXN+FvG-@iD%p551ytu}3^# z)ANKMag$G~MSRX<)0pC-V0F#yVcD_eCGbJj*Vi{NF!moH*w6jZ`uYv!CwZmnKhd_&j)Rp$eiW+ zD+w7Np*KH2mP;I3yhJAaMWA_?zQ>6zIwVg|@~0x2xl9Zd4X6LI$+*e()Pu~J3TNTC zNks$l*_O~r&#rH^$09~)5YaivdN>Rw6%+u?Q{ct|PGn^6K>(P=OYBTp;J6TfU`AVL7=GcpN zW=qJNWcWGZIR80^KAdb_wfv*9`jv@;0tWxEu*QUz(2wTkt*mT6=H}|@a8|fJ)y8{Y zQF>ODj3?yRU`AI~Dby`ES+<0=FMn2N zbz9c?=x>@OsQNVL4-5^NZuenAprpuV5TvB&4lXU26LfXwbbOLak#ZdvkY5`ubJwVA z?n&3Xe-dh^RmX<6qr-}BsCx5(y#pzN$88;PpN8gZb1*FqA)(kw*@3dgWj!OK)~%q_ zn-h+v#Yg68u_rmV&d)m>eOqel&CV_>hopIF+&{YYo?eQQeZN?*TKIACCWDpnwaSVy z$KYf_pYIdHOd`bh$2q=R^ckH--K0<3o>#R}DBPkV=&{tCx+W(jwM$Nsl%pneC75V6 zY+^Z_OxVd-yL3c9ATqY0UACbrM*VQl-Rx>P$;F{hb-v9~MkQ1t?CRcyE&AE1^Wx>p z>ORGm%&ZdiCz|AIp0PjJ7etF=YHt{m%o}ONLHuEr^kAkHaIkU6GOEho%7Cmot>bceDfv@a_ zc+G;Q*_VGv&{zjVN3_ayQc@-`uICuyVWI|{FV1@%8gDGlk3Tu`p@}>mw;^CP*E+m+ zKG(a*pKWAEpn+PnF&AOH)si(ImZQmiT;LFpA&%cLbXeb%zTN5l46h|`svz$C{eg$v zf$6#IUHc+0W4ZQft46T}BdU$PnZYY`BO!4yl9yF}jQ_$XI%ahFJ=@HzS1T6Df2S_z z^|9iK?R8|)@rZoHHKbwq!6z@zLbxk3+*2isic>~HpxVKl>*|-Pr!QYV5)~CyF0oKG zOw0LQ-TX-7xZ!07PovQ5y1wOIy_Hwo zOim_b^L)qDW>);8Sr(6e+NRs!XbY4ZAyg}je*1EoIG&$cgN<-o|*KS`i%=^OZEexkv3WFw3Xq*suO7HwOoJ&=$!Za=XL zwbc$A*tGN3ZF-wu{(LIq9eK#Ak#LJhcl!E}!FZrFvv{l8laHHQyhrBx4Mk?!HhY8G zi$i&|qE-xP7Kq2na`R!nnhFdaeBD#qMHpOCyiuV#eMr`3ER+_v1wk^R-0Q zp%ra5Jkpc3npr4+YPm8LVd#C407Ge4J=@y4X{yy%@PHZY`)lqk{#4PnJ^MpQlxKOpm~r$(U(tPB zpPOI!?lc@R1cVsm3q_8rTr#P$3AVdSMfL4I zQIQp7d-Loh4N+ zSUcLrO^MyuWOlJ%h)Cjgb$1szo%1=JpRzlh9a7B_HFy4e?ryIU zG4+jv=6dPHqO7+@%R{SOTlSL`GKesjWfE+CmJlN)R(>-xno`ozqT=H9&CQ<07Rz0! zGPJo|`uQ$V^V_>gg(lqdN>VuuE?d=|LD@#| zHeRI-J%~ZOZC6P&@_3sqDK;zne1PI?f1VgaIPQq;t(j*1T2C=5J%LQ3V@9b4|D%5{ z=Rz%{N1pXedgRML=Nu-1ZG8bJAH2LhT7!0W?YLqJ&;9RzR=X6B(f)Smzof%lak?Ge zS4eB(XY%4=MFQ8PQ@Le2{L{3_Hx#d4wceRmyLeoeTSAMI%J0yAbT>==d)-)fvt1`_ z>#Jlx8gc)g#4U>Enj%|al&ns*T91IDU&8-H$wQvVH0^Zfej2r)nRgf8^9Y!mR6eaD zI6x_FmigzWa!J~I&lLpXPMB#JME|{@XrJ=v(>ZJcpMdPFc)Ga1`yMOU6rRTaVj?e~ z@W#a=C9yxW^>#OMT~!`niArIxn?1l=e540#A1T5&jnt(#&Wq0kWYgroTT_AxA4^7I;sB)A^a8h)8##iN>z=;O`HjFJ3&sH=C~a zp;Iorg%FYq<8$D8?uH@RvbwTjeReoMSY}sXn=Y57Ld5a$Q+zymo_L(FPtVq+%cxJx z=3cc#n%{1rcQ)=G`6_N0JsTI?@IqX)pg_R(HyiuFmTyKK;E2P>R4SwMlCmhJRboAG>BMDJQ-ihQI#=Wo^(I+fMsDfmpM4mk~H zlySv*6m37V<1Oi+&r};l^d*0QKPDvjM@GJKMZZ&MxBr-ihGxOM7=@wt4Q^d*3(u>% zp&~OXhO!-OR=u7|03_RUuXB#*RtAub!p{#2q0!(=|1q-q*UWC?>t~sPRccS;I+Mp) z2{0WU@s*~>${iw%%MaZ`=#}n1N`x?be|`L_)8(fF<)?I~C(LwwGIq;-^r>1fFJHWv7|7Nj;<5e)hZqrD$)K3)A;EX(@-q0*B_xjwp;M@?INN1lbw+pd)%8g?`W(pR*@E zkS^EgkWgs~D=Fbll88x!Tp;2yzh-4+Ww|zzk`H-spMxWe+iLAcub$0fLZ~&MHD~Yf zTf}_!(2&1COFcU~LlE)W1|=s`V`F14j8{1Q)KYov!wc*R)|T>NZ*NaeL1ns)fFaA) zYHj2J1k>^UdR+J7#`gAfP6rL`Mk(q$ zJ8ysb^a)XHzF56paW1Z|KBZAXlGrYk*8AIZ_NCEyxsPyMRbO8Sp7cj*=XhTvA`%wyA)P8GBWa;*v!m~?9rn~!`Tm>yG^XEwR__; zU%Pp84vuyZ+qz7}FD)(YsLY)HXLfU5>sTLpT;~gSSytUS<*Q1B^f6i7mp+-TY9}jZ zrz`dkDMrxu9f}oDYiQSHl!yi~=%#zrZeJsbA&kE5^2(2 zv1!sDH80s)mEY-nc(k)xv)G+vW7j;qGL$D~h=YgcA;C^cz-I75S(%8i&sc3KHwCdW zRu-XvSz8m1D>l=t-0Fd-erw7B8?&aP79AyYPel4$N=#<0bZ+(}MC5c;p%ICRb{@hny*n415=k;EoHh0`@LVZj& zO*$Ow&LqYXtTVqt{mq43f_h9dyC-7;bU&L6F-v2q-%_hO!;OEDnWOD4_cvsJ*2rg@ zZ;zTj+FjO*08o~fE*eOA#R#Let<6U^L-A+#;u~C7Ut+G% z&o7y;{PAB{(5bGe`FhCg=1(Rv$E_kH*~*o*J>RiiPiU;Bp%ED8B%S?OrLgh9WI8)P zKQT~*D&KfGIzz=o#c!mYVl9iK?^K(3b8}NCPcakN# z-76#6fhp2Se`}T`uIG$y1FYcBk7t+Nut>#6i!GeJ6IdZVsUAH-7n1z5yi4s_Ekf$x z640>6{`m1@K|#SkKcA!R$_ol!fiF3id`Wl-Ak%J=@);ZkJ`ygXsM3C{l9Z!Fyhn0I zy10nSLO?NGygiU+rQ2P~C8?c-^5*b6lX6AywNIY|=#8EY56bIy5@G~pcXyV)?{(4| zwV+()^DGVd1LDQh>S|lMLQWW~{@wiie9pe79p9PJ^!1mC45?m+*M4W#=CD6_BH~Ll z8D%y0OcEDl%)nViT%%DNBSZcE%-3-Ci(Lsf0x4fJ>6c99Vc>5MtCiU$lwe7h!Z#>4&A6i0EETCSt0)9s#1v8)h zJ|*K#_>*lmFAg2KF+-^!j71llS*x{CvcIhjGj6lVF2cY_^yA356}4Qw=cUo`_bddA zc$58Ra=k}Mj$U=6d2FwjloZ^e9Tb@Eef)H(UHV%=AJEIA}3+^{LoPZ=MdU^Y9% zi-8&^q&2avD4?OQEtWIaHbC@yP%{FWl$Y|1%_`uNM@AFDWZ{fHm#t0>b ztn6rByO5W`vFHrCHUSFL ztox<)KBNsIH~7`}*G3_Ff2&QRm~#;utr@+FX8E2K>JUZWH(;Wn0JYn4WxyE(0qI2X zCPr>mWn}!}bLx@jXtl>G7n$bjjiQ6VAE?1rFjfQ84C$m-ZDCj5RCaV^{Zk8nT#PS# z2$PJ+I6KGvfYoTR?nO+9ym;~AHrD2%$?Q@vQ3J3W?T)H|P4&cvpTpa2h-<_5WLwE- z@YXZO5-eAQo@I)hm6q5>ICR_*xVE{Ivi3F#Ixa$}&?o*^X~V91VnF;8tk-u7x_I_t z@Ao5Rq+jVt49s+{(e+o#S+Zyzw`nk-oAM$leT(f8Q;k$(p3Nze6Uc@4R^HuCx3Ff zKVHY{f)ePCodcwTJxNczj`s@mZoke-=gSI5bzLY0p;yXXx~T~QOS-Q;h$h-PH$ncl zfb_`a3+i)A;D2(%|DQj4k~^ywnNrXz<;$stMKy}a9#Ecs=+!7s;VTgwdtU*HQWCWqq*2k^^R5p4A1d=JUUXkcaj z{{D#gq$J3BLdUa1Z9q`9*%}RnR_i1PBxHq)+%04KOR;ff{Z}q$QKKWEhf%>cLQ&k9 zk8wizWjxN;9?2Qk=i}!m$M5d$j)RMPrSjMN8X#G=`C;Yd<%nFpUi2?jl|P<+=~*{1 z!BW8ulq1FRGn=S%Ml6_fsW={f`26L|;&1_jc1LuASm@)cWmo>W=XI}+N_O2Y7geXz zJD;q^Y}^|gU#yK3#f1=Jp!yPV3TSGQ!xEGWKUS4G>#@iyDW#1Y8W;fBp+6#}Jv&;?%CTHk?8{JUfamHV6@1A&f7H(D%WBk9_%yrKu)unA3Z?GvJmN6N8in6z zgk#KM{~b0C&ZQTxU)Sldq|Wl%?x?}RF711GT-!ARvIaO2^**3qIQ+Xh7&f~ z{XTEN7=ea>j$VHJ_yn}DM{mXxe9RoQg}w2rer`P1VO0#tlFy7jhCRhQb&7+>GhZ9w zR4SRQaog@!b^6(<_mO(OvSR)`qTYvadUf@+fB*_~K^Iq7lj(X)$}-Ncg@qhY_Pp*g zG;iZyNbcAC3mz(5USD7LtEi}GViFM%VKW@k{GBcy#YMztKcJ}~ARv&xt`IuQbHba& z*9W*;|J5g`wHt5-5e7;D(4bm!>=*BewRy(%FY6BcdXS^l@$jR@eP-=;&9-n>1nfm% zzlt5^_|I~{TI3WILdfG$PnAtWf4Z~Y3DN7bI$VHr_pb1?u+Q}yH!iEyd*gc(v){$S z!itTHv(evDvOllc*NVANjRbY?U}IMYr^(Tg6uiJb=t{NOp5x%;-0Tu#xU>JJ6&Ox{ z{$SjRhE4Xl7YGv^pRo82p7J_Q9b7LzTB6OPyMO;Fy_b*AhiaGWBc(Pt8R9JoVPcdT z?xg7RCx_ch`?W5DIUOLXxZH}(Z62Xcpnic8BQ#f2kRa;#wKyY#9wg|2!NE)4KuuhI zKk<2Me_y*vTTEv-pB@M-i|$CRCNIn>baax3&TBlUlBD250v=QfO*TTQ)Yv3ZJUwV% zE`9#|d11l-baG;KIREl5i)Go7kI))?0c4bg!``-z_?L1 zu~Vl9&6T%|M*$d*Vn`8M#YH`##{2HHg|Flk0i#mrtk zPNzv8zA-)kik`u=J-?xdJ~=uU&atmE9V#&P^YQUfy!(Xg)1_0iiG_t1_c|UAHrw0V zFLV{%K*J)|94obX6~z=h@k32YN-9~kf=~Z^dx8^L=b&@o+B?a)p*(RJqc5~%aM zqflncdW^NAJ$~kpu2|;jd52aj4aphDewD2ZmQW3^af6_$)iK5k0m*2!rraLsuwj~B z^##rB;nbCq{gt^C*5l(Y%cPdn!K*2riKF& zIx;GX)A8ZwuV;?6@4mKFP~dZWxVX6B>Y^O66c(~;^b<-iS4E|Ae&>m{S-nx>Hd0j1 zJkJo>Q4xEwZBLX`io(aQ@aI@zr2o@hZ{-{Fi}9bQZ!m8Jl->i}{#^s=nQmK&Ay{;%yOz?@hM&#KjxKy*Of8e+5~WB2P`slSIcKF=1yW5@8CUlWUJU`JM z|KjFBMa12e>y>w+cb!V zz%`W8Eg&c$I<9s7%V}ZJ+i4+VZI!jLZ*pUYm%enquq}R;p}|6MgL?%#A-dzG=+s}y zSiw^hm4r#F*-UH=OSpDwIEgV$!13x2p}6KqK0D%11TxL0Cp$7Q|Mt49uljgpOL~VNld-9Y${HU+pBB@pc5L>1Z1_fHbxOxHNL|9t zS7{%jbC*g@nzU9r?T=b%^>!0#7Tmw60RgQLByGo;tP1Nz_xe*})+ytkykBz++;tNl z44xjSVa%zw#pcPJWuBwsWx~Te?E5P**NKePDxw6r=qFQq4q7-JOrimDM3yS80);f_VDcP_KN1U z4G0Nw@aisYC(AKtU*WX2v+FKXvU>ckI6mZEvH91v(cHmCBiUnxCSRZh zPR}k1vBwxif)+fl`Wd+g(Rz0yoJ09zoBN<`x1+l74Hrd z=~L0lW;TZ4F{qS=T|VcnEO$5#1B?j3i+NC0_R^(GJ9a-wk=HS6)G{v?vBN;hynq4V zE=U*=#%Y$Q$Oc-pirp&fp4)1Il&-dLII_ zxs~rkF%c|A)g4KW_3iDxATBB98PtK4i~1C{fWvN$PF5D5VLw$V=`j>mk+j}953{YL zz>{Mr0&{Hy)QP&f8~`LoJkF6R=OtbWmj%6m;y`&RURIEceXrFO0wTEz=E5 zj66AvSL};7!FhaUvguzxRH|T>$|)m#EdJ`n%tCftk?%zsQb_-;*&&YEJ?R|1QK>Ki zz(iEe}4PILv87w#C{nPoSKWiI7;_dLiKtes6RXWi5bftZ@h@MuHizcKQaOI3Oyb#ZZMG4>~-&Y2grDO&kAYWWqKW>%nZ z#!PlZHW|)NL%gMY7v{R^pjhS0#+&%oFf~_x_fB`LloKQw%7+hQpPKw`H@GWwk_58% zH3A`xy>lcEc_7&IVbfhcPcfs|$O;rSkbK>wlf-#VBa!+&j9%_gm#buT>{c}-`L`x2 z`L>oL+i`5+oker~0;ADFYeo&iGMI{RS+00^dEI~Al+V(xHtiiuGAMe2NM%&pz>bRG>Bu@>!Aks86Kx8 zIS!Th+vT$TF*_GvQ^52x-<5cHd&h&EaJW|K&x#C6!=cu_rpfxO0l7};qRA!S)WlJKTEqeRc2){M})pbSy;Nj=v}_SV1T}ThOAdchT$YC!{1%K zzCSQlI|L3;;BxqIeP?H9^OXTfdativf11s=7Zw+Hfi8KU>;XF-##KlE*D9xf35BF0 zZ~hg>rT_{ILN;#@t?|&%(AW$HeuVfCaRx-N8>>IT3*&dpj}uRQH9#?Rh(Ew0?MVC2Pul4J!>1EG$Tu$5DG>B9 z;2)?Z>G=ZXpJmWI{AWIYE1^+iSXfG4rH{Si0>ybGeIegScniAB#T*r$0Qa)!gjfo# zT-LujgCOHK*8f}_gfKs#sBr8bO-z159d7;3+|cz7_XQ9(PrGY>p8+?#F7%H#tP~{Y zZjdFxe*l_uj`_W!uH{{jqyj&HCQ7r#_sxTk9W zGo&q=Hv+VU*@a_JMdD#VSy)*32b5-ny1M$pKsFgD!yr-J!okt_?FYR%`%QlmhryxI z4Pc7UXpxOIKVz5^%ljVwh9vzrjfn{!N zckt&J3^J9U?kVLNz{fC1csN8<*UR=vCMPEag@m&8`yX43z~uHJd>BM`CX*?_KnH6Z z8{REe8gaY*l@E{)_Q$IQz$Z3W6O9$}4e&u6FVNwKDaX=0pqv7o6_H@2bK9~rMn6Gh zE>v&PMOStJC58FnJ7W! z!z3ixbNWXq-=GOr0d-;;wAiZ7PJfv6&Mh>ww0ObuVdLToerNiCfZ<0+-g&x15SyyQ z?j5tSm>T8|p39%&;>aLxX44odq?UPjwnqvjHFmc*-q&odOo>9>T0B>Gf+DK%JEj#6 zj)I(=d;%o)=ux|kh>4`W!?WY{&He3;PPWI7eVs3(P662IAmQyLJ^F6|wu>a#wtEX- zOCq@6zkknp)RE4vKSx)5Xg&>1-=@A*4~V(BV>vT`ww=XMs?aoA~?6f^FEYi$=9Wv$Tfi)?ov!3>@e ze;tB$cB1M_Iym1TNV7o%;yHFI^b5GJuWr!X#SnsWirnA@3(U}e}zkB)=ajLS=kd{^c5^yS4 zlsNAickR8uI)f&N2r!*MZ47&zC7pD0{CtBKBp&syh`^1#z4ktS&6B+u&i?tZZO8hW z9vE-xWisX{7OFiE@g?~w;EE1vjtFn`xWxtKY{Ug{MXuze^xtCz$riodR3VtQ7#SH| zK|`CD@47`ql-}-bXKkI_V7IeS1@RRINs73A`*yD3aG&Nmh?QD93!NhXS)aS#{GN`3 zgYz5;1W1Pou0%OkB#)cY{pB<-ce!vfJ{aSA1B7@?+Z>)0Jdl>J5 zR(5cFtnuN4tB(&Rtz72Y7QUkeGLRxaLtKNHR#{&!Oy8}S7YWk?kUV3lU*-$y!iWdi zj-k2*1_TJyxMAjG6t$;9)vs-6kWQ1OPnFHk``zB?Plog&pnh>a+@8PuOS1{v?SDyR zziMZxO%ExSUPrLahBm6|bm#ln(lIdwz)xwVg$^4FpPZg5Yz<<=7)b2pOLQdCl*HI2 zZUzfL6FB1WpL|4k#?B;bEXg~v5MW+7LP4Y(Jd66SKgiy~VYz|_GU^r7tB}7}8via^ z@&xLHF+h+0-(zKV+7Xzi8#P!t!5uODs;`rCOwG+Tp8h=_@c%;s;x1fja)yh`dDj4y8Cd8RP@M%M`?wh+Wk`^OtJfxbr`^JqR%DlkaMh*%sip6NZWY4yPe>okmgb^FrsiMfML#_N$4aB5MK zTz^8SX>uC;M)oLQR7hN^)Fz<0sP(NVKx978*dA-$$78o7f@yF=cMJ2dw?(Bl0(FNJ zS-{@$l!UQHtioqQ+uw0mFWg7KIJGJG z%NixCSMRHz9~C7f>Zg`a1~a4?W^97y@68&O{ONw;|MjGxssXa|CSZM}bO>!~p*QUw zG<#6%Jp-vEQa?DIY@$IgON1FH$gUaGZd4an5KNIFXD}sT(!2%}4&c0B0KALEU|WCcj1!p#d&gvryIBza z#pnP`ybh8U46l$0)W?X2>Gz%-suxL-@%0CS;zId8@evV(@aDu#Vy+qL<<2-X$Uf-` z?Z+{fHa0fELxcC}$B+9tMq^W(DZpo;|C(ucmK`fF9!F`g%v@I06y73pe#gdhnF*X|?Sz-?Is{B9DIDh;$pw^a41>;hSVIJjcc!l=PhNYGr!aCOaHmO9ksc&6DzUKr*{}R zXa?;u(XL=kx!Al(a|J1?4Aun#=NAnK!jDkxwFL=V7Hn>#eUp>0+5nxt)5vD~Z$R@0*_ zyKtCpXthNmbsLyYvvh=+n3!M?J-Njo!2ke8R8cXUfGo>IiynmP1l0;hYa825fr@(` zK0a-1ccu4v;Q-!h>QB^l{{$J8=R&)*X}%e`^M=O%*|K~2EKvG=5`_D zH!vmqhEhOec#lElRj;1RC66=SaKOje4#$?I#kP!gdj>GYLypm&J$nXyi&EqmpIPgP z<%m2F508hh?_5Tc@#ZPkc$!A?e_;wrIy!GqP38}>0~(9DyM5fJ(22)02}`@uGnXfE8``mQqNZ{>Pl7QgawytU-?8!THy@l&kF7 z6xQ4IUjTtm`?e!>Bn}4D-I0 z#I@aD%W&+Voy(4EIGFNcKu}93dJj&wF4b=0*aO=y@=f@GJd7r?>!s8|%$?fFa#_)U zt;gx6!FdI${4G4(7jNEtYqCv*)Xsr24PYn)1f_5mqu3D4|7z7b#?TWmG3(mfAB%hk zD?@Yh%TuFN2bI=Eh#pfI-v&r1Wv7PK&fp&W*u z{%y(;`R$%q&{RSMbmR{^@Q4UToU1X?WjrHqr2k+pGAfyb`uo0(WKME1qAS)1Gb zD#6!W`PkPP7k4z;Q??|z_F!(Ld&>*i>e-CPFrKQb$2JiUn3g1InHtZZsnIFrclBi$ zW@_BNP+u8HzN%z33=b3f#6C;v-fX7L+JND9L^`)kmnPCoSEY6z+;fd#{#^fauJbA% zGwgQdr?boO23Wk8b|_KF?cMe97{lQLa3^90uFkhbH1yC&U%!b?33fg(K;`W5>%Z=6 zYyK+*ecbp{#p5^MUvVpT<^X^WkQnrHg=11&p`YOFx6fT5%Nyw_YaX%lDB90GQFq*! zMDr$Pk7iBlR|D@_NQTnywy=4&_Vl^-s1}#&IP$>5KC}eOgwB8j%i{?nWD~%<9NgSy zCxTaSPES2bu(f41Dy};s=QW$RVn`BIF0Z|9Yns_?)i-WWs{z$ATX#Fre)&Teb@)R& ziXtcy?W!CxPIdOLV7d<4)kd`!gS^_?ge<2A(dHD3<-zyFM!Q{ZNko^Lvch%gPSsNs zOpr=B%s~+@tHT{#9sGg#2T4_dd(T5adrp0uA+XL@ww-lyWsjk@dqT7X+Jp;*D9Sl5 zwXZ_Th`f5@Ql%4?yc&5z0o(%h;uhZ>?g`+c*?9aN33y1w!vGSR-B7OX7og|>PCo$W zrL@|!mI7fQsnGrYMR$$Hh87RT%BE`98-scJ_h7sY)V4EL=mxx0KtC$;b+d^o=3l*` zR=RrX`UyC?YLj9d!JaAe$(ueOH0QK(7P9~HB@6?(U@{)#K{^rSvPgjQmY$y-7nYPD zB^_|F_-CyBpYp-hvIbC0Wby&G`wfPtJg_I~?=1D+xOeX!yj4*LTEe#BJP1zq_B@%H znRm+r{>mCNnqXQ0K#;53P1$b>YAHAog}_<`lVHuM+OK-wRkD)cTS%M+#fMq5@fHD# zPUYrw1JwTautS4OK=^}T*pGw_P{3N(;z02RECGC}6<*%#{rwNn0L4tc#F8H9d0W9d za0ARX2QwcFJ^T9T#P;OOV)$DS5-0o88#dDY=q!|K7eAqwxYkQ8MI$4Q0`A;9Sbo?3cN9?;J7 z3x;VtV;$N4Lw-f{{z9kPY4uGC7LYgIZ_P9*S2z+k%G>@1oD1)JTw3T!!KtdMLR>*b z?E()5%6>3D*epOBz}mHbb__)PF9Z=06b$PXPwVCDELph#k{$syFe-95-lG7EE_ks5 zqNBz2^d70Gs4SS{zoS?9?E;>dO%NUdp;iI~LhtdDO`8QdFV|oYTS)SESzgu;2fBB~ zL5v#pzifB)pi1h%SRTUTFn_r_2@AMC85dXa)A@&g@#Dq75ozVfTgFO*z6J^in?lI9 zZ{Jpr0a$FE@Hw5?&vnEYXY&D%8H4~JD^M!2%xL<@Mj{_x`t?5<(L=d`)#34X+_}kO zy)yg)y#=4+quRd$8;@2%WvG+_=@8hO05nTr{g>WGou~iLAk>;b^#7va0d$rqEVftz z`=JkVh-9@auBjPcr@jvq_|5FaRi`>ZoGQr4L29-@mb!~A^dCNaxMhfgjV%C{p^red zq3L^*@{>UAHZFlIx~rEymmkBdE&lU}MqDu?1Pt^yPxcYri4q!1K`ER|3%f@sbvFT% zy)C*38f$aN={!Yx$mJ98K_CeZZ1#+T6EJyrBjFnW+}l9#AV268bMN!=j&?n#{RL|D zjQ=n$3(ez~u&;An31SG2ek-lMRt12X^#Ev#Or}w5+%X$KXgA^;<#0I49Rl?JSL_L< z*X#V(3veO)h>D3xYiKIMiv>|J>)s&YJJ{|wNy1AAVik_38(TY5u8s`12no|dIN=_f zQ*}Eloj6wPR)94O9Nv}Nf4@y8jCAV5d%v8fGuMFo z1<@<94J#?pzD=%#MVsb!WRU*HD@6em9&~rNo5am97eu~h26mVq&~TpCd!Ipm972pM z@>+kRio%Y{q*0I2m#%PG^W+z>6yoyp zNjq@C)Wx$?O|GsQ?iF2##zBIh6$t&_weqLjfb2%1OO-NPq<_?8eT%-#5Z3iW#cm3=2uS@e9B7U27_f!#Y5?{ff)yCQy$=;4C24bSiZ0D%?O-`?b)cxwK`?xr8Ey=8E!xs`U}|rA4&_o|h~58|l&7If-t$ zVDXUZ_o}aVXglrMIkj&_-ivV9^T!Uv&V%=1(%Q6gX!!V40$8j!)S`H7y4I(!AP_o! zV75^-T)B(2@i5b)Wo~>!aD7d+!Bb5Ag6qgLVIFs9}l{2Wg zTeTIRJ-+n#-Q{&%2LP>kz}7M#Cz9da3(TV-gM8uTMg{*kUc0^IA3vVj9NP2|9g=~s z2nN%e#r);D@QXbre#@4jIzlmkCisnf@m|G&D+E>?P;x!^O&hW=2su9f;5*rPo;7{C zqRrn8u0(iM>%r<^PQ!BEX1RdY>(@To`cR+i>JBpiIT3F2&-h9y1TnKy~!=i&lik&$Xt1c=vIVa%i=9<6r z0DirQIl9~`TL47x5;$}3GN`1(OA1QMPTLXVI)Dp~=K0TQQuZ($#l?M*qP%FA>y3M0 zd1Mgn0+!F~CX%vuIXo0aM@Y!EcioqJ?bn)14s3iD>Eqoz(vnf5(L3`$-ATHjCy|TV z*w`E`N;nPeH0iki&dJ%WD#yZI^^mQVAlvDRZ3(?ZZ|&&JR#B|rOYKg{%hNQ?z-}fr zPd#)y!(?+hC?urs2QMwH*s`hugGkVG_$v#nyt2F`2*fAfRGBR2EMxGK5B+-oWvy`f zrv509jNLZ&aUGB+Qd3jAz+6e|Ui1E4%~|yg2AzYA$>P}%B^LGCYXvQQONzfWzb3x= z9t$GKV)1fjH;~(&1hIRklUPoFW|{&mx?i*Fg6&eJU_UPgiu%I%`RTaD!Nz-fl~Q>q z3%#*IUOQh%Pb!NIlFA-&E6(*F5gHXf12e$J06PbVe8dg*V&2aj}`>dDkS%s&2;jT&1pZ}A#2I~)E z6a+#}=Gil6@kpM|MAlmqmz4d%w3h$)65>@x+yP&Vi|&-?6gVDwsTOA}J4u}19hZ1f z@$D{Ycj!3Zwi2eDj(ptd63H^0=P5ynQ3Zq_TNww|Qs1zY2Ag|@*`E+r6vW3o>l@3f zthG23+}BG+Gb>JJ8IFLn3>OCp7b!okI0iX(arNA>M0DDC@OMJfscfeFV7!C1bivr1 z_h3-bX5Bca&PyLi&Tfy}Wacn!(u3nZLLT#62pXbN#^R*bB*0$^g1drxsh5(M1=Oe{b%skcKsMT(qOYP5;$_D zHgimj6xaT8xW{I^JAXf3)#L7C`3(DaUp%@m!#UY&Dw}jeUaCJN}Bg?oK9DS^gBi8VGNMmJASXUs ze%}_wEmv1phgqL;Y-ToJKWn^GzDkVIQ3!y&1A{b!^Z8x z^Ro5zUVvM?zKd;R`}<3Py7Kb@18$EPudC2^q!8Ny!?v|u>-O;_zJ2>=PtRKlZ;3z2 zopA)Yp`oFm^C=uHrDbVi!raBF{IgM|I@;|HbRAhrRUQsB{idSfS0oVRb@{3t!) znVp|6$xDil*VzoHL&wCF`S2kD#twfL!VEdtcS*+++o9wnPI*PDdGBa<@4EA!JnQZ4 z?JI^0=$)UP2E>DBpZ4gNrio-WdCIR}Z{AP7?>nLv2?EoyKE3LYsz$ZDizC;cFs^o^tM2IEtc{($9X71d3Kkt42c>kJznkMojd7k`!=bZ0y zPH4QK(B{^nhp%e=z5A;zLqmt^l5U4dk>+340*1|2N1>jVSU=2v%L(SLTU5FMDFNUO zc#sY-ocQX?76!B5|$bl7e^GGB0P7{ zE7%z%o*2EUq?h#swjxGY830=wxq;Q8LNmN{Db<2>Rw1n+1EfTpR{W<=Cl!KmMd$6# z`wn*Qu*Gx9lCvM)zu)V1Ia%7#Xn4D><_i^wFy#i`_4N&ppFBukm%GbnxXSD--`4+A ze@!T9#;xYnOlIzWK=qB#ak=wbbLH_+r^~o?C=|EOE?kG1%yX^Yv~HaVLZ02cabs}4 zWOkDCxH+ifM|(&e)wH1R;&FllMq{pTBw5%PyqR#aA^xR}@M)H7G0-U)E-J*K=2MX5H>M)Z{?)M zx;c3mn4nN6$D4Y>9d&C${P6wr>lYu=AVcq}nAm2r@78K&lzqn{)Zm>K{N?CEk#9M2 zr9G0_U@S>Ao~E{Zk>uh0uRHuuS29ipiSBy6#6flB+EUbOM!5Grd#h z`qMeF*Ko9h@*_`kB$qV`jPH?<(a4!r*luPtGd&`#*}(GY`_QkQgGUPq~e zNchr}TP>-XjQtoH#TpiLG|-6#$V;09-XUMlXLIEg6e6YL)V+^~FN~WsFX6@<^n4-h z2z%4j3OU=DI|s(%K0+OpJ&+gQ5Ywu{q|xl_priKpoKogg`z%2g796s2zBKI*w=<5_ zFf@5+0%^kH?etO!b+4Zy3g)Z1FaXhl;H|iLL-v(@Jtuja3>;Qg2CfM>Q)tI5s`fTcp&pC<}+c2N9w5ImZs$7@r{u zi04VJ-Dw+}Y(Ur&3YwYAr2=2RnNp241i%@Q3|B9cM#I?klw+#E7m+6zAq116l&~YY zsYs#$M~4d;Y5*(OVt=lMmDN*nU~cyd>otMun_xM~g5F0|RbABXVYp^kZ>^L`M=3#z z()X{S9RFnit*;-lNy#c3TBgh`ES#W`)`I=GS2m#gu8hyZ9B%iX-IbT}RhqPaK~K3+ z*RNf>KxM~zTnNp|$zg(vppj^;7S8?lw)+;bUipNXt^JLIDO{wlX6#iIk}D7xBq~~(A`R4I94{Loe+=(MluZ9D-yaOeLj@0 z)0Up|GK^g%CcepueDmh*B8D|J?6-sgRytvbGwlAtmV-+=-au)o9%rFMGBR?QMM_}KvBZswk)2KbZcL(eAXwOHk8iH4V%>0;YwFE42GxvB?v1C!DLY26 zn|Uw|r;IpSDmvw;KfaMZ{2+N(ux7XK4A=oJJw0>FJx5+m7`ZAnyD8XTylAD<;qh(_ zCfDmGOB~+d@u4_&{Lf|!HrWmwE`ZJ)_#u+ zwA^y@TkXH)#=pHO{)}>eBqB z;Cq7F+G#SquClhu-&qROw*2z7Lz}%)`pC2e{-ir+y+#}|Nd;s~y2#q?=?n9-@&^ty zIB`IQzxSmF`nd~&g1|0gec>bu)uO4GI3)eWuNbP$-Dr@j>yqe!r>71V?=i|QNku9f zh@KkHh121}&p@hg6c?9^u1Z1J1am$gYDmiPGzwL)`PtRc8*ZgDm$agJ&zQYAxlD%E zz4+MJERa~M*7bdUQn=p&-#>Q}K06Zhfd0m9#{*~x3Au0T<5RG{OlA;VG7-sKcQ^lH z`)TkgKmJiO<;~QN`J)9FzOMfe8rJY&Y=>O)S%|BfWZit8y?yuA+|=|uPeDn^GBEJf zc9XTC_oULs$Gx(+07}HyX&&8Qvqj+}G^m9C1)nHi6m+IR|5mzQxMYM=@YU`6&Rwyd z9Ss)ZZ{EC_0j+8+G~X<85ST>-U&Dj5A*LFGwWk5LVm75#M`)unQ(=ryI8alwTwl@b zdBy&tIZ&M3ymd=;ix8MS8t4?h!g)UDseQbs<~>o=piRJ1{+IxZKYnF283x__A%wr^ z-pOq$I>up=9!bL{Y$Nd7AdfMCU5kA9u*;JT;n!(^t;quhPF7Qsz0xYo;Wk2BBB49t zaY6#AqTeF7;^T9+9UUcCE8eIoSE(>O3oPjP& zCaf)cGJIB`C=Fm(1p^3?$wo6{D_5|N*27hrjHb`&LR%!GCtSykoRXS4Y)KbHYA;ON zwRzWSxrIC10+@pLY=EW$@%sreF_}=$6DI5Q#Nmrz?MI;`I=*fwk1Z%I`N!*|tB^zB zB{I`ro`5zxA~`7V?Pav-dD9nD+_nKvHhklTCt{uh3QU>P(A8VZiog1Ykpch7PK`c2=+C<>w97#uAeAylX%oY0Bc_wzMrN3f!ChoRNTjQePpZMXQe z5$9vqu3de&N;_^E7A z9?}wwg+=94@D;29vTp0vt%BaqGEBiYR_^DY6W_jl2ie=iBoX{J=z4)K$K1@!j?5cr zum=5rkr|nlou6d6Gw{T8UySNzIprT3omQ<9_0FQYNtlG~CE6A3A3aJM zVfnK_Z^@=WG|&=M>5;t{`fzO;iD59*R*M&#RHaA{wpj48K z?8$qZ6e8YrefDM9vU=fs9Snfl>7JkmkK~sC^x{pVUNe-Og>ghySKHYXm`LHJS-kM+ zKy4wfjsHg55FOubDG}k*>#p}ou_I`fE2pS9b+87eT4Zo{vx$A#**|awexm>}OE6`r zhVcn{rd+JkaOSM~4TvDlF#Uk(1!Wg8VJtZ6(ws+`+N8|&z6M%nNkfaIj%-H((Q?7q_|)RQYHQF^1! zf%fg19qrAFBT<%npqPSq>&E#Jg>t>ny|gy^``B;k_=-_tQtQq8zYucpU)+86iNy{S z1F9WlT}x5Ov&!tdk7RyH!V)#Fmq1Px+3~;LblrQl8k`-C%-wK!r`)dB+d@b$0k;o6 z`)=%3xBM4K?HV#USK$%V>Z3>+|HI8_r(kjs0l|B(ii-J)o(;-QlY7w-z#Tz>BJDWV`9=dbo?I>-7&_Y< ztepYox#5`S&IO$_%iP$ZzeApA_Eag|5^RwCCXj13Zr(iLt3BN#g)VWbc!!v3bz z1hn}B0|lQr_OueP3M&pS5xr<{&&lXGlmg56w3Sr`I42ydgNYBN{~VhYejK?qw+2ym z*00~t>s7Q-NA)a30t-NoP`*}%MahFm=daM?EMH>7hNO>O4+HF3n$@vT z=wI;*L3O-|lu(!`TmT8<%s;U~c~I<1RTYg(ZMnnasw2r2kCYw9rP1W*QWpXt%Nh^( zqa3@*jXv)e9*x3fIs%<1ISU*ANtl5HEPK@T?>p;qF3;XW%6zAF2*ZLr^grG#rT8v# zAmrOuyO|2FU0WP?5ceW7bJ3Nuue4>T_H~__cP+651}P}V$x_~OF>0a9cNOZ;EXc9`qTA1L}8uIlvIOP$2xas$Luy3?;#c{ROk4ynDD znO0EHC>RA}k&iXKNx z6o@T86w?d#Rzy#UoG*3}6B8>UGjw|Dfn|@72HGbiWF>rHv?&lY;FRpU{kbEr4%Z9xi+C{@lu%8j7Thv9HS18HRcAvrjWmy)@zw%u^mF zk>Bzsm88sdHJlf?A>~z7ElhiABWYx2G*CC&#??+ljE|2itK;&@XU6(q{58b1T1UeX z@o;W?e<1Ag5WknVOZIbwDrU{lhEOnbsl0`6@N7vC% zadmx!?ov>2_0f(Acos2P+%a#ozvhVuj1Y6m!f)pZ7Y`HNuq5ZhdOuy!d-Q6iKQ`q4 z{nKE#@TpRuUS4z87jjW101DGE721{#f zM<#4|M8e7%g=I|!$R5BUQXd1!3{43Etyo(q>q4Y9lO#0#9YD8SCL$u(UbRiH;FuI) z@}Z(l;Xlxzk@L5FU&1A2X6p0T(2Usz6#1PykAllJX216>zb~zc9}G5ehKh{UW)2cU zO<1q);{qmg^~kXDMxed{>IdV>I_Dw#+P9n28i^05%gQMUCQ!tMR(1 z72U@=q}q27uvS1vv-R$j-D~0pN}VQnqb-(grDs`J!tRLXzCf>3+dK>vTcq>{@Thxu zCyoHn+Y_40pD)3b1{O)n?w2)LwaF%^j@s-3GbA5Kui1X^6sQv7+jN*1ZSZ(AsG#oU zU#hN$aI_o$+_t>*U~1VHoO?L1TYJznxIQsj7Eo@N-Iqw}?miFf;h;maiPm)I^`OyO zz+{SwHJJ7iXDXXq1ld!yNEK_>NcR7x`NRpK2eGIG$0Sv;>=;kJuISNnLu&os#h<{i zx+d=wHzE%Zjc>p|CKth3r_2U>(R1hv0n{mj=t`RvSnq{DWm_B{H=(L#>Gf(XC#lqp z!FbHt2ss0KU(xkoS@8v*+i_=yVNd<`gn>{-KNmNW_1luY-2pUf8Z_K+#=73+HM;=c z3jYSE_E-T_K$HFNzif5^i3sc)=8yR6zW@F?^z)yof|@>$&6S)@{j2UX9X;%FH#b$< zxNd{-p+sbl?w76WX=c5aIcb% z@yty1?1OY2GB|n6J(GHX5pB&ToTz{JPOp*bjtzG$?Vkg;ra;im$`s`2L-eOjwK&Jx zUT>T%7a?nmb1ZBPafTUK_xZ0S)p}-O4V$s#nSgjT3#!hh;6$W+Nq^s43=FV=WCP?uK4Xypg65KRe$n{TyFEXo8^}y z-z>=9THgx}KcW=(0;d_H<{lrUJwG7HCRERu(Q*2qsF(w*5RV;u#rA9OPn9j_aMjoP zOU(FIZ4SnY4m*G8@HM-Pk5{9r!X$c{h|kicm#2vy-alVAkOW~ayIA8;?APo|HBS)j zU~(uefflC=hAflbu@h)h3yUZwJrAM(ksB+k1>0aNEG8gk{f6}_JN<4L5pb29g<;It z++x=t-+UZFbq0po zMzCulpFYj#12zl_@wF0%dM7@;B$ZdPdR(b&^Irfh@hlnh^yyOz_OnKHINBLf8*tz_ z5Wbj%O<= z)V?-`2yC&1V(!G)q)O)->N31du;a-5%;f(+t zT4;~=WWfG{Xo7ghkkeU4qI{wE0ECj$92U+~G&l5@>AZ4F%)re0u5pmVTDkrvru9tz zRZNRpM87}|1LmkrkYp{UR+cTg$->f7UUokk^z%p6ml~v^7jlUPi^V&AR~f$Hh-+*E z0`|341{0x$U2Tu%FI~D6Sb+4eVU|}8d}`mXh7@6jo+=Pqr*3?+jQl^8egCaa{8kc{ z!Wa$2sREdGE68Y2<$v?DpjuFHPsS+TfwLa|_F3dth40TUn7{A+i!JEy3-b2``B$sh z-)rLUHSzbF_=|(`?``q_VOyLy2VS%eFob`jsZj;HEH`$pTDcOFx%P6dPjme*iJ$vX zY}xb%8RLS}5|HXqbFcq{hX(%ke`VU4TiC)Q8}WL9PBT zH%W`<`YqL}hJ1inmMhzu^y2MK>J*f5%vvyHFhS`R%;ndT{GM`az|NQ``9|xsg#~kG z4^6$_XdK6fV6{?^gwH-hC4jsk;0jxUGh2ozLHp=T17 z{hLkqgOgR!`HS~LZ();;9e5-6PZlv7gjXS@AsAD%i(Ev}YFyXgJ;#yWSLe( zy#vK8

r#x+1>axTFO7u*;TCgEZz0XDFCnznYv7VhJc<#GMKX#cH3?c3Z$z5l%`CO*2zQC7|2`U&jRf zBDSDI(1VB?a&n6GVR4!TZu7KF8Z^qle--Z$cNmAmop~A+l?vKXORo2An9h|wISF2? z-w7)YD70=9D^dI2VTA(AHhf1(5Rb=;?;M(MWaII8yOUS=dO*8_1J{bIYV8$K(m9!yxZsFFC*cPjR zc?_7+l;q?=I5EjtP^z4d)-Od!&_0%|hS&6+@}Px~J9kbwIc0{dyywFuv(DC?;ob!? z0IVG{2)N90FMtsJX$P7TZeg07FugjhiAJuT5lR=Gw7pSSB00v zRbwoe^D-GdA6&O2QS=OFYP6%H^W<#8*@Z{I6>>zC7LFKK6Na6ln{(jjV~ju=V8Z-_ zi}}r<6UpIk?PRay{8eyKaZ4!zd`G*Y9%qOsgUc^Su}Sg9VJc z1zAkxIepfflA3xPOlCmw0Mp}C5cV%ReV|ash8@3b>C(danFD+Gp71L!(dGY4Wdm8$ z_`+^6DkleF_dt;oR2T<&>GoU>(Bbh*N{Cy%MHZkNj0G~j@6;D7G`Y(Mwt$v)k0&(< z2&78eM_Fp^fyau9id;`Q&VFriCON`{-xiQ>xouQSsi4V3q*0^DSU<> z8XAEa@G~PsOp!i_zfN&W9GBO`Yh}S?;h}+sU^n8uU%PI`fm+o1H-i0_=7yFWpm#XS zJwQpyHfAA?>%q^7U~vB|b6dM8Z^?lt)B*eH2V+&P-^^yizV~V0mLf1uD#7i61W@^2fhEej&{oP2#k>{V9tYC#PsCJlh;dirr(H8LWB5T@b-Tb z!X-4PoT6IXHo7S`W;f@zGC}&vfJF>5dUiq(&P%!&;#v0bQobW&*xW(~>&n~xPnF(< zZ0EQNHaYYiETW)*0v>*-C+Ue_`1it-<36KbxEZ8bM)pU!dhY76{H?W4{r8{Jx^8XT z*mq|A1sz>^(&RF8Meakd%8{b+8UBS+wK{b8q!O#_$xEtbs_+})iickbMY(VU%p4|Gxz?hh{SdGRZP&ZbAoP4y#8X9Pll2}gu@OnIwrW8{v~|?|8CYP%N;tMLbgk0 zc=nW&FW|JvEOnKqXz!NC1NPSAs%fatCggJdYGATz2iLV8dz3bBGc`&wUFe=jBHMTN zlnJpF7D?`l7eA)w%+E*F?JCquA{?5puWO!(p+?1!{>hfy5*1mDxF#w}|#M<|fNjYbKx$L)<6@gC8o zqGMQiGDRHC!qG*vWo3t)8d(|p(iFmx8b%iN8vDw=AS_>KouO14NEByWx@---+tp9E z1!ah%wFK?S)P;jN?}CuGMeRd}cS?rf&fi-wv6%f}u9ko`$BQh)R<@Abg;Scf9g7ja z;B(i&*|@4oPQ-iNQMmhS8Fm;yHQ#2h_^at)#p6<;a+XuW9Ly^qdoSug@qFFvG9$aXkVuRBZF6uO1)#}R|F*9SO2^91*qDUYHMrRsK%b&6`LFrFhdI)%`YVOTQi!RHa7OnekUZ2E(xUO_%WK2D<_2Y zX;KO4wo!(v*4*bRsIj6*)MPW2fW#%3g@H0wB9H(2t@)*rO@BU_pL?z@5ISI9?SPh0^ zQ9@8O`K^UrabQr}9`gl42DH$o97a<{j|EoqcF-vzq@qcBOTK_?Su;4UgmP2M&xoiD zkET{00SzA|p&R|WN=lEIkVX7NkiCvwFxgxg|~g*r-mtcof$C6kcH(7HxH2na})tO6n+Imc3wETBMvWIQS;NU+EmB*&5*ilitx zM+rraRRjq|4!!E!bGz@mw_o?`H{N)E{TxFFepO%C``c@+x#pakkE+UYl&7zqMj#NB z@{eTH5r|{I;jho1C*jC#93~BcxQ>vQxvy#QW)bK7`cmKI(Q3zHTKE0VcccEg$JAw{ z&ydM5DQKM2{NZ1F;*#o%m-o4wbyQU^rF{IJnth&ygX6p>vw{}$Pj6-gUhmL*j~?N0 zV~o7VnX2+>);uLt7@THXV@3F}k0ssg&FXLI&+oy}zC9&XBJB{G7|;J4u6WH0cIc-@JK~H_^cp ztY|r=&s}p2KF^b5c!;iivAT8#{ahGr${%ZAv1nf=9=5oq{iRMv+2zvP3XMV+{RatR zOY$y1j4M+7U&$Zcev%S?=K=$qK5z<)3$FWo?WK*6MrzfCnW@V>DmP>qoSL@HpZFOm z55|2g5V>f2^;AXVe70hfakI^w)8}3rv-RH12IC4ADita!qfd%LEvMjpAj%kA292`R zxs7MsFU**#ER`ugR?xIpFQ7Z?`$8zDva)h|X^D#`NXBIdJ>&SAU>I8(+rIeL>2u$K zija!`Ts#BA+V8cE-k*x{e9s$Msdwl}&qvQg)r7Gx$O?66v|U%VxA*(f5f@Uopt;bU zYFauRhDLvJm}{3ubBw9#RaZ-{6|!-N{7lWTz|yrZ67md%WSwG+K7N$1csWrS%dPW< zpxiQRsfTOn(O~d-dTUdCZ6?)T063buG7I zUT5H5-}=F0DI^}*IdvAEZCdeXfl%M-RyZcem%HAmH+B0p&Xr)3WrQsemynpTFQ2wA zXQ>O$MJI7++4fQjk0e&PZ8bNvD9*HmX)V!)pmq(>+{X5123tRW{dz$taS3lh;WG0Y z=QEGvk52ubz4|)B(1)om%=4TQ8Y7KX7QK@?*?7YjU5DX`eQFwqmm6mh2dE#-``*mu~Jrw0{^iCSyS5$nIQw;5 zEzDB)LLv3WL4N|VWrdf|DljmvbpOTQL3fYisP;VxmE91Dg=vPdxgvwi_E7vhSjhG}oSwRZGD# zI;Hkaf;@V1YDz0r;WE9Hry;cox0zlk3x5nYuS}s&8qLj`5~)*qtzIhGvOrUhH!J7X zFumWtOCg?qTfx^PdfvS}BDFqKkww8zF+B8kYJYUBmZ^wUmq%8#V7Z#{Xll_Mc1ttg zEK%q-KDQI&rIDL8GySww-e>x$uz=goj@^TK7vj>8Dte=vKge<=s{UG6jh>Gw%Z#qd z5T9cI;TLSQR$qdbQRjv%wl`5*R)YA*`$7nvpUR`IqAjN^ds$?_JY#TDVEi}Y<=zUP z3m53uh^w8mMh(P?h??2G*RU3@+hu99bJ;Q4rKa4So|@u}X-nJQe!cU0kodDw*V5tn%C*#fc#m6g%}4 z%RWrGE(B$IF{j7!^7116aV3E*sGm6Iuq)$J8Z71NzI|mBO^rAYiwnIEowbLumdveN zK1Ut}$6p?h8e^H93=t$Qsm$1mhW+kvnynPlw5uw-C+#Ddjr0;rc}PjHo`^l_G3i+8 z?nX7au6;8gZuF=S<~(Yw)^boo+Y2!Z;p|5F+JVFruJzq_zprq9!7o7Y$7toBH?eU1B8wXD37UceUc3?$VjzEG1(uX1E<4#IaZ|gc>+*w(8ONFsZ0?&=JC)L-N;s z(by?PCdtI>C2d$C@GIS{j~nlA^VE-6#)U*ZZ@9xvHIwhQn^nIQ#4gE1^mgA{DzzF) z$t$rlw&tFCS>gEG*Vd|gLCay3O9{{EXnfpq^kNiuNQ|rJ&J4BSDNh;n#@0kzmQM0t zl7~;w`!Sn6L2NPeBV8+fiB7EV+ufM!oZ?-J%XgjazPw77ifH-WUtxEagVi*soDoKU zOTX!CjJv!0^vptLdgP#t^@v;FQ55p`~Jf@H@sx-B@Cd*SoZVh_4WSP{MG#YQ^taf8l9p>dZ+BmpKotRp$>O+KH1u6YRxtG_ju6b zIe0U*!%;u-y(ykCm)lv54K==dwbgvCAHtp zFi2t96l(DN(Y3oz6HY4a${xARTq&PM*DZvWmg>#@Cha%&yUAhI;VantkGK) z6i+-kZgY3r5&v#Lia+FxROn4}jkz=Y)jgA}iZg2!YEVJDWBi2(X$Iomxf;4HENsZ? zjEU6JlKCa)*;}J(`XAZjuL;cx$}VPwThe>Q`Stm(h-YnwKIJfKR_wXrjxoWGsvWdD zoY{E<`SLnHd61#zaCm%{YW|lm%CV}?9{lC*;lV0T6*Lwz<9h1Use-{56{|O;SZ|6D zTPDuX6j+*}_O`bhXY8BI9&sLGqM~wjRIJnFZpt(^49ihJZH%iAd$+PQ8 z>^249os3!J6_lHPl@t}=K6_<%^oThw4`}hdV6YcOYvzw0S5SU+WtUH8+Yz>5+gbi#Tj8yAZkyGi@$K4 z%{RNYHooK+D47mQP8?yfUzX><`Op_ITc-Kn{9@PYA~I$ic%ET$oe~#QBMWG z2G`U4Mfjfk&KJ3R--0OMYN{0FhTO7o)hQ>7IWp96F{H8^C+4O+_obt0;$@>*A-jl( z-YUQz6h1VNUM$Uira4n7Mu|JhfsM2$pW&7$!GIf)O6>IBJy zEz5(0tuY08`OiVE%<) zl2yMPuonwgbBgX`R>XJ4^vWrYI3J-q9AKfC&FMo`V6QWv#7^;iFb zWr4m6S1yjjx_#-f{`)KYjNciVD)A*N&-DQOuPmQvp|blZYfaUi0%K7RZsVFmnp{|K z)>9?PyGtGG_7#S+J*o~ja+gb-HG6CVvNDX@776W~e^0^_Cb)9T?D9i+EJUNkKgSq! zI<{}@BbP16;i&iH-cz1DxFTPc!Jf23m&ew+M0q*Nlw z&%nXNTSjqx5-d%1?W&}5n|QZEH2dh{IAu8tjpMiDaO7umpPqzZ?eGixCe|A^PblG# z_p=FnPQ2*J(Yj#6ch01<%F0EvkqpNZg5=6cSoxN|jyciGr}OHOWAnvHmE@he z&7pJGVm`Yf<$b!~OK{~dy#ssi(u*U1e`CHmCq9SMZG8Rd^oP&yyKg;8N=g!awe}7h zqjp=9h`}%4oK}n*-`Y6ncEjOdX}*kuo4P$hw{4r7N!q(xSXjKFeV?Nz*m^~?hru6* zdnZ1~DD=qd-I1c!L8@_;>q3Z%)XCt_G*6mqj)hyLIA`_7iJ1=$2h`piHXhR>xKei_`Sx#O*woiO(atv{g%qWaB z>+BJR?M2UnChHqYr%xp29NX_+khrw7N23&1(-*t-Jy@)-=>BDiHACI%lH%#&W!J^` z9c#tQeF~FqVHX2WArL1VP}*C;DP_sor)`c)?f-uJFpw^Ddipsl8(X&5(P6ZJC0eiA zX-S{BIH>XY^JlA(vV4)6$5DKK0Re4A?Uy;VEufc0v((+$*kA9+M%H+mm18iNp~5RsT{(X~$q4JzG-J=s z$|_4qE2NpO9GCZ$P$1;7>nO1`;;^GHoQ+s|c*69k5anAj>CugvE`^}4y z(_62frzSSYqtldP(r9hV?sG>d0^nI1F4YOSsdQSC4LUYhrOQn6(&Ss(2fM^#j|OF% z!?Y*P{;&5}8;V~H^1)wqIHl%r*ScaYj8g|+y|>)c9L6c=vNlaeICJJqkAYoP>hIq# zwek%0%sb+>N^NnPd4?i5H#@$l_7HtJ?(IWC!wjFY-n@w)wyUW!lfDAud?92IKI8Lr8q1}3!m2LV zX)!>(p})AubDik~PESK@Q-(c7L)sy(Ahk;1`n0yz?YSGib(vuaD+Bo#dC@5)Tvk~| z{?U*!6cp?&>dA+nU+q2~cWr*NUO4kHJCDbPY04&}XdK4LytpR8>#!W&buyHUrUgg* z;$UI9sL%-!A9RsP!&%hwh#p$t#jmgK0~+U|ilu5AZgB31DC>B6+6cuw418QAXzS=$ zbmg{gqFGz?2kDOCTNPD=% zrf0S-rmxs~!0^Pj@aSu4yXu`Z4xPN)@)Z+4v;x-sx2ra~70tXOQog+}=tw z$=Mq7LcS%Z>R<1WLN>b1G3cELf!9iSL(ZVOvo_N<^WedQ*0o>1baRcX^yfMfA|Qh& zNP1{ixuWE|w^yh7lBCHG)>?S{{QWgL;w9R)IMRvwrM9_szEs(6Tg$tf!*-YH>A7Os zZZa}567hYCo}Qi}B@%3d#1D+y2SpDlEHb&I7`o_7w+XlztmDyTvcn`dyM8Ju`o0yp zB>xqgzSMWm!`47D28#EhMPK9VsiMgGwlgd7}C<~PE}m{{kyaA^9>?AA15!b8W0?P zk-R1Xp8Kz>cJbM0_2YO*N}<8QPexhOppQit9KE>I&)c;8`gsYD6V}N83RiQVITv;& z?{L2#gOutisW9Z$%F)eN#s7gw{Ce5dn^Djz)E2uWgu?gAL&)|e2T5|MsHn(yrzd!3 z#?vr}}yBugc+GHP8?CmpZQ)1N`8?Rl-M>E2C8lvqZvxO0Gd^|GQHci(H9T zHp3-cM&8bM=}!Oo=biLifp<5vd4E6#P>-uX6)dhAl-s9@Ixpk^YsSIBq0kb+HBdHJ zFRws(%k$6^f4*BNz(F)F%b+xm!F~R|ym~;iU@Ol#uLEL)HpVzN z-=tyo*JfIij-h=xAj*~0?YhP*kKD7{fF zUknwP%*~_C(zA4u*6mV`8?g#|uK1DnufuqzLS{A{(0zv`E1kyt=Iy{R1oTeN-h}7~ zgTPK%4B84qnUxy;>b_HKG57#RsrBsH7a+4XCKY+`<*zyxenuF#st!~f<@OjkkEIIP z3|SERb5BFg2$4<*4LvYV{u(In)NrHFgO@`3I3rDDc89)Gi_yVO6$#6c@=9pvr8qHX z<>dHlTH~T*h+C)MGmNtV!FYJE$0;su2!| z1IZ*yn?u=?vC9>TQ}qEoan7TefV)yTOV`dt=hSP_`Y<6Gk z_tT#m7&jE84#yTVVNWSBz0F$MOjGi+N4bYMyB>VU)?s1J(>xP?3Xd{RjJkR(4Svsl z9h0@JqpXD2Qd>_u+?~!wPNNm8M>j`oq{#J_>@e|Fj$1~~oP2!h1|=`LK1&77uQo77 zgs!i)x9!=_cQR4Zi)xOJj?xST>lyiaN#%G^9hJh|_X>T@?f0nQ)=3EXE_!p2J}76C zwKSnPHXOUQ?#3F^W_GCc5(0jAzpz8lcBJfB-zmgBwOeR6qM$|RJ<4kWowaX{Yo#mG z%V$bk3)zljkT|eA6e4tIX?&6fkX}X)g-UD6iTwt}4s*&l)PT`!CA=Vfzkyxb*TrBa z>D~&Iwa3xH*83U_+t9wRpJ1&lv_|n~=@q8AZZ2lVOSs{i*b*L>?oT&`%*@P$JvFMk zqgmm&;Mh~H*I`ze`C_nOc4Kd)29qT1oAtELM?qP+zcWd?r%z+vWc=t9p4#MM(UZQj z4tjNEmF=q`)V-78Swn8WQ&=(;Qo8{uDx)<^ib}um7kJFLH;>>)FHW-Q&|OA0L>iHV#+<1qsLET(s6E%5urncE;HLB*@U(ZQj52S z!SgU88Er<2cyXJB)^5u7_%|KTOGLc34yUZ>RTW{m0Snvn^Vc5-HA^*$=)Z<~!%8E3 zDe6>z@OY)>IcUY{^oQx_EvM#S4ZaMm+mZ zuSGrP6np(UkwYib@D}PALiN{aiQ0|?DI{bVbb5L^jJ4RJi&;Li&OEO=qsVz>6e2nm z5Eq+o-RI@+Rp)O!oc~FU?1kP46B!xlSo)Ao*fzGpc_lvGNzawS{fa~+b##4= zfHCBKp%^79sr|3z`yW2v*k~79nIANd*RluhTq`^6V~G0J4&JzrGkv{abm}eRK+4Au z&5{>-f;GwI5Kw#@YqN6NWV?lSo2L4kJ81_CvqwcM7HLGAgM}c9bxhtmzG96z`vAAy z_R!<^A$h^@67*QT^SsIH?v;fGw%awn1mXgQkd3KE1B;oalyH-ZimKQOr(p6hsH<{k zy}M8F#rB=5)m_@%#ljBFEKPO^vE{+rW2Il_-*iCXD&{Fa$eG#VU$8G1SRQS`w$GYgO-_HLSkKzk(b^WC zu(b%-`@{Kk|3J(Z7E9yOoob{Z&+%$SOZhLc6Aq8<&yBF(9hfsj+-uV4tI2AQ6}gf5 zr`?T@-*tk|{F$5el_AG5H|)n22OHf*fHo0=8tSJsE;J123)V*b*P|y#)H`rWjS=W= zLim|JXT5$KRt8kWp z_UvAh+I*91e~um?^XTSqE>3xXaj}5C&B7rij#WU?KoN3Fvs~6^cOgHt6#y=tU&gNV z=a!CU)z;pl7qS0wn^Pn0Q<`#IR)4NRwk@uLR4u)Z_K?N4IDNn*UFHcM;Zs7#jvaGc zos>QC#~+cXKpOssZ85?F{2k)SZ;q2kqjK~L9|no9J$lMWlCcu+L2Rvz)gVi8PJp9T zB#5E$9-DegIINCh`0cK*PwQF>)RG@s{vQ7}gmuO+cR^HC<@4v69^;gC!7NpqL)QAmR$(M?Cv~*1f!=5n9-D{iGh0B- zV=REQ8!V88IY+ZlUcGYc_SoC(1Iei`S&oWc{Ix2i`o?fj4D zzT9dL)Gwpw_I;q_nl-8*T>w8kTU1&Kb>A(mW!8xnk_fEL*^P@T;z`h8EkItscIS!r zj_i+StAVWC@$n~BrSlRF##0XiP~+ooUi3E`dJX_JaBqTrgGm4)bikjdI-{)YuDm*= zB}48AJx`cJi^Kh$*^Tx%v9%}>b#bJb=mr`PJ-03}03$B1DBj68o z7OAB6&U*M~0M2#*rX_Y+pF}|D>LhK|O06~C5cN8&94fNB0Xb%H$qBm9uG6QV@IBd3MPnzGSPpytP zUq(+|V1%?GM%Ig$ChPA|1i0D88b_`9_2(FcB<({hvAb1sl>5s+pTnReXSPyIt}k0B zf(67qP3c2H8Rc{hSTQQ4qfz|k0=o-cetv#Hx%!SquKKtv)lL5NCw|*wY_u)S2Fh%A zalM1@1vQLjM}x&=TrS{RDlAM>eeL{bvK|{w1{EV=#?fh5 zx8S*aI7*=#QhXv?{A=bOlz+(Q8xPG4B;DFytfQds5%3yyx7l`m3otv@wtRJ}A=|6w z5P$U2E7vez{o>8Xo$w^A@)y~ZdlT=!Z7ulmL&l-%)Ww??zkWYGO+lgg{CP@!AWb$A znHRyLlptgz_2S_EWe&|pTh-IOWo`7Vu`tk8%vDerk^Dt-*-sleu+ZR}_U%$s?P|_QL^t5b` z;WPDn_~~lW&iY*T<3YY?e)B**A(yr1lsg0GxZLfMNXwT*5xf8y;M&&W-CW~h{f{3% zX6az!!}ocJyMOT}H{22x)mKjE$9<)R<#Nd|X`^;vsq%x@nTfG4FXy+U7t-e164IrD z_AQkMGSsA@>*%RhqJFF#*vB?ZYQl-mq0t(>0uf5tVC=BNF=EKJ8Ck1*-6R>HHg>lXrdKgT~wk zD{q4K-Gjp`om47ZR%(W{J||E$ZwYO_mk3`$<$5!aO53zHWCO8S?yyawW^qjOBlLcD zsP<3$Q3VC3OO6@?T&^VEHP}Fw@8n@JkC#?L9wn#*qdlsO9zBJRaQuE7 z%SVtnyXWOwJR5he&6pu+PqbGHqej@+ui=)OaOnOZR{T4;YUtYe)Q2bztKGsS$D}tB#R=I+X?Lbk)1t(9n13Km z4m}T-ZI2=3fg0NF|H+DLJbwd+`vak#Ul!o}=J@^urONX^S0g4vh&?>%8^@itOwWb>S^D92SNCmtDtk z4Q7SFtKMts%Z|VrAQIm>IIFmNULN!q_mX_64}L!BQw8vLo(cGmwJGf+c z{q*&thd~UvgAQh#kaOTmzEq4tE#JR?ANj?%Wl-Z;RUb&t34{&^HYCRA^r=%#F0zOy zjy#Day(IGLt7TUjUM^!Dh+{{GI$@mYk^(KZrGzdy#;|mAJePP7qf}mS@Hu$k?gOSR z0#v`K{t%o!kxD_JX%{M(6T_x|$Pv zr5Pm7u3~9(xZpOUlxOAc76B6wBa{W4bo8C458@*fK_glsDNEPj1 z+w`lfimwS;r3jC?YN+q7cLV+vaB9`f)x$mnZlof0fopAji=XhpKcJ`IrvE7WiCK*U zseK3L6b}uVdW?|GNH1UF^gIshoVTvyq-O)NO0hl9M86JN;_uw)B0O26E7iXcM$^`9s-m-n43+=XG7r6>eJ( z>RHg#)r|x#7K3uYl#}=pAh-Jzd8$%C1T4pjc+Z6XA{Y5~jZ{@4*s5|0%{vqnsu~?h zbu}TyU~EvIAZf%Vua7m$)i1G%vXm${I*T}MwO$(2#%9O(LHvnvokMC9k4nGv0fYKf zeFWp#U%VN~;oMd3*a?8>U+i*di*1HCE5_s!GobH^o>6%vL*;&|t6b6iC)*F}+PdSR zlaJKEjt0$S8*iva+T*Sd=Whsj9lD3H8$5KFZEY%wAK@lPoG5l&P!C{~GLDarUt3%2 z24aW*cH#4;3xeh4AAyIv$&Pxw-ZzK*`&Ats?m^HzanbSJ zp1d}i%KYc=>gsB^;Aa5du&8pO`^q$JsiZ25geDLA0nO*c#l-;jKYGx7QJVum4m6nY6dY z%S*od^9?zYLdJRX=0osx4Xn+yXaVgc-;G_V&K@i@hkTL^Z&u;aqfVd=FP}RXy!2i~ zryrU2n1+&uPiD+>FL(6y6eXZ&o|YvtbZ@B&GE;}gSr}0MbrnB>S_}~Spdf{^1Y8qT zASnQ(jzre~%0gy(Jc*>{kl*d_I!uP^D1~uob(cHL{cQrvP-SY!#$$4%AeOoGi|)8B zOFwu}Fv9TUs?XnzE<_ipjym5i>K4VqY zU{a$j*_&iN5>zB-`WjXs^S)Iq-hprMUw_!qxUDnM2 z13q4E{>2CAlPW zyMfWm@SoPmCLB6t8Ip>1@18g0uj}lB!D4ak?ozSL*d;(V2yIl`v3+QR1)kI*+G0gC zW}3r#;61bzkS+ouRannLuQjIXraXSM3QLmF8XFrQjFGzKCtAQTo0ypJ$04y!HY6r9 zDjXm!dtD`~BA=I)u{IGYA@$EqwB{iz!8xjqf08_&-tW(mU=`vFQ!S|@yYj%B^x^I4 zXxzgK?>m}<5Wqp)J3Kee)!ZC(bb|Er`Ef2kIV<>b=;Kd+U+MNc1b`@n?w@3&XZd>W z*gh&xc}ev2*|S1kX6>=;@>xhsb&P@2;3pdX5r8@fM9VmHKOq*xo!76+urZ%=-=DdH zk1~&c<;+jIHx%=E2-0hJpCtYzdNNaSj(e!kJV;Nw#@M4uf?$JlUh$|XB*qQ>CY~fs z(-zJxLBG^07nav_MLZ3^S;nvguD3$VdRs zg9t(!@nHX8V~0Ay8gvua@k4R}lX{APgJ(G;A{AP=EQreTtaPWPA^oEn*QL=agX9DT zQnL-kEBjS)y;)*{q)mnAuidvCni+{82h6#8!8`DaA<woIJ ziZL+SpGxq&{yDbCDt}(CFBJvy;Oo~rJG;APw+aVe0R1PBUR6~ElE4|mpr==(`gy&+ zxkG7Jf<{ok+$t3~Ue=G~I`E(=PbtKE|IXD$R?2cRGKM{_V3z=TgJl7*1*pmaBs=xN z-sW8P-9Ai|w)W+USKAx1M{(67L-cT8RmQFl)#?g}y zMcll-PHaeGG_R0^(W>*lgSAUqk0g`H6Q+OYv;Wnqf45hgEVH(??(BRK@dzXoHMTD! zI10t_$`hBUeoj=%ddq#BaTEa@ohU;XPRC$lo`}SjBDOfV=eUlED+ug0d}2O6k{W@f zeWFG>&JM@hNv4Va8e}|7_};u^60({DO*DdqINw!gm_8vL-%54njDxf_;<`C)^=RVzGt~GxDk)9i zgD%n2=aNxTsYVr;LTyW@8$gylNs4!wjiOi=St0u>>N>7?*L8^Ok`76XoIX<4hI3ft z!8Xtv%B~@>g)5)s(@CfU@#wZZ1hV#v7dZfk`Fq`nNLusO$Ryh>M-9LXJt)Um5r>Dz z$tg5d8?K`kMr7SK7ukCcj(hKaA+LV-@-E#h4_{5pei6W5;nF`51=J8l-rnAh>&K!` z+~VWoYd`@&?kiK9dVI9@n$@>13FvZb2(eJ^%ax~!$>mCRtdL>=dYMd+z%o!f@V z5mBW4=9dbUbAIkaLf;qDGY-ZwGVe$>3R{tg7S_5upF+E37 z+l-WqLWZ!ybs7=_*ETnWT11_fbIvY_S*$z9tQQ}^`?MM@q)v)f2 zF(GcT{IPvuvUA1PJ~pAx8u2nh(qlJ6B|%azJRNsKvh55{<&)}oQkbA@J5c0j8SWq> zc#y_tu5dRZ>&O!S{7(@>k#zrKA5?Opz4Hykb*j5|WWj&_zLk_$sYQp-C7a_ySi*ll z|6{lbW`iY9$_)Sa!8XCH9s1~>{x@}0@4Y`i*>yX(M1CxHI+XKJ3y-}GKr@J1G#u<& z6nglXY`NQ??E=}o>R@BI?0+s&?-0lby_rUG-@bh#c`t`fmh@Gi2&XlX2d+d1!`W17 zq&l`_>2wh(38gg1=CHo|x01uM05TfBtI8Mb27Zn)37)%|o6ExnDZ}u+Tb96Dym`h` zp9M7U>_#ow@xFX%Ig+j}!3dst^0SeqYHDhDTy`m`HbJEch0Y`|4~%C-_r!Ei=M!u_ zq3UoOmL+ljbA1~?A+YS3=9!cd|h2#u0Su69LSt^ z@7~32LOOszGASI8k{XWup9GERE)QwL4J##C^}90rKifb!*zh{q^4h&CAov6NGQ%4W zKXn4sGu`@1nE#wS>pEOw+XKYr~o4C*;7jjcs9lI$KT4tJNgZr!RPg==&U9^SD}sd!SpxiX%WZ2YFCrs1xw*NG2CaLHdlvZ9 ziMtyE4kKosC0+j%C2s2T=RePR09+{>JvXlSp@{c)++U&#JJj(5a0-7*y~ij z5qYA-Ep`_-w-{4Q<*r}9d%?r|^lvvh-%^3)>E~@Ii_wDC;hRSVNDxA8ONL?4B$dNR z%sEp-mF>hReTJ}kwVtjoprP7=s}D3D>_dst3zyjFly;p@@@-w9M!I*oFRiR#1g!_2 z>&|tqWSaCyh>I7!UY&eQka+ofEzWGMFaS`V^|$XQ^h#(!`C$1%{tu4&w@~`;QHY;e z)`r=crX*uvRo5=f0|0Yt`9DM;Fwozx{+mYhKP__KWpi$QhAx;y2nAodb}j27n@Sm$ zCcM_=%q<4LIv0OL&;?LQdO@R7C>pJD16C)z&gINY%%uG&GvvL~@3C$vi0haf*U@JX z=828}X5B;Fi`OO9MsmcZk44D8w6{(FM4(aa22gMBC1H0Xkgty5h_Rl}pcNECc0}^lxf|6OAAEnojqq>5M;IG> z(JT*@D?$XRL7^$8d=ayUG~kX!baUpc_ZP!RS?>Yod%1-B zv9u4xX8_L7QCy;>wGLkyDpurC@zg_Kx^g8vTa=nxH*#6gI}EilYJ_!O=_h@Sk#S{t z77<(}2cp))AHK?Tr9%NH6Jrw*z&TF3>PxU}OSBqrOoOxAjV6K=eDJ&^kd- z`UM7tvjC{d0u=zAqMoX-0BXdo*!p7w`QJtDj5s%HBM@8$MZMt4VUZ`NV$g&r(5iTB zX;k*|K5SXo1x?R!*rrroVeB|+V_prl)U6fwR*VqFj)`1<`}XZ+TH0)Y4GyD=&Sr#B z+pR2AcK>NAs+xyx+IJs<_5hSX%kc0pPKoU0dq9>g9UUs@=cU7apb$9D=*59qJsSfr z;crw8u7`?seMpvqfL~GAbc67@?EjF+l5T^qr^=0}O)Bl!^cZwV2&;TU5Tg!MT1b8i zhrxTO{q0u{asQPTLaTSAQga)sLVLO9{(_mAxitaIFMqobqj0vuEq|`m5 zJP+IB$V6y}717{>NPJr7%MQ33+?dzI%yRm@$|dW{1*9Nr0n3mEXm<{KHZg^Rd&{wd z3esd3V2~wP(^#kFZct26lhdb2|22huTd;Kbjm#T1>7&J*^H?%83A(rw~82JsIwV_V9E-zmhd~T%wr7FI6~ZIxYT6`kP~tDvCtBNVgQWi%;oYpW(z99%j${2RX;EWG{{y zs3$boNS7L0RtYC1jyK{QT5OGEG5|vD*Mrk0vH#ZqlPd2RT+5N?K zF(<4<3)8E?T=T0w%NCx#;O&Vt_3r4{X zI^fuOy7JLpFfTI@BuMXAk`IH>(U}2e5F8;JWtDIv9ifmE`dN zR+GI4byFoi2N)FgyLWZrM8$#RzH$e1l*L$5Mhs=`U-5Li&*Nv!O@WQG8YqG4cap@G zMvFL@Jr&?F0I3+(Q1>BnlK`S^o9bb6HpZfj&H56c6e@}BU?81Xizo>;02RCes0Cb5~z#^0MF55#u3@q{_&o2p=rHj5nb7W&XFAZRO?z~HT z_jPz_mspDIX>+sgH=qd@gMRK+G>G=y1GLpb>6rcZ0)!>KsJt8U08nqebi>D6rcV{iAb#VYpME7cD*#m9ZG1jOmjyaE#i5=k%nxL3B@ID&Z7j<(E|KiT0|&p zpZ(w9=l?53^PgB3hUw=|wLSm10|;Tw7h$KS?YYlG`Z)-G7FQ<$i|3@O{r|KR{!f(7 zzfOdi`*(8eKh6CA0l)CCS%qo*uWZQQl;i(yR&~D~fR=pWE9v(F{J*})|JNsOA1&d$ zfefq%`wzh>b7_Zj${mB)ZsqLpxU)S)6nc-u}(oY)6@{E*&MB4r^% zbYGt|Kr>nw6|$Q3nYcJX_?;h##|=rYr2muj?YJGIyBFIt_d0MYMF@zLNMdJB^0IKc zm$<{wPOIgdwY4&tvUVViSEaK<>-@`FIhjRwmpMkk>qBPBVhJKk?z5M?1MOSy9vVIX zD(ioBXY~{Nen*Dqe?H^&`}wT*lJzswrDp9Go<*;xJ9Cs$xN{%{d_vZ26D~@$+RnkI ziBHuYyY-t(!(ygxTys0moxbf*%jD~Rnh>m;YOcZZg-aF`)dd~&3)ftZI9M`WS=cdX zUw5wA!)+DiE@x#U71;=t$6^;jwq4yGxt!qtEdT0T9$LDw{dBvBAb83+9^}u+Ji7SX zS{w5bB=VmHrY&Fc^0>pfkXJz12!Ixgp?JAIfOd+2JaWCQUwMmr-uXWDrxLeJBQ;tW zgq2RO6H!$?GbiU$MMZ^fl^N=`alu`1l`?=$XQk6bC(n>Z8habs=Lky??~*K+>6|o<^ESD3pMJfFrR}IZ}X33W(n_=iRChSz*ER+~W5W^Ip#mhzuW{I%UEC)s^jdP#fKeZB2hk)=lK{#;bP{Y;lvewp)7 zmD=qqQ+^XVKkU5rhR*`jo z6b~5t$JkYf_)yYcsk8QJ0QLcTPTkw}z&$_P{ylO2{Ht{(;f78o=_&B#1gQ-K`hm#IC zFKcUc3tg2)yp9h3{{J|dEFXkOZ9)lgHwS|W0&7A2*QC11=+6T(9v&Xq4N7r*f<6Nj zK~!;DN!shD@11op>-f0Plio0Bo()?_xD34C$MtqGo_0|} zjyBH^A0MCXc{!n6=w?NW7Qa4?pz@zf@R9`cLcoU)x)qL=pUPjgu8w7L zs~Z{7^Hgs?+t~y`)nvqG>KSeqwOad@>WA?1;X@gLIGVc$8$HRe*qEcadvuRBc6C8} zC;eKfcxs}_aE+ZnwpwFQX`D71&QxJ(xFNn z&VXeP{{2rMU`vS{1B#}tI5`gnPI!o648?DZN8g zAb1>9M_{vIeu0x|tkaO?ilqTgK1uZh5Tmj(KN_SCS1n$=_>?VYY*c;F%!w(|ugM*l zE9?*-o-KHgbPm*ryLo$L_qMu5c_(xmdIA}SvHDs%REf!1+1XQbF(p{txKol z*65IBt7l%puQF+Xz?iJ)8bA#>VUywEWotYSnoDVEX{YiV82o{DDBdgkc#*CCIF;l% zAoO3+-Fqf{o9*6-85ac}wlE zLsI`>2OLuIYI=HunH}&i4OmbXdu@)re5R$NLyFPKo`k~ zVn1oN7l(>DnWHBi@u8Wo2xSHaxdU)1-LEh2i|_P?&%i0ofe2nY)u+26AL`4~yALyToUo<(w zBI4YZ%V!#L^^3FGgvVjMg^n44NsckX*wqrYqqBOhj@7)j6ARZhz;uuuC#TaZ`69$! zJv}K@+GTG{);LizZ0m2Sk^XZ9_KSS5sK~MJ`Xc)Zwsj=;+pI*s%$c&33tBSbYNOfa zlysJ@%-;$qgZ;(LTOP!0WI%LubaKDP(cTy%nCM@As&LYbMfK~wBKGMdG$uLG7IRve z?7v&hU8d!ICexdj5dcQJho+{cFT9?*LFppBy8V?79?ZaKfiw8=G)bY_4jbF2N_dQb z&SHWJr+JCvOI8*KB&18Es2Nu{sF*3>xE$dz&l%G1V_M=&bHuA|I2y z`t~HH=q%D^SnMVp;q_3LiJJ~5#WjJ9jR@+Epj)y6GC#V1o-t`?rP73-1qjJ}vRk?G;W88*C~&kGhys(1^3-m2XD3(-~tc2(f12 zmdayoghI|@!E^*$_VVl2#xJ=h55ZDw(%OdfYo5&xJ(?Tf5r})k_-aXq`E=?p9kug{ z)Xp_ye7lCE<8g+NZJh;g&Qs8|S08^l z8JE+h>*AVls|q!J?I`QRha-=jfDh_2Gc=NM;2o(5889BBCU;)p9Lw|jkm2QGC&M&Z zbTXkHs0dus3Vi0~wPhx=&NiqeD^t0FAH8*n`LL3&EnVRlqBh~(fYXZq0Mb%)f}xA< zH>SFp=XC0a?ZOhw8&cqWygHU}>E9q0e>%c3)TDkjpKx^cM>eMBa;k;Z_IHq76fg;^ zRBC=7st?*f6(6~_$?uVDDUB(13Ds&2dnT*hn`u0G_$qVH9-3_r^62X7gQd3(hgTi} z5VWrJ_?k3AIDeko_22t@NAtD>Nr%Y4`~58D=&`nIN`f`do6x#7?WNYRV@(HZiC_D* znSGGkUZEo^6YHuVD|2absq}2U$*|Np1EGGo9S19YQTNU2&J7hN1vL&?cl;t_!>5Iw zz^!dy4szYn9{VR$3Ee&Y{)74@<}Vw8)wW6HKhLC=CTrf3?a+w6=;`H9yM<%&JWRsE6J8z0tY9Uj2|4|7R>q|3gAYthXC$+mO_fryQbuGsr} z#k{%2nLfM9z%JR!9D|Wbpg+1I(Voy*l+#X0iH?JQhr8-cE5t z$pz)ZR0&o=79P72&CZt;-rtxTICGxdlb@4>4z*I%Grvyt^2m*iwQ^Lge8+?d8;kC% z^ynR=ahm_P0AT>0|Ki9m0IfdE=1@faj{4)XmjD28k~pR6$lFoh+12IdKHT6(evCJ^ zKNv6d`f}lK#y$~+e#P&XH_~_izqkI7NdN$#%e~a=%jFAc{vR8&Mh^~%XQ%)G002ov JPDHLkV1k-h@xlNA literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref23.png b/doc/salome/gui/GUI/images/pref23.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a082a1488e4269f2ae00a3777e970f40c6309a GIT binary patch literal 23117 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 E0HOk@#sB~S literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref24.png b/doc/salome/gui/GUI/images/pref24.png new file mode 100755 index 0000000000000000000000000000000000000000..c539e9b8b2f3effc175bcb4a629e1b9ce6a59ad6 GIT binary patch literal 36095 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

ZF@66qZobSM!vbFZK#<3r#9v2m0xO#|*iG6v8 z=NeA+dv9lbGPxt3huHa!>KCbGl_v7H{V2mDR+vA+a;>p1a0B^v!}hy?U{jB`n^X_+ zvbfxqzDEZN_&zA}I&q69+ehspZSCv|TZcL7XdyK<@2WJKy+Wc1 z56X#x6J=$Bndab!TwIZT zeadg&zK!9tPt&M1Y$Jl9wZw85n+)ZDsT}X`kM#BR)jHCu^Ag%#KwNvQK#(Sv_$TGb zyFNQ(V`F~DBd9OoDPmJp&)%d^vyWiQnnji!9PM$9p_C$o|Dp`NWl zhNSWvYGc}*B!1HJk@PzjCo`pkCImYu$;qQ`lZ3g9J^djRk zK=iL-NZi8tW;I?ZM#=Z5R@<-2O~S^86^h$;*?4Zaw%5^W8RMLup5D%Ke^7ott5HW> zq_y{Gne_rdIhN0#KP&%u;iFk*)txGdgRX^$q@`%xUbB*4EiL$@q%u&a%B;p4 zy1NxtCA0eNrhf&92IrK|mQc;?EcGS`xkuf8C^5CT_{`3Z-F<(JsgRn?t%f34BHXy* zE3IE3by+D%@OyY@Q2A)pa>@4B#vk(W-4zh1y11T|kDe)A0jHH$^=~dH=V%bt=pdlF zJs&aF(-*Lty{=v5bmi5~V)vD`^pq{>Ol|EIDLE;nwsjh+43Vlx+t-Ws9kg@PkImwe z{1|Xjdr9w*_hFW?%iY1ciWlBm-A=?1Db^K+@Hwm z?M?xY!?|cIO5y5yj>3UQd6${_`QsLny_2AyX6~Z)RzDJ=iN1&#lgH}x7;oBg_)VgWbad{^@*C{DrXinMM&)iUM>b} zD?_WouC{>KXiQjGIDy|W5LQNk_nDW6hsRKXzQ4xg%VPxv1u{Vw+<#)l{rmSZ$oL&T z#Khde!^0~iyJ_E)2$b3nldzASn3%Yv{bhCR5r^vf+IW?(pWo)j-=`}pD|dLT$dWy_ zZnU~I(UQsd3t)GmCho}C)e#Uk#vYwLvc8g}} z$aYJUz_HU`q89Ipw`<9^+SH@{&7may}bZB!9wsJQtW--Iq?6 z?0*uWuiLzA%85B>^=PBd%~y9BtgET8qNyjv&K&WF7bE6K))j zwOll__Tog1088C5I|u_97UPwXFb1U}BUyUY?B5`Gne=BycAvg}{d!|>ud}dYbTmFD zCWdkJ>MauA&`_M-ba@&7D9 z8cJ$~$00j%AXk4Yq7?&HAAOZtn*5~jujb}Lrw$Dbx03d|Qjh&{XERUz%`+$@?H$;|hRwWnYYMI?m$!eBm@p@Mh+?(xU*ZorK$Ch zf?HJn3=0pg`pf^?9Mvt`_^~D-fH3RJQAk>?>K&{f%w22V6ROLwTwU!+o?Ii;cFk~B z(n=ujLf$HmbW}vr#_kzrQ`GB5ug#J~|9thTsX6(=549{oA%T9wjsYdVWhHdqx?DuF z!C};XkCyhs@88d&n6>}-T)OtM!jAe=(wpZotQX$Ew|GQEQPvl&>DAQKM#`)av#sH# zqoquSeZD@29QoLv3d0O*##5*Uw@ZbwtgWr9tE=;iia6XD+XhE?Yiy#2h+Bi707o3fuP}`v*u9ofQ@Pe-HvWKIkRvb$e zo8=!nBxusV+3kfQk6ky3@~XQ6$77eH>(oWnpjl1-HC7{LnTqIJk+#?i;P=k6Cf`sJ&*OoH<*SUjknvPE;$9-2qFe#XR6M2Xn8a0)Y?Y%H%k|&-% zsPtzzByE@Bgaes0A@M}Po4Z8EDYgyXHTSbILUbREM_#@i_C~IZRfNBJgFzsE|IwrO z>B(LsZ=lbzIV`?_wVOHMIUj30ROc;{$nW^4sBTc#I}!awF5tA$rzDToa34L7sfVs< z-?zKB*ZhjsRqf4hbGp_dp(MkZwBYA)oHryTC3|{$Snpt&okTHd76P$=a&YS#qGupS zlLz5-vxga|!#@2QFP}hxJ7SITh=&MD$Lj2gSa_Q35JACG!Azak2|rVfMo)^~rRHGr z^wL)3%NT~Wa2olZYFB%>@x9lK(3RX*W-POH!XL?g2nk8k+_$2lrvAIQ_~9!pY$LKn zvVNS_yPjNDV=+)R{w}Pye0l0`()Z(Y_qJ-+%xAUNqs3m-9-4z{8< z2YLC6w^B?`q`xigtO#z9y4CpL8#8ZfMN3enr`gV-Ja^ol=5lPL4YbL1*WVP1%ZOg& zx7$+ua)cHH7=NzRIl>%DKYMl^3N|l4f8pyU%zK`P&-Yj&uU@?hML;55F0pILLA|z| z$7$u|gd376$$gD)ZL%(TuIB>`FU@&< zcEU8gSIP?*b*f{ete-ysD4D5}#jbCJiYY>58hIV_uD#nKUak3}s?&jv^;w`tg@7~!b)|82jRXML3%|$an#Q=GULvPx*MR=llIoQ<_ zi?Z|V6Q$R|1sWQf`Hp1YKZV||gR`r|j&x(1Ig zJyFBU=kNFwYl^NZ$FpTww`kklEHsU>W=i|ZnV#UGDcFC0o+*%}L8?h!meXu`BS{uX z;CvmPuvoyu8`ZZ=ddj72{a-LzIF5nV)tA8(fShB9&Y0HuUfu|Uxi3v7HIk6OWS{_6e2T*CqZe>zR5!4&s2rqBd`4w1TF;F!R4uqUlHAW8FEJkkJ_UF1 zRV>Vu68?sdviR^nbn`z9*Ejz@k<^r0_RA-2QB0=YU$5*U2aUI8Tcd_#ecI!=vdW*L z-w2;l-=0)&Jy!nt7Abc=>_NFC!B#XIkkA*xKee46RGxh7KU>YtzP zKkXB)J)9?fk4)ZouChUo_SsUX6e5}>=^xpa4eZ^t$)_p&2 zr^_d&i3br?AI`_4zakjaGsO4FE@e=ou+@ zKCV8^>i;^3w6|0%v(kopdRc68yYc-khOXM2VAU*Yc6P-RwU}A*SHr|@?F6ys3y$_W zfTpMZ*xw~XDT>Vpu~}GH;KS-a-sR}q>gsy&_3Kx7_I$TUIH$&)Cso?egk)>3&2%99 zZd){qaram8D}g_UpslRQLiOLWIO>sM>HeYc&_wy?ggk${UE#TgGKt-Qbo76mMV@6;Txx6$Q34 z&01}+teRjN?U`hrJ^Q_N01(_&n7cHzKTB<4nC3B%`n>8b>0Ha4*7Aaxk5T^2H?H*5 z9mjvRQOi}1EkO=kL^GhbSFhaOQN-0lHpU2h@@J{$D311Jssyc{?F+SpQW`hZ(ct3Z zJ~l9*x<$&VjPIuOPf~JG6c-b-nOi0-+Bg4vc|w)Ta)iLy+4(Bgofl(YVyGTGcz`JU zNF&pX7q=23M)`LeA#yFn`<3^E`?^rca|HsJf}4+_NL0YK@p*kd?=FglTC`1gR6dAV zXyHxd4f;jD()oc$)zs9WhK8bDnF_qmSHou>WQBMpt)j4{=TNC5DTZe4uqf#|_oI?t z6HZsJ8!yonM)YM8)rS0!;UeQAs}ug?lVkNVFY+Q|1b2q^V6OJk@pI!gr6*=a|IGqi zr8!^VTLw{=Yn=uOx9aYmmicabCm10(zXy_Pp$WnX+H9PxNff#_Sz5hZeoA zM9A-hh!G;XLeui%e5^6jMpHR&$ey16uO597qCR<;?PI@va!286+kTb3QA_^C^_iVL zZ^H5%rcZbOiFxO*L+)Ia<{MQi31h%mBb528+Wa{}SzFIp<#j98KWm>gQhcD^`gqbB zYf*>tjSphLcm}7=kj^_ZfkU@;GVzQFiP%FVrJL4Znhk%d4L-0HzjvlNklYb;lsPJi zWA-zut9C{6=z*7TKb@4p)qfIS%%9wR@>y>8>XWn6+4v^U8`{oq!PV#$F(6ga^>j!_ z#OjY0TIgf>%W0+g_>*qaI8Ij-XkKvfe93TpR`R)Ovo(TY_4*stRGZ!AOG%Vv!9=$h zw*Jn_tpwC64|U~8tmZOM1+YlWG>0&(;bsSFB`JTPiFY^LpT>T2Ju8hiur*q%EJBoK z!+XtxS`zP!l`S&ayQW$5VGW<{JpTF{8qIvRrE?4`{=7xzleoRBg+|vvU&A`(H;sKEzY9yS z{{4FAX2*0bR?LQF2)lSH>#JiYyzpMTh+ubXo{0|nZI8#=I*U5V(UZrNZtr}GizTfe zU48c@Ur&=T)`xiDu|fpi{s^8ZL4pKZTgQkWF43#ccU_(((;*ltCY?D$QYLO4vQKkj zbdV~~_EnH#D0_}XE-I;k=RCTiZb_bO$0!@-tS5IRmXE_w;;(Hq$#8>WLKyEO+KL%G z(d(Z(Uvq3Uw`+NP;KLW#5ZyoJ9WqBt*?FhNG#J}7&J8&q@ky@CGl^&nZCJc*ufJ&z zihi6pYP{ODNNU%?ZM0%pS&9rlV$2qNnf!Vzk6z&{`<%h)L#}1SK3>>e0e9!zU7ffc z?GVf1qxLa1se7$e`P6BQMFl0hMbx&>U)Z&PF)7bqfuBW~zr%)g{rZbDl`IX}le;PM z$--te&o4K6`62eYsOOg9hb1PmUi>Kh@k*!0Nkno;EjiPcutMKLXWS(I zT#edwJ0tK=+aZ^gcpcgHoBS{!Bz;5HU+nx-%sdxp;YoQH4)~it~eCxnf!ME`E^_-Q3v` zOYhx;22bSt%ulsv0v`krjhs?6KqI&x>r-~I$rX#k$o*drcwzj7y~=g_(bKCqKjDV0 zw5x2F`!c>_7Y$KSQP~`9=tVKAi@LbDM6m;Zepr>bPy5K zVqXS6^lawkt_we=b*K^E0}t*C`v5%844s*tUK}lBIrTaf9NgyvxNK+Xyg4mi>5P;c ze3M(vb5!#clSg-0R|b6pc}0}kl@4Dfw@(d$~ z@T+oOSFErzym#_W4S-Hzgg-O(cjM5c1D7KMDc|7W(V>bqnzrRZ1=qn;dd9zb=0bp{p>I4Z2T$jzot>S6pSAMdV9(ntH;1;p-O;Gbe!g7~ zB;dn6HfXvi;lb!}cc&t{*Z59Oey94TKDWFLdEqI1B;gCp-_=tWeh%vLSXTM=`2OVP zVGknqWG!{u#A2+uQ(I?YvZcj;anS?=jhlhPqb)a3JWDM{<2=W%c*?gk=53oS+mF4h zK@ZiXbgCs$WEzPye}5b1FF>7nOJl6nTIz68gM7&Qjq`-7KQL}lQPFbu{ag*B9Pd4z zXaG=GvB|F2gUE8@=1rwGptY>5tbT|w zO!ihMTZr3gr{3WRzi30Z{X;Lrr7n?t5y{Y5FRsj$T>|j}kEtuT#KbLc>MtBP?maZ{ zxNeNNbH;q7{_j(N*S~%{cjpzqOA{i8bi7X-omPgP9AU2lzQ3jPNJRPGy*)N8b(r!WNUYb>L40%DQhiBEDPOFb<-?;*~HfQ z>98c?)2BC8RRS0w$a2tig0NWtv<4lKdXcR^TIQTwc~)fHi5Bdk0+W^%*c-1L9~~TQ z3>znRms)CqRDQ6Wm1iZI^JSeMl}@YD3lL&COgYR91FmFGL-v!XhZgyJ2MgMZf-5S6>g!t79l1=Q{Amj!QO<;x`tTdK71ZkwBq z?3nJX4<@gTSK6xrdgWQuHlxoX04OyqZJfNH$do4&o- zLK)xJIaD5;D4@SEnVy3)n5Ubrf>c$`etBDxM$%(M!|L$)lL>r|Hl$!2ij1cu33s|R z_5X&7&yzAp|3_5#Jet!!4)nWHXlAHw6>&4~n^5TP)f4^607tMpEhehf6YsYp`O0j2 zCBl#TXi2iXy`p}xJ!vJ6rX^X69PcLGF(HVZ!GBOyU;mifdcs06*MdpteH?ITJe8Q32#x6*7!Ac{{eh{H_Gfl-UR#wDr4=Y*QNg4SAFgu- zHqUyOrcj04kX|bX9QuvpDEeiIMouNgM%8+){_OA1WFlV21xM=THupJQ28E-Q=Sp~S~m;LmvMbW8SSDA6EJZYU_KkM_&JzHU{- zzaV;jJKy9YB?W~XmS_cR9U@_T}rLSG3&igw<*2OPMrTlvmihh zpwq1t1mUi2-;5^q2vMHV+2FUN`)C=wyrd)iuipyO7z#l22!DS0y50%M7f1(wK_MYn z6REG80vR<+v7Xh9@4ml9ig8EKg;gnCxY9ncu1@6V&!3mCT$w9h_RlymuFD81IJxmz zT?%y(9B_iD5*<6$>zg0M2kYaPA>m{+S?igtT@?kUN*Ja0u>#Zf&d%lf#>RKnwTF)o zr@`aOlGpVOYVy%+$wKP$ct8n=hv0DFlaW1t`SK2wrWb9m_4QprBn3%BdHqLvzgahO z_e!nlC%EiCa*!3s=%Wi97`n#%OsGg2Xers6WpYe6v9aet0$tp7o9~pZ`yvB#YufYe z1_#@)rN^j`Z^y1nU;q3h^*6od{p?5(og!HOzmTjP$Yjzf;2^1gn*>WgURgeU zP~G4x>IGiQWol=1@P-Ov#)6NOqK1b?P{aRSk{@Ui8ExD}`*M`Zo{bQsC6h_zP%DU z4sb-+D75vwdi@X5Ec)1?mA5<1>rA~QRPe240rUPA&5df@Lx7Q~YI!7QeIAi`r{~F0wf~?MQJLY~UXAA9a71 zAw~&Jva~R6U!(MR44BVheIOA4Z04x-M0M+@pHDaTx6?HTt-$T1A3Rk9XPqN42@ORj zYTPs(7^6OY`c(h7(O^)_DH2Rb@BE8|r>ZS8J|Bq7t0Vmc;`;uNKH zInb3Ve>}aG66hW&c%~lYdvG~ZH78RzBq%7=da@Q>X|*O7J_H4|m5et95id>T2xwob z+?rU~52PRSxN`Y2T<-DX#~7c^%o(4~tM~n10Q5nC5Dy5|-|go9JVss117F6F4o90z z8bKknxw&^A1fOxM|DdR|Uh3q+*N2!GMx8MkUYjTYJ0Hmf1}tWn*7ko@ch+R&-PGS* z9>{2Gzss>SP(tdDP42d$|Ijy|0yYBJARs)^K~(N|tBnP;w63wL-{A#!uh@5lL=~$C z0cpu!INQrNA7q|yk8O;gQ|e<+l#|SfD;c_55w6$xo=v|QtHc7ev-FXIBMuD(0V+IC zWak<@T|mSm1}rtvPt|-d=SsG7#$zieSkmAqWvCZDf)X|hX0w_4|0spclanGcRda38 z_NX0G0EJQ}CbW>-q6fUcRoyLSJNZTw))lBY=^=@W{aM5ygs8Tq$;L}`rQCB`AMStv z2WUTTxt^eMzk_=#;IN|sCGI{SU&W6G9(s0mJRlcbv0Qs3ZEXN&7LT-a(QixpAUiZn zI5`;kzK)#?IDkYjnfMSYpONwrL`v6G#tzqx)(YSVfiefHQ9bNOdr`{jNQr)H7`553zbN{@>`l=Ta;Ffn+g-hf1bx=wYWWc$#{4OVuxTC zn~eu5(a7H>Cl3w{4IOUQBwG)NopW5fiK_gqC9gn$-cLQYAg}Qh$s+;ac7f-Gj;+Gl zMBjKpSs9`%5%g|QC()87tkrLIKP{oz9&FCUa+>0uo}PkOjuyy6C}h2r{={6-2Dosp zGy2|GPF4ap`S;oBejV8n3gLa)xL$WAcOEc2Dka$mDcp4~Qtf5I>notUtL-PdQc}x; zBnpgAES}r)nVejjLZieX&qW9XK_zS%9v(KS`L4@22XBP97jEhOkD!IeJY0EzwhEor zCuHIDLg3ew-lZ1=evn(j6;}ZBnwO7nZp3M^>r1vyO&qY!PZ1I5jAIZlDw|oi;yEBE z)z8(&gHSd_oBar!?+__{8jLCNytDaZ)ko42=i;SHo10z{jOLtijO**MGt7(bGCKc% zpq}pIw3mGGY{ej4nx9`I+xxy)H`@``G3d>_9tW&mUS5pal@XsGO2&Coa_z)YBPYlHS4*hZu~^E)S?wU7j#?#_SdhD4meVhwJ;R=4~bYnh6>o# zg(W2I_DEeptg2@8|3LXR+u;gJ&E7n02+a^xdsg?adYyVf!;tXwfJl zgs$A#>$MFgGgz%yjS9oeuesG3$FY3L*wE zpEmD5j~5O;JweUP&r2BBb*dW~18H11e^$_z~dVZK0Mgi zFHicH$&M0v^&b2?iNFEcz&+1f)l7`3K)m&r`?8TQ!I*)6r$Y0T810Pb2{le~eV?A> z76@v8TeceaUGu41ZkK3TohP(PEcRB0p@&7mvzXQx;c6=^ZwEiW>4TbNzQrN?NQt?z zN=rGwBL}ZEj-$PG4ipr0_w~9KbA28C{y!=ZW8LV8vVM+|Nu!2G{~p+Yp0#x-oVo%$ zTJXQk{0It{ghV=PAjihm_GfqN?c~xcn!@_B|7ykmn)vf5GDssoG|QN~B}3SS4H8;8 z96^_T2x4hlX`+BL9xm>iue6|@Z2~3S0t|eytK3!};(LB&Wjx4%oSA+#T}Tt(#(;F8 z@X3x6c*E)?W`wZJ^?eJ5womOtKMdka2mAtbb* zDn_JEfJ62J&N4x@N`(~xF~-D&B=-=I;*zGOUa974wL&PMkD7CMUyrV0{LffTp?mHq zM@Y@sY4wJkJH;q_&6Bes=hx)Gqu^szjgPk6IxWYFyJv;D0-KkUlm8=T2EKPUbl$lt zL?WKc$t33FuCfd1Ps0cPL{OF(aov&Y+HLE|j+xO56ZDukji7=c`0I@_V91e4k)%l@%65-elz zGRQ3hF_vtu#H{~M;hIpL=XJdt_S{fQD{9;KrT@bf8EPT=f4{wRBvd{5td@t4T`kM+`=R8O7bxw2wp{U@48`Un;t!{c~4l{&T zArWzI7~yh@ox9>_I`seQMTga&AOE|q_Y?*sARy3NbAEMP*h~^gJMw2P2g() z0USQ|s~D^M#k_tqP?2c3xryG$L^IpM#F3GcchoSPQ>Xh$yhQ4v9MHL7o!qELR|4oO zMG?BNh=2z50K^7gmDgz{Mq>|BDczYW4Dg^@0r)ZAPWsRNwmsmngA5ril&j~-!igIj zHrSNH?Lc7rw>D>5I81w}j!#aY`Rg5Q{DqVd!5e@M8zbg2JB)W{d%*`wbkNYp*~Hg_xdPZA+w&c!T`3pVYmag@N^Sm%60zuf1k?r)AUbRC{C2K?4j7K^0(pD3@&sz!GQ!FV zAbUC6pc}*x(8jnbC5uM!@9GQx>@dB?S-EWa6m$y6V&C}2_3Klya)^zAc+ewA;hkbI(FHXC!EbH{9Wt^1mAfR3F#Og`G<&xoTrw3&FJSmQOo(-P*8k!@yz#dr5E7> zi9+<-KY1;T!4gqtg0?wRGN|(q^mdq~qS;<*IOxeFDe_O;MmKXv1sb&{{5;%VP(PfL zhMoZ_M31VOQL>Y}SXXnkYDB;PiTnZ0)TfynC>#2!oEo&IPep7lsEru)o0C19!Yw8d&zI+V#j={T)ybD4@1L)IlcIqzoWvT}y zeipc)NeNylN1qEA6KL%ojwa8w$8uB)Z#veVP44rdl0~d*yKN1kCJ%4J78PqHzI|Ko zvy3+cQyM>xw`ZitM?LJ8JUHG)Tv((WO5O)&xc~sMDAcUJmfG4{h&TFpA@)-x5fpr= zIAKeEKvDp(@HlBd?m;M$UJc`*7Z?Bo(&#j8lhv)={0p~Fdlu>PPui4`7!kmLELkADZ@XLpu=sAPh zj~Ad457-V(>tlHCb$Ha4C8>>CxE{#?b%_(|0kR7Z|H_y!lL5qtK{> zL{UlU!p1-CwoR_oqsWhY!qRTFrO)k?Fvmo$wt!K4%ukkd?^Xq!x+k9KTnk2XC}k*g zDk6{KH!0C?DaUfZva|1BR{ zO!iA>zDpxH3;|LBSYD>Arj?wEN{a9lRq_Zp-1jV+L&(u}!Io+DPZ+h#`Hf)U(>$N; zOcVf>3CL$us>kMZ69`a#KuP|-T7Qgg<)_I@A6*eR^KyXdkNUdyL@9p3F?Hjpg^ z-df0Ns$^(q$*C^!=^w|VAeP$S@byF33z<`9_bWnkTD#Ojz4qmvc&?`rg^bsK=Lfn4 z{_WdOU{q*f6$nxF-iZ05aoXRikox~$Q7CzI+60}@KRrG~$B`3wZQnv#9G$V&(1@#W zHsm5=*7{%7p2l|={{X1UCp1SAJlW}ej2fANvjq@4#(4aHQrE0fM@L7)&IG=LgM$}U zPL}BGF(|b`kiVv&pzwf`3+l_YU}?Izx%EJ|Iz=J73j>e$*vtnQM~Y3+`6#%r7yk#1 zCWDPK=>&OgIKeQpv}8K}5S`tG{V50BTt1Os9LBrNh;!oxx`zSP!zCkY2kzI87C-tk zRRTgnjL@`!g!2PTKF~~AIJN^=q*bvDW(Ym_K^^yCbojJ76poYF>?|rYG&aTxx)y41 zgKqmsHckvk8#pjPB?R)EXyg)79F}@qbt=UEwGMmwEtUcbUYo}?UVBqN-^KDfW@@C- zVm^7Y6pg(DXTkCYIc%mL?{0!tQnVAPz~e4*xcYD=C}d({0-YB(8wOUz>%Nzb;uRL2 z_~vwu4MYhD;Tge0n*rIS*m88QU=#vQjv2S!q^732xjwb;Mq4CxdO=rw}2{j23Qf`a-!9lfg zoi0zoqm?4ye#)L6Fbm-$rX?eIo{{9|4M$I?UHH;ux;!NwKK@d7>NPZz`SxvUeLXZ$ z8>s28u!&MMJgA)A#**cDvbU0BEG(bO}1F zceJ;9Sc(MU4o=kkg>rm_B#2h$Uy{Pt<@LYFPvkUqfzFk{bA6vTl(XmFWtE;HmA4G-i$dAhq$>9|bf zMrmEQ%ME@Gy@SZBBo|-YriXdDZlOnQ`Mi^5&sVEb*nYbw;0`ott!s*l*ZxBJf<$mE z;=WI*=ID8Lc7}b8!`rZO!upEkoCCga{CjE*>DJIj9FC1^abI^@OQaJ=in&K8@B(?A z)sH@z#@#z)-j@7sk7*F0$i%?ZBv#}TZ$E%*QPl8@n~bd1dt>*q-J45fybDVe+APE@ z#5#F{+q)h@t^uKg%ado_&M8-jy! zXGe8sS>X090&Y}+gGn{35CG@_jI#9^h0|(^p*+*O4uW(c^iZI)w->X|`@Q6wq$6QaU<1 z1rLwv2MrH7g}tibkTI2%YL?0ZB3aGB!Qq{!w2Vw7E8UaZe{YkJ3Jg$qkRscL^`%Rk z3!=U;DmW+?W0Ucw5bL-+(O)A;{jhO;oMVk59f2?e92c?eVdP|Ix3|&_Spic_5jO z=q~ra)a|5D3d_vQbdcF#lGcu*mvTG!;$L!B@1^a1vb$%z+tSp;w=2plrBUNn0!MkQ zDQBGPjo^cXk|hmqsPSly}k}0Ehd1 zntYVj{0VMm*xrbNlT%q-T-?p!Z|Wa+p}Z$&@~3;P-2F@#IWu$!2kToGtBIj0_n$GI zQZmVF=6?A7;p!;O^Mrd+aS^OiZP5a?GmaaL@BaM$ZBnYOO-Xj}803LSD!{%uO`cr+ zoh>bra4@il1<<=0cpGuNdS9C-gjB;c9Bv=ahRYWN@TdXJb9u6^F3EFG-E-Z2GMowy z>pcN8U{_S=jYf`Z#wQM9dFTF|N?0PCz#=_2n}`b!)OUu{ch`4#xZm$jc*=uXRm`HB zUA~xqRyx2G-;t(iU85r8w(~+l;yoNkOqd|vFj`e93FWfMMXtrd90#{ot>Qk z53grd7#dZVwbwQ&{Co*O2j|b5Y@gLi-G_{F^H!%J6ketplWLN>8hwi0?7Lg1Y{W! ztlgpB$NK1Dqo#vcb^wCHQJ+bt-7*X=zEi0p{i>c|o{1ms>osbMt9fgo6hib;{9ec9r>McYp#5uI!j4%&B}o65&|J||G&eg-OGnpQ>jmAb5?CXZ z6nc0&JH7JAI;eHj{ioMnf$CK`A7@S_o)vfJ3-fv=yI+{Go1CoQ9Y8C7d&VVPlg|wFI_vKO~8{41VMKy??(9-UC6S{Apx|DX20JFKaF+cuzr6;u=i1XPLz5tSxgDPj=mN(U9`y@V>o zZ9zdmk&X(|d+!jyf+$EQ^w4WU69_Fr-dyf-&OZCxbMJZI`QH2IexDiylB}%t`^`D# z7-Pa2!8Jl;)DuLY-Zz zgJL=ZXnb=h9+lrz^NMZ=1^F2H_!0SIJvDqtqiDj`(O798Lo^z_(Koo2Y?WPh6`Wp` zwq@htG~`0e2BW=Dc|JQ1>oh)9F2iPpEywUmNa(}j(tz!Rbi4$zOZGMt3^dfN>V63J){OWejUtUsdP&_=uF_h<;o6UG%nAV<6gAk5{M9~GU zjjt-+@zCm!URkLRUin;~T!$|&j*H!2%eAfEbn)8+x4KtvsY3$NrQid*o&a(2qst91 z)%@h-tB~m-XIVPiVhidl{A=&F!fEas*+dOlj!!dPL6wH=!eo3j91}EeIcDJ0Cchcsnf1zqI2ARr(xyL6Oazcg-ZlYBiSKR=)4zS~qjsGZ%?XEoK- z?%1v3=e@N+OAX<|F4pq~dQau1jcT7|B-5tMRW2zb-wR2MF!Xq4bdwr|ij&1mISm0t zkPYsQqyeWwsMVKqd^WFx^`S`m>ctZ$K5U(MGq|-fEe@2d$nQ^)MyKkMIyi}!HTa=8|`;$mfRSo_eqV9KLO&QBAmPy zm~E9r%&usXvY|y)GPl!GMSdPDA77-;6CQs+%dYC|TnH6xXYY4I+}i#O&$U&O>*{_~ z&Q&%mQ3B(Tp%&gxn{_FHWAhs5UC|QmjtXoC?RO7T`C6pv`MMHwQOyn9FpbW)n3zkS z2cHsUE>0~054ZRK_YW`VJn1C#o5!?J+u-zIb}l^Wh0fy&KX^Jyf0sG@!0qHj z4LqP|j{n1h=Yuys-KR5fXTYd>$|^M9)kLI6>fE{P#yTYx6*~uUt)omRxatbN)%COZ z0xcaK9iS9r7MGTaY{T z3@tx<6R6g3F7VD@hb*SMIwR&8b7dQ?1-kwq0?a`BWD&G~;nfF~L8u@n8bYFfkbft% z4HIS~-oDMw%QF^o{B&)6a`Jje=B*6KA@_=OxzT??d~|&{Nn14f8N`ai2iV_z|2}$C zUA=7vIhabS;Fp3Om1RrO{Z*#3ENFE#wU?kC5N-CbGiJhtCOg7*x7}4GpVpwxx(sT} zU$K;m`Ye6}dLwn*b0(+1yyVnfDAE z_2P=$zTf3mzOFg4EQdfz?vp2p2$WnbZF;9ynN z7hXMg^HQBAo9I?c{s1K`)=NO%Koj6h0~`?@Ia1oE>Q9~v;BVadfLQX5Uc?O$?IUGCc;r=05fB&P0g`;k6Sa+w%GS8hTRLy>bZt3Z{SQ7LAMW4FD!3i(A zD^dp8#)2Q~>gw>axubMQn5cY`^|^DzD_QAn8y%;Gb9PW{1|HvCZ?_lxP{Ck|fNQWY8mRWE zzW$jOJ_!T7E@D7~U5Kl2wL_}|eH$7co{VYEE+}D!81Z+-A_S105)ciQkvIU`eJa%) zNdL?M@9F7jC^2sVC#~u2UB&g)vM4=1UIuE>5G1$^-x>CQ{=DPUE{2=>`ZKu(_)$Q( zr=+9|k;;@q+7O7CM)t0oJSuN9!LmVw@*yM<0a=BGn&6F2;hN^4tohAVk!=wKiGV=R zY^(=Mz+|smYX8m_OS%Q+;Pi*bdv?>&728$J%==I(K79Bfh+xP^kES3o26IhA&tYe< z_cABmv4O7~5{vVXHHQdqI~3~j?ge`D<=~T?HJ;BPEP47?o^{jC_4oImX#iMJ&b`Js z+f$+N?%g|5FVD%7Rx7W2JfPSpv?QI8teSEl7en_0{{B)UlzuAAQOt^Z;XG(0K*5EZ zeJ>^{X<$eBZi5A2uA6uFG4MiTxdsMMsookXl*5u%^q@Z=8bqZS$?S|}aJhg4q-tpR zHnF#29{BW}%?s+m5{pm0x0YgwU>5BB9LOpJ%r3bKj*La>eyP;P6en!sRM1|bzP7f1 z4qUkvWZ4ZMo=5;*8=7-goW`3aS6>HlNM{3wY6$@Y>ay_b)gr*QhJ}X}n`2XkP7CG& z)M+hs7(Ht1Igej;UK~S{7i;|kNGrfqMnK=0uo7sDm~I6K^%G5RGWe_3WEiCbq{zz! zrghH0R4{+VY<>S@eW?hp7c7R<{CxE* z53bPli8l0%7T3Zd7J&lh1twMmjXU?*l=MJ67M>lfHUg`KO>XROK+KvF7`R?Vo@+<0 zfXA}=Ce$>=DqesbvRy?##q1y8PHu4v1kaKMRKFV_rE{Uj$H#R;^5qIl#YKcTB~Ivr zK_;JHJeqFgDReVi7xyypX#P)vadsP2Kac(Vh=6*`7lv`*^#Bmi8$r(|)?qHq7*IRB zDgu3(WcRGp)ZExtfCN)v)K5raW@e_xB+TF~eS3P?;6#mQU}X1^#vk96ZbV&_hm8sR zOXoIe_sf4o^utHbsNR!Hlu_`r9M|BD8APjVYKDIJ{0JSwc#^*}@!6|G3~UL_l<)4? zicL%(E(}5hpI*tS6B06d#kOj?(N>dX;+zn1U@6+{AL`1~Nr1^-R^W?ak#NfeQNPoi zW3}HY*n90Ghp=`vG#%RD%Wuj)+4~Y=BLD%e>5}TrEWqapeYO=h0LKSznQjLZ#R2E_ zB{UaUL3#+Zm0s_96?krSrbmNV&?#PI^!=IL1+Wz7YC4fish5_wH*J7KgjYGJolg9biw8+}d* zkQT1=kbP<_`XBgp@rvtB%pHf{xD+Uk{G#ubpTGa_Jh;7l^&adL{gQAtP|oM6E8js= z#_-PoF*@n+&U|R3xPU1Wg>yZa72$_8bZr2O z5PbV!8!Z7(1&!5($VX&5oCWr{Q}*_^u`sgg&7WYeh*&c4fn*H~G&*#Rtu-_>;7aU_ z&>;{HR$;IdOe|C$l63?geCFgrr|DugVFdiaAL%Wi->Dax=YRoYV^4vaL1gfL!J=VvJJ{I@hs^fO zJSffv2nV*_sX76lOoN^Z=k^;SLhD|V3$JJ`Q=0qTQ;6KkegjrYc#92Xyxd*YaM08i3b5EG=cYI_Ogk+}A1T>Rz8;07eknOMnWGEZ`^* z*5;$j*ML`t+1ay!KHzoGjn8+=M@mv1&a7VOh<>;NBd$`BbBzF3s4AVo-IsOW!{nh0 zaN509HWe;&y{FM0zbD3(fWu5|L1wTtd&98TFXUZ79#kYrp>9^?9usgb^|;L(X$!n3}<$re9h312urGVEj+QZP^I6!yRG#@ z0t@@a{wmok&~ z5NFvIDaXeGg7u2c4N_~rXhmk;(s`e)`&qhJMWF1`Gcz?+Z@>8H5;$CI2tk>C0`}YA zCp%ozX``RHuG!I&0_Do=09G$#8PZ^Sa&q#G(e?L39Ojcvy%l2!n)yNA;N7Go@j7_K ze_SCC^q5JTI;iE@mJUCmu~Cmmwj>m$?cV#t#oOCWu2k5j_ny(YvuB;VeZU+b2$>fl z0zt*jENSeKO6;Z7bXynG5a&xr={7--jo>n%4H!^WKT6aDXVo7?Vvl>fKic3<;();#+ z7F8I7qM(pOtNZCuxx6oYBcOrl3d6Z4sAEwYB}kHus8}4CoMw_molmnpFoeBqVUcz< z=m_K-M|2yYWK7+xYieO(M{(8stvcS&}}&p6y4R$LGq#fLs8P9bDD;R*+8o9gHBoK z)7$_DxL*GpFq&#GD5V1&p+PLdLux=EvTlxM!U#PB*x?=yqX8j_uw<-2!ex>4aQ58S zrw!*|R$r||3=r>iiRA^^jj4p-(6F#1nEFK=_Tz9_eIcO^-h>mJoEVt7B7gO&CHSNH zY(-$lvWYs%K|Y#Gy|Ya#>7@GG7RX9W4=Mb?7yG^M{^UnHo>X>5Gl0+{3w(6zaAvTh;z2cIPq14FyRHW~>z zPYKp_@xk>V82^(}>NyhnLoOe-Fb!Fl&{>kIcbVu`FM!v3h?a!aB zARF{0yZDM&&fJ}>4>*P)>LHg>EZ(*ZF6AERS3S)s@UhA|PkZ_ETM@y#pLU|ZacA*z zbIZf5&Q=(AQwY6?dSd5o}cZ`dq{t;m>Q0kLnT#jyW3?`X~o^= z!@f4(UfB+3=|8p6YXIui*VpIspH#lyVH_-JYNTuso&N2c5?USlKN2>#)6o_B0M@gm zc(l}9$v%1x^-;*B)oQx7Ma?En&o8=7lh11INCYm+36*V|ovz3B7&X5`=IWzVz{Ol& zO$(-B$XiFO%8#BZY+T%B*pU%j;}a8NI5Xg3Cs>(Nf%}KN$|B~R3hXv=uoQmfv=j;(W-=N=HK}&8exA&yu0#5}X&lE557L$3MyfN60#)^7_&{ zXdlH82X26<4;>E?%MsN-z~w@CXm{mjFHcpZ>MC>OBIy!Q5Sn=)Dk27DBh4>o)?8ipLk z?~vBJT|EUDtZYnKTj6U%L;C>M6G&(@8c1M|#jhvz@N^4|v)`@92m}HR)dmnpD>*RZ zNXWCv8pJ~Y*w=#3-PZ*2SZK-&h;K;!{syhg0h?l7}vy_%tjsGR+k~Nne*(9CB|Z0+8sD}FkW_tA7G!v_YWQ(ZsETi#T-R|o2DQ_Nph8!mlqNLe)aoz3!;6X z%b%t1RDj`wcv)&OIfd%|wSU8i#Wu#6uQ3FsqFv@snMB_w0E2SM$F3@S9)ms07?54P zBd902(9k`ie&a@s@4 z4i(@rQ49fpU^?^?l`K7_YGxSXXqn>B+8w;J3l4dv;ql|gbbaua=D?+eBm%`q|;bK4Wa~1gc5QkI_-Y!lSX-mF4tSzu|S3UI$N{ z1KZ6K{l}*T4L^WJ-R!gOgvF@jc$8nMc;&O{A~k(O1fMABx!N58a`lW6LSzg}g=iv# zchSjaRtzKzd4vWuy#HN(olJ&No;E8s&{mi)UG^@`1zaKR0NONf-b{iXitLZov^5N& z;bEN>PPpiRp|B$PbR#1WF4IUl#2CD5%__~Qd6ERel!CI@4wgk$$*cG+VyCD|w#l#Y zM^LLHD@ewdmH-`!5t|ltTIuBOqU2ue=1Sk}Md2F32>vH?RXcmFg}Id!Ro&goKrvqa z7H!rq#;)ZA98iq!1b{V5I;x+!W%$GtP;fJ^tzGH2`5u>eXDjqOOe_VO!dyVbUHBsE zQo|UaH@_~c#(<-!j=JiEpxSks-lj1hh3#%`k{U)Ms2WeT64dBkg?%cy)c`WVw(uBFh4N^M{W(VcRcJc9A?CIacS{PJf2Cq% zgw?js0iTMeo@;T-z>HH?M}t#g^TCm1F68+n+nnmUlIN54?RE^4Ps=+K`vRr zK=23bkk7AomJu`8U)CxGA2eDrC@04bD?S=H`wEDDdV23vX#A`^l7o3m;aphQ!0B*j zvvxP{^J}!dWd$qQ%bdXyCn!~0iWHw|#n*4AayOxT=?T`+*UV(KEq!+-rXwjWTFfS$ zdRsNtiJkpGHcU3^iP*DekDk!L%aUMCWtUmOFgWw4@5x;&AYWopvD$cP`4RgMLT3Q5r(|k(z*4WRnoE)1OoL&GaEwAiH^H->dr{!xVHTEju%i`QNWj3B z=b%S{P;l0ueVPU4bLf9n;Ud1HAt3iy&bJ~N3FyH$eo0Aao^3JBn^3a(l3wmn`) z15<=Hul*)2SPWK>3op6n@!WWw2(`=Uvl8FZD##G&?@Pf}5&{g>3e9)R!|!E1?rlkc zTqRbt1SCSF0#PO?Sr9ROlx{7Sxz-6jO;11bdun?!DQsTHvBnJNBsC)~Q`l~<@+!wA z$0T435T-UHlro{GyY$U+t|q|*%KU>o+z4m~#ofcS5iGC=fg8~}UXvgXtyE!e+LvSW zAWgJ*Loov{_^m}z^#B&tly!FE!??7fd!^ekN`hwCAWT}`c8oRspo|fYj za7bWK4B-N2XGPsW76SOVjko)j|Hd=yfu8v(7;xW(P#Pi2#PRA*FUqRaj_qy}^hx4j z5fQvRJXaCRqqTKr6*MX^mQ(=ffJxWVFmEX-;mJO?(4QsEB_haQ<9$Rf7A{0BAfMnRbV-ZkHFX>_I6Qewewhw=Sxtcufy!I)@LIOB=3EV z@(X&P-sh?C0lNJa@Qd|9dGf3Kwi$Z3h|k7O!tKj6?IeHY1u(rCwwUeIl@V)*jd%Wy zmj`Aw1F`px)YWxW#Oy%X;Mn=)z=QGaDuIP}tSodoGfB+1z-w@%@YP`b2w}8M7()qnYxi^OVd-sHZ(BNt>2I-!Y*Xml&YXGDje#aC#7T<{aUI;I;y zwTXivSYDtMfN$ByFNkB|ke1Mgd1d4soqIl6Q+c)46tWwjw!vP zLKQ}(NU$=aUYj_=Zv03rnvkbM5k?2q>PGHwvoTw&=A@RWe4EDafEvOg7BS=Bq`!Y^ z2b21=`)~UkJR?KfqOvaIsr%~~2#i$hFM5JQsFh3>1tKM>{(~Dm7hnvS`DPlPwI3t_ zzUzt5h)6yoAfOR)2rMP$(ttB(jZ#ul`l{K%wZZGRr^Y_eU|HAWg0rR`q4Qm`;LV0; z@y{k0;!)p>m<+-#h2u4z4_+KN4u$S9bbgQZ259x9Nd}){JN{FrT3|xv*Y^Vr`(BYsahSF}=R(+eu`{{=qzddZ^coOHFZfu%6lVoC-FR5$Ej=8k%&l zCGA_e4htSycET=6s`1-+p#j{7BtnbA4xpTjrl7-NoMR}bYtirz@r?-!GHgWuF5;=b zhNQ$8g&l5HD{jJ$&_nhRMfPoXxg4tGLX(L>2ZpaQx>>wHc_RT zQH0oSG?3t9y#8=-3WxRF8mO3`hFe^$j3YAIiW5W|lY6GuLZB5gr;bU|cCb@(Gri%J zRa60(e_c8R-4ehQjgWBMfE1lmhhBg)NAQw;F7?KaQv#eCU>NFxfjGS#B|nkj8l-U> zw(L4_3?USTe`Y{G4gs=X2T=C&AYa&awerj5{b9I^w&~M0Sp2*(z7v+H|9_U?aP7_p zTR})7RAvM~v>1DjmEiq4aFe1(m|so-S`)y z`Ykc*h`$J9$|R$bCU-|ZsQG{H5WAm5Or*>xH*i8*KO&^N^j4SCQ&?O*_*Z9-OcXW;uU3=1h*2r_QQcVG1YDgkVjq1DyZ(4%ZRC~VnrirmhO zKzbl;KnznvJWLf&_PAvN%J6W_)^$2inO}U3M7$33g^HxCyb8#4YXhip?Aw#z?Z!f% zrx<9333aJ`K6tUouSMT_%5j?FmMlZj#s*bK z%E>3p!9@gJQ()g&1W%NJ)msOmn||YO&sS~GAlz~SeaY8lbQjYVxYM7>hU|Xf3mEjmFPHKw{bGAvO#f66=j%1;zjf1qP zfq?QIZX*AMTNnhtzgmd@{+q+{$}|G&hil;X%-O&lqU62F4`1sBqwG!@ChP;U;mv>H z3;DB4jgUzJYH*bSY!axxl0D^$WM!Ntr0L|wEar6`H>2*c1S z^dkcy29*2_pp$xwy<&j8A^}k>Y)%FoIh9w(-k#hTBRJ%_t^d4kb3XJ;z$?x6mNnpI zFF@Cp8ra`gX7CA(dcs!F$&Xm?G{~lAX2jt6AFU?FUv*>0^Q%-d%FCmdcB5!On(ZpE zip5Rv#e~Ji=9CP0U%x^*c@21)Id)yY3p_PB|J<0L(KQG4*+vhibo(AwqZV)%db#e! zCFobWsUcdN|6r!73ryG7PCR!5X+2PKelA6x5lAUED4q8T*{1>sPz*W0HJq4bK~X40K(NVijQ`ugpFCZonCG z@KuX*)h@7GJb?clWa5rbOZ%FXnL=#8n|F+tch9uNwD#MgqhPBZcRDZR^PM*kFQ6I?OWqT=DG6G&B*x!1!92@3xqn$5R-12a}S+X7lqe9%4KkpH#HNb9J`X zuTOgWF*6z%b<@({zxQ(0jRX>myDYV*0&8_Q=&Vj}R;M>yDDEOGEUYbUy}uY^>V9-o z)D-ksM=}dBm`O_qd=&Ci)7F04Et+?Uysp!6U-x0Ki`STXXFCa|ocjN$ykA&Ye2kx; z9tfrS3mG{79pCrZS4~UI^XSbH&@m+nam?Q(E zEtHQ+ADBwszOVf>1CSUf6tuM^*e2+_#8RVPyo!04p_RRHe=iDdV-{|5PS)6%Q%qdk zA!C#g$Y%*g{7yxtMkX~KooCOV?*#@eE+wVTMl_)Im#{M4m*LS*Lg*Fk3pSJc9IM)h zB=G9&VNu!_dC{bP5ALwiqx~?Xfd=(0R+_`5f-OoXs(uB`F$VRXvG4VetrQ7kOD}jMj&+Fljk2FzUsY}2E<0XwZ*T8alU{muv8Qk@?pKnH zt^2BMDr1-tgS0)|uA#7`M0O`tOe4+l?JlA7zWYD$PinuarU6;`Gqhd6M;tBjc-Y#w z5(A3!&Ei=Xao`;S!PoA&sgFkQTAAw$0RP)wIy#wEt1hcsAzV9;-!9U-g~1+TBOtLwHG58M40cUzz8A5vG&z>R!qg63~165bkz0LXgfLsmJlIZS;1zftlWZebFRI$yk;XRdes+9kr1Y5zU_B!q(6b zvy+})p>dc6=5=~liyhovUQq!m`vVNI>omEotzA`5FT=W|sHkky+Q^6l1PK%hQ%5+4 z4skpSobtN9v2j8jt-a=%utjHV?cFP|SYQi$$4ggx<^?@IuhM09SAFD5o(2!sS;Yly zzopWH2h_|@ojD_8BG1h(b${pOs;vCtVn$h6*@SwJ7>54Fl&YrL2aFe)*Id0<={(3D zd6u{{CWBB*-Z_8dY8bds&OkFv(9GeUr_Z0unVL?x2@9D=Do3eSrgfXdwwgbh4&4QW zrfLRmsuV{h`vgXr!*)mrU2>VRKn9wcTVGaE`W8vz-fu0;3iA)*4xWLzUxyAID%JNv zw%baI&06M`09?xx=g!e7P&}M9C1Kvjm#N+vFe1M+)1pzzLEt z_1j0YO+6xUgm+1+yWE5qPT-xAK4{z~P=fqWc3qR8*r@93KL=yHT;)M9vD3L_*179H zdwNRnNH|N2bW3oNRp$rGg1b{+_b+>3`zXDCI}tqajpYnc2jA`8s16Qse{t9O=Vy)x z3G8;A$Forwl~FPNB6lbcHWOB8J(MOtH_F%Xty+Eb6kjO>?&JgpeI`6dd#-uH{cxr+ zOTCPRQtaf$UM>}5ML9vW9iy)goRMf`ZdGgj;%Ud$5mXUMS<2CKq!}n3S@nI~&l}cmAA@`N?Fe_85qNp`V^YSJFIsq= zvHzi`;yB81x6k2&T&X;PhSCB@loF+D+&nr<-5YLiMB}YD^GRjBa%1%GUU;2^6)&P@ zd=(>iD6x)nbjzmQrd3V(E_aD_| zdoORUF$`&cRo;e@c3!!%b7+$ALg!`(Oy_$#m9!9-!eOvF{z!ai=a6{C#&Ir`^wNF$ z`?j`oZiVwnA1;ujgVHDtO3$8t(RwZL`RXc#rnQH3T$A}l_}hUG^p~jDz7AVnqdsz9(09JNjMq-~ z^3F1K^zF4ni%&*Fo6I~U&YyR|awCTkjpDHq3L4~6m^p`f_h@OcA_^$jpnGK+m3%|X zJe_FWqJ%_8=SN&rA1wTw8kIME2&)<;$Y+1b!y`J!J`s9a%cU#;Yd~y?Y%~Rjz_I%) zJnNBM5h0<+@CR_>DZ}Hx>{mW{^d1e|8R6;EFB#}zOND-^*Os*U?enTGJJHX_x^|pj zo8LSi)7XOAA9T#n!(@(DalCDTUNnP$Q1szTe$=^u9&M@ywuVUOpI6&FerNl0iJ%Q< z{j5*@A1|zZ$(fq%rY-0>EB)+@Xcli&NXSU}7cS&-9N5uszd(ng(6&Wszkhg$zX<`~ NXnAG1Y?<4?{2yAz#e@I= literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref31.png b/doc/salome/gui/GUI/images/pref31.png new file mode 100755 index 0000000000000000000000000000000000000000..e5606d133a2dc1a889bd41fb30a5867b8cc8073b GIT binary patch literal 45306 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref33.png b/doc/salome/gui/GUI/images/pref33.png new file mode 100755 index 0000000000000000000000000000000000000000..bdc9b764321d30d8a9c20fce0ab63b6b8ca353af GIT binary patch literal 41179 zcma(31yogG*ER}oKt&J(oBDq68T5FC}(uGIs3}vmrTm=Sii#Jj*W| z>3qtcva;y>UvCSQv*%moV~H!4l;o^__(7fM*+%<+`-+V1nde89qzw$s`e} zNzP(eA1!_E8stKDX*%gUA%VQmb!ssp&qhuCIpX{xvmq973~cNdEwyL744*EzThCSh z-HkvXR=bv_ecSEu>OT>jcK#&ASuLqmpVF&BO?MjHJd2)EN5)ge8j1b6jOQnP(ihKv zZ?evn)%$b8U5*)FY6}PeOP0IE6-G58`_jYh-RBN9$6}5%i%QvYc z3cZPU;f^S&Hu)k;YsW{CmzP&jSvg}W)g&JEeq>(ahXr@1;psbvcMj6WH@XDsZqj40y8omxYSan^h$|} zq9O<>bKm;;@ki`urjn@4=B=_tuSaPm1>)7p$(ycdSx(lxQ&ZX1a*!}jz{{?#s?b#+ z@J;16Ike^FxjOkQN|gS|t-5qp-ZZk0Z8@J_?=*hkPaj*NQ^{h=^e477Ma_Kb?8mSA zck-_rDZOoqqsHD$}4WDUhYAUEaIv@P(@0C|0+TE0UulHQbYh`h!OL?~#vXZ~*S6VG<;oyHw zjv-Xacaw?F`pB8B9d8pcrt6d=*hXJodF$}zQ1`}s`*QXlJHA=HkgZml1Wn}?o6~MB z8?$3qK_1(SYjo4g8$YUYGe+$Hc>P?h7hw3HA? z8p~}7!}=&oHD9jSBYQ2c+{r=k^=mykojL&(hLsON+&0Um{u4!JgE`WrrUMEp5fZhL zwz~G70cU~|R{B$y*WR2SSai3>Lpip`F`HhdFN9@dX$e)Xz~qM~vK-qF-& zsv+&wK2w{c5Zkr0b2HLMJhB5Z461n(`iBWqJRXZgPxrU~2xRY+i}=aJkkJoOHl>nM zERUJHnK{kuztqZlvAr0@y!x`j7-L|?-o|+1Z581+%@p3e4FluJg*1Ty*1yl?U(Y}| zVeRO+r2az%)=8#jCA;Hhy4pP3ZM)k+ku=j03@UfIxFR*Ut!DO(#j^wr4Tr4C$r;AX zxsrzHOWa(Tt0NCl?>PODKzt4h%Y0dQx3IAA-sIB~HLkBsi>B$>$~O^?N`a#Tx&Ag* zTtUwWE5xtP+I1bzl~erYEsQQMKdV$cu>Y2rKtos&e=SwSCDWt~vqLdJ+p52_{#Kr4 z+L8N`XiXOS?r!o$&iS&u=}~yo*P(Z)*J?$N{HKsJC-0bjqapj!E%;CNJ_*$zlLqCT z78~{*CN0M}t}eHu(;v?!wd`=~NwsB32g83?(|&#)*s1087E_xt5XUSgH_#)g&Zi_x z;%OEJjw2dBcJod>mHa}b@V_dzaiqN0*fnu8rPrsr8l5jbcz#}gTxQp^A443g~vIcVR3Y|NoF|nbAN`2&U^PW7G562^E)CUx)L4JSHI<|Pv_BX zt^4JE{P=NZW1^ZjGQKc4%dkr09tnzD5uQSS#=tjBy5I>vTHh8EEf1X2yn)8>n8Q00 zk%2AalX7x%>mhYd9>q#ms`fnC44nBHB5d^gOJ>~3F6aKr$xhRQ%bCh3oFa2~(iHS- zTOpoj-c!K|ue-hW%}*`s#3|+TNqHl~LYHcz(G)wb*qHaIVo@A0C0c5m^rgNGmSJ_ zH|jCUHtN%O=d-_KG&;YjNXR{CCHS%TsJe{eZzoCCO^ddxsIHz{nf;NQD)#xg(!;46 zMRWQ0l?FM^xk8rvO_iTU*`Q6!`THkl{n>ZXoEWcgU9~K`&0;&k{rt1Eob-478Y&H( zFD|(8sD^~^YaPPVY)KJchgNNw#z=8Cu5M*I_A@GOith&p);s37dr4bxC#9z;^zL6P z$M=|aShmE@iRQoQ%3A7_Xv6LPv(u2nNYAo2+ssTZo=DWas?8>2GZklWE=;)}dBA(IUf63YZdR4_Xmd$(-Z+v3B(s|V| z*udMsJi$6X3#Gw$wO8Kvn?sa1B9)}LoS9~Qi)tI|sKw)!T&`Fz$-~%{Izpq?9oT=RS z2P~-l(Y!@kgcHr0zrA}_;UW0${Pb{cW##Gq%0Q_fvq5V`KxZ5NgWhFAK3^YQ_Uf%g z&%^EY$bOs>bF-{eCJ~)lm;E99o6mNqIR5S*Q38>ytXqx?*dCAC74r}D!dZ0^e9SQJ zY05X~vnTa0OUcO4@bX4?M6u%I<3AZGGH^cIZlTv$#2YjhYHFvF`}{e^-9KO?$7Xwl z!Yw;0MLT}4D8EsMT1W^m*N0@f+d&c=dnF!bH=gL z@vA)To{Mnhjv^~l1JzvhtMPIz$oI&}(cZuB%kQ`WTR2mznu}Sz6lKsq)tJDp>^3UFu(3747(iixB;XsXKCLSvv=`T0|4 zW_`ZxQHWF7x?oSD=Tt*Z)@Z*1MW~`f^`eTgX8v9KtT9&p@_YY*#L2faKNnrmdd2;3 zTCUIVU`+o7-ad2^SZc&)r3=14jQ##z8TW_3deRN%NixJ9$>xS&`lF54<7noe|MN3a zDyu~ELKhcAzN*68aUFEVf2)&DN=?rm?X3vw^M82Wht9vKdF2q*=_;Xu{&nqt<8k-C zSxy3F!>Zl4Z*(O1X8+!aD=s?tQqUc{Mg&F0>pwWsKPIQ}#IZgbEj6>P|NQ2Q8~sQ0naqrY*;uPO`ZYs>n9p_R zI05f#qu?W-*65MF-yMo1-rA0wYadA!j+a*%5V)CONZHW6c@o@Cnw^2Z#kVl&n`?t- zrpW2EHT}aTx^#4>C?!rCPCzrR;c$ht;LVAki!%ed^W+*f}2iWZQ$#zSD21R+m3TQIC?J1k*2t2{F$UHLhGka4=-?(i9Pk2UYu#mmE`{ zM-_jbl>B=aWvE96n+LQkLU{4Xy6o9Z>bqo~3Dp;GHI~THss{AB7Q-sr51UgRI!}y^ zM7X=W$e(vVa91yaxdX`ClW(VfRZ&q<_RGU}B_*7FeSOz&+|WB%8&N;0vS0l(luzY( zwvE2OIy4j+#iA9HntCtWAn#?Nm*bQ>u~fb3;X;&-;jgbE>Q#Pz=<8$UM!Sn$qeYa0 zE(PwV4uCvL1)xav_a(Zl&>MEeEW`z|=u&P_zKH6H=Z{($$i^okN@v!nw7I|39X|&j zHMk>i@+U>z1uB;DP+okQrXm5b!*}oAahmisnhMH9GQB$5n&}?hgSBSdLop`$D}Ib@I&v z0-L*}R>u z^VdCSm-asfd9O~lhSHD=IN_?Ou#pD+&ee$Oj^`I{7)(KjUVxUXRC&UJ&?b3>(=ZqzN@{L(ZYv6j@&G+X8PL*GcV3QV+dzWt7V;A zZvP~N;uK-uqR)jUZC*ZEQ(&J%F6a`D|3L1c>2JF6@o}kV&tTVh(1+_W?(!bOq@Nwlh149)1~?2^ z+tqh(9!5SIJfUNq5+qr(kkM|3@Je8(SZJ!sR zQD#YVHW%{dByk=C17lRDz@>Kb^%XXH`j54)hediV*iaJ|6%dyfr<)v}7j6v7-w+Kc zAwun5S8q7&52%(RD0N|>FlpC(8Pf5LXRSZ`97-c;n)0hDzSjGjO7@F0c%$9=XasPw zzAP2Sy2}gK0DJS?#6p0s@gCgAU4%u|6R98Rmb5u?O3x8t41E^n)#U;}(CVO*`P zsVUi4FEwo%DK@HnGlS}%yft-s5k>zzeLm?h$I8>jhMkZ>`B&f52!^z@2|#eLUjV;& zf7jLh;e!GEfrweX5egtEI6yjfe?OO3th8A$-yiOXavpQpU-8Y)&mSnu%JPqjihADO zX+|Y3F5X*ir4xWR(Mj_(`tZivA#K+n?kTshARTXf;ORRgZx}J;`7y;clp! z%m*n@SYPC-HwBS#|61M0y8ZAiNJpj?cs44t|}A`~I4waK^ngXfV6>CY?N9)0ZMmq)`L%nt3cadFr)m`oNN zmzGWmufCB$`JR0Bne5YrdPZ!8TpP7(c2*5j#CiC2ZoxEIn*T9{C6yIS)Jp-`k3TYoxAgV zsAP$o`^jE!pDo{z8voMUecN|5OMZb4T&BN23}ma$ZEPgWUBvV|Gp-gYd|Jxv>{zFe z865rOtO2FqXeB!zbRk&I>fvUaaS>|T^&ISd?4BV_EiFc7`6<>{9^RE9blned34R zTjOk7y&x_riBCYFU&us9_ureRQV#n_F>(@tbF8r`41-?wWy8wXysVY;StftGsY&Br2;_Ncrzcy0r2g{7z zrPCNO=vkV;Wihq|RioIbhmy;D_-k5pm!auUURQ(BHPnahqjuWP`w;^BT7&DIzmoLO zg^s4t;EH~pXr5kPUL|;5H#@j~B^%rT-C+1IthIOve`+HUU@#oi^JT2?#3_Z^( zax`!`T<)s0U3yt(URg#ZE+NsEW=6a+m@A{HNv^|s8Dr9)fl}bSYiL+66swf>)EZEP zKo4G5mylAvhhUk-n8Y_pI%{idAS9ZaS|2`sOwz7(sc@|rvna0RbZrS_mJFdx6Zv_~ z>D1|YnYmh?W~FH9%7D$|fF@h4N)2UUf_&R= z?$WGCz4JkQuJX1QwUq{|FKgV6*43G!DeApMtxjvZRJO@ z9Yz|bo_sH?*?7u^o|s1g1qBbw%tu7U#IAs`@p^l<>G6r&L+2fR#5HVkDSdtYV3eAa zr%^1=V!157a9NN78A~@GDI!{Ka>fkGt@QCvR@ex&IXXTrwEiiv@;lR8m6tWZ-i|MR zK!=Y&ypT>+Wx%{6XF-L)ce?ERZLDi6Cj;UtDx)PP-f|f!c{)gS-b7L2&6uvHmX-BU9ELd$Vqo=Er7z{W-~09>khnuW%;&8u-c1`}mi(ZbnNo|o~P+#Wq8 zCjC1qh8`z$dX>3hg{9~BcU{fg^~~JG6^+NznO$lVPWD$c)+96J;%D0aA;j>OU4yQJIWCWuXoG$ZpX7 z@O9&LfpI~baUF^YN2*5W_TGb+X5LL~E(c6=%|ZQT&Rr{yuoH`m%Gg+^NYv_Ea!R?& zq2%&1I`t?hh`7De9GG2N@=Hvlf;yT8eev;0564)U1q~k`skq|9Xjv#SuA8++hqLeB zzC~b@^E`(8DltIECcgu}G$s{OBzgf}IBZU?p9L|99i;z)&W%q>+77iZTF{kiV`F1v zF>hh7n5+SMGDz+=!On!@Np{PpDH1F!EJXeCIRo*|7aEH;=4s1zeC^@%dc~dNMWvQO zq>sKSrd*@ochKLNZzI~TuCCV5e1ftCAdKCx^ER?HsjHLfH3t@s_8h>f;?l6N7%93B zrO@taba26-B=n`F*`@#oPk%dG+x}pq;*q%Z-BMML#RU*vmzOh{d#Wztcx?gBc9mTK z`QWvly;AMCNz1_C?|Hte!)u;tUpXPk@FJ%bdVQv9J|*%4JEJ+^5qtsTm@IKnk$c+b`mtDE8MLFjWrM145v%q?GG{ zTXaXY+kM5cbeB>Fn~`oVwZT~aGNGRgDp_y#S5%OePQAxDl6R&^hBz2sqK++*n=N_8 zb>o0Mb9uHTJThu*<=J&MI$0NcY%h|SL2eR~%f(|8=yh)U;{BPMk^VVl@!;fm^wxM9+)pU%wOx#HsoCVgTl$6c~1qzQ0K(AtvS%Sq@8VZM-rJV8s~IW?Gc? zEbd7q*Ik6v<%c+z6x1b08&u2>Lz>x*kqXHR#Bg{rdX-yhPA->+rB#%}*}lXV(OC zk7}XDSo)O5X%GO46gteM?!*+BNcB3nw<4=4p(=;fr%#{yJN%HAmi|80Lgt9$SY|Qx zJ}c|R*qX7BtA!viAwq^1Z;(r?%wx*KU9Ir-)k~KJop5FiBH%@X%o@uCeHh-~A2<0E zBB5`cN8Q?ZA;-D?n)RiA%rQqtkHSlP z&aPx!aK`rw6`AzYYLj2yh1F&RpY=OWi!4NmlDBL`n{-&nFkL>jyLz+MthYJ7+MzG$ z33_uNMGAB5{wUMM$tf!-r?Ia6nE8HXN=s?2d+*>-{h?pNe_XE1)Vl^?Dl_T$H}9h%A}CIK)TsupRWJAmXp?ad z?cw#%w6IPuzbc3oHXDgX+r1HGwJnS4JW2fDEI?1Q`LIhIjc4PwzLBR=f1qYyz3)hl zdRJ6s&CeFrUuDkBF-NMjUB-roN%iKIVGC4OD)m-5+>%f6bF_S4^U z`4J{B)CT>H$&&4n#V98bjfiXq!d2cau8WnjM@kXSm04M`u`Zr@>ak@OpxN|CuG;b0 zxljmJ9e$NjT~+NIBUNc#uGP+8+F9t3P2{2wS9G#(&Q>2Cw$^jLtUVm5u%cJC6cqKPL1;Ro7F?MZKguJFU%Jp(vK&uor=Ql)!A%tZPPY95x~EH-e$q>yx_KvGHIHf; z(*`Cs0O9q{%5tuH@~rtJxOog@2F+R*Lb`@ADa@sgo~v=bxpXD9bR|jOkiuwq*_67* zXqk!37?;J3q(@Bw#Z)g!Hn*11FA%AI;);Cfltg_QzBH^TC*F6A(qDhA5E62BRPL?# zQc-a*<*f{w={IvvMP5UHMvSt6;A9(FLD^J!aYLIj#%pnc`Pr$V7aeNSn<;-~;PjxC zzsj|cvw51U`jf8tDouc}5%cttnQx~%vh2ZAsa}hdlhymu) z0j0SOlxD{K@(hQ;lVi|;@r>42jKBbkWYMXMv!$i>X-$22d8d7|wYFP&{hz!pDuB4v zaO1B@rWp8N<3x;2=?=BfE?@I!bVl*6fDyV^35xfTN1gL0e$4kPOZSaw$>~-e{8qo3< z*Eas;sP5_j&!z&=2R8ATY$B)0t>+nX_n~*E$waY()WK{q+xRh%ocA*jYKg$x-&3W- zN;t#X#2_j$Ty8}Lv5!|ENh4_oG*P6ju(#ZAn==RcYdHP$_cW5h2whH6liuX3^%p0M zoAsAMu7?{7AR-}N36 z%$l8c#_>9LvbO+1le4lSFBdxFU5Qdg4t-9MQjGwaQ2h@ zArN_U^Ojau1G2LjZxAu*f?)5QRsF4Zbswmquf6syqX-JxR; z9uyS13Rgw;0^0N$ZjCX(_ufG`s> zssf5Y_P`~>&#tX^*=Km-hczIv-~n zkcSpaUhp82o}6O)*kLBA_Gn`d@LNp^R0;RSzYxhCE;6`*NJ>h&cmF;fDJf>dFX|`D zzYFo9^`z@ed5nf<<{Z1N9+?`nG&lEU$Ww{(`EKbaKKK|E)Kxf{W7E&dJ7AO@7kBa? zCD>FYdt`iY+=CW58+1aL`q*cnWJmK@Cl7G4va-I&*S2_+3x>+tWbK%#x{}i8rqj-T zo1(gM)t0_A8H-2^TtdR8-5y~p`-x=zA4eDt{Xc~+pRn2vs1LsVjnIA?YXXmQ1A~L z@@{s!M|~4i3};l8I}NnSDu+8UKe5L5!=Wu0m$Gf;gdSoG-?}h?X>9m~O-@*I|QC9&*1>WT3Blg$!=YKM(kCn1zUGk7}!nQM?4if}Ml&>%nn&4Ti95gjIvwNI5Q0DADzpd->`ndGpgr{JP`ACaR`9{lx%2vC+!$V`OjhqdYCFlk67VqDxIDRxY^QtAis&m?^Tj86{8e zXTTJO#a$!!h-2hGh6Ye76Fr5D~l>oBgufivi4r}Az1EV>dvZkIp zIXm|jK9>woT<$z(cirvcCK2`!z{A4}XL%kYFLZow=sYUcqfj-m*2bn^xUB3^dE!T8 zm-WZF&%^VQg4>e3uC8uv%=4`@{sZupS(YA2*Z+C8*u@u8N{=-eQJc%s^XJqn=3rW* zC92;@ZYi$N$NELR)Fm>dgTw7wIO?;FpELQU5uA9cJndS{hREEp>z79~(V{fSho=^^ zh73W$QwhIZ+yB1pZvOw|074P}apPY%E~C_dl?qaF@ykJ=z?xHL0>!YWm&(4~>b}b@e0*NV4RQn<8=GdeLl-?x#lPm6oXYr#o)em!KFDogL9cbJ$0!8JnpN{87au#1Hd5fRa>c$0J|hS{g!3FRp5-!*^rRs&if z=_7xTkqV*Fo0~vJ5V8)S14J;d!~O@Lv8H>xvw$3`Gib|TV?r{vM8H3pK)D#g3IYiK zrH9_p8L@`PtbS zW|lKdSzJR-jBRaqKUzXJo4jR)MVm4?wV1S$E=r9cG_gQR!I-81Vz7mt!jz8`yh203 zb4^2)`_g4N>AV#G!#Dw2p=JeGyYIqJySS%#!g~N$N}a=wQsxzWEC2LqQPmj$rBSp0 zHijvXGHjVRY>^9wQaf0-xUC}}0WXhh3wtT^LH&^#9v5Bb>k;TqnJUFE5<2#B=VGS} zKl(ieYymy?%9Se$^&aj>%Q(XZ$Y@A?eSMh5gDd0$Z$9N|Ro&{N_i^~X{)O8rAu=*{ z_vPkfEk*l-B?)RV5yo(O&e`w%U?We+Av3FBVcjAoZUOIX0Y&5P6cVZd7c~Jv3{*mZ zbPH8jVQr1@st+L{tZ#|@KU;#R=Hq!wu0Q=5@WeP!>V^z}6kB9vK=I-tdB-a9h}dE)5L{0axqYb7=oq6zt)j;1g}?ivFN z>&jQ~2spt|qJ0+gtIpjOFj-bEF~p);f+;YrUq{Y*YFZk~0Tu28N-Ws>v6qUrjylQ? zYvVqO8^(_Q)C1&dkVpvy(L2Lxs*Y%x!>C(-t)kF;tS;y(74!7M@*!2-{>HfDvE{iV z@|z1ftmu7`sWt93$FKTv+=#YGtm?KG(IzMrIc5KuRvd4pAA|Ccdi6IiWDrV>d%bi# z&k0pjzzf9!REeTH^TQWuFeAyr*4CTmKoUL0DUKe2C$P1_fNjy0x};{CL$U7d?Pb!c z3Wrn#pQoO$mNoI5P3f5k$?=&KV48=9d$;eZim9)q9CYi!{R4K`>hBT8BPTakOmEXq z{s$Jq26m@lh)Do4&pimtfQ@;z`km;9TP^e`ZtE-o^PUgRbbbj43Yzp5U4_S>eblqdBOWIQslzz3gU# zOi-_6K(7Dr;e+nppI+?T3_46e;^i?8KwzNrh=FhCbTDEB>G#1tki))%t#>0eWY$Q4 z_%$G+n!P?5B!hYN^Sz0@4H3?ZLEYK{Z^yS$+Abe~KOil%0`n1e(82Q3M)*VM{a^29 zP8|$_kb#1B?V-gACxGr7ufu$B@5l8oHV`{(X~bO$pYHAo&^>vNm1Go>@D~-ujF=n# z0|5Fm0Y?H}NXs4k@VlxKMK%jhof{&50i~H)T518(l&R9O^TSw0MUmhtWbS&6e@8+~ z024hok{j|bkt|wIK`sZ`FbUjn^_blA&PlY{MsGq#Hf)HB-Nmah`leD%1U6E#=jBBS zrfC{;xg#ZPT&{flqVj}fI!+w(Zt%~Hr;=(pkaZ97Ah1FBTko9Ti1*r0m_R&7wqPP= z4Sku_{{Vy~9;GS=m(6fh>gEb`vpC`K`5IN#13N5a%;7A;J03@kueCj$EAHX==Lz+d`Ok zy9EOx2MW{nbsUEjd78Cg0@SHa+hb5aO>jfs!m-&qdZnU#vbA15wK)CG+YWnK7QCZH z&xblPvFy&6@lW`60dGgM=}AzRDG@vZbZ~TfiVu7N2;|F>KNnP~o3)3ONQ2gScadD! zV|=EXvI{6NvZRBV%c5OlTsSF7<=zNN@Ad1~?{IP|lMUeD;5-0z9xCwjd~HD_@m;d~ zMpp&^SmM-S9jMk1kmrx5y>T#Wi*NoMZIx z_RAuD>AW!r3i7r&B0LY4mYBVcgzKofM}}i>+hJy!7#gw+cWpk%pRXGC#4>C4GVm*A zc6@OxF0DxNj#%_V@@oiR`A%E`c2X24glff}y+^*wjG*w&+CB&`+as-J8CnQln`$*h zY)T!w#Cx^H?aq}4_@ld1Lw1m-1G*v0CmUAns+V^bFsU1VHZ0R@MXw9ky$dn4L;c#W zm!`J$RPw27)n}(umaxlRPlyp;;Gg^wx)3=d2S|hzz8X_Q z)Q!2kU%W}xKR9B`6YQ8#n&Fr+IxfxjIwW^Th0tUCxID5)+g&^;upuB>ZjlBl`iM)u z>wf3>+sD(2hVCo7`xAHPDh;iK^Pv#+(L=m*#D~f+t;0j*!%S29FQjW%hXvCENTbnM z{rRFpn2@lC;wm4yP%&C>)bdCnml;=LvSS7xIiG`?Otw-c=cz}1<2DC|xlW9SNO)UL z^7C-bOSWk#xPdF1e^KTSMVvLEEy%a|;pi;4-asP_wcAYY!`hTH3sF^bw8QMw`f{j14#QTOSE%d>Ncpx*x|(4=ymdPnZ>k+>i-zx;gG(*r8q zzDA5jtw3Aj1;CrF-{SDqPDw_pi^>NUNZeV41q0AUg6&@gs6AS8iO)b60GQ>LA{aC< z$jib#??&fCXS&v8ir*}M=Pc}vU;Fm+{OK|g^sJcaY0sf z$IVG@w6@!B9}-F7CF0(@n}Fl){w`{HW=$z0)918Y}gM20~ypXi-`h}S2^mH ze>J9SzBk)dM*g=r=h9LT%q9B@bC5`p zBm-2cpME$-gE?x)D>R|pU`nNeUw}o<^GQ5_NNr8y01O)S665cXQ}EBq`mbbK@McC7 z&~H0jRKm%L2kCKt+l)3!KzgbWVKX~jg)aI9mdgJD4$C%l7yra}VfxqZCbsGS7;A~8 z;yQ0I!b{v|#$P1r`1Kb7SAt51QZK68LcBz}qX-gNR z^(LASfgg}%d-^+Euce!UNuw+f&?Lv@&tt^eL~#`8 z4ObBI^70n(!^1C;b{^Di>{O|OXAmY z?avsi;IwDf<@2-CsmpHhkn2X#kIaZbPezKTA3j`n0IeCs6I)GrMS_#VO{+)ikj20v zVfSHF&C`8&n<-rYsrJLvkrt58OjX%uH?eZUX*cJId!aah)0rg3Z}2;zpDqdiZ=gKt z0u%B7L#(cY=A(|rItsD(edxY}++Y;gY!CYs#$$V}xMvm)h|RgctX;cF`ViDlWIht2 z3dbAOn{Q8P%pkBSCMn5bGcN_f48%B9Q>?J3&|hhAzD*qga;vEaM0CvUYyY=KkUN1C z4?r_8>P;4xjp3Be7Ph5mQp<&OEkIQm-V7B5MvKZ^^eiNq0Rr@wd!?t(>P($neSfgC zynjNzRDuH|ks#<&1gd~Qxd;J^u&^*N@!NcM-wym7ul;|=%LC?I_=JSwnM!GK1>$#w z*}aaEachhU>@WJ4?TDrnqYqhKmsnjPvL?FQuxLJ3_6*gDTI}7M6M`6|Y6^NCl2pKM zM}`=jCJGAn_&*~j37kK(4v3n!%dpmp0m~)fGXFwk=e1fAu=Z zlGfDLq8zy#4{=#7EgB1Hzz&fZZ{kreF%MlW8uE;y+{^!`^HpZ4^0f2_U*@>8z`j+^ zQkIs<)~>BOXgPrElP7pVu0aY;w4p$xn3YNB5RfpE=-hF?Y?X4I{rCX*)UO?b-;9`& zikOq@@t2tG;0w>R4=~moZn$36j>1izr~g#_Yu%IFwt!X16eS}EAinDfBgJOBIv>yK+H-DY9>TO+qIrt(Y-uVRe;zO z_#o51#M;yS^1=&E#5zn{e7?B%{ce$y=LC~+W9#VX9IOjBq<+LFr{pa>aN7T$zzQ%6 zVr{2)P_xiLfJ2L9QWI5Bzy;R+h_z-5wXLlU0ebP)az-LMvSl-={eTOX+S1? zkm&Zg&ixemiA1d0o$!ez^qgv|baaE1rK?&aV~aFSGAAiN-B*unPCA!=SW0}NU(ZRs$R-XajeVxo>W6ZW-_r(&)W*&F0T9 zYUXulD@bb0X*L+R+@C=#whJG^^AS+yW~X5|n{A%u;8-2smZ0*U%iJbZk8 z)l&bf6H`!h0YW3;cgTt40;@&aZCe}}euS(CoMmACKnsHUo6pEnumb4$!x{ajfS3QT zYVbbzF&_d0ujsaZqK4*BcqfML?}&;OD(jYql0PyffZPN%Y#7lp&i~UwP5&B0y|JA; zw;FDPP01q#8XeLdt)6!1jOAvPU#K~0&n~eVnxwb5<;w`05u%-d6u*Iq1(C3}=e)2n zTc)O_+5iKC*eZ0@fvoN8*E`B8r7;KpywdN0pAbB6rV$`LUb(}=^96KpHrQE6Bc~Wk zk%v}3LH6ju45&*4poM}yXsh)epnCOY9nFcc9YAdXV-SRq`ZQQPx8Nlpw%Z_I@)}0A zv89Fh@eSZmAN*vJ1X}3@1mZy1Cgrw7j;GUH5O+xlSpB;Yi0ubS8pfH)F`pjsza31Z zYV*I{$kM8f|4Nu1E!5CKnVDDVJkMSBnfv}DV`jc6CFQo7OohdSK&r2D6#UzlYZK1O z%7^E|7fTQCu-qoFU@+dn6Q^NL;qmtoe`oztg}@r+`;{PTjA`^hwsmxWd-@>hUR}1E zBK1#uF;xP+n$K3g5q3@Ax`~37+A?a2%Z;VHB{ti+b?R;NvlR=ACVST{ZjN`iZgU?y zYWtDZEPgiAkF`{Sp4V3ix=t!=r>7IBZ#S}a59xKZEbCpRaKubM4%dvy9~Cq zVc^rsHb53wL0z5UHykM2oL*nQ`B4lNs{Kri@%p0E3aLYxgUclzo?^@L7Rgan6<>Ty z?B;?HU`KMEH;;`fA&5Eyy<3#;(W6p5bSWp#j#C99hSGy!c`2#KPA_?W5c}#~>KxFp zvEjLbtfT0-OeRAX)gv2^X=P>A87quKL_}n9kg1gU@VhfAm$|v7HrqyowE`Uh;w_xN zI&&NDK|vTyg}(w=-`dfE-%KdLe;YO_A2>Z%YWI>`ogoq7*z3U(}pFbre1+P+5|0~Z!TOqqsXjq5Sle_@Zew}8$#FekEZ!#jhfNKBeTIf`f}GXyNT{FGTtC& z)ov`qDK8z#kh=E+&H~vjswgYpf%q>DrNG-^%|Q4cKro$`ZuIDZ4v%;XD(m%@o_Ik& zSdbXYlJ+6$g2F2TKo_p#;P{CqJ$7;7gTrU&^L;Sdk`w#AeY+v{>z;g{^~IU<{Nmzk&jSyABct-{ zx^p_$;gBLphzV$BRG2P2;^cgM@0LiK68y$!X?k5axu5|55r@=70w%1M-$O$`t;gkM z9_|UQiKq155f-L`gFCBRyD0}`9EMn+vm*~34UdhPEtEPu+gl$~HF5?mPE$oe zh>uj;(oZtnzu-_hPK3N{TB6VopUO90hVX+3?`XH@|9 z&r1!BpOTAuTQ^%VK4N?!V<(1teP13@{-U<4ek>6F@)fK;{0h?c(cV@@K|#S|IO8>` zc8YCNWUHW~69OS!n%$mgm!1$lc~}~+_4I&Wp~%R{z_9_D)>FWlxI{$nA(%&V=T5`4 z*=vwNwsv-YK#FF1b2DGX3VQC#5@S5@3EsiVn+910c?}3Af@Ts75I?1^juIB8I0zqp ziL6i^9PxqcaUruZ*x1+=Z?^xh_TD@y$Gzd_zk%6T1P+c1FuX^YIVGp3uo;g~xBk z>)=ve?kw8cxrtHKN9BIawFph$)NLhCt@;e9=Pq7cLYxZ`xt$_z+_`o$L`lwwCbu)X z9v(%yBb_A!{Tyo;gIMSWB_*$~cNAWP@6&mWkdu@=sh2AZH;-kgtTJtQaPWQfUHM)iL{U^XP;Nua?&AOnfG zOWU?>quuRK+9kTX`t96|8d5cIi#Lj{ijd7$l>kn#^QI5Kxqx#!*y_%{g29~e{s*ND zvlnZ!o6}8c+1S{8PjL;7j{bql?Q!mZ-sv#+mYyeY8*<+BOSu-b=5@8aBe2%QOR{=*Jh6c!g+0$*$p z)nw{?gmlZ^0AK6jAJUHk z16OwA8FcM|xPeRSPtVY@eeH613_TUq9Vv~LCB?-lwI465s7UPHX#HdGs& z0(@AxKidVQ7ITe{(%yo!W~ck`!ANke)iW~JF=W@%(^JZI5JddLYkJzwlT~=*)YOzw zZLpyE4yUQl>JhJB7e||O^sG+z=fYu@mG3fWVcM&-^|h*VJvv_qQR-dAv9YmLr|YV# zQ=T|M6dG)@AFxzn$1+m@;;vqGKOdjG4l5^Tr3}~Fp=0OpEPa2dbQjOtlRM+$&rRmD zr$P^`<>aiYFrb}`()r`AN3=bnoM~C^Mk0IT zRQG{bp|C;<2nksYcHwRc6VI_)zMA4A@$9XXu-N-1NBe^oUFV`}^vM#ZPsuEy?&lNx z__o0$ukm|2u7<=jqI`1AYwOxv*LC;Sh4MP}WB^K%`r~^%Q2Lb33zLQ7^^JE_;!euS z(qlYF-STaCeC%>>&^1ZUc1Mb9Ak+hnWv5F)%M3b+b!@U@qpzpZ6$@yHA7+9*Jw00k zKVLR#{``3*x<*4&5nj%<@B=>eTy^^>t z$#q?fcXDd_S$eusQA4s0L-tGCV;$S_i<$Wvrex1a&47;6(9v1?bSP6_?7p#<){Bc) zK*=h$LqkKpr(Yc4=a;gyJpBB^E@JD>oy%lpWgj2VSoBgR_)cZzg=bBeV6YTj7S19G z|FQTHE>NL4@XED!7hi~358G~kiusO4tgxf=+c+b<^O8|s))JX$f%z#@2SlVjW|{?B?@IuY zU5Zy(4wCSZzrTje>}HmQSplMDZr{Lh<>)`29&=SO+;>_PgAF#42m{8oR#cv`4~d7d z#)8x@K$k`wqMMNUoCpPbm&2}|JUj(ZCEemQG&MDoK-H4P#?sRAJ>L!zh=G8V`0pDv zS{vRcDsgwN@VKkIAU&gl?vKP%cFLbWe-n3?h|M5z&HSKo)1+R28rND5IQoeLrr#w& zKS~t|TaU8p2phK0Rt9aCwAz9*3(xcRMOIwf2jAgwCMF znzEKqkLb38F8qw%-rnSaqY8`$=;`XZoZ`B5`UQULCzo^>w2Yz0J<&6+fXn+771_JZ zNkvUVTl?i<`8{jzy47v=qQkO)q>=jlBUR$kg+NMvsDg7}XZ%7#8#|O@%)OZT=)iLy zyMCRkk4mKskE$wOOWK5Gr{-%DI9R`+pyhz$B2KfLjvP56p*GU{T=36D)cP%RMY8US z@62Ss<4vzl+nk^-E+8zN4_NVVhYW9*+!u77WW$Yegc35l2n8hISXQJ+PHt+>syLIr z_|2jpLBb6-jOBg6!b2P?4b#!mTHfmpE|q7mI{JNAmAH*PPlAG&M@PzE{H1|op8aux zJ&57Wn>TJ2RbN~RlpT>cfho0Bzx!fj!3ow*_^95OQP8#{8Xn<0G5mS|%5WM%K|z(e ziw61z1|&Wuj-EVur`EEqy?y(YEx3^+)L;{ zdNe@Xs&7-1^Ma!T{1i4=OrKqf#UKhAEahSV8>54sZ;Tp_!0?c(YKiLl$2C)Kujo04 zIftSAHug11I~VPytdMhZScFGI!!u8MdiABaD@zOv3?_>luIlMc$*ZcX+t}Miwiq7E znvpqm_U$*{43dn4>xEKpB=a8|J;LR$z2>t<%?NM*urP0s^Z50)vT`lLt!szLXfvn^ zjlq_85cdyEcIIh)-iQuX1FQm4TXnC}Fw$hNO3E_$#W1vj_QrUhGJbyRzJ05~R}^Ad zJdfTIo)}JX@x1)9Ko5`Tth>NHTL71qz@%~|-DY{Lrsk?J!Mk_8j~N@s*B;!nXHV;{ z7(CKYJdRzuv~hmAF7Fyt55fhK#Cn+YB=DD@a)&^XvKbp23(YKBvEn_LI*yI^HH?hB ze8i^7Wo_T|G}?tko1tsuLyG(J_JtT6$?Z$bgbKgdk+P~fpX6jdM9H@LojRwW;0E+_ z6(qaOr>u@aXEM4GHPLPo}|6b8+2?y^I?Ovahia(aPg(ip_dbC zifrels>ZTp7ZX1_(?9+Po$0_gBQA3@vjgz&qb+NNv6}pR;wq+^DP>yhaw%Zl0WRcq zniuTS5h*F_NsbfKXc95UA+-I8)ytj08z7x-hwfVSA|X5?f)j$(xye|Gzc+35y7d>^ zfV!#lO+TBfRTZsgbaAWUL3?%~W-vK?ZWS{#Gpa)&zJ%YyhpwRPTTu*er=_JGqf%10 zoG_oZdU@c{vpM+rWYhI{(Q^#s&cyrH)yHp^lq`#!8tJf}SmWVwRyHdBrb)jSe-mk) z)7RHWH_g$<#o>4A#?-J@_H<9IP=kRH|Gkb;>RFmisaf})&857gs2)az=8tpiUyDY( z`we%JkbuBbxo|P?Undk49^G*G)p8XA=g}N0ZHdByS;+3ZxP01peMxsi(ED=L11h~z zdpEAkN`!p10go-=g4gEf=SR+&&@on+KYjMBHE5oZ(a$u~f_)O29tV0fGM8|}@ISRy zXO;4s>i_!QI=kiC1ry3Spj*3g0-`X`vaCuU)Z1#n>E*;VO{%$4@QvTjy0N=TV$^`S@Lz0r! z?UU;jIXT-*>B2lbJYVXSr(~7R+Kvcoa7jwObftlFSo9%64^}@f^NPT7Tv=cr&Q&ck zMR>y3w6GHySLhS;)F#IgoK}0iq>4Ku1KuUlf1v(Y=Me5E(JFzM2{g`yaNO^FJ~ua) z1lfcGsKrDRelmi<47rIbP1vxlth7aNNL;F*Os-|BJoXOR9!V-ywT%_3CGEmO~vN;ikQOMij+zb;pk% zx)eQKQJj&^4YcT5qI~AvfUK?o`4dEvl4qTo{c2E4gi7g4AA2np;wVpGBnpUG#S@r*EL*kAt#`d5z7t2nt5+-h82x;wids5*-2s?5Ov=JU(XlQG@>#{FQ*5}f zTt4uIwY8Ln1_#jsbHoiZv-dCppI22STX6I^$H1x)uV24*vje!piE&rh{Q+L$8~={d z2tr3k2fTm*r6OAmQb$Ng$N`P_ixF{J{o=(76-SWW`872g;MbFIauPdY{B0RBhhR?H zpzTX2JI=|^eEC}6Jtrk8$?DFZ^uz;F1RV^9Cf1_2C2pD~cvh{*Za5AU^Y1O$=cE5^ zOLk6PUQ?mDdaAFl@2at}cQC(+M2y1wl9JU>g(Ps`SWEHfgRBVOIHs_B16DInz+f8U z{rmTc@bML0=Y90((bewC7bH5ockkW-u;lAEZ0LT?Z~RT*%h$tn?%*kv5aA`2Yr?CJ zq-ab5HDOF$0=Mi3P*}Gu(2Ho78qS(QI?)fs(JC~>S2Mp>Y>Mx@Q?Z6oG;h;en6d9l zVm1sN0WO>olb9HXOaDTRxz$0l^0up7UV5RCqoX}Jwu1xUefA{XaAEUGdRD0?x979xHB8Nr7z(*>|eirW#wh-v61O*Idl4S%a0#!Fkvpo z-D=Z%n<)`-l~Bt+t{t2nr|x-vc=PHEgQN4Ny$)GgBBUmnf%Z0i)Vk)r%&(Ej1mMq2226F zezdpiHEz|_*48dJK1^-jHi8Ns;A`B&PVC;j8*<_u$go%T8QIcq8)HGJP{3|#cHl*lm9(EE+u`FeZY2n}J=dS}0YgENo*tkfcQ}oeP+`HY_ee z4JJ(acpRK@ z#KL#-y>M`V?|2jP-8D!y4K?Nd0T+BM-tmOZx;>1Pe-xn@3|ejCl98;I#RnB_{dW2R zen_WfEDhj`71PREj zARBky`t$Z5%uO%AhnynI zqB`SguN6|-rmi-<)+yHsEBb*N^W6a7ZX)g#^s0wN9>uM>fLY*x;gHpVw4Idvi2sqY0X?t8U)QfL$2Y999&(0A9Ioc~b zqff@8FENxhc+u*yx5Akh(zv%m_LAd-Rd$^EaQIs_|byIA~jyB`uR4oEokkAM^L&g zBqgbZ!06ZUe0c>Q;WU?fdE@n;g)65@x%?kqfZs)oaJj-$=sZ8d4qr75`P8mqVOfQO zmh7q%84)3&n-5x|mOIWpJb``1%9X9CiVgB>TLBtO+%ojN{9kYKoEp{^&O7mbn5{&OlU&Kj~AGt9VJ|V0ba$%QtEZp z_Wz9zi4()H#@3#mdr+((`LP2cxPg8J>@^+jI{)l-?tF~nPa>pOw!rB~*YsI~u)qfo zZoPGRyK(G^h{NO>fc+b@lS8sXe4M-&(I!2LjEt<^tMIF+BJ3f@VQIg+Np*sUIQs0| z+fScPPnPWh@87D?DquOi9wpNE@nfXHe<@w_R^LrP2D_=m6&z^L5E%b@@OoeITeS2C zKRK=UcC=b0Y)!3RQ7|^fKtSa2xOeaU@(;@qrP(|-HYQZ22N4azpT>vb4PO=l=WK?5 z-1UvR6suvNbHB{n`HoMOc)?4rV7F{2Xd&}6dLbxmXjS2w2)&ep=1$_-xvjf*ufQ9V z=l;vrukXHnV*zjF22d3oyai5_^GZq{=%?3$Cj#HCcV6zr1q~!u(#_geT<2x}&9_7V zUIzsQf#cpzko++1QhLer=lx3UFsD{hPj6T5{Imh0BN`Z|A;Aug4Mn98@zooHEyqX{ zidH!t6Fbbz%_&Z$)6-GoG1;nLF+KXjCcFKGqC%%@#k ze%js5jUc$zE=NPDy`*eyWr=mXZrs9sCZ6wd&eIRebtEKil_te0C)43NpSzJtC@U+c z+YE80I;P8PB2%QqPaBPSr}w#ph=@h75@BvC%^w}tzGa)r$2JObm|KJ;JRA5rQrg(a zisk~pVOM$wo8(i4-9WOd!J~v){-T3!kAjP%%nzTxeA(b!&c7*jffxKvkxUZdqOkk+ z$w>4WE8Q%#+U1VDcs3{Bu-imYza-t-dXRq8!q>r39ToGq8UtP3xA06Ris^~Iv>gkX zarfw&dWTlqA3|7l^mz%DKlM1iOqnF5Rgi%=jDFMNMtXV}JZ&a5%0P@q_GyTJVneL- zM(Fof)_Y6XIoEC3a=)4y15*1K9z~WyW~=<`QeGKpBZGr37h)u(rI(|59jrXFpJV&> zC8S*kq-sR6x6eMFYHzpQe~|moS*Rp07^ynn8I`-Ex8l3K#9-4O zkAGc$gSapVqg>rwFz4O_T(Mli^X%ZUnwlD=JSR~#A3Ifnj(;>HDsKi4)hVj_S#vQE zHzup{Zv=g>JlA=n{thx4mt0PABZlEK2}4=pV%I1y=pau5jeNp#e}*uQlL_^!8A@BLsCPBD#rF{Xf@?P~^7N9|L#Vzn=H7NIHznp4#Gcb?|)}uwp zl;_l))ESe@aU~D%eR1)sn3x!)R6}O5>8@?rW3`t4Libn?+swzRakK;PD| zH1vGO$9=HkU{Og4^#{ijdQ~5qG*<1{5t}OeGAVa!9@OLX@iGG=CWq1?>(J2(bO&=> zwU4_tu?Sh5dc2`-g4w#Ig~qkv(7K?Z5nm6xN43`|_}AyuQ+&~^!k2|nJ86jZ+;SXL zp9Vp)!4PH0JFu3qyO0Qr-Vox*t=~9nYb3s^bW?~7H)o{}33{1dOqK3ICu0e~%;PZnZreIi3k-1a2}9PY<_ZDLQd=@%2nhD=ksJ|JB5TCZM{e<`_>P?caNo=mB&iy$@^i;cfxb z_vK&2k*q=0r=>0Z{oe22OAv1{v#Av@3A$B8W+qu7ckbEas<3+rp`@(5d<>9$%}@8s zJ(BoCR|SUgmL%s*z;g_6ry)v9OHo{E^&@R_U~D404-7>mXZ@W%bA~egU#YaW-;iZ1 zDVb6=gVP~IZ*uK04YF15K|Y)I{Ma?Qbh53ebsK={##GZYXV3oe>EfQ&?rxHFdVN>j zwJn@|DZ$0XwbjPzfSU81rHI|=GWgbDec3eeNdTP0v$KEm&pITZ4P=Gtw6MYtfnec|;{!&Wa!ujUL}Y4LmBK~ci(B1ztT`BL=x;&0jAeONZu zZl`^lk=%KMT7Q^hF1p`uaN42O7XEHp;=t9nM5vMazuRbv*4>pvn|a4~d~{S2kqgLc zTMz6^)Rgtk^vBF5z+wCb3Frz9^%%$tAV%EKLcKuYZg=ji=mxxv$j-iUs;;(nv%&x} zZNN8gK`v^5@4z5t1Ai3ir3AD`wB~!25|5rzyfnXFVROAWh1$I}?42--P@04Z=PdXx z)LSslgP1pc6@8&Z*vZIaAZ*}zsf%bz7Bf7tcVj+exKmNi54=Y@%eL|JGtDGVY!eoq z3966kuS=nai+M4)ZJX{FfxhT8;ew@s&Rn4k<}(s;Sh8+|0weQ_apPkaIS5g2Rz4b}d&t zbGhm9sT?1iXmWJRmMvTG!7%PTefg3O&nVr12(pGQqoWoaMqR`HznwBi+e%N%)alqW zH~a(XA8_GElhx4@9NV1o#c_wAATx>8s#vx@VQ@T@ztW3KFrI_&COd}y2tESnfp1j z*<1PYWzrHvNAU{?po0ZqsI9QgUs3HHF8}IRX}?8~%I6pYIFnkdZeO4OWgcsMCT(E( zV_%G43{AfF57=&LXk;|h-70sPMXoVyceWFG?E(X%lIJPTYE`G%i$%YLameon1u`_) zdOS{3hW{Wx*t@8a!vyBlZbFK_{HxPQaA(J=3)Sy!`WtOzUFjhE| ztZ%)=OevKtCyb19Ogdly@ar#C>mP)&8(9{AqWxec@B%2;;05et+dDdjcj$3OSdmT| zy4Fh%Q0hc+M%FN%4{Vdaa@WHXNEF}a$;)F^{X(P*$ITBe9D1@Uj-Ktu*cOsa;N5ja z0-VDy>VTi|@0dKhBOxm|Uw3I}p-#z@nh)DJjsxMf;h9=r38Do(Mv$))#%Ls2_Ff`f zFpToNBRo|36%|8Y=}zN=STyi3!jytuYoM*VTYhpTC~q6)T@-zuORNm~S8t zo02udO$)GnXj>N(zfm_xToQG!Uo`R3OwOQJ=<~;q75Y`>cKEhsd*}vtMBuJQTA7x> zO%8(|9RZF1yrSY#^l?v3=^Pv@?MUSwu=Q`1&gkSx$@hf~OA%cnpFGmDVhd+OqNt^? z_TrMavGEDt|7e!I3ZDEi<00C3`6~#A-L>+{n<~!6sle7CTMukqgTH=uZl_yzZ9x_W z7u(2;+$xs36U3*T8tYtH0+4|Rj&OnV<~{UQ5_-W1(9_#{{?a8n@Z?0|n>TBFfMLiz zOK^-jr6KR&c3881{bJZVV-)T|(4!@w7lFTyt2sGhhrtpgqm6NP2aM_uJqifWAM*~P_*H2tB^8IYTlVmeh^9WyvS zUXVRCaut@dUzGH^TUQ~DE-zh|sL@78kT5sNtmd?hogIuSs|>!^wM=#v(j4N+nfkl6 zz{=t=^#IFE-zF@z2Xw|+aB{Ae=op-X)d-#7>z#(F>A_2{m2N_DUUan0 zlGkDK21a$zUX9D#$CnfY!I-18hoIk~-aAA9T!~@n<`t-0ZPk>{44J)hHQUTgnUi zGaw+~FBsL}Jgf#AV;baJzkk04WktYyru*b^R5~cp%k+NMy6^OYK2Z(E^G6@o76i{r z3zde8`+$M$D{JzBazW4R6JwyVRQGR+KUgD^#Dl4i54KXv`zpj2jHqI*z!~rz!Q0 z0b^q{48(sI%Cu5DP(G8xm4T0Wg6ZWLF`)U+BjL~|-Kq7>uzizHWb9J?5&i9)ENzW(yV|Gtn` z)ICj_17@;Z3gFJjENp4AVL5^8db^G!#P^h;GYh}&5Ru%3S!Sf4hXd1p7gS7y+nWQ@ zo)`}&I4_*(9O|G_YOM^~L?7Fq>om1H^52o=`9psr%M057B+Gwt&}1pP@lz8$;@mX* z6K#F`RZI19Y1iZHvi|guJ_<`5S-%PaL3vy?6cE(U`THo!)i2>0_^FS3bmjf| zrhii7e@BW?}%&PF5%)C!VqM75lq zQC~O-&g|aY{mY{xa}&*NATA`ZK+R5F8JW&jfw>anN>;)*4qAM+jeSAadJFDDKueIi zYTTZ_0GCtmL3Bfbx(yXFRX`0Et(KOnMGn^=vx;oluwerMdDCK45N+7}t9giw1>S?5JMnurN1~n4C;oKDi`*YHy~$zyGDLNWkf}V=n}-$?vg* zfmp)YMY#M80^YVGH$H$x1xEnp#q}j zyMt+_2q56-GMIQHM96UkJlLnso?T1;+mXnWuU7_P4#xGH+{9;F8SG}vEG)=fIE2R+ zM@#(s zGHQ6n}waQ1P{SSqabt$GACkwZj;1q48Mceenhb-|L_s4WT#6XU2uZU0q7 zjoW{7$&w}H084`U)AjZz60<)&y6P9T`P1-k1A1L@gwoCWv8Lvtfo*;j7Fx^F@v0Fr zEV&7J0t`n&Ba+}>S6)u|omvch;D35M3#?jQ4QUCbvsWe+r>zbWgQRzuGhG{ey;}cedNaBY)*5w9-A~#b7uELqi2V<*BLElcWUC zny+f;vuYF6ed;3B27dU-TMHp8a6=TjcMDv#>xb2xrnE3gZ#m)n@F6Wl#pqlxg+kc` ziwLoG+qUDn?7G?R+puI4=M)vWe=J$Nc&n(W>dw0A{gw#7sDo3n(Q}OAF}Ul|3capoJDeeI51!$oMz9iR9#^GC$ng}^hxKH|IYMJ zpy<+3GXC%VU!+M9>v>#B8yOcL9v-#`IP()3nS8dlo0+Q1ThRKkEGA9J=G?*@1Bm#y z=%n372b?B^TP;;pLoa=WPTXn67;lsJN|@tx)u8Iz=bP}uDU{z_#tuEKS}+&f2S#Qdhb6nOi(dw}yuhW47jGANoI;HvKLBWeG##~xFHAAuyQ>%_Q^FaD z=X1yd-aNLiK(}uu(j>cJ@|VGz+cW3?vMzC6Nx%s^4nGkzE*QcQh%g)#^fUd3q&e>- zIyY70pxx+O<_+$S6G1d=&D12Vb5iomJV$P_bIZM1s*U7C8bTkYn1xmf*%Wel(VPI z7JlYI<3(seRFZ8Fk5%WbgY#-~x;Fv* z&>aK;b;r`skdkXU@ZkHgOgNE942WV^R9yTA;H#GyH?M3v^^+Cr!0v*1C(8I#O|1@T z#RqeieP6p!PwdCzM^19842P7Z-L%2!^ zwG?6yb|L};M|y!h0oZzqvrOCQaD+D&<{g2d4IGts@7(zoL3%>BY!L3L3%&c-pxPCL ztrc}eI8ueLzmYYYwqW7s`BBM%7YdPM25|bCPZWD6^42giyF%SaV%K7rIX}K^_3GR3 z;h7Wwm0u)eH2f8*uRFWzz4uUTMf*)R;vj#R#}o1B!7n;HD(i4@8bqOT!KZota; zPC%6oD4^(U)w>^g9yT;uHTe}hU4T38@pqvUIx~nm&MWl)5;o(9MB|`xfU7R-J)f|$ z(BZlmc!IT+GG~shs;MuFI$V$|UMAGkAsZsVF?ty^36r|R`67Fa{v@e=;wbVh)%yA4 zz438zA3PYh5d@sVDxL7XZTHN91FC4{vSmn-~YCo+hX8yQdhvh@L1opDeK^&+E;0bIumT81I_H=Z1XUIZ9Mfa zF7~lfNoJMOO>vZc8}FM^!|Pi1Ox(teUaBf=nTi>ae+@~tOHfgCkPy~ylMCj!!o0EQ zZ?>?2tUGInHs`#s+qelY$jg)dSBKFGDRNUkp&U6*URF*lhIf#L$7aVgOgw7ud%kRP z)sZEGjlsbUACDhm&19oB{%t&Odc@8OZ!HbkOHps_c(tvW{m*#hpCwb!*aEe{)ikAU2P9l30zw`B3Z6p+4WxP#V(&)S0 zbs)enR}%T|h?m*{MN{zq1oi%@kN%x$c5IP3de-7>)~C*n4zp$xtSJ#}WEB#y=<+?* zUcK3p+sBQhtHYK6N>!GZmuoZ2xV~I@68m(4`UWP~XM%RT&)dsh>xz5IT>Fdtt)0C~ zQU2vcqd2#3e^KM)RpIa&6K8sSkC41~=31SWm_pJMTJL=b85Oh`Z4hcg>(xOGN2QYH zwrXY^6RZBen0^-%P?$N8oA9y`0Hfj-+m_o7B4^%&r44A>{V;lZ(5987uL=9 zLudi8p#nJxoTTxFhs`(!KsF9ejJPL!V+!Uss?|@JdY$_x&zpDxczhy{{QiLCF#lSA zQD-5K-4i-=&$$5;TlPOSzRkpc^zho;&pgwtRG;pk-J^hwxHX$*Z4uWc2%x$z^t+2ukj%bK4B_27--$4oI*uS5FAoEMmBi#0{D4fshlX7&-DK(9)(Z^)v zwT0s1O%Zcr(!E0+!~6%al?j>rH`zj73e}r@gVoP|N8ceTlZj-)#aySXH7##$AChrM z9^ZaDuSZ&8U_5H+Z}mnAd~L52>dU?ME@?(19{*w`xBWo;{i<4*2+rMBE6cr~K07_R znP=0=35A-5C|(`961n!|f!g{!m~u#eu)%wzlE+dpa7?m#11=r460F`V)Ho6u5o8<+ z&Lzg-zvZ4*L)S)c@=VsCPwH#F(<4&-Y8Co$QNS2k^x^{A@)Z#XnE7RjZoocS(FqCe zZ32Z>;fe;--qWN3z>=x-t$db^?3kpithX<;<2&wA?!NKS(JpXKVb9JRl+oS9Td59L z9OtvM=V6CRC1dHARRey-(&@Zn{*q(TGYS;^V7X%0`w&l*;Os)0^~Af2bxU&##kudE zi;H8TTHR0WrABHaYWG%}NKl z?VUn`nuGV}nZLPqA|dzmh!^6>{`UPD+|t9KWhVDgX^E!^k8gI$Od+@vmf+C7XR0Y; z;KhZQA2`!x{0n9L2A}t5jlMCgPuWGKQuU0DWglRV4gNsq_Tky9-3)IqJ{WO%&ilD( zx>1h%)v^UjN=m+B!W!@OBHt^{b7MK1T1?7+hCP7FtxH{BHb`weoLl^+CoA?bElYPPc_0Nl<~<=dlFvH zIUtX#Gd34%;Df!!s;FYtl!a|RLc9}A)+TVD4nGW^<;t6`NwAtxA&BwyGvjVUi56n6VN^u9D%J?e`g1CL#rml`@4w~?YV3@t zM)o#b1d+{(b5mJSk8rmyot^SSWkQlUN4W^jNE_#N!;t*@`Ypsv0UkQ(aTFzbL!vh4SPrNlU$cFV*; z6VEaJbps|AgYTAhJ`t?DUh)0}rPC_pom%=04cXZrcbV%1c%ozk;!^A?RCXL!ImR%iO)2XcKSn7z*%Z+b;`s(P0#l~SkQ zP!@JrxGlJ#lPPcVM40pZRETxIE%{#L-`(X7`$C<1bt(2M=Hfo_k_q^h%O%};cGz8P^jS(u%8y$s zd5X}oWHydx_Qrp%505LMWf1X2*WGb%PyDF|p2B)p$O%^27(XHX0JBH5>%Uf6)#suQ z(vcGuHmHsNh|w*)7}Hb#29qsVO#fian8>vsq1rZ=h8T48r8qjX>dc7k2s?O?e68x| z{?o^gcRG6-HD(@W7ww2tc3kKI8?ytpnBv<^s<1iN{kXHmq)0Jgvd6eg5mF1i$lzOJ z+U)%W^u(xmT6tgOG-s2w4qE68s49Hj#nOW9)$;mf;ey@8TpxezdT5T*XO(3HDea|P zco@lQ#+XEx@hwyc$~Tvn`&P+{?~A<@cUoRvKCFIFL2T%*Twlsuex8Fs^Za;PmZB(-?p?)^f5ef)ogih zru-Yj5>&hI!!|M}_jW*2NJwbaSV8AM0VVPtWDa6pqE&ZSkB znl*+``fV}J=0Mbj+|Gk{IDebL=TgC$kSk^%x7$M6=e7OxgWqw>IaO6v(13aMZDFYc z32mdJ*p}S!4n3=i{kNv3Fbpyh#*R4)vc3I14mlfgScQr5g>Mqc4E1bO6aFTCOx4EF zqfS01hnEfQxD_!&%>o0a{nZyfCm56^sATMxesk@^Jr?_KNsY!?7(TU%T}(vUZ012j zmgktqHXnpDkH5J(e~VnL8mKNJmpd<13d5p#ovQVAX*Jt+f3^j+ z&4q`xfng|xn3-oo?Nkj-$jr=4NgJ3Qd+KEBYZMDsJ$UObt8sGGZw{ zF!KBQZmX|vnEnxXXl}gOIqP%#mN2_HHfmNtV+~aZ)rInOK(7Hn%qnOs7rXmpy`Cu& z7kyw}Di&2}>d->VUId4tm2d%<@0ETHGT?%8z%+dueVNY07gj*%5L?V`2}}4Hm+M|M=Sh+9P6Vrcd3^ zjT8hmrd^|!)sDYAMOTLLd`+v^uPq^5ZY{GRh@BoTOaI^e@l^g%2A4ErjKZK5T}%+u zK`#5NQC#WlmVrPZXw;*<%8XdLI0)hZ@r{;&AeJx=62!SRH2?d@|2+@?dlUTc!|?yd zN}#u?izd+k8;&slT$ntv<6P9S@1DAsE891V5t*M08J%C+hQTf24PO-72!gPCC;C5q zTz%CRcGR{GY{}&=Oj5)you`d6r(TAJS<5yHb*2mmMmZ)#nXgDpGb^#_Z7Mz-Sw|Dj zg^!yIppz^MsmkpP85iwb@6u#e@@3?k1nqylZu&+na+>l9h*F6|;_zim{UiT9m#mbX zMm-`8#KqJ5-?2D<8=9h40*F*IrmJ%kjOxZx5)P*h1eQTlg;7s za)O7?3@Fw28ZGpH%KOYMH~FJMXx_VX3Z0<+<(bW|>85j1(!vy7avDV^zCDx+osGdy zhD?53XWqV$%L~*YO*da($$oG7M;Tu1gkc)w*2kV1MV*h-GiDec+JUJ~ zeKn~VxLjN|KcwS$Bw#A7WFXnG0_L9*+a){Cp*J+nmMDPzmGZW^?X6>a5nx+9JehhJUVhDG4%^T{a1q(}_Feg*$5IX%}W~Q<) z=KHk?R)@iN8QP_Xl~Zny1Vd>?St=pTkUc>!ubIG5nS zw~F_ z9-Df#nHBuOR|!C*m4(6YIu2En4lQ%+U1n-DJM-hxzCAIB&)6|wTW0^jLN+}VaD#-$ zRw~wtb#DFfQKG61OM|a1n*YchUVN~SrK&wcQ_SjYn8WbL`Zly^vs7E>VB55k&lu}8 zWAEWwi7-n}8_?Nc<;cQl&JLOtEdbxs(?% z>?@`pHkkCJn|y2LpKsj)$g72!?hm)8?eC6M*0IZyMcJFo6*rCd&o zfj|2IiE-1Y2HnyS3+)HjhaY{k{n09Am$O$IDBrBUJ4y>PN2g$L2#-1<;xFg$eVzSx ztyQNP;_VM8s#;zI-Xk#s81|po4b% zJ%7O#7uu%UT)Ky+Up&A-{_WCY!+t)`b8^J6y9w;OG%nKAnbe8&Sn_WtQGYF8Ib zFCSqNOa^(_=&jjgG%{R%oIwjo+6>KZR^`l;3HEr_VnmrUXD2$bm5;o-dUI4ExU@3- z&x}PlF`9rqNIL+fiwec(hteqFxY2WRQW;XNX}9DJ-roP?Rc!nxjInxPQPAC|oIG-S zWnQ^f4)z<@#+s2a5H+ENZJcNiRK9D&&zp+Pb<1`7IookDh!5XjbL^{_tx=!5NX|j4 ztyQL&U3_pI2}Hs1bj>WoJnX>0YWjl_n=+l+Sgh^~n9v`@#Jh~7ufX${>hMgSrDhbE zdMRhyV3}$25pSZVVmT;<6!VZPZGVO+D=RBSi-b8wSzz|ZCTT(duIi(DFJHdQXE)ka z{N(VSy!k-&yd0)WiD6CQg{;osdOrsw6h&)FjivjrmhB<5(z_z=o7MEi4r9gUknS|{ zM>4L|AR#BUDl;o{hlRB$CNVia-M~ldJRBuk`Z-v=R9PqVqJ2L`C|yI&!%AhMalpws zcVTWor!wfF86NT<*wk&H>>2&$J@};2`%%`m#&GgteLvwXK0k?YnGTq*N(H0SxNf%w z_D090#cG*gAL)N!wl8e<`)Hpb5QoLj(mxa8=nw3zIxsvRENpGev+${X>Rl!KbqtAQ zK6p)XqoYZM?2KO6SM0X7LkCMcbAv$Y=T(Ds+K&5}RBg`F3w1p`Y;^m#AU5rvV8;#EVv+)5r6S?hfwThjwriPkLGl2soZdDEk))1SNgj36! zs_(RwO{?2VUGChMo_3}A8}lIR@p(?x?o*AzR`c`4@2;9muk4b`5;n{91TBy;B#y zZX9AA5Sl(i3AHv{h{TSaBc(yv^9(LL>e|VN^&C?zeX>vC%UtfO8=NjY-~6S9($Un^ zlCbbNkpJ6bEc=#DYbl!U1O6iTW|>YOK`kF>NiDR0Fzei;tixv-QU`Z5K}esFm5i6T Hdh7oIh9&w? literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref34.png b/doc/salome/gui/GUI/images/pref34.png new file mode 100755 index 0000000000000000000000000000000000000000..5072c62b6d6002615fd30655a5beab84d28b1e91 GIT binary patch literal 51344 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref37.png b/doc/salome/gui/GUI/images/pref37.png new file mode 100755 index 0000000000000000000000000000000000000000..1d4d082fe64b111e60131ed69b037483dc65b027 GIT binary patch literal 35733 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref38.png b/doc/salome/gui/GUI/images/pref38.png new file mode 100755 index 0000000000000000000000000000000000000000..5c8d31ce358d299302468a931addc424d9197182 GIT binary patch literal 34467 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/pref39.png b/doc/salome/gui/GUI/images/pref39.png new file mode 100755 index 0000000000000000000000000000000000000000..878a526071290bc31b9c28b9eaacc5de32de6ba9 GIT binary patch literal 22668 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/productpage.png b/doc/salome/gui/GUI/images/productpage.png new file mode 100644 index 0000000000000000000000000000000000000000..bc05c8bfa14ce25c99dbe3ce28e8b3d0b74b0ae7 GIT binary patch literal 22732 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/productpage2.png b/doc/salome/gui/GUI/images/productpage2.png new file mode 100644 index 0000000000000000000000000000000000000000..998d286e3d3140965394077066921a66dfa76d3e GIT binary patch literal 23289 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 W+AoPXc3&_mL7>-+uhv|)i~cXc^`Arl literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/progresspage.png b/doc/salome/gui/GUI/images/progresspage.png new file mode 100644 index 0000000000000000000000000000000000000000..0779fccafc0a18b687520a10630d0678618b942f GIT binary patch literal 18238 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

It seems javascript is disabled in your browser, please enable it and reload again, or click here to view without javascript

- - - diff --git a/doc/salome/gui/GUI/index_csh.htm b/doc/salome/gui/GUI/index_csh.htm deleted file mode 100755 index ba099aa30..000000000 --- a/doc/salome/gui/GUI/index_csh.htm +++ /dev/null @@ -1,106 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/index_rhc.htm b/doc/salome/gui/GUI/index_rhc.htm deleted file mode 100755 index 6c22f70fc..000000000 --- a/doc/salome/gui/GUI/index_rhc.htm +++ /dev/null @@ -1,106 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/input/about_salome.doc b/doc/salome/gui/GUI/input/about_salome.doc new file mode 100644 index 000000000..4f132abae --- /dev/null +++ b/doc/salome/gui/GUI/input/about_salome.doc @@ -0,0 +1,12 @@ +/*! + +\page about_salome_page About SALOME + +
    +
  • \subpage intro_to_salome_page
  • +
  • \subpage salome_architecture_page
  • +
  • \subpage installing_salome_page "Installing SALOME"
  • +
  • \subpage running_salome_page
  • +
+ +*/ \ No newline at end of file diff --git a/doc/salome/gui/GUI/input/creating_new_study.doc b/doc/salome/gui/GUI/input/creating_new_study.doc new file mode 100644 index 000000000..3c4d0e3cc --- /dev/null +++ b/doc/salome/gui/GUI/input/creating_new_study.doc @@ -0,0 +1,36 @@ +/*! + +\page creating_new_study_page Creating a new study + +Study is a document within GUI, an abstraction layer between actual +document data (probably, remote data available through CORBA) and data +presentation (in the Object Browser). It contains a tree of Data +Object instances. + +To create a new study: + +\par +From the main menu select File > New or in the standard toolbar +click "New document" button. + +\image html newsticn.jpg ""New document" button" + +Your study will be created with default name \b Study1. In SALOME you +can create several studies. + +In addition to it, you can create several windows with different +activated viewers (VTK, OCC, Plot2d) for each study. + +To create a new window for a definite study: +
    +
  1. Make your study \b active: maximize it (if it minimized) or click on +the top control zone of the study window. +
  2. +
  3. \n From the main menu select Window > New Window and from the submenu +choose the viewer, which will be activated in a new window. +
  4. +
+ +The window for your study will be created with a default name \b Study1. + +*/ \ No newline at end of file diff --git a/doc/salome/gui/GUI/input/displaying_studies.doc b/doc/salome/gui/GUI/input/displaying_studies.doc new file mode 100644 index 000000000..b45a8ed50 --- /dev/null +++ b/doc/salome/gui/GUI/input/displaying_studies.doc @@ -0,0 +1,30 @@ +/*! + +\page displaying_studies_page Displaying studies + +Starting from SALOME version 3.0.0. you are able to work in a +multi-desktop environment, which means that you can open as many +studies as you need, place them wherever you wish on the desktop, in +brief, work with Salome Platform like with a normal Windows +application. +\n Such windows as Object Browser and Python Console are dockable and +also can be placed at any part of the desktop. +\n Only one study window in representation area can be active. You can +change their size and move any windows between representation +areas. When an area becomes empty, it is not displayed. +\n All windows are placed inside tabs where you can switch between +them. If there are several windows (viewers) in your current study and +you want to display more then one at the same time, you can split +representation area into two parts, in horizontal or vertical +direction, to create two representation areas with windows be placed +in them. To do this, right-click on the tab and select Split +Vertically or Split Horizontally. + +For example, on this screen-shot the active zone has been split +horizontally to be able to work with OCC and VTK viewers +simultaneously, the one of the windows was split again, at this time +vertically to see Plot 2d graphs. + +\image html neo-view2.png + +*/ \ No newline at end of file diff --git a/doc/salome/gui/GUI/input/editing_studies.doc b/doc/salome/gui/GUI/input/editing_studies.doc new file mode 100644 index 000000000..cafc03eed --- /dev/null +++ b/doc/salome/gui/GUI/input/editing_studies.doc @@ -0,0 +1,19 @@ +/*! + +\page editing_studies_page Editing studies + +\b SALOME has \b Copy/Paste functionality allowing to edit your study +within a definite component: + +To copy/paste a definite object: +\par +In the main toolbar click "Copy"/"Paste" button or from the main menu +choose Edit > Copy/Paste option. + +\image html copy-paste.jpg ""Copy" and "Paste" buttons" + +\n The availability of \b Copy/Paste operations depends on the module and +the nature of an operation or an object, so if the module does not +provide this functionality, it won't be available. + +*/ \ No newline at end of file diff --git a/doc/salome/gui/GUI/input/geometry_preferences.doc b/doc/salome/gui/GUI/input/geometry_preferences.doc new file mode 100644 index 000000000..651ef2e7e --- /dev/null +++ b/doc/salome/gui/GUI/input/geometry_preferences.doc @@ -0,0 +1,47 @@ +/*! + +\page geometry_preferences_page Geometry preferences + +In the \b Geometry module you can set preferences for visualisation of +geometrical figures which can be used in later sessions with this +module. + +\image html pref15.png + +\par +For all color definitions click on the respective line to access to +the \ref select_color_and_font_page "Select Color" dialog box. + +
    +
  • General
  • +
      +
    • Default Display Mode - allows to choose between wireframe +or shading.
    • +
    • Default Shading Color - allows to select default shading +color.
    • +
    • Default Wireframe Color - allows to select default +wireframe color (to be applied to any lines not being free boundaries +or isolated lines).
    • +
    • Color of free boundaries - allows to select default color for free boundaries.
    • +
    • Color of edges, vectors and wires - allows to select +default color for edges, vectors and wires (isolated lines).
    • +
    • Color of points - allows to select default color for +vertices.
    • +
    • Color of isolines - allows to select default color for +isolines.
    • +
    • Step Value for Spin Boxes - allows to define the increment +of values set in spin boxes.
    • +
    +
+ +
    +
  • Marker of Points
  • +
      +
    • Type - allows to select the symbol for representation of +points (cross, asterisk, etc.).
    • +
    • Size - allows to define the size of the marker from 1 +(smallest) to 7 (largest).
    • +
    +
+ +*/ \ No newline at end of file diff --git a/doc/salome/gui/GUI/input/getting_started.doc b/doc/salome/gui/GUI/input/getting_started.doc new file mode 100644 index 000000000..a06873543 --- /dev/null +++ b/doc/salome/gui/GUI/input/getting_started.doc @@ -0,0 +1,20 @@ +/*! + +\page getting_started_page Getting started + +When you start the SALOME Platform, the following initial desktop window appears: + +\image html view2.png + +    In general, the SALOME platform is destined +for performance of different numerical calculations and visualization +of the resulting data. For that purpose, in the SALOME environment the +following notion is used - \b Study. +
Study represents a working document in which you can realize all +operations connected with the SALOME functionality. +
SALOME is a multi-study platform. It means that simultaneously you can +work with several studies. + +\note To proceed working in SALOME you should create or open a new study. + +*/ \ No newline at end of file diff --git a/doc/salome/gui/GUI/input/gui_module_chapter.doc b/doc/salome/gui/GUI/input/gui_module_chapter.doc new file mode 100644 index 000000000..3d4f43ce0 --- /dev/null +++ b/doc/salome/gui/GUI/input/gui_module_chapter.doc @@ -0,0 +1,39 @@ +/*! + +\page gui_module_page GUI module + +
    +
  • \subpage introduction_to_gui_page
  • +
  • \subpage getting_started_page
  • +
  • \subpage salome_desktop_page
  • +
  • \subpage study_management_page
  • +
      +
    • \ref creating_new_study_page
    • +
    • \ref opening_studies_page
    • +
    • \ref saving_and_closing_studies_page
    • +
    • \ref editing_studies_page
    • +
    • \ref displaying_studies_page
    • +
    • \ref working_with_python_scripts_page
    • +
    • \ref setting_study_properties_page
    • +
    +
  • \subpage using_object_browser_page
  • +
  • \subpage using_registry_tool_page
  • +
  • \subpage using_catalog_generator_page "Using Catalog Generator"
  • +
  • \subpage viewers_page
  • +
      +
    • \ref occ_3d_viewer_page
    • +
    • \ref vtk_3d_viewer_page
    • +
    • \ref plot2d_viewer_page
    • +
    +
  • \subpage setting_preferences_page
  • +
      +
    • \ref setting_preferences_subpage
    • +
    • \ref select_color_and_font_page
    • +
    • \ref salome_preferences_page
    • +
    • \ref geometry_preferences_page
    • +
    • \ref mesh_preferences_page
    • +
    • \ref postpro_preferences_page
    • +
    +
+ +*/ diff --git a/doc/salome/gui/GUI/input/index.doc b/doc/salome/gui/GUI/input/index.doc new file mode 100644 index 000000000..1f340a405 --- /dev/null +++ b/doc/salome/gui/GUI/input/index.doc @@ -0,0 +1,51 @@ +/*! + +\mainpage GUI Module Reference Documentation + +
    +
  • \subpage introduction_page
  • +
  • \subpage about_salome_page
  • +
      +
    • \ref intro_to_salome_page
    • +
    • \ref salome_architecture_page
    • +
    • \ref installing_salome_page
    • +
    • \ref running_salome_page
    • +
    +
  • \subpage gui_module_page "GUI module"
  • +
      +
    • \ref introduction_to_gui_page
    • +
    • \ref getting_started_page
    • +
    • \ref salome_desktop_page
    • +
    • \ref study_management_page
    • +
        +
      • \ref creating_new_study_page
      • +
      • \ref opening_studies_page
      • +
      • \ref saving_and_closing_studies_page
      • +
      • \ref editing_studies_page
      • +
      • \ref displaying_studies_page
      • +
      • \ref working_with_python_scripts_page
      • +
      • \ref setting_study_properties_page
      • +
      +
    +
  • \ref using_object_browser_page
  • +
  • \ref using_registry_tool_page
  • +
  • \ref using_catalog_generator_page "Using Catalog Generator"
  • +
  • \ref viewers_page
  • +
      +
    • \ref occ_3d_viewer_page
    • +
    • \ref vtk_3d_viewer_page
    • +
    • \ref plot2d_viewer_page
    • +
    +
  • \ref setting_preferences_page
  • +
      +
    • \ref setting_preferences_subpage
    • +
    • \ref select_color_and_font_page
    • +
    • \ref salome_preferences_page
    • +
    • \ref geometry_preferences_page
    • +
    • \ref mesh_preferences_page
    • +
    • \ref postpro_preferences_page
    • +
    +
+ + +*/ diff --git a/doc/salome/gui/GUI/input/installing_salome.doc b/doc/salome/gui/GUI/input/installing_salome.doc new file mode 100644 index 000000000..e0f26afe6 --- /dev/null +++ b/doc/salome/gui/GUI/input/installing_salome.doc @@ -0,0 +1,961 @@ +/*! + +\page installing_salome_page SALOME Installation Wizard Help + +
+
    +
  • \ref installing_products "Installing products with the Installation Wizard" +
      +
    • \ref gui_mode_install "GUI mode" +
    • \ref batch_mode_install "Batch mode" +
    • \ref environment_files "Environment files" +
    +
  • \ref notes_on_check "Notes on check products version procedure" +
  • \ref pick_up_env "Pick up the environment" +
  • \ref modifying_xml "Modifying XML configuration file" +
  • \ref installation_scripts "Implementing installation scripts for the new products" +
  • \ref finish_buttons "Customizing Readme page buttons" +
+
+\anchor installing_products +

Installing products with the Installation Wizard

+ +The Installation Wizard can be launched in two modes: \b GUI and \b +batch. +
The root directory of the Installation Wizard contains Python +script \b runInstall. To run the Installation Wizard just type \b runInstall. +in the terminal window: +

[ python ] \b runInstall [options] + +Without options this script will launch the SALOME Installation +Wizard in the default mode (GUI). \n The default installation settings +can be overridden by using command line options. Each option has a +short and a long notation: + +-g / --gui +\par +Runs the Installation Wizard in the GUI mode (this is the default +mode). + +-b / --batch +\par +Runs the Installation Wizard in the terminal mode. + +-f FILE / --file=FILE +\par +The XML configuration file to be used by the Installation Wizard. If +this option is not used then the installation script tries to define +the \e Linux version and use the corresponding XML file if it exists. For +examle, for Linux Mandrake 10.1 the config_Mandrake_10.1.xml file +will be used by default. If no appropriate file is found, the file +config.xml will be used. This file refers to the basic target platform +which is Linux Mandrake 10.1 for SALOME 3.0 and newer. If config.xml +file is not found either, a warning message box is shown (in GUI mode) +or printed to the console (in batch mode) and the Installation Wizard +quits. + +-d DIR / --target=DIR +\par +The target directory SALOME platform is to be installed to. +If used, this option overrides the default target directory, given in +the configuration XML file (usually ${HOME}/salome_\, +see \ref modifying_xml "here" for more details). + +-t DIR / --tmp=DIR +\par +The directory, which should be used for temporary files. If given, +this option overrides the default temporary directory, given in the +configuration xml file (usually \b /tmp, see \ref modifying_xml "here" +for more information). + +-a / --all-from-sources +\par +Forces all the products to be installed from sources (including all +SALOME modules). If this option is used, all default installation +modes for all products are ignored. +\n This option is helpful when the user wants to install SALOME on the +platform which is not officially supported. In this case, the user can +try to run the SALOME Installation Wizard with the \b -a option in order +to build all the products from sources. +\n Note, that this is a time-consuming operation which can take +more than 24 hours depending on the computer. + +-h / --help +\par +Prints help information on the Installation Wizard's use. + +-v / --version +\par +Prints version information (\b Note: this is the Installation Wizard's +version number, not the number of SALOME platform version). + +The installation procedure supports different \em Linux platforms and +installs various installation 3d-party prerequisite products which are +required by SALOME platform. As it was mentioned above, the basic +target platform for SALOME 3.0 and newer is Linux Mandrake 10.1. +Use of configuration XML files gives a flexible way to modify the list +of products to be installed by the Installation Wizard without +changing the program source code. Just create your own XML +configuration file and implement installation scripts for the +prerequisite products you need and then use this XML file with the +Installation Wizard. This can be done, for example, for some Linux +platform which is not supported directly by the Installation +Wizard. See \ref modifying_xml "Modifying XML configuration file" and +\ref installation_scripts "Implementing installation scripts for the new products" +sections for more information. + +
+\anchor gui_mode_install +

GUI mode

+ +The Installation Wizard GUI has been developed using +Trolltech's Qt 3.0.5 toolkit. After launching the Installation +Wizard in the GUI mode the wizard window is shown to the user. This +wizard guides the user through several subsequent pages. To navigate +between the pages use \em "Next" and \em "Back" buttons in the lower +part of the wizard window. The \em "Cancel" button closes the wizard +window and quits the installation procedure after the user's +confirmation. The \em "Help" button opens an additional window to show +help information. + +The first \em "Introduction" page is shown in \ref figure_1 "Figure 1". +Skip this page by clicking \em "Next": + +\anchor figure_1 +\image html intropage.png +\n
Figure 1: "Introduction" page
+ +In the second page you are proposed to enter the target directory +where the SALOME platform should be installed to. You can also click +"Browse..." and choose the destination folder using the standard +browse directory dialog box. +\n If the directory you want to install products to does not exist you +are prompted to confirm directory creation. If you type a wrong +directory path, or if you do not have write permissions +for the directory you use, the corresponding message box is shown. + +You can also change the temporary directory (which is used to store +temporary files required for the installation). +\n In the bottom part of the window the total disk space required for +the installation and for the temporary files is displayed (see below +for more details). + +In the GUI mode the Installation Wizard provides two different options +to install the SALOME platform: \b basic (default option) and +\b advanced. In the \b basic mode the user should enter the target +installation directory and temporary folder. All other installation +options are taken from the XML configuration file (see \ref figure_2 "Figure 2"): + +\anchor figure_2 +\image html productpage1.png +\n
Figure 2: "Installation settings"
+ +In addition, you have a choice to use "Install all products from +sources" check box. If this option is turned on, all the products will +be installed from the sources (using their own build procedures). This +check box corresponds to the --all-from-sources (-a) option of +the \b runInstall script (see \ref installing_products "here"). + +\Note Installation of all products from sources is a long-time +operation. + +To switch to the \b advanced option, click "More..." (see +\ref figure_3 "Figure 3" ). + +In the advanced mode you have a possibility to select products to be +installed. Each product can have several options of installation: you +have a possibility to use the native product (provided with Linux +distribution and installed in the system folders), install already +precompiled binaries, build the product from sources or not install it +at all. Available options and default option are taken from the XML +configuration file. You can mark the products you want to install by +clicking the corresponding radio-buttons in the list view in the left +part of the page. +\n Note, that some products may require some other pre-requisite +products to be installed (or these prerequisite products should be +already available on your computer). The installation procedure has a +special feature to automatically mark these products in the list +view. For example, in order to install \b PyQt it is necessary to have +gcc, Python, Qt and \b Sip installed. Therefore all these +products will also be turned on when you check on \b PyQt. This +feature can be switched off by clicking the "Automatic +dependencies" checkbox. Turn on this checkbox if you want all +prerequisite products to be automatically checked when you select some +product to be installed. Turn off this checkbox if you want to disable +this feature. + +\anchor figure_3 +\image html productpage.png +\n
Figure 3: "Installation settings" page in the 'advanced' mode
+ +If you want to use native products (like \b gcc, \b tcl, etc.), select "use +native" option. +\n Special button in the right part of the page - "Unselect All" - +allows to reset quickly all products to the "not install" state. +

+There are also two checkboxes on this page: "SALOME sources" +and "SALOME binaries". These three-state checkboxes allow +quick selecting/unselecting sources/binaries packages of SALOME +modules for installation. +

+In addition, when some SALOME sources are selected, one more check box +becomes available: "Build SALOME sources". If this option is +turned on, the selected SALOME modules will be built and installed +from sources. + +\note If this check box is turned on, the corresponding SALOME +module binaries package installation is disabled, because of SALOME +module sources and binaries packages conflict (see \ref figure_4 "Figure 4" below). + +\anchor figure_4 +\image html productpage2.png +\n
Figure 4: "Build SALOME sources" check box +usage
+ +The box at the right side of the page displays the information about +currently highlighted product: name, version and short description, +required disk space, disk space required for temporary files, list of +prerequisites (this information is provided in the XML file) and +current user choice. +

+The "Disk space required:" field displays how much disk space +on the hard drive is required for installation of selected products. + +\note Please, take into account that the displayed amount of +required disk space is approximate and may differ when you install +products on your hard drive. + +The installation procedure uses a special directory to store temporary +files. The "Space for temporary files:" field shows the information +about required disk space on the hard drive for extracting and +compiling the selected products. You can change the temporary +directory - just type a path to the folder you want to use or click on +the corresponding "Browse..." button. + +\note Actually, temporary files are not stored directly in the +directory entered by the user. The Installation Wizard creates an +additional folder in this directory named something like +INSTALLWORKXXXXX where XXXXX is a unique number. This allows to launch +several Installation Wizards simultaneously. This temporary directory +is removed automatically when the installation finishes. + +The installation procedure also checks the available disk space. If +there is not enough disk space on your hard drive you will see a +corresponding error message box. + +\note You are strongly recommended not to use directory names +containing spaces. Otherwise you can experience +some troubles with the installation. + +To proceed further click "Next". At this moment the program will make +some tests to check installation settings: if there is enough disk +space on the hard drive, check for native products installation, +dependencies (prerequisites) for each product you have selected to be +installed. If any test fails you will see the corresponding warning +message box. Otherwise the wizard will proceed to the next page: + +\anchor figure_5 +\image html choicepage.png +\n
Figure 5: "Check your choice" page
+ +This page summarizes the installation options you've made on the +previous pages. You can check again your choice and change it if +necessary by getting back to the previous page. +\n When you are sure that everything is OK, click "Next" to +follow to the \ref figure_6 "next page". + +\anchor figure_6 +\image html progresspage1.png +\n
Figure 6: "Installation progress" page
+ +To start installation of the selected products click "Start". It +launches the shell installation script and you will be able to see the +output of the script in the dialog topmost frame. If any errors occur +during the installation progress the corresponding messages will be +printed to the log window in bold red font. + +It is possible to break the installation at any time by clicking +"Stop". Then you can get back to the previous pages if you wish to +change installation settings or restart installation by pressing again +"Start" button. + +\note In the current implementation it is not possible to resume +the stopped installation process; it will be re-started from the very +beginning. + +\anchor figure_7 +\image html progresspage.png +\n
Figure 7: "Installation progress" page: installation in progress
+ +The "Installation Status" frame window shows you the progress of +installation. \c "Waiting" status means that installation of this product +has not been started yet. The product currently being installed is +marked as \c "Processing". All installed products have \c "Completed" +status. + +You can abort installation and close the installation procedure using +\em "Cancel" button. + +\note This button sends the signal "SIGTERM" to the shell +script. The script tries to clear all temporary files. The process of +removing temporary files can take some time, so the installation +wizard will wait 3 seconds before closing. + +At the end of installation (all selected products have been installed +successfully) you can go back to the previous pages to start a new +installation or click \em "Next" to go the Readme page: + +\anchor figure_8 +\image html readmepage.png +\n
Figure 8: "Finish installation" page
+ +In this page you can read important information about the Instalation +Wizard itself and some tips: how to run and test SALOME or how to +build SALOME from the sources. This is the contents of the README file +which you can find in the root directory of the Installation Wizard. + +You can also launch SALOME Desktop from this page or read the Release +Notes file by clicking on the corresponding buttons in the lower part +of the page (see \ref modifying_xml "here" and \ref finish_buttons +"here" for more information about customizing these buttons). + +
+\anchor batch_mode_install +

Batch mode

+ +To launch the Installation Wizard in the batch mode use -\b b (--\b batch) +parameter. +\n In this mode the GUI wizard is not shown but all the installation +status is displayed directly in the console. In the batch mode the +user does not have a possibility to change installation settings which +are given in the configuration file, except target and temporary +directories which can be overridden by the corresponding command line +options. +\n The only exception is --\b all-from-sources (-\b a) option which enables +special installation mode in which all the products (including SALOME +modules) are installed from sources, ignoring the default mode defined +in the XML configuration file (see \ref installing_products "here" for details). + +\anchor figure_9 +\image html batchmode.png +\n
Figure 9: Batch mode
+ +
+\anchor environment_files +

Environment files

+ +During the process of installation the script creates some environment +files to simplify the procedure of launching SALOME. These shell +scripts set all necessary environment variables for all products you +have installed. To learn how installation scripts collects the +environment, see \ref pick_up_env "here". These files are: \b +salome.csh + \b salome.sh in the KERNEL module sources +and KERNEL module binaries root directories and +\b env_products.csh + \b env_products.sh and \b env_build.csh + +\b env_build.sh in the target installation directory. + +\note there is some difference between these files: \b env_build.* +files are optimized to be used for building SALOME modules from +sources (see \b README file provided with the installation procedure +on the CD). The \b env_products.* (and \b salome.*) files are +optimized for SALOME launching. The behavior is defined by the +environment variable \b ENV_FOR_LAUNCH which is set to \b 0 in +env_build.* files and to \b 1 in env_products.* (salome.*) files. + +
+
+\anchor notes_on_check +

Notes on check products version procedure

+ +Unfortunately there is no exact algorithm to identify the product +version under Linux platform. The information in this section gives an +idea how the version is checked for the native/preinstalled products +(this information refers to the base platform Linux Mandrake +10.1; and the same algorithms are used for other platforms). + +The general rule for all products is that the path to the binaries +should be set via the \b PATH environment variable, path to the libraries +should be set via the \b LD_LIBRARY_PATH variable and the python modules +should be available via the \b PYTHONPATH variable. + +\note the information given in this section refers to the prerequisite +products for SALOME version 3.2.4. + +
    +
  • gcc 3.4.1 +\n\n Version number is checked by gcc -dumpversion command. The \b gcc +executable should be in the \b PATH environment variable. Version should +be equal to "3.4.1". It is recommended to use native gcc on Mandrake +10.1.

    +
  • +
  • tcl/tk 8.4.5 +\n\n Version number for \b tcl/tk can be found in tclConfig.sh and +tkConfig.sh files (\b TCL_VERSION and \b TK_VERSION variables +correspondingly). Version number should be equal to "8.4" (release +number is not checked). Set the \b TCLHOME environment variable to the +root directory of tcl/tk installation. It is recommended to use native +tcl/tk on Mandrake 10.1.

    +
  • +
  • boost 1.31.0 +\n\n Version number is defined by \b version.hpp file which is part of +the boost distribution. This file defines the \b BOOST_VERSION macro +which should be equal to "103100". In addition the existence of boost +libraries is checked. Set the \b BOOSTDIR environment variable if you +have a preinstalled version of boost.

    +
  • +
  • Python 2.3.4 +\n\n Version number is checked by \b python -\b V command. The \b python +executable should be in the \b PATH environment variable. Version +number should be equal to "2.3.4". It is recommended to use native +Python on Mandrake 10.1. Set the \b PYTHONHOME environment variable if +you have a preinstalled version of Python.

    +
  • +
  • Swig 1.3.24 +\n\n Version number is checked by \b swig -\b version command. The \b swig +executable should be in the \b PATH environment variable. Version number +should be equal to "1.3.24". +

    +
  • +
  • Qt 3.3.3 +\n\n Version number is defined by \b qglobal.h file which is part of the +Qt distribution. This file defines \b QT_VERSION_STR macro which should be equal to "3.3.3". It is recommended to use native Qt on Mandrake 10.1. +\n Set the \b QTDIR environment variable if you have a preinstalled version of qt.

    +
  • +
  • msg2qm +\n\n \b msg2qm is a Qt tool which is used to convert text *.po files +to *.qm resource files. Unfortunately this tool is not included to the +Linux distribution and provided only in Qt sources package. This is +the reason why this tool is supplied with the SALOME Installation +Wizard. There is no way to check the version number of msg2qm tool. Just set +\b MSG2QM_ROOT environment variable if you have a preinstalled version +of msg2qm tool.

    +
  • +
  • Open CASCADE 6.1.2a2 +\n\n Version number is defined by \b Standard_Version.hxx file which +is part of the Open CASCADE distribution. This file defines \b +OCC_VERSION_MAJOR, \b OCC_VERSION_MINOR and \b OCC_VERSION_MAINTENANCE +macros which should refer to version 6.1.2. \n Set the CASROOT +environment variable if you have a preinstalled version of Open +CASCADE.

    +
  • +
  • qwt 4.2.0/0.4.2 +\n\n Version number is defined by \b qwt_global.h file which is part of +the qwt distribution. This file defines \b QWT_VERSION_STR macro which should be equal to "4.2.0". +\n Set the \b QWTHOME environment variable if you have a preinstalled version of qwt.

    +
  • +
  • hdf 5-1.6.4 +\n\n Version number is defined by \b libhdf5.settings file which is +part of the \b hdf5 distribution. Version should be equal to 1.6.4. +\n Set the \b HDF5HOME environment variable if you have a preinstalled +version of hdf5.

    +
  • +
  • med 2.2.3 +\n\n Unfortunately there is no formal way to check med version +number. We check existence of libmed.so.1.0.2 library on the +computer. If you have any problem with a preinstalled version of med, +please, reinstall it. +\n Set the \b MED2HOME environment variable if you have a preinstalled +version of med.

    +
  • +
  • Vtk 4.2.6 +\n\n Unfortunately there is no formal way to check VTK version +number. We just check the existence of \b libvtkCommon.so library on +the computer and hope that it is of version we need. If you have any +problem with a preinstalled version of Vtk, please, reinstall it. +\n Set the \b VTKHOME environment variable if you have a preinstalled +version of Vtk.

    +
  • +
  • OmniORB 4.0.5, OmniORBpy 2.5, OmniNotify 2.1 +\n\n We just check existence of some omniORB libraries and executable +on the computer, like \b libomniORB4.so.0.5, \b _omnipymodule.so.2.4, +\b libCOSNotify4.so.0.1 and \b notifd. \n Set the \b OMNIORBDIR +environment variable if you have a preinstalled version of omniORB +products.

    +
  • +
  • sip 4.1 +\n\n Version number is checked by \b sip -\b V command. The \b sip +executable should be in the \b PATH environment variable. Version number should be equal to "4.1". +\n Set the \b SIPDIR environment variable to the directory where you +have sip executable preinstalled.

    +
  • +
  • PyQt 3.13 +\n\n Version number is defined by \b pyqtconfig.py Python module file +which is part of the \b PyQt distribution. Version should be equal to "3.13". +\n Set the \b PYQTDIR environment variable if you have a preinstalled +version of PyQt.

    +
  • +
  • netgen 4.5 +\n\n Unfortunarely we can't find anything about netgen version. We +just check if \b NETGENROOT environment variable is set. \n Set the\b +NETGENROOT environment variable if you have a preinstalled version of +netgen mesher.
    +\note netgen 4.5 provided with the SALOME installation Wizard has been patched to improve its performance. +
  • +
  • Numeric 23.7 +\n\n Version number is checked by python -c 'import Numeric; print +Numeric.__version__' command. The \b python executable should be +in the \b PATH environment variable and \b Numeric module should be +available for the Python (for example it should be in the \b PYTHONPATH environment variable). Version number should be equal to "23.7". If you have any problem with a preinstalled version of Numeric 23.7, please, reinstall it. +\n Add the directory where you have a preinstalled version of Numeric +package to the the \b PYTHONHOME environment variable.

    +
  • +
  • graphviz 2.2.1 +\n\n Version number is checked by \b dot -\b V command. The dot +executable should be in the \b PATH environment variable. Version +number should be equal to "2.2.1". \n Add \b graphviz bin directory to +the the \b PATH environment variable.

    +
  • +
  • doxygen 1.4.6 +\n\n Version number is checked by \b doxygen --\b version command. The +\b doxygen executable should be in the \b PATH environment +variable. Version number should be equal to "1.4.6".

    +
  • +
  • \b SALOME module \b sources (3.2.4). +\n\n For each SALOME module sources package (KERNEL, GUI, GEOM, +etc...) the root directory contains file configure.in (configure.ac) +which defines version information.\n Set the \b \_SRC_DIR environment variable for each SALOME \b +MODULE sources package installed (where \b MODULE is KERNEL, GUI, +GEOM, ...).

    +
  • +
  • \b SALOME module \b binaries (3.2.4) +\n\n For each SALOME module binaries package (KERNEL, GUI, GEOM, +etc...) the \b bin/salome directory contains file \b VERSION which +defines version information.\n Set \_ROOT_DIR environment +variable for each SALOME \b MODULE binaries package installed (where +\b MODULE is KERNEL, GUI, GEOM, ...).

    +
  • +
+ +If you have native products installed to directories different from +default ones (not \b /usr/bin, \b /usr/lib...), it is recommended to follow +the above mentioned instructions. Or you should properly set \b PATH and +\b LD_LIBRARY_PATH variables \em before starting the Installation +Wizard. Otherwise the installation script will fail to find +preinstalled/native products. + +\note for some native products (e.g. gcc, Python) the rules of version +checking are not so strict as described above. Only major and minor +version numbers should coincide with the prerequisite. Newer version +of the product can also be used. If some native product has version +number larger than that required by the installation procedure, the +user will be prompted by the warning message like this: "You have +newer version of gcc installed on your computer than that is required +(3.4.1). Continue?". You can click "\em Yes" to proceed with the +installation but in this case you should be aware of what you are +doing. SALOME binaries (including other products) are compiled with +the predefined prerequisites and most likely can not be run +successfully if these products are not found. This can be helpful only +if you plan to build all products from sources. + +
+
+\anchor pick_up_env +

Pick up the environment

+ +Please, read the following information carefully . This section +describes how the installation procedure generates the environment +scripts for the SALOME platform being installed. +

+After installing each product shell the script creates a special +environment file for the product in its installation folder. The name +of the file is generated from the name of product by the following +scheme: \b env_.sh (for example \b env_Vtk.sh for the +Vtk). This file includes all necessary environment settings. At the +final step of the installation the script picks up all the settings +files and generates two common environment files from them: \b salome.sh +and \b salome.csh for \b bash and \b csh shells correspondingly. Such approach +helps to save time when reinstalling products and you may not bother +about setting all environment variables manually to build/launch +SALOME. What you simply need is to source one of these environment +files. +

+This also concerns those products which are not being installed. For +example, you install some SALOME binaries to the directory where you +have previously installed other products. The Installation procedure +tries to collect environment files from the target directory if it +finds necessary products installed there. If some product is not found +in the target directory the corresponding section of +\b salome.sh/salome.csh files will be skipped. +\n For native products (like \b gcc, \b tcl, etc...) the installation +procedure tries to find them first using \b PATH / \b LD_LIBRARY_PATH +variables and then in the system default directories (\b /usr/bin, +\b /usr/lib etc., depending on the product). +

+In any case you may edit \b salome.* files after the installation +procedure finishes, if you want. + +\note As it was mentioned \ref environment_files "above" there are +other environment files which are generated by the installation +procedure: \b env_products.csh + \b env_products.sh and \b env_build.csh + +\b env_build.sh. These files can be found in the target installation root +directory. + +
+
+\anchor modifying_xml +

Modifying XML configuration file

+ +You can create your own XML configuration file. The Installation +Wizard can then take it as a command line argument to provide a list +of products you want to install with it. The list of products and some +other settings for the Installation Wizard are provided in the XML +file. The default file which Installation Wizard looks for if no +command line arguments are given, is \b config.xml. +\n This section describes the structure of the configuration file. +\n Optional sections/tags are in brackets. + +\code + + [ ] + [ caption= ] + [ copyright= ] + [ license= ] + [ os= ] + /> + ] + [ ] + [ tempdir= ] + /> + ] + [

&H0Ut$-$v>_(pzWjWu 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/progresspage1.png b/doc/salome/gui/GUI/images/progresspage1.png new file mode 100644 index 0000000000000000000000000000000000000000..efaa4d1ea2b84cca803e973241d95b255806ea01 GIT binary patch literal 11544 zcmeHtcTiK?yLN0x#Uofiq=^br1rA6@K#<-81P}-u1*C)yp@gO=DiA{pO{DjdL~5wP zBS)%qNTehvJw%E?D1pGYJ->Tr?#%tZJNNtJ`{SFrnarNqYp=EPX6@&F-e)~~$C{bw zUS#2B0f9gl_4TyOL7{Bzm9*dH|?5C zWKX0KvdmI0X2j6GIRo%zcIulq=0*3fAkB;P-m+^O z+`I*RioBAI$=MR4YfPqeOJACjov?FCI0a|zkl7Y6m>Dpb-L%`Xl+y&Wg5Z(`jWd)5 zE&*}WJsvg^(9c0%&_CYF9P}8Wq~N_Pf%b-)U`nLni_S=;uOHk>q&b{WY(i@Rd98br zb}dlg`l(Mf+BlDn$>OHV#ZcY#;;1%oTm95&5a^GaXlvx2h=_jjTn1+12G9U1N}+F# z#@@iKzno>!ellgek2(h|#DiqCr%|`5uq%AgA}2r} z9^RWktV#zN;d*~a2O+OXIou_QPAv8b}JXYn#&^@#8ean83dt`k$L?o(zx`uiNz zm%%>jB{H2S}Yz9}wHcmap7l?c>hhCZMv5&6DvR7nu`xtnV60uUM^0|8t2?WV8}Ir#8Jrw z9=XtEZvE%efvFA=IL*F_ELne>yv7Q-{KGrs+QVi^mHAKiN|s?WO?EIMHfin^hlFIx z9J{F14|hFntxQXE?WeWxMk2kVA>aB;Neh!)662z}Zy`eDqN@XK#v1a)>+k8I+5TTb z$OrhQ$+{+ou(w#VipY9i(rA(DZ!q#J+u{{#ar^sP@K~Yj`*Xp)C08~J7B)4jr_Xmu z6Z7hPsR(10^~mBBc%1Gja`0THGJ_|$Tj9B;HvgH=x#Yd~X_9uuHM3PmA*-ao>4~Vs z_3JSO92lC`Cu~V%jX6zzObps?n_r;eA2-?hUD*>BESVko45hwKm{x;rDX-R**H$uA zi1ZX%u65r5Mk?Sd14OXmh#96J?v)K;H+@4{~!tgC8vMb262 zCv!@AuO>9CPx*Rgv@Y)64Y+WE-JEba^Wylr+mfn!rOmz`b2rwpTcoo3AZM(6I_>&p z52GsZ#L&Rj+Z6?zCq4&rnD^aD?pQsFxW_bwe17wDvJpX`9IQuhAD3HfrumdQnXP0L zX?o}Rby({q8$Ep?c6jWzU3LY6WJDVTwLO?H(z&(Eih*vt@lYUo3|`jZcP=egR{StE zT(0#nWoITVBPZ0aoO?7mx4(A_$vWXvl!JJTU4g*@zy8%iO8P>QGYChb zGMcjn8aG(?%axlPEb+(tp=3Cj1mAs#>)stj1poD9)nP%@mV5Yszlw-H-;wHVBQC`b zx#Y}IM4KK`vYujpZt-;@{loqDjGs*p}~JcgFU#hF77UOe2U^AA|crzScf4W8V> z%-D#lLrOpT%`3mK!&f4_F!o&{nMR`7COxLY?2Xvz*@RDHqK>?k2d+%J85LNCOwUFC zHnWx^j}{Euj4zs!({6sXlXa9C74na|kO!9mhMYH{<{k|X-0 zBi)!F)*Hvc+SL3LJAv5muiw0VXLZFhG<+*n*uDFk21}?1G(WgLyCxIu$GUPbYs1dvVfFXLz+CA^dzJ1oovG5#g-ov(b2>cAn9BJ; z@(z1S*}K!G8da?GyC`u%L9H-1>R8XEmOwf7#UMv|WvhDL>g?Rqnh%p&lc~{+Vk}6r z99Bj8lWQ5&m|SbHpkNPafuxT4EY2fGYeB6Cc-IA_|E#uK9GjcKGJe}Olh)F8)o za}JW}0J$BS>k#zUQhi^yKXc{mYucy2H7ms{={)^!<2bZcnfr`;mUb=r>Md)RF{Y=1 zvh_vcw3*p{^uWs(Ch3AMGREeYx)r@k;r0r_H&#u}dac#iC5ah5x^UZLvh^C3J#aIX zU&bR^sIim^oDX+b=MsChk4IjfG9At9{Tb@mj!ARuzz7()t5?x-)xpWmBXZn7*hqvH z%h1gPZSuj{tmco#3Dk!-~KEXl;X^e zdg&5f#lDBwY{Cc5=O6UMqgP^=C`0J;y500o{`R_eewMAZ)5Fh1TA?_H*&_EF<;N@G zTGZ+#&J}cF7cItmks5FoH99xgpPK7sDRO1hC(0kWb3?(>HDdQE*VS&n_d!$KacLs# z62okSqw{3dtr>rNd}!OWa&dLy4#nw%H*?g9L3w1c5EG|7J{)9c_~aHes!P2N`}FP8 zqwiseZ%L%U?OTQL$uq(3Oa^yMVKJi@oU%P$i%ZHicDEV7QBmn*{^)+e6iy9NdmMmA zI!%sGZ0;RcPgf%ESyua2z{$mZq?P%As7fQT{N((r@9gGjU8Bd=)-wz=CHz3um|MYI z{oPS$#8y`nSihQ79s%%O%qzWQqW70FkC05w$ELST8S7Jhfj^M~b#={PpMeO+PHF#X zvw*qq?8v{efr8uY%qXRkx*UmxrtR2QMY3g2%vx4OV`BoR$fmI2+2Ur}E3W1hM!WmK z;levbZ#1jYH+IqPI@&IUz?m-TSeY_Fu!=0vk7}mgh6eOGy*rMquXvSC?Oo?D^*P$R zmD+iqtWI-8%whH?T}N^l!%eSgKMZg5UYyY}Xd#o-4?79jjO{ufa!LEq5iiu2n!WkS zFDBl=j->vxRUKG1xbogrNb_cah3s5Sd+%v39W;m?y*l#9=}9&vhpC%ti5&YHfm*3U zO@)Wk28;3G3vZ1m3}wmn75Zz``#f-1xUJz5)1t*h(dePB$+8U;w%_pXEE=JhsUl;< z6WE#qtv2wf%E0yF7kjL2#*NRG69SWED1XT5+oq?@>yhEZD;FOzw;54lYqb7F^)_Y%;YEVL5!L*tRlEZPA9Sy$-#*)nrNF3E5)$(ctEibMq0!%nyFBlOAQ z3d_gBAAqAu zzG^L(UUO2t@}p_r^}-iwP4NW8mq_!(@oxaT(yV%}k75VXy3Vev=#=J$ltp_2xV*XH zf=rUuL5=!zRhkIA`g@zGash2T?!NZvLC4vyh0>Ke_W-Zb9i`6hShiHbOf#(u6vsk= zqu>IyJ>TLh7r7wlbhqBWv$rRCF1&jP0n-*fdWz+54c@n}B#kZS9Pp2Gss}$aIqv-~ zW8Sh_j)4sw#HWj78I*b0lv6Ucu!2;wb|t#Z$CLF1Kb7PzPg8vPBBuu!q_%)_si>b1GA0-Q;(V+wD?rxjJq^ytFmFA75 z+&a8@-~3@PSLyeo8M!6;M8(?(9SzS$gbEp63e{ciaM8ii+$_9OfZNi+HmTjtBpdY~ zc1^Jy)}i(fBb7IYdH{aG7u`%84gVC(S19b5f%D0cfwZ^HiT0ST)Hw+)$1cqzfp2mN z42qA`aKJcNbmv{~$#jbF#`e^`lqgIv(did1N;C8^DY6-Ctuu4Y2~3pt{#rIU*)Jw0 zmc%Im{^pAAapp+Sc0tZ(#DSS68LUrEU3)Yx z++0BXEUm_eKR*|$VAw0)dyxZA9Ie4<+>8;Bj_LU9&uf}*W*M*;k+;sA1;-efvrYSB zYckQA-*3mnpQT0nglhm@s0Kr%A*gO2WxnohrHl?hJE77SG6-#`G{GMfoKSWp`S}M#;Xeo zI09;ux|N$*#-)B(${WKG+i5oy*qeT=+wogEbp)1U89sz%93gSbe^c>&_cDW~<_?~J zN@@hYRyaeqUbQd}N|?BuOD}us-%gvYdMyzFYo<3KLXgs%8w)Xp^U5W14;I6un)?gE z)tg}3YD8_MKmFMKXL4~|=j*<~5_SnOYcQYyuIj?pq8BEEd(rl}iaHt%V60O!nFRBY z4_+D7tJBia`RoEo_CFwK*EuJSXfJTrZYg?Iz|hi!Xroi<6oC7D&MQC9wY)jQ9c?QK zh2L%W{|PhjTsurxpLI#)RzkFU_wl5(tMa8!^^&SGO7V`(b}6Mf`T2!HZbKi)bmET| zxzH6Vx3Y(3>84kGIIi6qfA)HzhsR~B+ZoS_)**}QUY&qQ$b}ig#QV?=c z^+BeQZ4PX^kH>Z8(1*ADf)oMLd3y7DA0c(GZB`E5nG=q4t9P|eJmB4anx=3jE?X^`oxS$ni0 z0cBLGFJ+@)llOz(O-ZCo>9!NLVcfE1_Rn*P&|P)x<%fpw136dGOxEqOEuZDx_WR%q zoKa=XTAGn1V3a7$veXZm6S4y*`_c6g>r6IVQiS(TR`Wtd%J|o>W%0N$4VG}OuH{X~ z8C<25ips9B#@x!RLSgvs+j69$ zJlc3F{E(7O-)!3Cb{~>M`^#leg~GXE&|rsvxNDLQME5XWDM5WkKcCcc&4mPrSn9|o zB&+_h6DInmL|1GBEWru`VLYRmEfP0CVC019UsK?A7e2F1y?E#4^r zMql(cV?Ai^0zZKdsINy8EEUa*;<2rUoqG9tMkuH4j>_YF%TXa3fv~u<6xf3-RHm2n z>PnDF4g66-M<>J*UUQu1fgWy!&0jAx%j%(k%+3)FT{ZGP4%$dnPDn=Fk;e{o)*GsD zZq)i`Gg~Aad8J72IoDS#TNNEBg@!&nR#Ic=W2J{3LA?YOdpqYP|C zS)w0A%1fxHpyy&ZM7fLfJU=+|-l387liyu|Exal)5WdR7ncC-fe}4iUy~roLu-N?a z_MP4$+5!UXVtz4B*0jJx-WyGld2;o%fiTRD2B16!&?L9-V6KMNP<7^y zn!cDM&ptS}Xa&;lo>`Mw)M{1@Od)rND7I0{!f7pHMM&X>RoYF>H|7(MU=xnXRa0}? z2567zvOtS$Ozaw9}ow;3mza#x(-N zjW2>Rm}(;AKg9!VHD*~jA@dA52rf|OF_~0e(r+N={bjV2j)|Bg@LvUPfPtK6;<~Gy zqxf_`ei@XfAY&}o)?5jX{~XWR7tcyw?88Iwewk^6U5|Ag^h#EZttDT&tiz@tK4DbA zo|L-Y>~Aj>{0TYFy5k@yG#9e@39PTd>>87jhLYZ!oJk}z% z6~6MElee{9SmdHq?^`>XT-x)uFAXiI?}5I8arwEi$_m*Rxm9U?ce}gG@l(%!!l))x z_9IxtoWhGXSa3DRz{B$26jW>YlM{Ir#-0|5So;7`&PCaH}^5|`*Uebb^ zibTL$+sReM&A2`e_$xgfmYU4z9nr+3o-^@!J-W{e=hQYn0Tp;I#*PH>Ohf|S5mX5U zZY(p(_ci+NW-o&p@z%?l=F#thT@D<2S@DB@_v9Eb7Ed+X+d^;1y`XreAP!(8|}d2gGFIZXjW|!0)x54CXsj zL-N_vQDgsiOX@xIjG@6-^D(#m+uXLoZs)X&@w{DP^w;17w40O+Ll5dgTc!rZVMks) z7es$75M(dKp&NKaPd_{IU|tL1@2xj-nn(joOyz<)53dNE_-{d$^ei>*{rJ>`$vBA< z&rWV;p-qT%hEFk&HOW`WJAL@-{HN~gx@ge6R-8Kb{#@;;KU==Dix%03ESH-VX`!s^ zBG7|#g+6UfZSCtPJ`{?@Nh_TDxYGl7S}l3`!)-z3Hs1*l$mS9nFmCVO*H>OGBg^@D zlA^|WL7+c%e}1fbVBNYaCIFbSAoAMMh0NMb)VC6M3G;*7-vFneRw(0Br(WzPJUdFpdix^%f zw3`vEXHpq*QH=O4#BwXm2aU^vLM3QBR`it>hjjOULQ5`6pRp_Kz#YB@cuKbFZpACK z?9-4WhxWCsHriOh67ju4nEt)_Wh8tgB;t7QMIbF@Yx~8418Hpd zF>@;}h29hYR5aD7d(Su-S@a<4esINr;*V$cPRs|-laNyf-^O^(Trh|)$rbL;k;o1} zb>=9vnT?+WJxl1Z@WEL=v`9HpWY#h!zaNO6D{_Gm4WA1NkPrWEVL6*s|HLA5Eg}*% zpfqcNae>K?i>CC8r1a|PG#`AvgIFGC3;bxJuNt`@7>X)oN=9nw+DjX*J4AV4%@T*( zqzI+!{85QFA_8LAoguYNR^`qH$+F&M+w*ryd#?-3>_T{B-IxseW`v`TPVqu9OG~zH zHA}40KmL5+rxPvidhSN9$9_4eqXi2_pP`{_Yn4{Hr2#)taCj~;ZR(e#ADZXyv}9{gE)M)qOMWTByrqzhZoC6EZ&|~iJw19(A3DLJObk;*6$AY ztxKkzmodM2$3kD<+}O!R{dg)IO2-G&yJ>xBPmiI+$^OYk_d*YvN2*CN$7v0Mv1ms0 znLDnNvPvXJDc8e2O$Y!{HJv#f^m4s;!kE%)OKSUt^c8W1`;~>*NKLx2K68zF1}F>j z+OOOadS%+$ZkKZ|NrDr-&Wk-i{Fpwc827TnpI0||c&O%zzPV5eSSB->y$nIt5lv*} zRbtAz#ku?n+UYl1a+7<6KF>;DXU0sbTNUm6Rs@Gst*lL(o+a zXt^H7pH;fF1c9aB@{=o)LCn8R^&f$4AJ?@D!CX%B&1=`zQ@n1A z)FTI~Djdew{JNIx>h6>L(84pDC^($-DyLPaOFqb&*Z|#kXa{_7HPU!ckadX^oW7$3 z`uNd*vNU)!F4b`RuQ*7r^F78$4i=RWo>=i4n?;i~uBQc+cvAG-Nho6b1~&(e^r~4I z8oKQ(ftwH%&G!^4yty$xq-dn@{=R-xR79+UZKF=1;fOMIIq6-{H;RFC@+@y$%SittZFz__wCTZIE_6)n_WWE{M$i=h`5!$eyq$yRcpd6 zLH*?N>jB{#-?FXUXTR1&LINq<+7gb4(e16yotDQ9DS_6)Tc`!ZL4fIv-O>SyXF5i` z*~3w-?YspOQ>id`0`yzX{2Sm1n3hSt zT3DJ0FG_^>eBajn7|mOuw@k6Lh6dqt(Q2=YjwWwwxKmmQQZ!71@Kz4WX4|EJ-tdP~ zOQJ?m3mAiZaFh_(+TD+f=hXl-qF}XKZ)#tU53UeZX6DkM z3ypb?Wwe(b{092qbuLDeB}Owl&Gp_R7n!E8TjL62l|ccRl@z*|gv5A8g;;35msC*r zU5UuGiO;IGL{6`VM!^A|YN%(m#g2tT8ineGFutW*@E^yNUqLqv((RjarVzsGzJgVj zGR3c6{f4n`GA}MJ-n@^aPkBfPXk%%5{WDKsnU&6S2Lx^&9`@5Cb5Y9HD#l8NVe6{e z4kAT*g13R1&~_MsaoDcAQvPO#G0!PTkC@%P#%3_6+G4||IuG0Vfla4F`p!4b70rha zPD!4D2hS9uXn|F=bA$UrdQ+1m(&{QU2kU^Z+}SC`QtqDxeMMz18V1Gb`MD1PPZqtp6X}k9Y9@g_ZzP`k-?Al%XlAj&cw8X1Xm8aAW?zC-guX5vO&PPzt(PxU? zM|q92(!%ch>Ggd<5d2|?sG}2^hn3X%KaW!7fb7`36A_o1NsnyRs zgqLlbmK34J3fG?{pw2TgTUA(NeS{4ZEB~vbYrB#Rl>gV^L4mZn*Eehh^;b`hC@tyX z$;8l!y`KZ_nwJ6fH2UjZ0F#!QubUY*7eUvT0aWcwh8-{FvL+Ei(kLOTF659cHp@q{ zj=Ar7A)i0gS2(n2;EoRDBy7wpMbGAz4MzMFe0!s|v_Sha%WDAuM6}V>6Skf|4Sg(1 z4Xz5+A-VUn(=I2gMcQ9E1@eq9`4OBbG_zko31`kAX!Wl2S*NHZYc>5`r8QmU;}i=B z1hUuk!A@2LenZ;!ZxM5T4(0AkNDyf1c9-9F50iClttDZ+Dz)9h6IZT0yNvU!CQaSe zpf1{N&fMQz4Q51jc>^MHtU_1LPrd>1nc=ot2tR-6W>yEb@pcfn71S+@HXARwP zLar!SS024MYgw}&`8iJ0w%s2^2w1CD-g)V>lGuStTR&Ls4RJUwVEv^?0fQdnhzG`< z%K1`ek$N3oAtt1!z{eQA2ZIr>9ga5)@S6ZK_3Ll{(!2jrr~V^rwc81F`MFlE7>~1n zyuIc(+OI%w@@$VD`I33>z~YxAj-T>~qG8mffENq?7?Rfg->YEXFyJqIAiq-zSR@`0 zvjkNSH#(RYKqcpWtBGuwfp4pb=mV@2QwF^5k@x4}$Ms;oFW~=5ME_rE?*Hljf7*@w zzgiiGDDiH_qy6WOZyJ8>c0`yg2KQVC?pmqXZsFobi?-WbGKl?X^ zYJugO#}YtlJuh?A=(%oD7W69`MIahxrZ($;1=;_U5b=>`iz|97B+Ri3`#D%rZo}6V zuYK3BwwyWu^PVj%o4S5y<21>j+KQSAD3mV>fU?S~Xea`vauV&sE;Q3^+9d;h`}e$^ zu%oIfv|XW4P2yI$@ah`Ym~V>Y$8!QGrQo5<#SH>d5(!%pw8mE9LWO-I)g}Rh3in!G ztDk(8*0A~mOKy;dlT7(&r$8V(M~xTe!TE(P8$;Qe$i{71Z8fz=Ic8*ZV>A~SEexbBZE98{_T~^*#7UqUK8^=cxU$cPZ;2jg-(HDm zeg|{TavDpQ-)$f_?At)S47(7&;`{TLLv}x83Gz;{!4rl*1I+UvM}ZWjtT1!|Cjq(bak&QHbsYfEc(lgVlTcvTmMQGChLuh^~*ok2-OkaFh?FP%Q) z-H+@OKhuKN2Y7 zV@D!ii}7+WB721x$nEu9A5o*7?e32R%!{6BAiRHb$^HZWo@AXj0AgA_@}iPXKD)+L zJ@Pf8a@p~ZF4^f4)P7Vr;z?>VLf(pxAdkkWYUlRTPJB!o*$L_RS-PRTBN~Bx{v?YF zyi&Gs3caq7nAX)WV}z*r{UfRvS9q;WwZylIn%U5`hdK_1e;M3WZ}@%cptUk!qrolf zI(Q{+RUt7vA*}gVci~)S!`Z_$_!eJOvvP?qvKmHhX;8;QDUjUY@agK`8Q98?GviGG zVaj;#Ee-wNc7c{DQ9gA~P>_+T>YHGA^qLpfJZbc3rB9kaB1HI^n6^mPJNApxBjpY;iFBP z<4$=RPaW(B0)h4h`%*(BCL3}vH|#<|DkX#g@Jh(x_lyyR1|Zsvz(x#6x;Y)h1c-}mzB1Xh0sonq_ClSojz5yGf7ZNM{|`b`#r!uNIL zKcFi<`U_b3@#Ohm>Q4FlUJZO`{nUj6CmJ=_Os12)fDbfuzAGK`B9hU=}U(=k>=kw2{hg5gHLAfA!Q;J+J?d0#$iWcqJJ7YjlHC+rPIVDX)sc1JFjFGv;2LU2iqG z+Laa&E&(Xy>mP4q&}*=J^a$iH_xEc^^7d|5&d4-W*L(FJ9dynx4T~1cym?O6?MM0x n%rx-M@3Rvw9R-<-$ESG2(05Wk73ly;0Mges(ZXu}8U4Qiucv+S literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/readmepage.png b/doc/salome/gui/GUI/images/readmepage.png new file mode 100644 index 0000000000000000000000000000000000000000..b6aee29898d8143458ffba63a161b8a591f05652 GIT binary patch literal 21399 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/registry1.png b/doc/salome/gui/GUI/images/registry1.png new file mode 100755 index 0000000000000000000000000000000000000000..b8912c6ba9ae903bab7b759177758da88c208bf4 GIT binary patch literal 16943 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/registry3.png b/doc/salome/gui/GUI/images/registry3.png new file mode 100755 index 0000000000000000000000000000000000000000..f44e2ec3a9323f90d9d66d4362664eb0d7f8279f GIT binary patch literal 7440 zcmZv>WmuG7)HgbaC?TOV3?QO(NjErjcSwh{bT>-#my(X5OS)?qkd~H?Aw**6?jhdW z=RN1kInR8US=T-L+Sgutul0+4N2#gE;$l-^gFql$c{wQ!5C}~ch=Vbo0pDp;!LpBGvgO0$$y@**9vLGeHfHIs@3y?`ygQ_g4VKKAtjZ;Ibv!5?6`>fF zF&mZP@gaKNDH26yMMbtBOr0v0nHm;$n;M4-%$Ur-@T|q>j^cU*>%asAqKrAn^}KAi zmczZaL)20`{Lsj))yNx{nn#Z|l%R5Y2w%r;WiH$S(d4pIl*;A(+w@{S>)p2UhnD>& zD|;ohMJ7e4@BvSf1}-W{W=f@cZpBljIh$L$jhrm2{2n4Z?U_+wG6D}S1jvIB{9Oa4%A zG5L|x#`8P_9lF(DdES!rG6K7M3%fri4`cdZP}J!bF68$lye=ABVfY{!gJ)dz(|7?v ze!{sgZt5^0wa}3<;8%4w^WP!XdnS@`lyF4&n1ke0MbhHeAI@nu+qwJSrVoZi zRUe0$nK{XDpD7Geb>t`tVAHBZ$X7?cs3)*$GMn^!X2=J_jadFNya_3pGUH0e#K!La zRAV+R=nVVH$cW#4P$k|wrnj8jii{B}=nC%o#G|2aCMzkK_m(n@K-r2*LhJeS1T*$? zA#}Wm#O|+83?2C$78^cP&#k))F)=cNawSoCPoHN-O(L8Hhy}xZ4G(Yk4heRps;4aK z7ns=DyDO({=MF|io$xZg$-KxYR@Ye*_*nJ@1`cu8fxNJM+qUwl`cTZ!5x2Y?S7oGS z2><1)SK-Py406P#Q*S8Rox=!_^th4H;bT-h=e~4B@7@um5)o2TDjFJ!Sk;q5RU)P~ zd+loD({Csv@U17_mk}OxL!#!07>2-L4iW9;VyjBZ(qzAkVxLQ$6m0u;g$_8Xozbi$Jz0e*ou zo1`Q3gbqEBoyCa{#$TY5*j{jt)Rg2IgXS@^**|TfWg8}&Kh(3G&kx+R7?mZp zu-(t$f&~npQZ!)koz8^!+*#i{U8tPR-=}J7SRrSwn)%w`We2h8ZCee)FLp_XZ)xf? zm*S=zOd{(K@~ddwU*Pv|dTJPIDH$4qPfkwGJ1nK)Q}By%qPn{J$jHcCx5C){b(PpH zgS|?a{ajUVUteBQ{#;Gb=Lb`%##4SJz0v+;IwlSdr1Pv9fcNQ=JAR`D z%65dN3po5-cWXg8I_X#i9A*=gw!J0-4TJXr(919Zgph2;`^?cS#$N-U`3Q-L!Dt=|QZw_ojh(j9-z4#b3aLS!ySfJ~G&+bbdj+Xj$>T?NX9wem zzWXfEitZd-q9bdR4Atl~8;_sl{rc7XIgF2eJ(@P??;0ZLIR)7{1|4WbblBW?D z=<#|_)W3}_JdWfcLEB`%Kv9Y88N5p8#-K{&)32lTnnlB>nYa~??=zEg4lqm)ms*#2 z%n6>yC2{(lYzd)stXyjN9G)tQtqcaQya$VDjGWnubKTw&f%=!`lc8ZqRioKMbwMM-OgE`A`;pSdG!*T^BI_>yoT{Iwf_ zN(oNAAQ{kwedb-CC+oKw^IDd()uwrHQxRcB-QA;!d}?}nk%)u-!O2k0FYc1%F#e#UL*fa$PxA09Q7;=J7xwO%`1>@;TGPNbmv`U0 zG5NvpW$l+3hPJGMx4gkGqarh@T!Z z;L(3;OOsEef0=mt-1IGn_!WqQ-5ZLcN$Xw-K$RzV9?fRntV6l4&6b(jF&%~jykb5* zrkDi3EG#NI84@PnM|>ZHdd1TE{FHn^cDiOi@>&ovH{c8NwfCgK4*Tu=;!o)OPPPl; z>JH`tLq9VdKh}#5Q~ThG0ovBnf^^m_OG|XN`U?q zXhC+0@Eshvx4OGmUWVCVEk;C`a%FI)D`iX6AzWGw^$ysFh5%USS#sp(%cT0RulwXH z_G-hkf|msoZrCajm|m40FuP^;)M4G`x!qLF*0sDBpp}3&QifC2Tw4m6f|Dc<^p2%7 zsn~ECO96ccWyC(5Z%5bHi`{Y*KS#r=rBL2udcbegrZezf5AMr5EZ!bg$i7zL>i}-& z!vm!n)FM0QrYyEuSKTMz{h%7hWg*{7In(vqxB&69l%P*KG>$a0AwLoy@ry7{26g?M zg__Z8+>k21h5@9YfuP~nRpaP^DC^obyVP+*Rl_5!4lcN_yY-BHl*gsla+?QH#=JHvi&yA+F`YwX1 zTeH8I#Pg?qR{p6P2(lbZBt^@e+f)76EZ(IRUNCxSE2T|uCD|XNOTWLB@OXniWcF@S zOUkE4eK0DhW___~y*m&-$i>XxMC(>R-%k+_!g}KCg@3JE#Ua z!)$-(;WLgVO?!fN&cRPJ7VDMuX0GGekKk)dHmJoqSwIh}akr}61oE^yVV$q7w+X<0 zvu1>70c;3_^S-qfVZ`{;^ml=+DUa_naR-Py*bVkRGvxRAv${Ba`$~lNUXvc{%x=dz z4PwH!W@E?L=4TptC)Z_;un+R_0+Q$4y8IL)eYb+LEW2b~zLR-v`;r}+7U$q)e_@pCaq;tAf?R2 zwdT773(E>aXMPgo<0O4=@BUmT!`=YK&raq&XH@05$?9FQxOZVF|B83P*k!r$p8MH^ zZhHIqRi^x*aMtfMG*$!ne>dD!MZW@tZ=~_?tVmCP(ZwAv7(bpdN#!00Y7PAy{?>ql z&%nS>nmME3?92)BQhF>J+o{lD5rW3XLi1}DmiI?ks~R0q<%rLG1xb*SF2C{1%gx#7 z1$e7{zs|@9t7ye&)sOsIORa5=wjB6P@KMBDg_`@|`1Rhn_$(f3b z%BGDFx??Kz_^`)CV0otaq+_LSPk@fWp-lUskrL4=MGd_~y46LBeA6$10d zR?TP^@9xoBh`&a4a&ty7ob~i~mFyq!Q`XCY1)%GwxtIJl?BlG9Qe7SRwZuoVG(@pt zrBo?*2cdnN3C=MHr_NB!!lP!e<@Cj%l&o|D6e_K*{t}@3&2`f1V*}$Ucbg3BW-Tpu zo{5Qx&kvi7dqE?W{}P5Nrm`~@$>r$69`KE~;}8dLj=ZUj7ug3-+ZXoZx)AEIu*pl#RcV0AH$|hxFC@_%1qKK#u)NOiwWO%DS2sWjDc9H^*>!9q2Xa%rayx_7Q$QEi7h~?ry z9uR;{SEc+WzjA@!{OP!rlbjqTPaMiD!ewo?YNaEO`BPL)2=TK)t>(9h2)nIZ>zslQXG`>kn6&yoG6cO{b1Vqi zYhOYl&!k7e6-yPf%+C{F#X}-zf7s!*ojB_3H4H^C{wi)H$oDAA2w~_^=g4CWwOKCP z$_*)_lcf!{=>z6OlRyUS>kx9e{_P=Dg=qpwW$9GvOCL@w$tY`bKNnpqonpqHcK9sMCy_uRQ;O~IeA(%>a@Abl#1Z6QlqG~b z1My>TUKSS})bxrD>yA)4fkkf`9%XX_{(%!{86G1S=|L+m#$5|0Wvfic+G=Y^{-yXZm31GWm zyZU_o!+Y`l=M?Q4W2nI1SlDokWe!lB(veZISni}{3BUwTv-rsjG$a&&b9+)|^|~o3 zIO*S0C8H1Xub!M%(8NbY#pbEzh%pv1va?&An$UB*Zpf{UySloKd8TH3>We1+MlCAz zd)X$wzShv`aq6JKX*D~HgF~d?fTzE;L99`S?FNPQYhriiv6&*6PBzwgbY||l`^4}x zbudWKy8Gm_Ub7>WtZVGkHcIQHshvXIYUBMCIO1v{PcotfbqI42f^J{L&-g`SQf-Fra{@W4Pu8}G{g~Mb_Q&qGtThy;CK+JN8=&%Fj*dIeF ztFKQHCw9w76L@VFvirI6iOZOIVj+OJmcuDOVkr5`Qb|~~f`k3`LR>9p&r%rWXueJWgc@Z=k_ML|1KvhgvEyMip zUtnRKB#X!UNQjD^oe1rf?x_ZBqFszOua*X&uCxvKR_01FE<^CeOJ{YA&eog+XXdIp z=Q8=6G*I~aSMW;}oKj*Iozko&@WmMHsB~jvgZ|>a8;9dOpviSpVP-v_IuP~uek$## z*m^wMPWzTQIWe< zHZe7I)#>SJl7_ON z|AIo`*OhVg96G1zPY?;bDf0JkwFc%mHGi)iSo`S^OHxWwKL0kks4vg>zIVS9RgA+F zi=ZHRWh|mF$8PcA9;NGNGUtD-X#!K22`rWV{JCOv4y1eD`6T#5$g_m>^o7EXBSdrD zFh?gic-7>@@A6<-*Xfb+Y#C^W%)t9wGzM7`ub9^Il}kJJoO{$&VnznGcZyrUy-h{i zY+io;8{h-N#K$kGsi~RpXqG{C%l~0J#7-|Pd^5$4 zt?}5?VTbK=tr%QVZ<(GkA#jVjh0P;pn> zmRbDEV{UHVVmq%K+K5}wUXiuKT|8ByO4I293cTW;nXw9Z_3Bj`m!(2MNu|A5e+< z-xfo?RtBwe0%o_5iW-LpM^7l@zu?J$*m!xhMX&#abPT)|IYmar?9TT_Fl1lAEVE+Y zDW*7&i(UcX_!qop)CuQNE^ks?KVIwkMkSn*oBMj-Q`o8Vp3lX_<;(W2V3C!v7Oq^- z%~V>Jtpa_Y)IfYr4t|!u668Nh!E9TDz?C;^j2RVM9V^$@-W?COd!UQ0yEUp0O`$If zbjx9ot-c$MXKgqDspxBPLRen>qr^y^W=v}|jeN=K@3Uq*H}yGAKK_g<%*Oasm{@PLZM@d$sN>X$?tvK6 zV5o0rSLS=%^;}*_>C<}g=>HtS;v+F3RftCPQbFta!E$O&)1CV>nBT)OdwCST>RVA! zqf5bPyZnND%Z+&{LYnOP?a|$|Z888m(5_F*t3S5Bt zG67rWH!!-?{~jQGxLvgr5}E{J?5jG$DVdA9%wV3H&dxoV%@9FotZHJCd_9f#{`x)L8b!Pa4&C}QK z-i0-<_~JApM)RfrYuOztZ*kagFno;I^Eqrq`cDBx$?3ErQU$vdq8H`D3O+zIyRGB$ zbGi1)9k!yVfwr56`|%ezQuaB}Iayqf_AJy|$VzOTxkLHs1_1dGA0MxFP!DLNIy~!} zm1@1(ud3oVNzE&P!_DSTqrZWrbHReHq4O>Cb~*1D7|`QWQwO?JNhj;ARipp=Z^y+9 zAFvWzEM7gh{G4XpPrtuPOnaR4f4JQ?@!8!e*SR2OqR}|yf zqDubWZvck#(?Qk>^4JSJJH<{Pg9<06r^_oSL?6|oKgavs>Sn!)qT#!f@bu*4%Vhhr z#;8jeB@q=J{btXZWcgLwjacScH&`Zyx-S?FUGIGH4Zy1t?)sIsiHV654T(8N|1Zqv zKz!%YU}QYb@zvjqtHm|zU1gyBvgHFYlmjE_+)Qk27`Y7%N$K3yT#icuCh4tbTU=Hn zWLD$ZRHcr$a-7i;t?OgLX}tC+PIHr0P#6F#_>s}k=H2&%-u_$b|1=UIgGvRj!;I-u zIXO8~0JcEw&HJL0Q&T`Pe^E!BfPan134DkWbVFv{qzj>sWhSh*oMaQUZ>AVO@IS$*nCpx4<;L;k zAj=I#sbTu(pPne;{lW~|2v(ZnokL5v5=k zYZcMgirkt3$B_`1kWdjHpyF))Zgl2XyT-!M{`9Y1eJQTlc4swdD^yP&-pVETYpBIb zhE@f409&OZNg}F8pofC53zQOCViL9&r7((9A($>C+PE@Dj7C8pc!tQLxMZFr(+yM< z6y-{+@-a#n5kn&D3#>SOuLQS9^_+=5`ft7fEyxZ_gb<_(gZ}5=9urRARV1+<<1kCa zP|0&LP%M~3aw->UeE5VlR6u-&^c(0#ngl!6=UKFx&#UW`CpZIVY(&X=c5?uhB3o|1 zPQb=%YkK>E`?^?YDTrA%HcVQFh(L=39PEfg+nerIW_o_;#>!N$srCuu_17WihWRYe zJe9KO6ks>>v%{YjT)~&uPAzG9&KhR`W2C`DPj>&$L}YnU5Ps_@PhgJI@cZWg$5>); z``fB2XEii6wPSr)DF`yjxe^ctnt|lN4b%7y>k-Nh+>NT|CIzkq;s&h6x>D}CY$zCcBxZh9F*CcV zXnH0UV{+*@DjBfE={(OoXT<&7r*r8zc+oB^IVFAQ{5qY?%t4DB3kgT^gp*3CLW_D~yg zk@PKX%TOfhmr0d&bx(XkLf6kP=g)+9#Vh(`gIJ}R@WXoAQx~py&wz-1-$afGrFIT a&m)MV7y8ScfOnoCki4{tR29VZ>;D12pU_bN literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/registry4.png b/doc/salome/gui/GUI/images/registry4.png new file mode 100755 index 0000000000000000000000000000000000000000..98a3772b5373f1efca0177f6b1307e8e77a36f2a GIT binary patch literal 17550 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/selectfont.png b/doc/salome/gui/GUI/images/selectfont.png new file mode 100755 index 0000000000000000000000000000000000000000..04eff08fdd28a0678e67ef62819b56a5cd488f7c GIT binary patch literal 23157 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/set_rotation_point_dialog1.png b/doc/salome/gui/GUI/images/set_rotation_point_dialog1.png new file mode 100644 index 0000000000000000000000000000000000000000..bdab73b7d27db6ae050080a7272dc68381abc665 GIT binary patch literal 11693 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 D+KM@S literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/set_rotation_point_dialog2.png b/doc/salome/gui/GUI/images/set_rotation_point_dialog2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3696a56b58ae68df8131cb877dbc716bf601f6 GIT binary patch literal 11232 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/urbutton.png b/doc/salome/gui/GUI/images/urbutton.png new file mode 100755 index 0000000000000000000000000000000000000000..d7c0841e322a946cc77380c2cb05728f345b485d GIT binary patch literal 917 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/view_rotation_point.png b/doc/salome/gui/GUI/images/view_rotation_point.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe8f8389a3178f4521241605dba434b4494e600 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1SFYWcSQjy&H|6fVg?3oVGw3ym^DWND0tn| z#WAGf*3>B%C66d@G)vyq%$xVF*tz0LMo-7va+|G(;uS>J%Du5(Gw*EBo2+k{ZO_Fe z9Q|%(J^3DG^~UjtfUWW|Md2UDc8O9C-8D>C7O*h9GhLPMzuI?axaiJ>0nuKoSRVX6 z)2u#c63ex4=kmJ;?E*zrLyO+me0+H2?wp%(9PY-f!J!Eu9__0NG@tgLNjvQ?_|W%AwDWo%AU(qg7cOzb<}J3}v1W~!Ly8>wmQmw27c oX1M8hI_C21C8uP+)bRdg@bIio`PBaw=vM{?Pgg&ebxsLQ03o$?&Hw-a literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/index.htm b/doc/salome/gui/GUI/index.htm deleted file mode 100755 index 774d93c9a..000000000 --- a/doc/salome/gui/GUI/index.htm +++ /dev/null @@ -1,180 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - -

This is an optional section - it contains general - information the Installation Wizard itself. + color=#000000>This is an optional + section; it provides general information about the Installation Wizard + itself.
+
+Attributes:
  • version: - Installation Wizard version number;
  • + color=#000000>version
    +
+ +The application version + number to be shown in the caption. + + +
  • caption: Installation - Wizard main window title - if this string contains the '%1' text - the - title will contain a version number in this place (see above);
  • + style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ " + class=kadov-p>caption +
+ +The application main window caption - if + this string contains '%1' text the title will contain the version number + in this place (see above). + +
  • copyright: - Installation Wizard copyright information (appears on the first page of - the program);
  • + color=#000000>copyright
    +
+ +The application copyright + information (shown in the first page). + + +
  • license: - Installation Wizard license information (appears on the first page of - the program);
  • + color=#000000>license +
+ +The application license + information (shown in the first page). + + +
  • os: - Contains directory name (relative from ./Products/BINARIES) where the - Installation Wizard should search precompiled binaries packages. If this - tag is skipped, binaries are implied to be in the ./Products/BINARIES - directory.
  • + color=#000000>os
+This parameter defines + the directory (relative from ./Products/BINARIES) where the Installation + Wizard will search precompiled binaries packages. If this tag is not provided, + binaries packages are looked for in the ./Products/BINARIES directory. +

<path> section

+ color=#000000><path> + section
-This is an optional section - it contains default directories. +This is an optional section; it defines + default installation directories.
+
+Attributes:
  • targetdir: - Starting target directory - path to the directory where products should - be installed;
  • + color=#000000>targetdir +
+ +The target directory + - the path to the directory where products should be installed. + +
  • tempdir: - Starting temp directory - path to the directory for the temporary files.
  • + color=#000000>tempdir
-

<product> section

+The temporary directory + - the path to the directory for the temporary files. + +

<product> + section

+ +This section describes product to be installed + with the Installation Wizard. The XML file should include a <product> + section for each product to be installed. The products appear in the tree + view and are installed in the order they are described in the configuration + file. It is recommended (but not obligatory) to define native products + at the top of the list before all other products.
+
+Attributes:
+ +
    + +
  • name
  • +
+ +Product name. + +
    + +
  • version
  • +
+ +Product version. + +
    + +
  • description
  • +
-This section describes the products that are to be installed with the Installation - Wizard. Products appear in the products tree and are installed in the - order they are described in the configuration file. It is recommended - to insert native products at the top of the list before all other products. - +Product description + (optional).
  • name: - Name of the product;
  • + color=#000000>context +
+ +Context (optional). + The possible values are 'salome + sources', 'salome + binaries' and 'prerequisite' + (several contexts can be given separated by ":" symbol). + +
  • version: - Version of the product;
  • + color=#000000>supported +
+ +Supported modes of + installation. Several modes can be separated by comma. Possible value + are: install sources, install + binaries, use + native. The Installation script + should contain the corresponding functions for each of the supported installation + modes (see here). + + +
  • description: - Description of the product (optional);
  • + color=#000000>install +
+ +Default (starting) + installation mode. + +
  • context: - Context of the product (optional); the possible values are 'salome - sources', 'salome binaries' and 'prerequisite';
  • + color=#000000>disable +
+ +If this optional flag + has 'true' value, the corresponding product will not appear in the list + of products and will not be installed. + + +
    + +
  • pickupenv
  • +
+ +This flag points that pickup environment + procedure should be performed for this product. If this flag equal to + 'true',  salome.sh and salome.csh files will  be created in + the product installation directory. Usually this option is set to true + for SALOME KERNEL module sources and binaries package. This is an optional + key, default value is 'false'. + +
  • supported: - Supported modes of installation, should contain one or more of the following - options, separated by a comma: install sources, install binaries, - use native. The Installation script should contain corresponding - functions for each of supported installation modes;
  • + color=#000000>dependancies +
+ +List of prerequisite + products, which are necessary to build this product, separated by comma. + +
  • install: - Default (starting) installation mode;
  • + color=#000000>installdiskspace +
+ +Total amount of space + (integer, in Kbytes), which the product occupies on the hard drive after + the installation. + +
  • disable: - If this flag has 'true' value, the corresponding product will not appear - in the list of products tree and will not be installed;
  • + color=#000000>temporarydiskspace +
+ +Disk space (integer, + in Kbytes) for temporary files, which is necessary to build the product + from the sources. + +
  • pickupenv: This - flag points that the pickup environment procedure should be performed - for this module. If this flag is equal to true,  salome.sh - and salome.csh files will  be created in the product's installation - directory. Usually this option is set to true for SALOME KERNEL module - sources and the binaries package. This is an optional key, the default - value is false.
  • + style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ " + class=kadov-p>script +
+ +The installation script + name. This script is in charge of the installation of the product. It + is called automatically by the Installation Wizard when necessary from + the main program. See the next + section for more information. + +

<button> + section

+ +This is an optional section. It allows customization + of the last "Finish installation" page of the Installation Wizard by adding one + or more buttons in the lower part of the wizard's window. The script which + is attached to each such button, can perform some specific action, for + example, launch the application or show the Release Notes file by using + an external program. See here for more details about writing scripts.
+
+Attributes:
+ +
  • dependancies: - list of prerequisite products, which are necessary to build this product, - separated by a comma;
  • + color=#000000>label +
+ +This is the button + text. + +
  • installdiskspace: - Total amount of space (integer, in Kbytes), which the product occupies - on the hard drive after the installation;
  • + color=#000000>tooltip +
+ +The button tooltip + (optional). + +
  • temporarydiskspace: - Disk space (integer, in Kbytes) for the temporary files, which are necessary - to build the product from the sources;
  • + color=#000000>script +
+ +The script attached + to the button. + +
  • script: - Installation script name. This script is in charge of installation of - the product. It is called when necessary from the main program. See the - next section for more information.
  • + color=#000000>disable
-  +

If + this optional flag has 'true' value, the corresponding button will not + appear in the "Finish installation" page - the section of XML file is silently ignored. 

-

If you add new products - to be installed with the Installation Wizard, you should also provide - the installation script for this product. See the next section for more - details.

+

Note: + If you add new products to be installed with Installation Wizard, you + should also provide installation script for this product. See the next + section for more details.


-
+ +

Implementing installation scripts for the new products

-

When you want some product to be installed with the Installation Wizard, - you should add its description in the configuration - file and create a bash installation script, following the rules described - in this section.
-There are some obligatory functions to be provided in this installation - script. These functions are automatically called by the master installation - script or/and its GUI shell when it is necessary.
-File common.sh contains some service functions which can be used - in your installation script, like make_env(), make_dir(), - try_existing(), sort_path(), find_in_path(), etc. -

+When you want some product to be installed + with the Installation Wizard, you should add its description to the configuration + file and create the installation + script, following the rules described in this section.
+
+There are some obligatory functions which should be implemented in this + installation script. These functions are automatically called by the master + installation script or/and its GUI shell when it is necessary.

+File
common.sh contains some service functions which can be + used in your installation script, like make_env(), make_dir(), try_existing(), sort_path(), find_in_path(), etc.
+
  • check_version():  - This function allows to check the version of the product already installed - on the computer. It should try to find the product (native or preinstalled - in the target directory) and check it version. This helps to avoid unnecessary - reinstallation. This is internal function and is not called
  • + class=kadov-p>check_version() +
+ +This function allows to check the version + of the product already installed on the computer. It should try to find + the product (native or preinstalled in the target directory) and check + its version. This helps to avoid unnecessary reinstallation. This is an + internal function and is not called from the master installation script. + + +
  • try_native(): This function is called when - the 'use native' installation mode is selected by the user. The - function should try to find the native version of the product and define - the possibility of it usage. It should create the environment for the - product in the temporary directory (see also the description of print_env() - function). If you do not provide the native mode installation, you can - omit this function.
  • + color=#000000>try_native()
    +
+ +This function is called when the 'use native' installation + mode is selected by the user. The function should try to find a native + version of the product and define possibility of its use. It should create + the environment file for the product in the temporary directory (see also + the description of print_env() + function). It is not necessary to implement this function if you do not + provide native mode installation. + +
    + +
  • install_source()
  • +
+ +This function is called when the 'install sources' + installation mode is selected by the user. The function is responsible + for building the product from the sources package. It should create the + environment file for the product in the temporary directory (see also + description of print_env() + function). It is not necessary to implement this function if you do not + provide sources mode installation. + +
  • install_source(): - This function is called when the 'install sources' installation - mode is selected by the user. The function is responsible for the building - of the product from the sources package. It should create the environment - for the product in the temporary directory (see also the description of - print_env() function). If you do not provide the sources mode installation, - you can omit this function
  • + color=#000000>install_source_and_build() +
+ +This function is called + when SALOME module is installed and the --all-from-sources (-a) option is used ("Build + SALOME sources" check box in + GUI mode). This function should be used to unpack SALOME sources package + and then call the build/install procedure for it.
+For more details please refer to the
this + and this sections for more details.
+ +
  • install_binary(): - This function is called when the 'install binaries' installation - mode is selected by the user. The function is responsible for the extracting - the product from the binaries package. Should create environment for the - product in the temporary directory (see also the description of print_env() - function). If you do not provide the binaries mode installation, you can - omit this function.
  • + color=#000000>install_binary() +
+ +This function is called + when the 'install binaries' installation mode is selected by the user. The + function is responsible for the extracting of the product from the binaries + package. It should create environment for the product in the temporary + directory (see also description of print_env() function). It is not necessary to implement + this function if you do not provide binaries mode installation. + +
  • try_preinstalled(): - This function is called when the 'not install' - installation mode is selected by the user. In this case the script should - inspect the target directory to try to find the already preinstalled product, - pick up and check the environment from there. See here - for more details.
  • + class=kadov-p>try_preinstalled() +
+ +This function is called when the + 'not install' installation mode + is selected by the user. In this case the script should inspect the target + directory to try to find an already preinstalled product, pick up and + check the environment from there. See here + for more details. + +
  • print_env(): - This function is in charge of the environment script creation. It should - create a file with the name env_<product_name>.sh - in the temporary directory and then copy it into the product installation - directory. The file should contain all necessary environment variables - settings for the product. It will be collected during the 'pick-up-environment' - procedure.
  • + color=#000000>print_env() +
+ +This function is in + charge of creating the environment script. It should create a file with + name env_<product_name>.sh in the temporary directory and then copy it + into the product installation directory. The file should contain all necessary + environment variables settings for the product. It will be collected during + the 'pick-up-environment' procedure. + +
  • pickup_env(): This - procedure corresponds to the pickupenv tag of the configuration - xml file (see previous section). Should call the make_env procedure - to perform the pick-up environment procedure for the product.
  • + class=kadov-p>pickup_env()
-The calling signature of the product installation - script is the following:
+This procedure corresponds to the pickupenv + tag of the configuration xml file (see previous section). It should call + the make_env procedure to perform the pick-up environment + procedure for the product.
+
+The calling signature of the product installation script is the following:

<product_script_name> <function_name> <temp_folder> <products_directory> - <target_directory> <dependancies> <product_name>
- - -

where
-<product_script_name>
- installation script name (described in - configuration xml file);
-<function_name>
- name of the function, corresponding to the - selected installation mode: try_native, install_source, install_binary - or try_preinstalled;
-<temp_folder>
- temporary files directory;
-<products_directory>
- directory where the sources/binaries package - can be found. You should provide the sources package in the <Install_Wizard_root_directory>/Products/SOURCES - directory and binaries package in the <InstallWizard_root_directory>/Products/BINARIES/<os_version>, - where <os_version> is target platform description, which appears - in the corresponding section of the configuration - xml file.
-<target_directory>
- root target directory where the product - should be installed to;
-<dependancies>
- single-quoted list of prerequisite products, - separated by space;
-<product_name>
- product name itself.

- -

 

- -

med-2.2.2.sh install_binary - /tmp/work ./Products/BINARIES/Mandrake10.1 /usr/salome 'gcc Hdf' med -

- -

+ +

where

+ +

<product_script_name> - installation script name (described in the + configuration xml file); +
+<function_name>
- the name + of function, corresponding to the selected installation mode: try_native, install_source, install_binary or try_preinstalled;
+
+<temp_folder>
- temporary + files directory;
C
opy the created script into the <Install_Wizard_root_directory>/config_files - sub-directory where all installation scripts are stored. Installation - Wizard will automatically search and call your script during the installation - procedure.

+ color=#000000>
+<products_directory>
- + directory where the sources/binaries package can be found. You should + provide the sources package in the <Install_Wizard_root_directory>/Products/SOURCES directory and binaries package in the <InstallWizard_root_directory>/Products/BINARIES/<os_version>, where <os_version> is the target platform + description, which appears in the corresponding section of the configuration xml file.
+
+<target_directory>
- root + target directory where the product should be installed to;

+<dependancies>
- single-quoted + list of prerequisite products, separated by space;

+<product_name>
- product + name itself.

+ +

Example:
+med-2.2.3.sh install_binary /tmp/work ./Products/BINARIES/Mandrake10.1 + /usr/salome 'gcc Hdf' med

+ +

Copy the created script + into the <Install_Wizard_root_directory>/config_files sub-directory where all installation scripts + are stored. Installation Wizard will automatically search and call your + script during the installation procedure. +

+ + +
-
+  +

Customizing Readme page + buttons

+ +The Installation Wizard allows customizing + the look-n-feel of the last "Finish + installation" page. If + you want to add one or more buttons to this page in order to perform some + specific actions at the end of the installation (for example, to show + the Release Notes file by using Open Office) you can put an additional + section to the XML configuration file. This is the <button> section (see here + for more details). + +
  + +
To implement the action which will be performed + when the user clicks the button, you need to create a script and put it + to the <Install_Wizard_root_directory>/config_files directory.
+There are some obligatory functions which should be implemented in this + script. These functions are automatically called by the Installation Wizard + GUI.
-  +
    + +
  • check_enabled()
  • +
+ +This procedure is called by the Installation + Wizard when the "Finish + installation" page is displayed + and the status of the buttons should be modified according to the installation + options. This procedure should return 0 if the corresponding action can be performed + and, thus, the button should become enabled. Otherwise, it should return + 1 + - in this case the corresponding button will be disabled. + +
    + +
  • execute()
  • +
+ +This procedure is invoked when the user + clicks the button. This procedure should return 0 if the corresponding action is done successfully + and 1 + if any error occurs.
+
+The calling signature of the script is the following:

+<product_script_name> <function_name> <target_directory> + <temp_folder>
+ +

where

+ +

<product_script_name> - the script name itself (retrieved from the + XML configuration xml file);
+<function_name>
- the name + of function;
+<target_directory>
- root + target directory where the product is installed to;
+<temp_folder>
- temporary + files directory;

+ +

Note: The standard Installation Wizard buttons "Launch + SALOME" and "Release Notes" are implemented with this feature. + Refer to scripts start_salome.sh and release_notes.sh for sample implementation.
+
+
Note:
Any button (even standard) can be ignored by + the Installation Wizard if the attribute <disable> in the XML configuration file is set to the + "true" value.

+ + +
-
  - + +  - - - - - - - - - - -

Mesh preferences

- -

In the Mesh module you can set mesh preferences, which can be used in - later sessions with this module.

- -

 

- -

General Preferences

- -

 

- -

- -

 

- -
    - -
  • Update

  • - -
      - -
    •  If you toggle - Automatic Update checkbox, the model - in your viewer automatically updated whenever you make changes in it.

    • -
    - -
  • Quality Controls.

  • - -
  • If you toggle Display entity, both faces and edges - of an object will be displayed in the viewer by default . -

  • - -
  • If you toggle Use precision checkbox, you can display - numbers in Quality Control diagrams - at the necessary level of precision.

  • - -
  • Precision - - can be defined by the - Number of digits after point - in the corresponding field. By default, numbers in Quality Control diagrams are presented as integers. -

  • - -
  • Display - mode - allows to set Wireframe, Shading, - Nodes or Shrink presentation mode as default.

  • -
- -
    - -
  • Mesh - export

  • - -
  • If you toggle Automatically create groups for MED export - checkbox, this operation will be carried out automatically.

  • -
- -

 

- -

 

- -

Mesh Preferences

- -

 

- -

- -

 

- -
    - -
  • Nodes -

  • - -
  • Color - -  allows - to select the color of nodes. Click on the colored line to access to the - Select - Color dialog box.

  • - -
  • Size - - allows to define the size of nodes.

  • - -
  • Elements

  • - -
  • Fill -  - - allows to select the color of surface of elements (seen in Shading mode). - Click on the colored line to access to the Select Color dialog box.

  • - -
  • Outline - - allows to select the color of borders of elements. Click on the colored - line to access to the Select - Color dialog box.

  • - -
  • Back - Face - allows to select the color of interior surface of elements. - Click on the colored line to access to the Select Color dialog box.

  • - -
  • Width - - allows to define the width of lines (edges and borders of elements).

  • - -
  • Shrink - coef. - allows to define relative space - of elements compared to gaps between them in shrink mode

  • -
- -

 

- -

Selection Preferences

- -

 

- -

- -

 

- -
    - -
  • Selection - performed - with mouse-indexing (preselection) and left-clicking on an object, whose - appearance changes as defined in the Preferences.

  • - -
  • Object - Color -  allows - to select the color of mesh (edges and borders of meshes) of the selected - entity. Click on the colored line to access to the Select - Color dialog box.

  • - -
  • Element - color - allows to select the color - of surface of selected elements (seen in Shading mode). Click - on the colored line to access to the Select - Color dialog box.

  • - -
  • Width - - allows to define the width of selected edges.

  • - -
  • Preselection - performed with mouse-indexing on an object, - whose appearance changes as defined in the Preferences.

  • - -
  • Highlight - Color -  allows - to select the color of mesh (edges and borders of meshes) of the entity - . Click on the colored line to access to the Select - Color dialog box.

  • - -
  • Width - - allows to define the width of preselected edges.

  • - -
  • Precision - - in this menu you can set the value of precision used for Nodes and Elements.

  • -
- -

 

- -

Scalar Bar Preferences

- -

 

- -

- -

 

- -
    - -
  • Font - in - this menu you can set type, face and color for the font of - Title and Labels.

  • - -
  • Colors & - Labels - in this menu you can set the - number of colors and the number - of labels in use.

  • - -
  • Orientation - here you can choose between vertical and - horizontal orientation of the Scalar Bar.

  • - -
  • Origin - & Size Vertical & Horizontal - allows - to define placement (X and - Y) and lookout (Width and Height) - of Scalar Bars

  • - -
  • X: - abscissa of the point of origin (from - the left side)

  • - -
  • Y: - ordinate of the origin of the bar (from - the bottom)

  • -
- - - - diff --git a/doc/salome/gui/GUI/pics/clipping.png b/doc/salome/gui/GUI/pics/clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..6d738558ef738fb4d486114723a367e9821e145e GIT binary patch literal 12933 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≦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 H{rCSL?m0qN literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/icon_about.png b/doc/salome/gui/GUI/pics/icon_about.png index 5ecbe66245ada30ce5437905e0322ee48aae34dd..0cfa37ae050a1c9a07e31e61a0c072c9fe048e8b 100755 GIT binary patch literal 148435 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 KXsxh8;Qs=cx3J#; literal 79458 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

5GlHB(yryB)7 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

IWqI!V<`xu50sOe)#>D$ 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 JPDHLkV1l$|WbFU| diff --git a/doc/salome/gui/GUI/pics/image100.gif b/doc/salome/gui/GUI/pics/image100.gif new file mode 100644 index 0000000000000000000000000000000000000000..c44d68ffc6b0d3f5616c278d151d300e5e732579 GIT binary patch literal 1040 zcmZ?wbh9u|lwgox_|5ILrGiT1yrAybYUAuMb*1dc89y@mI`Sa)R-@pI<{rms_ z4F7?66pV(za0~$*kf%U-fq~;IgCvK{iUkV}vTz71MVu&5aBOB3)=JrNVWC5ZpsLz} zh>J>YtlTC=E(sGEkFjd-N;p_-QgLBm7ZaGUbJNn}O$CL9cE5o)NQ+k5}Yh^>p>d`OT6N z8V`zB+}g*=v4L0j*UNyTjiJqA(jw~DS9+#ju3MpC^mv`AX zcI225GA*LWI>sV*v?@zEmr2Jn-|fHHANKV;uixL#>v`UeI0uWfA+A6XAOd~>hr{LN zE!U<}w(Jii!$0o6Y5N z`Fy@WAb9cO#qjX(Y-ou|+8Rht0%w&9F)xSPK zKzcRCZj&Zk4x9&H16bVIhNH)wYuuH&K{o?x$wB2yG^kYKhLi-Iw&B~8DV9*qZ9O^5 zkJ;Cim>buif=d-w7_ll{StBePCyBL^=4l#`Tiv>bGFuU*9`-%erkV(Wz+{!WG-9Jc zFbxghO4rP8WMh$vVy+qp3P?i@sni9_n^_b5kydlr*3-VzoRr_iN%=&p{hhqL9EXJ` zyzT8ljNN_LE~~xaRU3;vsgU)Qop&Mh*_b^^vo3I7t)nXRP`^FMzs0zCBB=qT+zk!I z9C?uLX8(SPxbEMlNmRmaPWXNo>b%YN_co$Ijb6aDGgTLQwS1Jl(B1h~>lTv)gN4sZ z1ibO#O1kBt{h~sw?6hYg#$0lu$jJf8cEykNF5mTh1!cQ9lK&)lQM_T*r8tVlT}nva zu6o(Y+Fid(a@XZc{)gx}$|(zP4v)wVS;Yl}1ZQMU-CvYky%Uz(5zdKdVkV7-!(_Uq ztJHe-W*%naNk?r#os6J}{=+9!Ifc*KXJES+G&M$+D%My8!4v2+(6U1O6^U}?$=bRY z7r++MIW1)iQlT2rU;vg1gf+TM%=2#Dkm`YfsqQqej1irf1Q?>J2W~bcm$p+~Z@agG z5`Z3w+C%hT0&DHN(Cw+I@K9f5-EAiOxhfqEf!M`jV)zZ0(apbfvtOqj9Q#~dRr4uj zil}n=igsVo>eKsC5#&z7Exqlmh<+`^a#gMgJ}Ueb_}x@kflZ90Db|a$zdht%#xwoR z8j`U+1c4n~9<|$Hw2WXCqj^I(gP{l};d=%7f=)6guF~q_*$)B11MEBTU4ia5U+n&Gsrn1gpjoNuIg4$^)m2W8NivES@hi{#x+B5i~xiP?n^36Eh<+(F?@;h;8>y_ciXN_^YL93PmWi>(ExLd$T z+`bSZ;En#Fmv`f<>*LeUw!;TUQonh6MxX2RE1A>X^e`xUeGaP9B;2^ZU*tpnkDf^{ zz4~XmW$@zLJw73B9m@buVNN9?B~kgYb>O?30Q98v-cUNnQm$T>gIIubK&N>>{ao<} z^^M`;S-X7=DQ(}TR(K@2-C zMUN-6sDoQpTZABaYmVac-r-AO<>S9vXrG5@uArl#+LCeLs&l&;m|u%nl`~bxq&3~n zcbBtXc7RPj<3{YpEt#60nSzh)hN)UR3nEghjlICFAg$v#WbFg{1m;eWsc>5F&=k(& z)HZ3a{*vyFEnlXF;P%~8C^nKD1W{_JEz-fx3T-94tq>)9fHk|#Ly0qS2mXj<{ zAxn|>)^o02@>A$@#>B^3$}FKxVyTcLT^T@dm$Y&6(94tVOb8M!fu_^I^eyJI)t?kS z;SK$rio^niYLtse?DSW^qYgs8SZ#oL8eAp3Sb7VPkXdvQaNnbsm**AKsg5NuazP(r zZmZSD8B^Ir=h^-K7v4wUaiXr!Fl8Bu(j8!Wj6EuL)^Yar$5(S1j0e1{SmC3AoG~-b z$JyFaN}W?JznNsp)$#pSLgVi9iph}Kdt)_DK6~pG9SN*+);GP|tlvkjwX;+WU^LXQ zkf~_0wAj;O|2aX!%Zgd;Z~4f_=FgWUGrho0g=xJ+Fb8Cz77?~OQ`Ru1>nA``R~y6b zkw}iW0{3P3U;Lj&p(1WWxS<{m*NzA`J}9*Y$-|0I>W&ga0%K literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/image103.gif b/doc/salome/gui/GUI/pics/image103.gif new file mode 100644 index 0000000000000000000000000000000000000000..be534c39ed6e4fcb2c89d35d36d61fe594218977 GIT binary patch literal 1046 zcmZ?wbh9u|lwy!z_|5d-onYcI@80d(WRg zfB*jd_wV2T|7Z9Q#G_y|1cp%v=z#nJ$_oq}zZv8?WNs{2;K;@ytQT=2;NXFFHhwji z6B`~LZe(O)Us&o|{w7Phx74yWlxxxhEs1kVb0M#ut}YFmTCOJa9-1Zgk5PyKw5OdeeNqRhxLM z%3d=vaLPz%Bs^H&$jqH-XJIhyO(UCaVOFVu*?Z^h(aKCKtP>orF|lw-?E9gRbZ`wH zn+Su#^mk9Xr!nTc{SJPe-Z9NwN}*vU10(Zt&Zx8klh+L=HnO&*9hhF4e0D>4(7oP- ky!f>oMd9<#G8|-l%r;5;zHP|cf@dMRas3@d=?)Cm0A1#YBme*a literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/image105.gif b/doc/salome/gui/GUI/pics/image105.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f6173f828f6a0cc9c921e2241ad06185d1d8f45 GIT binary patch literal 1038 zcmZ?wbh9u|lwy!%_|5OSa6V)Ls%=~gu%fB?QHyNE+;lT zbZ!!q^jQ)S*m$^`Pb%fkjs=U|C-4TzdE9JRaY<8Ry z84e8x&h;6vGVRcGU}#vx+@s}E^)Zu~k%i&HmdY(jLG1opH>s>DUUhwyH+zJv!2*Zy z?u=Tyvs&Br76my!9W5G3^O~x literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/image106.gif b/doc/salome/gui/GUI/pics/image106.gif new file mode 100644 index 0000000000000000000000000000000000000000..2bbcb4d94f3cc0890a91aac9e669445ba6907579 GIT binary patch literal 984 zcmZ?wbh9u|lx2`&_|5utp~0;~#C&ZJ=OiCHcI@7<;^*(5zZVdA ze@@{2dmwuM9SHt^|Ns9#Sl=iy8UjN;1av??0ObV+j^7N*95Nmo794Em5Y~!0v0>ri zb^&2A1&50YN4v#UJYUOkF`ntlePj2op6-$PO3#=@wfRWX);r6ku=eCG9tM#UvrE+DcRALINz4g<>9)^aR9`J- zhtAVId`8v*U4qJ|&as$uU*nm6z^jj8Ls^Pt)RxCrrOlVwIW(B%GOzVK?zdsLdH%JX q#`11uUE?E>Tf$3& z=Xwbnv_?(I3R)W6|IDOnYxemyu{)U>v=}sQY_#C!i8x)x(6G%h-^@3?QRc@nKf*@NOqh;i3$yZT^P`+Pv+^?%aWUVT-yOwuBWC&~n z|F;d`0YCx+E3BYk3Mf2`1cOD$U=kSu216haW-ytV0*P)WW24N>PzpFQiky#8z|(LF z5p-N)7aoVhE6^n*h0+x=nH-_OmD5ltT0{hmMoUDY5;2&>#KbfVCM_+EPN(PR=a=Ge zrKP1T7K@F?v&m#Oo6Y5NTU%SZ*tD*$uED`U5gsoRi6nTuL?W5N<7Z|hGcz+%5=kmb zlS-v4c<>5~wW1(fk-=ax5=kb3$z+O=Z7ayPT@7F%OjKC($kKgBvT}2W~jQu+6CMs+w z&5;wG+($PY^g&D%yu`oI`QG7QGM^M&zU&?c*>p{dE=3S@rIz5DcuMY(FP8aKLhaM~ zuT7Wro^jNtoA>sYd||{ge_Xs5a7ErF}^v&vVA+hQ-xZo$j%c$2H;SZ|7WSm=p%bM^Lcm;8w;r$^HHy&$B~bQ+jYA?z}Wq zzAp;1Sb*rBQZ6*k=vAd*g|VabjkyJCk-xisttQ4PbhOwQ1Y%I_TZ#~+aJQx0 zA|Mj1R=Sejby%B_RbWwgD*g1GI9s8^Xt{3KtR8*l{wx)44=m>D9-RjSYWmrpBkCZ= z0v>Miys$di)B_B_iN?W7tR&Ghiy~#zy_GwAKfGQ-|S z1!}W{uFYJXi`6R^A(yLArG9uwbTaxw`@v3^*Bw|UJpsz0MjX4~j*Mw;$kRBqs_8o5 z8`^6B2_k5E^5-v!P)8^3``)arCzR!6H`8(-}Z-3vm^kO})VYS$;V;Hm-Q1Vu5 zKfBF&zeU^J{x5g^_bA1foOs@hqNOtIW2#m4h=PtCWtQul)5#Xw7r!YexM_q zw}8_b;(h#F`!c%GcM|BmTlRo~Uoy%Duv)?MZwK)_KgW|Ru_JEt+%Vydhu=L5{eeslNz8CRf6osxd%)2WvHQQO;_TdHb9 zD5~0awArh#2*X`D?MaqKrs`u$dIoP2|3gnThR6?3<=PysQQ6?VQe7MCn-?slz1%Sc zuBPxf@0%D6NA%v+ST%v_0WhkOp=y1hGs0lGFjd#6QDRZWKjBL@Tc5}>CR7>%NRUVH z3m|xmUp%}PXZlUVg|MkX=+0_k5bR1UE5wIIZSnSa`}|RK3C(b&-n+)YE6%QWxDZNJ zZmSLXNGrtz!X^d z1^oz4u~MGXn@aMDcbgIh1$x;qJhqQ3zT#S1U`J_0tKl&lI1`f#5^!Don0RvKS#qVh z(QzlR^C{;F%v7TEOP$$nj|98QS9MiLcglEJ(neSfD!$GmMz;?d<85^Njb}sOhoq~tu3P@#r@EkuPn!yr>a4&iuSWjh8&}#yIo!b_>U#&NlMz=8#czy7OJ!)1-=$`%(9t zx-YsnIlab4_DQC#rcT&X41#jBev1Ob!Aj~TDFAS$M#WZeCdM0woCl)(`^;b`l^h~| zzO}^~fH_bKS+_4f6*@|f*OLgO$bAVnEI)u&>4 z%nO>ZJB@u|=;SEyx~As-+b+6t>ZVpkJ!a{xujvm@x40c0Ty{8g-(S2h_t*0mA@OlV zab=HBet?~K$P0atrH1{K9C^+`lIqeRh`wa4@X+oe>}s#jI^YlHo>O4NV^>je%^zj--PcI% hzH#4x_3x{9-`Hpe_KCwK>(~2tm+Y?MJptg*e*p-eHLCys literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/image77.gif b/doc/salome/gui/GUI/pics/image77.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef7a62f32ecc9c77d60f6cc09e7188eb81c4dd2b GIT binary patch literal 1022 zcmZ?wbh9u|lwy!%_|5{{8#!K=A+j|NjjCfp`>*hQJUE0UeN=L3x3J<1vFi zhm6OD1qYisgtcN$Y*=`>T|n6@CSu{DqurvyDhEz%WNPhKaFkk5u)wjAnVqX8=H#S9 zO-yV&bEae}ENx`hjg;GPp!i@TyN&LQlm`sy=lYpA1SA*^9%5L^!om~a@a2U&0~41< ztLB32Fcxm9h@}l*Ra%&t_tf!PZ+pW$C2+48gZ8zon=>&-kkn#8!pM*}pgoaH`tP3PfDhg(PWM=1;$OyZ;p!DLUrT*p> hyt}u(y}d))`^MSb+uz^cr_3Smw`a%4M~sXN)&K>ViW2|; literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/image86.gif b/doc/salome/gui/GUI/pics/image86.gif new file mode 100644 index 0000000000000000000000000000000000000000..339733193ef3faf4e1ff413ba156f244f33f5502 GIT binary patch literal 1017 zcmZ?wbh9u|lwpu%_|5$6Dudv zACr|^)Pv`9&SPTjn)r%gwe#GxyI$L#g)d4J_cP_b_QGuv7xRj(H@7Ws*v&M@iTA+t z^@pZ~@p8!7EZA_PwdnsXnKcO;k`E?rot66MhT++EUCr>e9+SsO2Yb!Ak9qIILrGiT1yrAybYUAuMb*1dc89y@mIIS{;m{{H>@??CYX z`~Uw8|ABZEjE2DQ3IQFEcR+c8f#WQLEQgH8h6M+kIfS)hPHb3sxLrWltfON?qboC; zOvIdy36015YpwZklc&&M@O^xUw0u+|{&u8E;;ZSHu zzrg6q`6ouJ_&~s9wx($+7ba^4EN5IGW>9&lA#{NgtAIj5LQ3PR_+&QL4IAH{+LF~Q zwpa7YGtV6c>96K?URf4CpNolGY)@!IA_Jq4v+S828yhFZd-qfBsR6N$$N;* zP+)B87T{%C5%JN%t%<=btmQ!A!sf~9&a2kEP;m6_)=0L>aG1Qzi-9-9%wxmm1B@&} z*<5QY7dV`lV_Eo)$7)Mv;8G8BubKb`$IA;j7AT#K3~V^R+IgW}$1DX01}3%xT&xF7 zULIqJ<6n_$5So2r6C+y)>+NqVZf`1_Z6x7SVZgLl`|K;%fE^njFJg9@)%$vfQ6h^! zJBL8Sw2e=X@pCY1crEyxenCiIS|j1W=a+{T>dXK5xog{7)*Z#K@13pQ-gN&!Gq=3n KpT&n77_0&5X@{Et literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/image91.gif b/doc/salome/gui/GUI/pics/image91.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e93c1c720f198df9a35fa5f0cc90246341a5d08 GIT binary patch literal 1010 zcmZ?wbh9u|lwy!#_|5d-onYcI-J2ynp`w z{rm4g@c;Y&{|x_ucod9=z;Fox9gs&rd4YlBI)fsIjK_ur2b(#BwPH?eSm@lwFQ-=H zAjo*MLr9UqjWIKpPcU2 zWLuHL@Hure6O)DA1ItghH_Ho7i90*%VAJ&t$*1S(MmN5_y`%W`xw(dk4h+@+U?hNy literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/image95.gif b/doc/salome/gui/GUI/pics/image95.gif new file mode 100644 index 0000000000000000000000000000000000000000..fb293e23475a5b23151773b875982f47d76a505c GIT binary patch literal 2711 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 QD!+evlt1r{gaCsz0F~i_6#xJL literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/ppref1.png b/doc/salome/gui/GUI/pics/ppref1.png new file mode 100755 index 0000000000000000000000000000000000000000..dd91013ce058ed9ff4787523113ccce30ec26ebc GIT binary patch literal 27312 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/pref15.png b/doc/salome/gui/GUI/pics/pref15.png index 101fec3d3cd3a057919daf6668c5e2c71c7bc5ef..10053fb116654ba52217722216fa7c83f91077a5 100755 GIT binary patch literal 29051 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 SAOWFJnBzvjl<1zh@_zu8vh|t( literal 20075 zcmeIac|6qp-!`l|tMeo|RS3mdwAhm^du40LzGa;vWY5kpMjKMdo;}(3>@k>12r;%H z%NRR@nX!#w7;}H7-*vs7=eh3dzF*J%{Pq0t^O9!1zRPEMFUN7b-{ZA`o)#-J4>J=J z6D#DNx)Br8(RJ`I{Ld5Mh$yzQfQjiJCW!hSlPAyCu<#Hxd6vGhw7<2t7L{t<9&XJl zq<5WD%+1l;LQMnz+{dJq*RYFp;Z5G0$u*lu!V;S z203n%p9g->+?w}^$nj5)UhI%?Bpy}wtg_Zn@5c_wU0+_&{2!k4<}>FCJxt0c_r_W9`=>J1+!mX4c|DGgyIdak*xg$2wODw%cYR`^@V-`9Mzv{J zt50>1$6dr$yVheJMTD&r+QFvi;e6t!vwYxk^S??l@7m(dJ{1c$Hib(qkkZBZ+r-mN zZ;HF!uj&>ml``gZDmW#e<|K8@S7pL{O57s_f+Mya5uY)njH zrE!&*e1$uB=1p{BrHs>zf|Q8yn8ld)tqau;L^sLgr0neM5cky0s>eO}b>kIzRrySf zlZ2bA`*&s0(Mu|_>29qmDhk0WI^m}p=P#pY-%(*74VEW85|A{E$Os}pXD5Rzd zM+_C0n3i_C)OC9_h{(v8#+x9`+>igUTbdb0a$Gn+8R0Vdz4Iv-8Dop%!HBw?Su12hr1xbhmTuwkE<=m@E|Z_DLPA33y&J)| zVB5R=f*b|E3e$4Sx?0y!@x6U&3Cuu7rd8GoRp^Lc3v!BsXY1;SRC~VBe>VzW`jIf; zBRdTJbDgNXF5Y-bEnI|tHLZ*(LNLWzPc0RN_~^*mSAz8$#izkC9ZDxO@Z3w=`*E>J z-qRwqR#gkmHyYRC{Yzlv5(Ssq{>CkfCTo_%F)P#sg)7`frU-s98zht$MeAMNnbYze zPOTMfX?(Ke5X;Iir%u-B(&cfUBi^?N3hdJE4~uZL+ou4`={2B6;m{Emv!ajYR~ulw5>jC z88_}3(+OEImr~o@^o3QZt{f%sqxu}M?Jox_qZ=tG6w1gbVSz-dgppT-L_`#!7t?z$ zBbDjQyLF?srFnURneuQ=85fLUTa%vq0r9OlTru;sg;==4Wafux7OHmqw}^^F!TiF) zQoT$CZEfwrF)1e&f>pd?I&w2a2Xhs&B(+BLY~bm5g_V9)QZ7|eE|8pFw}fPMsi*i{ zyfvg<_&h7A0$m&@gtxBGa}z2YUHhgWG9m^qEU_tdU05~Oz#(L`WGYxj(*jNi&%DXT zTo=42TdHwWFdftXmVz3Rh|t3mv%~};h~Ujj1npMaDz$NrB7x#xq28-Mt*E&Q4J-qd zsLT-^Qb_J%w9Aw2W9~_*3kI-o8;QQLigB5v=M?kYpQ+e=yvxBoV!)kx`uOfd?M%8L ze0{9-3=YHGSVwFwirugE-}*}SNaKyDII!a0(@}o{m`k(WU;$4!HcTf{kxvhh@g7D#=>Ym#DN#QAvpUg zs?~Zmxh1Vq55p53MYz_`r#eT9E42)!ecHqEP`|vOjyC1PHlU^3UlkLiAFuy2rdNRP zszSSb)9GP;D;4r3a|MBDt`AB5@WllqbMWlWILbbSXR^O?n8XN9%q6C|Q6cb$OL#6=5YCQz9mk z=(unEntDCzk@aM^J^3$#wsbxtm}VdA-e!-4pM7b;c+;a|WK0`=P(K}3Y)U~P(RCgi zB`+J&bUbNe_7^>=dmEkn7~z#8kipl-c!$eoWT?w65aw2|Pp!%$+QkvAW?LOHN$Vro zEN`W#B!Wzyr${vKRc5)>R;=fNJu7bJW9_#jhFi#>$K>7JIA&RBjZ%@ffyj(jg zVy`SIswcy`}CbC_oMg`GEJuzq9Q z54(GMDcfJ9kTRZ|tnq@S7)v)?)*s7v!_Yswxxf2e!UWeGPL<QhdDH%}tgI}wUx9#L8(4J*eq1;aF2%vWyPjXHKd2O)>(UZ&G>es z(GC5r`OWCapOEFCqs>y3Vrg%ikh{8ZBL~CQuAwlcr7x6kU2B7E`C}T}d-MW$e&g0+ z&q8o{iAnKCbKKa6rgHba@kF!CwY4`;m)!|hUKv_+s&;^hX#rL%HX43M5mij8ip9kg z;$O(|nKaQPP0MFXxp0S;5vU-w9OWs|1;yiFYxP4F0?ir%)(2!{T$X|COFC?>jN?hC}umG;BBgT%&#;Sa`Z2n1ytxVu>P_VF^YA`xKVR8)C^@gy0`v5G$ z-s*PhQ2UP90(!9#XIuw~Z~0`dnv`3hJQXMCFu~F%*5KBeb(Uv)S2mw$CE8|}Fcg>1 z(@Qj}$6BoTZH7+m&?L!0^RD@8a44r$n5Y@lflAYO!3VYd5ZjO(Qpp9SS}( zu{TXy7h<~7Wg>s!G>F6wPEI1q$~K*`{G&5%5gY&;gES;mWa$Ur-cu2?B`4gx$>QPV zrC_6w7Gj$-3U1QtO+BQ2CnO7N= zb%7Xt>hhaxzs=f!BS_KxK2ueD@gu*XwH(Og!C4ZKRO$oFVYn;DKvj;1o2`y6uWjxM zCWIX9(zHW^87b~$^f!q`Y;RREK1C&4n@&kOCa zw&)H%170&VYyIokcYpkA`jx|crA5Z>e|d4$&}Z}FgkV=%ujnbvi$z#yx=8eAzi&csvnZ@eK zTb4JQF9R7TT<%K8WOifk+Dm$8iFC;_?(*R-I3{r-P~E>EDX-(=m6sd(|*eWbz9IW<1oZ9Sq14cR%>B?u#Bh| zF8?*FWu1eav1cE=d(tsJ@i{u)+~VxhB3F+pfiQc;A7a)3i8mH+%xLW5xsAx4dHpX-FapYCqw0Uu8lW(z|on5UHn$HG7BNMltJ$t6DqqFsEX`h6u zOtFPQ;z1_vh~=;R`r;(A=h)Gs!}&T~@WZ_&qEAaOWrRvzP0Gq5Rt!};=mhMA9XTfL zHT!+Aarvg%gRt0^$`(h&XJfjK0!S1FSWD9u%W~3?j7h27fzkBVn;N;Aae%T6zFMbY z+~c>G*Pk)7vSLQuC+Z#%I?biOe0tPY`|#^gzvccrrz6z%cL+V^txpCnlkr1ZZ#cyU z=erW#5IozXIADaj(Zu)fi^l6*MXp@YXn~Q93=H1ED1AYbA22SMu^K18_31k@F2na2 zpi5gj>fqpDlJ=n7j4;`_6;)B*e2%l^Sn2L{sUD)ZYC`hNp>=slC6R>FlzD!z@bp&Q z@({o8?lN~Y|A56|sF|`{(;LA?Rn)EE1Y17-{6gFNiGnRkD%!4cbbUEll-aW*D%ABF zW$Gh3DL!vprsT=)mvli$@aeqk2aDl6baY*O-h^kPo{dMNo?eO$$e6mpo;qXL^S}$V zr{}JC>cpQJtr&VMSI}cLek`w`Kv+<4X>0++3qYH^Q}XlkoqLkS(&T*#l0_|MO%W2P zgKAqi*%VV@V-;^wY9`ilNL{5asnSy`r`BiM$Wy^2NcV#CU>(kv}rc(;h>;nuFx zR-Yh^JkZDErLX8m2+Vw5LjBxBB*0(D(kSl==)t9DRB*YM;GQNJrgTTqUj;u!Bfx*j zBp;7;w7aL|sZ8CT;dGMc=&XK#$knENm7~f_>fR9;z=3WFs#%9tWU z0Zg&67A|zZ+@p1G@$&veookAM|Jr+!b!W`QI@i&PkfjrBd}W_L-DvOZbnS}2GG6WQ z2G}V{JmA&^mx=oF{a@BrPePQkaMe($f;<* zvHf+$rg|cik1DBzkQE>C>dI$QEnNyaZ^VH}Uprk`W~S5XpY8su@C5n!aEZmmI+WxC ze#GHik_`wTOq)UpaF*V5IrFW>UK!tI0~zN*b)&wKG{4mm=g|tAo2S%(V}(Cj&ZZv} zzP-$c7%I@^b;q^ZfHdfzJ<$qBj@LRHe;`J(3!LNRET}{sHf>9kT;SlG<{d7r$g?lJ z0`YS_DJ&p0VIznC<%}IvP)CL;T!oYv*OY|nD+lD{>pU}cBXS*`50%|~86*Jxfwn0| z%d5m?6pVQ5Lqg~G{6O}==eCkTC|jh9)0vwy*<_(CAm zBpVqU%Q*f#4=jYMXrjtqtI^sVH}RN- zA>bC)Aucnm8$Eip?MCfZC+<%Me#kEy9>SDa)JVGwU*Fr^{eed7lbW|;@-hfgL6kh5 z!7tB_)q#lShac1c8^OvW{WPV$qhqBKK`SLTZ|O0B1{N6*kP^)+rw8BPX(tlNYH&?4S7Vf=Qi3y^MG z2>KG{Kg>0&LWR045W6&5358BiE)V2lvwgBhiCv6kJ;@jNp?~vR7C&NTSg4X(xh!n? zr>r2>+t_~Zm-o&O(&6hQe-NuwnTvb=5VpH@=mj-uor}7q1&)=ngJXYof{FjoxGDXt zzC1mNat^#RxRXdte_+@Yb3xf?$`~BDt#Jm(jh3IE<^b?qUV-=g`4r-PQ6BcaRQ1@2 zQ%@VM#my6ntx0H`qLD4 za5o-#@4UNeYIS}S{?U9KOXLzyYqyLuXU+`Qb}BkhbviJ_FKMbe@iBagmLEhv+kWcY z0t2~G`1#kZ-uLotrA?Qw0&pXxfd%-(FAM9*I~n+8#3x?ChQ zZs?f|qL1r#1nXzR1SgM?Mj+Yc0o@Mf)#o1&RPK6o8|`It&fDG8VIq^dD#Ba0zm(xQ zGE&J~G)f=WeP#*=Tc6xDw6@OCHvNu8{0K zd{UHoM+ zV!s%5F&CYiy*#<+Mh@CO3yJS_c{19H!+6dc>1NjH5-c%>4>|ZDgC7(vm)p=gHh97Y zvk1cp*UgG6zv#qU%Ue0}@rEQ&HKa`qOrcm6-`9fpdjCr<{#Y4eiRrPB$!t$&8}r<3 zs075aeupcXuG1M}BMzm!0Sku~sy-iX1`qlIw{9@w2*7^q`0SgO4JVfhcFjC>!GzO` zJsS!vkqhtAWQ!`qa5PCY)af__icdAoG9jD;afszaOX-Rn<&#F_ky+9<;~#eLB=ew^wuHV*Yh zunGC-1~(fQTnZi7f3r=(7J(waM*ykmOc6Dqe}W%2kt7wVs;N5S#o+bvV@gTiFL$?OJ_LWK%8O*Ub_)s!b|@z;CSTkYDJ#cb+LvPEg?ATMK_ zvf)?f*bcr`w9Q;^Wl)A@vz6d!RX~g+8u-n=Z68{0EZR_)$)RZ~hzMlJAaAV<7g};T#t= z0g2AIQV}LpX8-=o*|RMka?Z1Y8kES9#olz8?Zcd?WzHNT7Adk=ah`xhHvFsr8rQUo z`Bm@`F`D64^5JsTA-?v0yPm~Tl_)+i?L@Q%zN*X*6|@)Q+2k6U)2R`?F|5OtE$ri* z9q+ppJ-YG&9lH6ezAW+aaTRgdiXWTYQcm~cL#g;{buO5ae%Qvw2Fz{Vo|%npG)p;n z`}?nJwbU9+ytf&eSI(mhlU+U%b5T)xaYHgHDoVIM6A)KjchAB3rK>veX%VvKSeV}x zNO0(6Zeez)WlxHP#DE`&An!Hq-hCd!Cqg5cBvbhUrS?O1m@@C_j+U^Z4s+&`ec3|p z-o2aS5Jaz@_jr`H(Q%5gi%xpk1NDRnK?pBuyok0hLA;}y;x7(G9@6%8;sL@gwC{{* z?1^$6E!5|yco`YR+u7SE#m55{TcUQ7EonIoZ1_*R=`YV5Mgqo^UUlTbVs<}UceKPS zuea08Mw>N!Xtk7U*r#)>QM??5pAEg5S{K?$CvRoyl|QJud*sNG4B#ScD1zihyX$_LcXT2~v+rX&uvm}-mQgWUrX z2L=%PD-ghRycdF+_0%7~TtuTj)1EB#W!jR1gXb<>5QSKNe)y<$1FY54AZ>z> z^Z}*&(8}xtD^K2!ANRA{uU2h74I5E~Yx}%dPN@*~~P&TE&>#l1p$s z&T^MRpP%@C$^gBbr4TwB*op}POJL0>prkY@<2`@xRd~3|YCVBRSy&H{;*An7Yqtx* z$vSa`1c9&Q=gL{=7K)oZ7(r2BRJV&)l^5}3%(-iVx7543y5jS`*R4v=MdQs|k22)w z=~%TekV}~EzhqRsnBM>So9*9-Gh$l@3%3G@PAh|y?d&!`^#pEUi?0P|g_YhdJ{eew zDXDQnuS|b^5ueu8pypaR%B26Gv9L zsKQ01z)#=4eLKg`UwK6*`3XSwJgTA1$dK*j0oY1$;W=*ZVjHBt^X~f0I6#_$_*AE? z0kkT;EKSB$m{D5;8uIXmJICB7>UAgT-G|!PRLfN0)Wr7TXW9~Al zR1>pq!7nFIoG9^G>f@2~$na<(n;k!Xd_e??^e^8bVpmmEf_KXHeI7r~3uommVBqwt zS2d0LqMImF!B-#`75#@jQ8Y8op%YJ^4K0Y0gaBrlnN(gTZe~5tyUDyBFKzez&sVQr z;a4kB;s%Sp3Uz=@n-&}8-yS>3AM$~fSN6%*=f`0bYyi2P3kvj^ADx|@Hk~)#R;S5^ zv51D(H5UTVb6n~}^R<79Pw@+k{l=o=e#FVf+hZ34CUY2AHrA&BeQyxZY)qZ2dCS3O z&v>JclZ7s0r*Gunw0b7d{gzv5`-ed6atme3*wL}Tvi3<1hlts|c*dL(6VJ(K>b0zY zV_A??2A6#JCQN3^PEKCjI4CwQoXmC|F3Mq3J?OV@A+L^dO*l=pf|J6!U&>XPozdly zGc++t{1~iW8c;c9+5Dtx)SbRFiYo3Q*i<|@=y%K^qCvzIF+_@Z!FyJ*+56;Gb78pc z>%k^*uu^-8J)ArT8)astAeLT%6c-osY^1PPkC!#=6K7GnEpB5s3F9rL!;3ff31hI$ zu4_8wsGcOGO^@4!(-CE6tq+))ZaZ``hg>nKanx0oTafQfS46|b<>f8ZNc<%~BJVLG zGX;l`fPm=7D5-K>yeJ0Yfzb^#eBT&Qh*%CE^ZTux&up7YG6FD)=3pue|K{K@{on>x zcx61l^s>NZOoKj@vd8WD(|}~#!Z9NGlcsae%SYaK`5jD?ViH@#2Mg`q+Uw|2M1%RJ z$-1Y(umh#H>8L|$DOebhCau~6z08#jm>~W~oB+?QhaVXCT+MEh0;M2|_Ojk)1ml7#4TV63E$WLf}5Ko>Oa8V2_Hd|6ET3l)c<{`pXfD zS4c=RAMf7#k#cC^Xd$X%Lw~6`Pz2CPpvVv(D!PwLm($U(avP)>BfJ4$gImnmjzeuF zT6W`;#h?X#tE0|eza0lTBlCsY^Ewx@aEr{Um~N0q6f)G%C-s)sN50VAN97RfT%e>1 zNl6XOg@EM;-oi*P;{Eiz*9p?IaqLvPUM`oZ=Aaz-{r5NS&`4{Q;Kumem$8p)#wM2{ zPVs$YJZOFTYgBBkL@oRg8Az!fF2M<{54K)?YinacmIK>6bLop(eC(^h4Se2;h4| zRra0DX+8Dj6Tap@ZQ}Ee96NcAN(}o*#Q|xVy3@Ot5~fIMuIX2)cbl4>iZZElF%4+Z zS^5N@@Q)?DDRDY~!t)}KlJ`EHY>gjBI#q&AT~YB@$h54odv)~a(I_{$|0$)EhAc3O zB9DG}H1v2hKu0nhTafH=MCgl{f&1-+d#kF^)a&~bxde-*LVy{kH_h!2t5NAR| zLmfs`fv57DO^f6tT+??M%!9y|XCfw-E?*XqMgT(Z^+;j>NNdJVpMDZ_o_YStyV06h z4fHeQgc!8d`gBB_JwK>f>lM~~*#qn3w=xXOMQ@l5iMYO_5S6CW`6AFC4dDwcb|9+-|>0B01;gvTj*QKP4d(&iwnh|J`e)P-Tzj*$Z zx($RggN8_tJ+p}H)ZMq5DzZkHQgd_l$LcwN9l^E@8Y-~0Go`G1eX$p%%&zHYB@W?- zU;cGAs-@uL;?1DV$I-hzfA(fcS!F8t2@eSG0NIWVg4mN0s~Sen$<&BX@e=*8`OtHo z?o15!G0oTJfLCvy1$6mIccM^KbTorNpL-x?Am!Az{U1|_fBdg@lncfE{RZyXdYfFW zcKnY40b7}vH_^rb)o|-qZQg>dJ$dHypE)+G+W-bk)lD|ttlTm`V6hpPbmbw61b)BZ zEAJo~`1lGFQxNNgTetZU2UX@4jYVagT)c$6POVREqggx+cz^-{eA?`{==`JbKIMy+ zmX_;}cbDSxUYulGY27CdfpUUL3(QZ<`m+HL)8Yj|W~L8<1o61e(iAv?!{f)xYhyJ) z2y@SY7Btt=zkInJeO~e|G;}ZDHgwNH#&x8ue}m~9fp{lChsWUegZL7i!=TlVUxU1I zNoXk!0dT@7P==gZw)zx#lwq~WVm%hvki}G|?Jcxw>F;`st|>4Vzh0TqbKFxB1e{01 zYOjchEP@)xM2qw zq)~8{8*`n=33W|PmtUVAF(hiBOluFL9-Zg8_4EVM))3q+qXB9MAkacCSd-w@7i=p1 zAo(#=;ug^VM4f#jG3mf~f*?cb$`09tRBY3|ADMbG*o&tZ)g(6Y6^!t8EEKd$?&ldOUty*EuiC!j6xBF zDmNOHe7vtW-F#i_g9aIa-}~6{`^*(Kt7j)4o(3>*K^YVvh0DH8RZz7qe>ryjpG%i= zexrz236$3n3$K6oJ!uy=n-A)A8%==)24_csn#E?;-KyW(Q$5oQ`(fx<_uZqDw}c~aAFL?C%0Xz5LpQ~4(QqI#%MnmAI| z87c<~VIi+xk)wEK_s+OpkpzkwkW7B>WZO*tvtuVG9cpk{<=3)9sxLU1Q?ROH z4dnaIF@?n|dT-wg(x0jRbQB87Q1H_xuV4}cEy~SgJg2PVL2l2lt(6AKAS50*=5NaO zHqyj5_6eL$qYzc@roVF8tVv*Go~!|7z!-9l&K=N5h|yqD%aTgg&ZczB-eP)uUJixL zRK4L(Khl(qWI+29(o_rI5)5CmO%|&RK#049Hh%p0(U-dItf8f)6A!+IQ3!;Frus_X zVSuoZkPz-c!c{#Z@KpDyW_hS80H3C#;x-)I?8U8cDrYd;W}jlMMNxrndVy`gw$X#m z8&|Ggg*BT&sGX{ZIedo7%-iO_ngfWF#l$#lQfg}P))KlDK(0wjb6L6&EX{q+}huvo>(nKD&PfZKl(0k>fG&@zqsjMaY{eD5JN~ z1>mK$Bob3p?Q@pwD{lSn@rd6X*{p=6`)1>0G}Zyc;( zN*NL{WUxO+jj`LHVAWNsa)hbqPvLGUtj=>LC`4)F``M^Q5l!CK@ehC$x`MmH$aUr{ z!xOt0O#%*ugNKL{tXnsccEor=*7LW%%#|=i$)t>ovboL}MnQ>@?(W^|JFEg}8OXE3 z;E-9mX~bzx>#q`eURzs_Cq~=>8ER1Ko49cbRHr)akwBD;=9ba~Mpa}^vL$Y{V_!^$ z?o&t-5SP)4Ou*&MmJgU$D~p0uH|Eba&BZ9rla?x%=%E`ShLpljt3t0q;iH%4!+QGk z$UyF5NQ^kshfU!w9TpMox{mSpu)`L#GuL~%IG5`7J^^IE~ zvQ(-H;T73@xVckVMo(XrR(s;q zg%2oIdH`kbBT@g+sPUOgmo6!I3ofy!YQ^&T(XEd#-N*$I^e){*z3hwm8Q_hh0LRSF z%?UuE(3Z_^5n?r;GOWmI)MI=db3*sOg-r>GHI^+vc3WY`fWpd?K1Cm;7!0V5X6h&w z0<6bql_PGQoxS$t_D?2I}M2ofyX%mrn-Vz?XI5()GZ50^0Sg<=EH?UzuP(D1hj;u zrA@3F+((xUy=?Vmfmo%!A2FR;i0JsMf@^IfgxEqCpyRKBxVA&DM(swKS9L#S+dL#S z-Fa~$K2Ja^=DMKZcbZ@ZfWRwR!NdUoZh+EK2C(MsQEMOF#$Ij^+&@ceEwFB6ZLTlO zSAJaSXzy_D_{nYCEBRk!k1~+=tf#a*7EN!5B9QaqFKBNm3@DV!O#d7l#h&zECAA|wiqF$o`&qSFR>^FI0rJXQDyUHlwdJPL05PLWMu)yt!t`&eU#~Gk^nGeKu})4 ze$AkEmY<$JQ#n{ygYV8n*w)$9yQLm(Eg-br#X$y#kGY$HOzkq4`BH9e+&+8(SWI!b{R>!Fx4WA!}h4t`ZU`(W)czyZZh zzWNsxe1FW zQwVnk11B~?APmHc0t5DQqAMmPCeCB(ICpBUdxBahLl(XQQ9W3HVcFnO4g^~~ATgl5 zdl+c73~>x%1ZuiS8}Oqe=3?m%VPdsM0yPZM=`b?D6G%mxgo%dH23)8Jgi)B*%Th|M zjBO^sD8%xSa;w#XbPuBxahuv;3NgftY)|Q~zlc7Z% zXW_aBfPy;!3P9c=ueY%=F5#Qtl%@Y5#!*QKdMQvAwc|mqDEq2*g6j$C=`9n9&si!q zbpRgYO%t>DVdHx-{)xY!-tg_Oc-R!I=@vj zI3UhEK&(uY^QoP{ae}r5VwgYUC-9N0zv05Uyh{Rc=Wsz2D;>Uq#WPc5u*$%r&=bL zNKuVF*c}FX`&IvGZ^BKMOc*r>n!R}}pYnFkAykPtCwodwQc^NL54hkDyl)AV9!i{R z#<}3?{n8msGuB6V#j=HFkr)BEzAIQMfZ-DuWpCQfgeT*5iFswkga@+Mp117=10zs2 zfN;M>>(M1j=(g7>2Cjb~qUfQt!+lcqnA=|H5t&nJYT>8i1Q|VSpmCJZtgyfPBkm17 z;@1Qa$CKLPa0&Gj=jC*HJQ=I7_9Q~_#TX11DS(|@IzG2Kb{I?|tD1kf4g(<3#|Kc@>w7z3ns z%7O@YczF1GNZ@#}c9O70jGr?S6tizLjKaMETL3!mfRr%AfFqmbhg@Wz4gV0P+Y52L zv%P;$U8(Ok(FWoLXyr@T?r&pjL~E#PJ~=$tBhF2_pGx^(>Nd^&5`3UuA)k31`mrAX znPdqoafoG;uXAhb7U+pL00ol~PX<^Rj;;{UAC-KGlNKW86(%4+IRIJ@)KLJPwbSK1cc@)b0h3-4 zfP*inOab-WoY0r0TnY*o_u?JVSvJeK*lHerrl)>VI)N#G9!LXF0I1AkNl~!ju=TGe z{U}&2oUp9lib-^^OGdJ&?MLAE0BPLcI#jN_t@{52C|#iZVzcvKAWG5#CRdBiZ*^Q3 z0PA<80}v5qW+eoqgZtcobXDBH^M4@~td%~{h5=lFDu0CixN)jC$SJ0?UZWQp&*(gJ z+q=oYcJ}){k`CSH0KNtvtgv7%<17LS2h6X0>QJ;>4HO{~K^6iGKmykYh#v!1ma6>r zWxgPFM&;tBloaNp21{ku&21n8lz=)UqyGbt1dIPzi?FC~Kxhnzz94Uulan*v&3WegC@^>at~%wG*YfJ5oohvTz;u3r{(^UG`m#rvKG^*WhTLFhbPqB;y!`u$FY5o2 z1783A8y=m#^xwiB3GbU#fXOHS?$=m9DexuzTqP0+EkzlBu3v3mC4zAZU;E!8rvLM2 z{;PWR|6#EIzK{WQ{}(&?@5TA|;($8DzuoG;jdTC@j{o0y$1a_KMZ8NS!@q2xr!xN; z`5twZL%R4m#3vJCch&Gl{$`ugC-t*7YSH@nED?ePYPZJdGR0iBS1!Y{U>1T_tb&m+`fDibZ?zu2mNFJKK0)# z@c(WFX2#T9nV3%VF#ayUzfI@gEAT(9fDs0B>;pVkE0(x&iHWH{y16h60kj82*9*0e zM$~GWV1F_(`3jJPrUP1=Yic?`r1lMS{XdLOaiM(8v7(a#^8U<$_Z7Pw`vy=hr#kNH#kLTJHszcMNJJ`|noasEZA=)u@&=Wo1N9 z&>=AZwVzdwvGF6j;vZ+4hb3U=VpaLFk+VLAqMY{Y4lm}?>D#?e+}z$qR;boz{ONo& zw0A{D(sQc$LA{&BFb30Jz0hL^s#;axlLEOT*w0?}A)r(q3j~Pv<23Q*=L7x{bs{dg zU=oC=@d`d|;iRM_LvwSk($TV*b{)=6P;s!|+g!K^TLYDeIXu5A*4aLl(h`(eFP0`P zE&bj+?B&YJirtP{jr~S^JLAgLk;*qKsEU~I@bC)0@xKzTg3i>`vlKm)98ml&va>s7 z1p($NDX{o6YsjSqs1@x5C{meI)cSA!y&qalc176kbkA09z~34XZ%; zd{cHRD0$i*L9WWpLOu}fm}&`TERg#5=f_#>z?$3t>VM>gi7ZusLy_HJzu%tZ54@pi zEq@ubJDhhlt9%Vg4XVH2Ti^T#u=ybuY`twZnM{`Sp8s)P*7t$6)Mi>yWu+(ibFpzj z$9me#M$VSXu#4@HACG`0A_=E%-`ZcR5%`FIIRWJExkO_(P?N08YjG_f|lAX zoH8*huYUFS|IJTZ*2=A@5cgr zp&~}3q_lJn^!172vXp|n-y+?u%dAl1e1YrFb~~`R$jAbzW1#OA28>NZeaL}lHQSaS z=nv6Azvuw%l(dR0O6CNT1SP&nDmCi>`m7x=l+4-yo64M=OMQ4BJ*C6kPW!2YAW85i zB$fm2paKuHVml8==vYtmu79cD1Prd1CN1P~!N;EQ+>W>0XF+jATtX3ipeJPWqkhMV zOsRcm-^KDpj<5@%dp*#OYbtxMPnSl)$&$W5`rq%?y{>X!t+%fj zH3WaBBubI^S-@A`A2C_12kwM$!xWO zObyvdb(*j?yME5@dn9|OpDNR`%DCdy3#)64&~s8;h=LFt zkm+L;hE#(4);@dvjNZuHZ#^4;g^#}Gb8M&v>N;rDP;Lb1ZV9mpo9k9fo6A%Tb&3COiUa!Qhv{M`ZT=?d|QAc7E9pl$uxi^UHxxI0jCC zJvj@6rkG=pQivK}x z9o7OAD@s)nJ8NT7!r+f?kmbS8Tqkr^W|J0EE|O{Uv_bIor^z`QVRR|U^Nfi;|pU3+PbfSWagiNb%Pf9n1^`fja<3nt%EkRq0_A36MU19(fbRr`kR0l#5 zwevTtebCAc2cJz#&Fc0}WB_~HM6QCbxj`L?Xd&Z*?-GamTqO6-Gp?&-`G?bC0zGEK z9qlRBlZ&#JeIiWqll~L#lI|eAQCZnrf`nTvNL^s--qUG&3*>RD9X%jrM=@Nr5ma9$ zck)FT#sV^2)Ljh|Q`2@3kgQq`9s4r4188$L8!z%zBN;{jnilP65TZ&hiV0WsqgFL- zxEOK%6t_YihI^V}XARLvvA$b#Z_g{ZJxONF(XYl<*O-~S#eDm;Oq;76?hx)Z#N`pC#u_m@ zJ#o^$|HGZmgHre4&X@KV^%Y@mB$rp9CYyA)`TUSQKQcV>K~vzPwO@^MMI8G;Y4&ez z-ufQ9E_mb7!OQpL{<2&mX+^%}6a7^c?Ug-37MR2ozE6?#_R@=p?=qvdL#b`9<^h>Q zKX3NpkwI|({QAXn(~mJ1W4SGA{eCV_6negG+|w}}3rX6fA5dQvNUaN0(6rTa&g}~e z+u>)46e~@f3YZ(>ls3f9GGh_>{Kjz2OlwT%TZ z=`|n-}bvK$w_z6V}Ix@C~Yn?zKsQ zv}1>uQHn;+Id;Uzj?6l692NGt{RF#zL9E4dVKLr6Z>jjxaL)qCL|jW(d*>%VYE z{{lcTx`9nLF2nb~VsD9uA!)uG1;=1M=DYiIxsB4?H{H6?q6Mm|Wc%ghTI zo>Y&5yXwWmA=S+qo?IW><*KsAYpR2KHwOj4VD7$AwDf3v1@|Pb=3$RAg(Vmp2k?)~ z-VfTVu&)bPbvGfbk&~8d=5QZ7_s*szC#8)DCkeDPu2^M-ds<2|i)F2cNrAQLuP_ca zkqy|NF($B=>!Y;xV(u0{oj-tGn*HMG$Uui5OH710{4=Nv%lqjT`4pSoy3G!q2)eUE zDb9D{{)N5cA21PP7ov)AhKP_I(7>s8rqJYKkm8CWvT1TMg7@G@>_*4V$+>)6sQ5we zuWKLsD|cy|np7g4GQxk8v2~3pFnD9grC$0mLUuv^=+c}AW7i=Xdg>K-A3pyd2(n_= diff --git a/doc/salome/gui/GUI/pics/pref33.png b/doc/salome/gui/GUI/pics/pref33.png index 74ea331b40ab5499a2150a77a218cc35649e6982..bdc9b764321d30d8a9c20fce0ab63b6b8ca353af 100755 GIT binary patch literal 41179 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 Hdh7oIh9&w? literal 37500 zcmbrmby!v1yEVKKML-3WR7yp<6r@X0Km9r(=7-{mvkuzo9@o< z-ugV(`F`iTU%c1*hZnM4Yp=EDn)4px9%D>DypR^Zf_oDefk0f5c>3fe0~{&-_! z!6(cU`RNG6Eri6ANAiYmmM5HCrBJ8!8{N^-cL^TJ%4=Vdz}ChoY$jG~s+Di*id|s8Zi#%!U2U0THG9MowM+tk>`dt;lzWwfMvhqloMPkSXa`OO{ zNO0}i*Mlw8zz}hc$l9VeFJ}`2S?SKu8*QBm$LjB=Y$Lj7k)}mwl3XKa$pzu5I*im@ ziF=D%s#o(7=PzE&uF;I~_ps|u&Q1FJ-FJNYdzFTFN641P%4B5UdU*{L=DYblYt~}% zIKBH0eayF+@1Ikrvm_fnrzR`)^)L`KXHg;-MPe4k{6;7)d27G0cQ#G9mUQMa*-mbz39l4)bplHjUbaREGSy%NGls#2i<( z@4d3Lv%3Auoe>w8G3(pfpSznboH6!fB#8sVK-~R$WKK{0|AZ_S} z@^T&oqmarq2M20}ZHClndF`2YP`b5$9N!1w#NBNfEYDjJYML?6YH1PNm!4&(j

S6L~+lb2c8FbT4%3yL*a~ho2>YqJB5RrI^7&%Z- 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 D+KM@S literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/pics/set_rotation_point_dialog2.png b/doc/salome/gui/GUI/pics/set_rotation_point_dialog2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3696a56b58ae68df8131cb877dbc716bf601f6 GIT binary patch literal 11232 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/post-pro_preferences.htm b/doc/salome/gui/GUI/post-pro_preferences.htm deleted file mode 100755 index 801ff8756..000000000 --- a/doc/salome/gui/GUI/post-pro_preferences.htm +++ /dev/null @@ -1,677 +0,0 @@ - - - - - -Post-Pro Preferences - - - - - - - - - - - - - -

Post-Pro Preferences

- -

In the Post-Pro module you can set preferences, default settings, which - can be used in later sessions with this module.

- -

 

- -

Scalar Bar Preferences

- -

 

- -

- -

 

- -
    - -
  • Scalar Range

  • - -
      - -
    • Scalar - Mode - this feature allows refining the value to be inspected:

    • - -
    • Modulus: - value of a scalar or modulus of a vector.

    • - -
    • Component - N: Nth component of a vector, a tensor - or a matrix..

    • - -
    • Logarithmic - Scaling - this checkbox toggles logarithmic scaling.

    • - -
    • Ranges - to Use - you can use either Field Range or Imposed Range. .

    • -
    -
- -
    - -
  • Min and Max for - Imposed Range - in this menu  you - can set the limits for your Imposed Range, if you have chosen to use it.

  • - -
  • Font - in - this menu you can set type, face and color for the font of - Title and Labels.

  • - -
  • Colors & - Labels - in this menu you can set the - number of colors and the number - of labels in the Scalar bar.

  • - -
  • Orientation - here you can choose between vertical and - horizontal orientation of the Scalar - Bar.

  • - -
  • Origin - & Size Vertical & Horizontal - allows - to define placement (X and - Y) and lookout (Width and Height) - of Scalar Bars

  • - -
  • X: - abscissa of the point of origin (from - the left side)

  • - -
  • Y: - ordinate of the origin of the bar (from - the bottom)

  • - -
  • Scalar - bars default position

  • - -
  • Arrange - Scalar Bars - this option prevents - superposition of scalar bars during visualisation of several fields in - the same window. If checked, a separate scalar bar is displayed for each - presentation.

  • -
- -

 

- -

Sweep, MED Import Preferences

- -

 

- -

- -

 

- -
    - -
  • Sweeping preferences

  • - -
      - -
    • Time step - in this menu you can set - the time of representation of - one step.

    • - -
    • Number of cycles - in this menu you - can define the number of times this animation will be repeated.

    • - -
    • Number of steps - in this menu you can - define the number of steps, which will compose the whole animation.

    • -
    -
- -

 

- -
    - -
  • MED files import  

  • - -
  • Use - Build Progress - when this option is - checked you can choose all other import MED options at the moment of loading - of each file using Build Progress - menu, otherwise the loading will be done according to the Preferences without addressing to the user.

  • - -
  • Full - MED Loading - when this option is checked, - the MED file is fully loaded in the study, and no additional access to - the MED file is needed during the session. Reversibly, when unchecked, - the MED file is loaded on demand. This is the default behaviour in SALOME - and recommended for big files to optimize memory usage.

  • - -
  • Build - at once - when this option is checked, you can't perform any operations - until the MED file is fully loaded and processed.

  • - -
  • Build - fields -  when - this option is checked, the - fields are built automatically at loading.

  • - -
  • Build - min/max - when this option is checked, - minimum and maximum values of the time stamps are found at loading.

  • - -
  • Build - groups - when this option - is checked, the groups and families are built automatically at loading. -

  • - -
  • Close - dialog at finish - when this option - is checked, the dialog box is closed after loading of the selected MED - file. When unchecked, it allows loading other MED files.

  • -
- -

 

- -

Representation Preferences

- -

 

- -

- -

 

- -
    - -
  • Representation properties - - these checkboxes allow to choose - the default representation type for each field presentation.

  • - -
  • Use - Shading - when this option - is checked, the objects will be displayed with shading.

  • -
- -

 

- -

 

- -

Gauss Points Preferences

- -

 

- -

- -

 

- -
    - -
  • Primitive - this - menu allows user to choose the graphic primitive to use to present the - results at Gauss points in the viewer. -

  • - -
      - -
    • Primitive type - - provides choice between Point - sprites, Open GL points and Geometrical Spheres.

    • - -
    • Maximum - Size (Clamp) - defines - the maximum size of sprite points ranging from 1 to 512. By default the - value is set to 256 pixels.

    • - -
    • Main Texture - -  path - to the Main Texture (16x16 pixels) - which defines the shape of the point sprite used for rendering.

    • - -
    • Alpha Channel Texture (16*16) - path - to the Alpha Channel Texture which - defines the transparency of the point sprite.

    • - -
    • Alpha Channel Threshold - - defines the level of transparency - ranging from 0 to 1.

    • - -
    • Geometrical Sphere - Resolution - defines the number of - faces of Geometry Spheres.

    • - -
    • Notify when number - of faces exceeds - limitation of the - number of faces; the user will - be warned if it exceeds the given value.

    • -
    -
- -

 

- -
    - -
  • Size - in this menu - you can define

  • -
- -
    - -
  • Range value for min - and max size - these two parameters - will be respectively multiplied by a reference length (average size of - cells of the mesh) to define the range for minimum and maximum size of - a point during rendering (at magnification = 100%). Default values are:

  • - -
      - -
        - -
      • Rainbow - scale: min = 10%, max - = 33%

      • - -
          - -
        • Min size - is associated to the smallest real value (including negative values).

        • - -
        • Max size - is associated to the largest real value.

        • -
        - -
      • Bicolor - scale: min = 0 (not editable), - max = 33%

      • - -
          - -
        • Null size - is associated to the 0 scalar value.

        • - -
        • Max size - is associated to the largest absolute value.

        • -
        -
      -
    -
- -

Both values are dynamically updated by the - system according to the selected scalar bar. In the case of a Bicolor - scale, the minimum value is set to 0 in the dialog and the control is - disabled.

- -
    - -
  • Magnification - (%) corresponds to the change of size of results at Gauss point - primitives in 2D space. Acceptable values range from 0 to N; 100% means - no magnification, 50% means half of its size, 200% mean twice its size - and so forth. By default this value is set to 100%.

  • - -
  • +/- - Ratio corresponds to the number by which the magnification will - be respectively multiplied or divided at edition, ranging from 0.01 to - 10. By default this value is set to 2.

  • -
- -

 

- -
- -

 

- -
    - -
  • Gauss Points Scalar - Bar

  • - -
  • Active - Bar - this option allows to choose - Local or Global Bar - as active.

  • - -
  • Display - Global Bar - this option allows to - visualize or to hide the Global Bar.

  • - -
  • Scalar - Bar Mode - this option allows to choose - between Bicolor and - Rainbow Scalar Bar Mode.

  • - -
  • Spacing - - allows to define Spacing from 0.01 - to 1.

  • -
- -

 

- -

Inside and - Outside Cursor Preferences allow to - set Primitives, Size and - Magnification for the respective zones. -  

- -

 

- -

Picking Preferences

- -

 

- -

- -

 

- -
    - -
  • Cursor - - allows to adjust the Size of the cursor used for Picking (ranging from - 0.1 to 1), the Height of the pyramids (ranging from 0 to 10) and the Selection - cursor color.

  • - -
  • Tolerance - - defines at which distance of the cursor from the point it becomes selected - (ranges from 0.001 to 10).

  • - -
  • Information window - - allows to define the Transparency - (from 0% = opaque to 100% = transparent) and Position - of the window, which can be:

  • - -
  • Centred - below the point, or

  • - -
  • located at Top-left - corner of the 3D view

  • - -
  • Movement - of the Camera can also be define by - the user.

  • - -
  • Zoom - at first selected point - This value is used to define the focal - distance at the first selected point (at the end of the movement of the - camera). This value is a ratio that will be multiplied by the current - zoom value.

  • - -
  • Number - of steps between two positions - defines - the smoothness of camera movement at selection by the number of iterations. - If set to 1 the camera is zoomed and centered at the point momentarily. - Greater numbers mean very slow camera movement.   

  • - -
  • Display - parent mesh element - allows to visualize - or hide the patent mesh element of the selected gauss point.

  • -
- -

 

- -

Navigation Preferences

- -

 

- -

- -

 

- -

 

- -
    - -
  • Mouse

  • -
- -
    - -
  • Mouse Behaviour - this option allows to choose one of the modes - of work with mouse in Gauss Viewer.

  • - -
  • Salome Standard Controls - - allows to manipulate objects in the - viewer with the mouse and locked Ctrl button: increase or decrease the - zoom ratio with the left mouse button, translate object in any direction - with the central mouse button or rotate it with the right mouse button. -

  • - -
  • Keyboard Free - allows to manipulate objects in the viewer - with the mouse without locking Ctrl button. In - this case the 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.   

  • -
- -

 

- -
    - -
  • Keyboard

  • -
- -
    - -
  • [+]/[-] Speed Increment - - defines the number of units by which - the speed increases or respectively decreases after pressing [+] or [-] - keyboard buttons.

  • -
- -

 

- -
    - -
  • Spacemouse - - a mouse-like manipulator device specially designed for working with 3D - presentations, objects, etc. You can reassign the actions listed below - to any of its buttons.

  • -
- -
    - -
  • Decrease Speed Increment - - decreases by 1 the speed increment - used for the keyboard (same as [-] key).

  • - -
  • Increase Speed Increment - - increase by 1 the speed increment - used for the keyboard (same as [+] key).

  • - -
  • Decrease Gauss Points - Magnification - divides the current - magnification by the magnification ratio.

  • - -
  • Increase Gauss Points - Magnification - multiplies the current - magnification by the magnification ratio.

  • - -
  • Dominant / combined - switch - toggles button to switch to - dominant or combined movements.

  • -
- -

 

- -

 

- -

Recorder Preferences

- -

 

- -

- -

 

- -
    - -
  • Settings

  • -
- -
    - -
  • Mode - allows - to choose from two recording - regimes:

  • - -
  • Recording all displayed - frames - records exactly at the FPS - rate specified by the user.  

  • - -
  • Recording at a given - FPS - records only when the contents - of the viewer change (some activity is performed).  In - the AVI file non-recorded images are substituted with the copies of the - latest recorded image, which produces files with lower quality but requires - less system resources.  

  • - -
  • FPS - allows - to define the FPS (frames per second) rate for the clip. Set greater value - for better quality.  

  • - -
  • Quality - allows - to set the quality of the clip in the interval between 0 and 100. -

  • - -
  • Progressive - allows to record a progressive API file. -

  • -
- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/robohhre.lng b/doc/salome/gui/GUI/robohhre.lng deleted file mode 100755 index 297538b0b..000000000 --- a/doc/salome/gui/GUI/robohhre.lng +++ /dev/null @@ -1,101 +0,0 @@ -[GlossaryTab] -TabCaption=&Glossary -TermCaption=&Term -DefinitionCaption=&Definition For: - -[BrowseSequence] -PreCaption=Previous -PreTooltip=Previous Topic -NextCaption=Next -NextTooltip=Next Topic -BlockTooltip=Select Block - -[Common] -Contents=Contents -Index=Index -Search=Search -Glossary=Glossary -Logo/Author=Powered By -Show=Show -Hide=Hide -SyncToc=SyncToc -Prev=<< -Next=>> -Disabled Prev=<< -Disabled Next=>> -Seperate = | - -[WebHelp] -Cancel=Cancel -CantOpenURLorFile=Can't open URL or file -CompletingContents=Completing Contents... -Display=Display -Term=Term: -Definition=Definition: -Done=Done -Find=Find -IndexInputPrompt=Type in the keyword to find: -RelateTopicListPrompt=Click a topic, then click Display. -LoadingData=Loading data, please wait... -LoadingContents=Loading contents, please wait... -LoadingContentsData=Loading, click here to cancel... -LoadingFTS=Reading Search Data... -LoadingIndex=Loading Index... -LoadingTOCItem=Loading Table of Contents: -Searching=Searching... -FtsInputPrompt=Type in the word(s) to search for: -TopicsFound=Topics Found -BrowserLimitedMessage=Your browser does not support frames. We recommend that you update your browser to a version that supports frames. -SuggestViewNoFrameMessage=To view the Help system without frames click on this -SuggestViewNoFrameMsg2=hyperlink. -TopicsNotFound=No Topics Found. -CantSearch=Cannot search for that phrase. -JS_alert_appletNotLoad = Unable to load applet. If you are using an old version of Netscape, the prefs.js file needs to be edited. -JS_alert_colorlimitation=WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors. -Blank_topic_text=This topic was created by WinHelp Project Conversion Wizard, and is the destination of a missing topic or broken hyperlink. -JS_alert_ProjectLoadingFail=Could not load correctly, please click Refresh. -JS_alert_cantLoadProject=Can't load project: -JS_alert_ErrorInLoading=Error in Loading navigation component. Please regenerate WebHelp. -IndexBtnText=Go -FtsBtnText=Go -ToolBarSearchBtnText=Go -InTopicSearchBtnText=Go -SearchLabel=Search -SearchPrompt=- Search - -PreTooltip=Previous Topic -NextTooltip=Next Topic -WebSearch=WebSearch -SyncTocTooltip=Sync TOC -Book=Book -Page=Page -Remote_Page=Remote Page -Show_Navigation_Component=Show Navigation Component -Hide_Navigation_Component=Hide Navigation Component -nls_edit_label=Type in your question: -nls_button_go_hint=Go Search -nls_button_go_text=Go -nls_body_instruction=Enter your question in the text box above, then click GO. -nls_body_empty=Sorry, we were unable to find a good answer for your question. -IndexSelectTopicTitle=Select a Topic -IndexSelectTopicLabel=Select a topic, then click Display -IndexSelectTopicError=Please select a topic. -IndexAlphabetBookmarks=ABCDEFGHIJKLMNOPQRSTUVWXYZ -MergeError1=The merged Help system -MergeError2=is using a different language from the master Help system, which will cause the index and full-text search functionality to be disabled in the merged Help system. -PoweredBy=Powered by -GeneratedBy=Generated by -Author=Author -About=About -Print=Print - -[PrintedDoc] -TableOfContents=Table Of Contents -TitlePage=Title Page -ChapterFileNamePrefix=Chapter_ -TitlePageFileName=Chapter__Title_Page.doc -CrossReferencePrefix=See -GlossaryHeadingStyleName=Glossary Heading -GlossaryTermStyleName=Glossary Term -GlossaryDefinitionStyleName=Glossary Definition -TitlePageTitleStyleName=Title Page Title -TocPageTitleStyleName=Table of Contents Page Title diff --git a/doc/salome/gui/GUI/select_color_and_font.htm b/doc/salome/gui/GUI/select_color_and_font.htm deleted file mode 100755 index 33ad83d45..000000000 --- a/doc/salome/gui/GUI/select_color_and_font.htm +++ /dev/null @@ -1,129 +0,0 @@ - - - - - -Select Color and Font - - - - - - - - - - - - -

Select Color and Font

- -

Select Color and Select - Font menus are used in many Preferences.

- -

Select color

- -

- -

 

- -

This menu  allows - to choose from either predefined Basic - Colors grouped in the upper left corner of the window or Custom Colors, which you can define - yourselves. To define a Custom Color, click on one of the Custom Color - cells, select the color you need in the field of colors or by typing in - its numeric parameters in the lower right corner of the window, then click - Add to Custom Colors button. The - chosen color will be added to Custom - Colors table.  

- -

Select Font

- -

- -

 

- -

This menu provides a wide choice of Fonts, - Font Styles and Sizes. Characters can be underlined or struck out. - It is possible to preview them in the Sample window. - Script dialog-box - gives the possibility to use not only Latin and Latin Extended but also - Cyrillic, Greek, Arabic, Runic and many other subsets.  

- -

 

- - - - diff --git a/doc/salome/gui/GUI/setting_preferences.htm b/doc/salome/gui/GUI/setting_preferences.htm deleted file mode 100755 index bf28eb87e..000000000 --- a/doc/salome/gui/GUI/setting_preferences.htm +++ /dev/null @@ -1,147 +0,0 @@ - - - - - -Setting Preferences - - - - - - - - - - - - - -

Setting Preferences

- -

In SALOME you can set preferences - for each module in the common editor of preferences. SALOME preferences - refer to the whole GUI SALOME session, other preferences are module-specific - and are accessible only after you load a respective module.

- -

When you change settings (click OK - or Apply button) each module receives - the notification about what preferences are changed. You can also click - Defaults button to restore default - preferences or Close button to - quit the menu without any changes.

- -

Import button allows to load - a user file containing preferences from your home directory through a - standard Import dialog box.

- -

 

- -

- -

 

- -

This file has no extension and by default starts with .SalomeApprc. - followed by Salome version number. There exists one file for each Salome - version in use.

- -

The preferences, set during the current study session, are automatically - saved in this file at the end of the session. Next time you launch SALOME - application, these preferences will be restored.

- -

 

- -

The preferences you set - will be default preferences for all new - objects, but they are not retroactive and do not automatically apply to - the existing objects.

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/ss_btn_related_topics.gif b/doc/salome/gui/GUI/ss_btn_related_topics.gif deleted file mode 100755 index 5158bc4681761d433681df6a01a428437aaad380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmZ?wbhEHb3}O&u*vtR|4Pe{=rW$~}1`s%K;J|;N_J>k4+@rSq>a+4qy3^J__j@1N{e4nv zMMF)dQfXzfTT@O~XM0~>V{?#yn{Rc%#Qwg?k(Co;!p$eNv~Y`nHmYg#C_|Z3m95GBRU7dFu3;v**rVxOnOE$ + + + + +
+
Copyright © 2003-2007 CEA, EDF
+
+ + diff --git a/doc/salome/gui/GUI/static/header.html b/doc/salome/gui/GUI/static/header.html new file mode 100755 index 000000000..a70a95e30 --- /dev/null +++ b/doc/salome/gui/GUI/static/header.html @@ -0,0 +1,12 @@ + + + + + $title + + +
+
+SALOME documentation central +
+
diff --git a/doc/salome/gui/GUI/texture_horiz_ltbluebubbles.jpg b/doc/salome/gui/GUI/texture_horiz_ltbluebubbles.jpg deleted file mode 100755 index a10d494a5b6870a17ca18b9fd45de5bf80da5de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1255 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Ȳ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

oXOQ}Ge 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

3mV47(J-nnng03vOv>=_>hgK# zV@Uo*q5;zXKR(7-#m6X;d<+A+b3-ZEi-C8CrDSG&pPLV6#s_iCjMItCjN`v8W=64K zW)!DmWsMr}j#kNb{1;b-yXV9*w<@v0eu@H_%!jKQ{K3|X{0TeN8(`(w$ox;HG&{LeJ@b@X`oB6+?@k5f>p$Bb66tXmbFl zHZ&u*a@uUmdl=(~r)JzG9rI%XT?HUeo(5%3qKS&2k&Yk|V`Rh#B2#7DG%G>mI@xDc z$pn#^Gy^HKtOSwSGH%XA6GZ0IJY2Xy1K|mvSB!<%zjP3HX)Y~8_vMHROIpVb8Nl2X zu%WVnxmxdku`sueR--0sw6)h-lho1BeT2K7)}hc17AD87U~=39j8kU2-BV+$fs}o^ z8B?u^3u{@km2c$3Zh({C4*JQZA{)?7Gp^hwRNblj#C}N;>P^3*ddz9qDJ-(!e>7%# zmD_B6gvCBVG4=_#;Vmr2vL{z=8zk{igug-`=yKX4z$02#dCcCm z>k}8ls+oXogMIW=D$kWME3{|fwy>C1J())9Ua zCWnI_#oMXD*IZ6|mx>i{XCVtAV_67Ua)wH^5b_eeoSL`uqAdYt`bks4d{ROCe#)o0 zpM{v~0p_B#s+E3|WTJPoHqrYoO!SbmUgX>satCfXM;qfz^fn0-z2e%CXOPq%T$NFOE{*wJSWT&i`U&rci?X@r@q`3@_m|;l2x9 z+e9I)U7N({`hsrHAThi-iNl*CCz3zR6D?cPKTD6H90+(km5Srl;|H{iW=y_R ztHqc=;mEEU6!&6W(!ei}dN5o!tZ8ggz`b7lPSBA9H?3`KYHp}fsX|p=kfN}d)_jh` zws&T4#UuubmQ-Sjc1WEp8f?ZszmVim?~t=-(xT92Ar&a+8x9PuAv72nu9U?~Ic}IN zet1T#tzsI1%q7XJtq7cLB(k>3{4B$jX29ASOJh*(xRf5;G?`0?bfX~BS;$-yDU8TT zsmNS?X)^L$lSt;Oly{$k9Kt=>Gz+8aI@zgJvd;jtL7(rh=<{$-Hn(AWLnHiBiOAVW z)UUa+*XPAkzZS^Yh0fH67(D{&@Wsfz)Y(s2i}Lmn<86iFT!U0^M)7MfTXBKf;b|7< z+1PFp-Q=fL5b9Q;J2H2Fu?hm59h1J4+4|yinnviFHJfdV zyzn-Y&DM;FMrujolx>$eZ;zw6?UW;SMJC$-np@T>5YWyj<>JXKGC zLv@*VOb)>9yYr68K|kZH7vh+vhtdBDr)wPb^Q--cq;)k^jK1+kAHC$fK^1eK(gr$~ zjke-dKckCRQm}4M_!$pCqa$xP+DC77pKjYur%+snvwUXt;S!}Ys9h&6IpXY`rZ2sX zPC1_eyYW4Ed3RtpevnHa()$_g7=6`lpYH2;Z`$wEedMQ)>4HJ)F5mky&D$Pt3H?I< zguV$q$+yt8>zi&@YJqQKf$t5!@^Mr^NV`fYi=V=+Jo5bk&%><^w{2@^=I4CvHeN0N z2<;76mZ?o!SYF4=?oa&mr}W2{#1j1;{kc6$^appwfQLH~{Z6*>O>^07hx zll}uG{+9zA^f&ZBNbX9*1~sw_gYy~L7G1sJ7SO}+q+^I0Iff4x`{Nm+MjjBz4~-sH zhN#g?RLID;-vuxN{KC{o_;Y{KfUl-%`Re%#s;aT2XmHK(e@=C+;(q$^cgeEpDkfXS z#Q359&lo@S;#AF6<#D`XH_qR&qyAIx&cwUTOd^sReORan8AHVZtFmW@@&DnL|3&$-)qFn55j1gg_3X4^GgSZbIupta_>HH2boi2NXu54&Kw$XdEiycd& z1KYd3Yr~P!vQFyP0e|M2scQ72u#GZcpwbl>SJB%^%7BRJ!Y9WVWfa=b)rKlr+30T! zFwY^7huh|H=|%3t`r zPO3XYwTOvCsa|)k?orn%&g@b-g&GxawyA@* zw$nDgq@A{Q(2jh62i=KLI7_>;&(i&(`^P6nOl_wJc~rBxA}-4m;dhPA1gzHGS76_L z^Y!Id7=u;%hdlE!u5ZYZctwuHUe^)Yg`e3`dh7#w0t}O7QF^vCO8bqobO@T>CfQb>k4|1C8n>5=1jDG9EFWd2H-|HOqV)4}KZ0M#Ga-I13BSK6hmN%9HK{S|FCIXW2aNFNJU%>||EU6e;6<$z z;<{~&(!WHqL7?@44gBjis(=Q0ICrOv6|`T=Pa{hIeM1}d6%1hW(x^d^P)|fe4Oc}k z%)wBvsNn_Ew!*a=0ak~K{75K2YUE;cs>P-Lx?pZy)aVILu917nTD>8qfjvPy84%|!h(=+o?F$0XH?0@aH6J0vuQQ|7nw1Z$@qGVfH~0_$aYb-^BJNIMN} zrEsi7O+q&BA7dgLy=ANA&A@FQDQ_^|?gqN2+G$-kZ=jZ;uo1CYrS8;E_5?FI?#b8o z$i@)kN|k<%+94XFCOfFm4wJZ2*U!R-Hp*<*!yR!7U!$){${E-Vg|98~#ZldxTVrn{ z<)Af;$H_6q%jW|vGai<@buZSDfrA=!^2XjmdcQ&*ujw9SZIky;XOJnUS`O>BG!Jsn}b;yK{ zpD@cdt!~EU=25izAdCc*zIL)8leILhwerJq1dC|%x|;et9tv@7APuL9M;2P@eg+JA z2FMCPf>^i)>VSc=kb)HM92?dyZrIe+(x4h`HQnx=D4NJh^AD@dcJIWa6J)L#&?k?e zBIGJgJik?2IZ6go%#~z}|7D|uF4MfGAn0DBzyVE5s2h)cgmmnu3At1bH6!RN=mQ`8 zUZ>?g33uE!+C=S*JDUgh(vQC=$8LkRJiq}Mx3o0-z!$Ulg`5o)0+0C?9&_Q2$AfY= z)ce#~vDOna7UA5{N^ruA(LU@UINA=IoIj{eS+2un%Tp*xSNLfq#-zJ?(N)-GSPB2y z7WMBM90<9RZcfecZ=iZS1h>c)JvRN<<7%;)aGCYkjo6HE)?;t>Qxh!BdnG*dUTjaK zqmpBOH-jwSl7Sv}yPY0(2aR^p!)jOE$)-nl`)L<$*(>2`_R?-Y-HQ|lFS7UJVA__8 z=lVSa7v1I9|L|-TE0B*K)*P`%Gu&l*f*!|8u#cY|wSH+haB)@Cs!`tm#qG8aNB9x`iI4l{b0(eVC5efJD=7_b821(fQ(=u|`bG zLeJCwRF0C5nHO7=`{-mq92q@bsR+tJAL<_tgw9Z*`0fMs#1PY2_;7rc;HxwY8K{%S zo{8D2KCOL?XI06QQ?dp`&cTygU{aK(v}WZ+)Nv^DBI+=d`H?`4JQc+i3Cxkd+~G)I zp7@DML;?%cZ&+ItULZIVFBFb_z??4(un=6UqFnWdSs1Q84b{y`uG@{Pqg00sbx~T& zg_W{IRVpsMHXNmODii-?DXgwkW@FiXONECUx3xCpL9R~P#*K%8g9ifXU1eNInNuNU z35D!33%Q3oFIEU#5Y2#S#>G@77lV|za_%+DxsUtbQjQztxE;%JCzP|tEaw3p!dN+i zV&mE4G0xFmO|e-8CJYAe5e#0}k3-(TV{(K93+B6E!SHP(A)gon@fRa75C=adb-y^) zW(YDp+1B;kDVD4D)5r7)-A+F+dKme1yD{8YW-RBh(Rk4~!tr>(j?-vUR+F>e69{$0 z3}IU7fXxIS9;444v`H?}$?I(&kHQ##?NBNfY_-CHE!#M z|BS7?VkLoWb6?z}NiKez?;g9Xdb`+s%gf>QDmRX4qW1JWk}WTsCIM&m*8HD@jlI6$ z!rN}__4BjD6f~&FB8G|EPPRvjzIFdw+m%2^Rh{AgCNr7I%Y=kU0*px{vILkcfWZ_3 zA`%uONt8uHT)->?84MYm8MZ1_P(cuFQEUxvU@JkyRxP|FO;1agV~@4AwToS~cCoeA zTDw`>3iSW(eQ)L^c|(S!=Opv)^4{Ivz4v|p{kM==sI-|h5?FkYWJ6(0vcZDvi)b_q zEnJj{vj(2TT>j{<4u{qQKaHcYD1SVE{6dj(B{e_c4A7?{hC}ND;iy95{n72_NHnn4 z1urROz~`<8#-yQ*j729W_yBS5HJ%LNXrv(sFm^E%XKnEEG^o)Qx58 z0Gk$?7&)5K#K^U>=az*+?KcPULWcwH1y(h!Z;u*@QYpi%$8xiaF4JfZR5eCei<%c? zBoI+@Fi;3w+7b=~I+P4YHSB24ky;y2{n@BEtP7?0gTV#3s3x7R1Ts%+3z)(_3y@T2 zWj?yXfe6FKfb?vG_qCXdo@l&!&XYASqov5Y#yVB54h1m*8!$0Ace&KOsO_Jvq_oy` zL`@lR=^qX={YHMjxVN0=YHKL$2Fy;c3$}zqkn`+jr*u@40N}Y83qxH%T3WIWDE2!SeM+M}(5o;6jvj;stnIWn#tJnKp*)PdK8;%+ z?l<3>Is)x3+J~{^Rmfi-kovLgx$C1*xoRNb7VVg)j>#ae^Ek$6zaW3VUCY=(XHK$9 zOx~7h%)du_rr&XnT=nM3D)b*UL45V{oTM(rA7wLs`-kXndN_{8{s#~{? zU2Rh{#;)fy)bf`!>cfzx78Mn_A(3;oWb<+QDvJ6VkHL~ads8$ZrxGRrZ{};)@!I|d z-@Op@O#~u3ldQr&oF+ftwZZ1NjE;r;{x+syAH9r8aGyrK^opQa3AJ>Rc++^t-^2KR zpBq)pDNsuK0S_a?2n^$ocyg`{ZQvn(P3?g{i5;1Oo4y1aBq&)A{hWRVn*SHP3ZkI} zVY!%J$9Fp`R;~I(x#(9Ky-9EI%=s%XTk&o0aa^ifSfiOlqb(%8}k)nxIAqL9s38yB~=w++yo^U52 zyC*V)#yCNEEJAoLUkfvT#!hpP84Q{ z3q`@uhdH9i<}gQ$!JM`|%n{=>FTT?!K7RDe-mmENb?-NO=q0}D^qp?{u1>Eu_`N?=Zvnv{gO~qmgLO=@<73iE zqvK;DLpuEwx=O#qct6iSzc$JLBC*JL=WECzWlC1~y}#wUyXkj0q&k3~!}#$+;${t` za^9AjZ(E`B_AdA6y+-f*@`1nNb{YS>89&VNJ>02(;Q6v+^r6Wjt`qe(q`y~@{tm2o zBl(bFLwm34{C{WVr#wMBG4A>5Z9r_~-BO)SiXP#pFVlq!G9x)6T^E`AXp%9gIU8nT0cit92Ha5Wg4%oMf_inchoH| zNu1lo>jXEbHE51tb!@fHH0;t%maCN~-BUEo2zn3liqOS$#}Ompuu7QZIAWTj!`40M zRmje%Y~BNnmB0C z7`Jxsxf)KBe3k!~2&QeZ9kQ{bRZ}IL90T{uh2Z1bkgDU8;IK}_ zA=6MCR(}SSfbvj0(Xu4Ct5a~UWOG_{u|^d*NOIuKxM51|Y}u>R>0@ZsjMK9gXF*C^ zT3S2LEW|l5+LoAw$SAEEDknp70O#9r02jiPo;?S!MpLI$XUeXtqgo7Cy_HRVwaKqr zGKkN74K2f)x>oU-mnX|-z8-Ak3fNUkNI9?2cuyaF_5`!kOk0WbEeoL=fK#BA;2=8` z7rhOzTAe>ATN`U2bWkYIwvyAO>wt<{u{0$<(RKl5bObgw4NfS zP*PS~Q=~2w4$P0$wTU+3j?GE3O{HOwVz7LRF_P15o=J8SS%))|t>6(CN*kEUmeGj#<4L1MAe9D5;J5XCEa2<76rnyUWV}_xIVQxsmv-B^wl%pt z_tE`!a_lirwsFt6ql|n|Be^9yjXO@o&kb~t%h1sQc{4Glq!*gM-g2F$b&3%s-pXF8 zN})PG!{6DZq6Z#SvKi4q7=HO8>7}bo_a<+_y$POQjOV3$lcll%Wj~<;jKK!* z?woLda-)nY-kr0LRzd`MrB1ELYt?DB^obHw&r6>u55ma7{X!Zv$i>6$of0g{FgjM{ zl4jy`XvKHYXm~u{Am}(%!09nKj?+5f$l2XRnaKONpna!a&vWlPHN)rfDZTi~eN@a1 zxgE5KOj6~e&^sHtPGtkWj$~SIf;2QDXeT4d(|9o6Wt$!2lz)=e8p$S09Q?{$owoPq z=k17ru%2@jnd8NhgbB5C0Aeu=6$fHNAK1rH7&ti4GsnJQ=xC3iJYyqO9Bl|fOT6NG&D&gKQ!=%v?x_GP*z2m4U$qK zhS8?Eq0r49o(rX5xs{)>@v*qtev$^JE`iA1PzI(LqD_Z(|CyqdnN)>=o)xnnHv8;> z;^j04Wz99g&O8o;1FNJsUd#v>_`nf`N^bmj;{Lxgt5v z%Q!J+Y|9w=72q}c65j5jn>1n#?j8o{9ZA;Jczx*=Jpx*7gj{MhajLe<+e+Jdd)Y@zBM zbURAe+7GJU2~uwhIEVw(;{nIzdufJgzbXZvMpZ^?1*Jo=B6VbHr9)IX zMODnE)1`*MS;|SD%X?WbRU1Z}=Br>j2N$ZK#=#mD%;4Z674-PhzeO%@9qv@^yGpii zbssHm^tpZMLLs?p90mSvT3+Qef$9xqFOsJWq2?~iVn|C2O%VC4b5=<~dI>Ix2f81#0Xnr&9uA*;M$V3p1@s&YU*C*L&dIr*Ad&pP{h+~-u! zrdT~4W<6n9&pSR1#Db>NdJqemccV_X%BUh1v_9Ixlj;*pENnyGHl6OS(txXVx~D4B zmnk2p9F{jMece|@FXR?h_Q1CX~f?}A&c>sELs-MuWyT|CO z>stqtbgg{`j$f6dQ zNk9TY1Vu3f3}hn-L=?-Kg(XbL!ltz@xKu^dx`8Mt;D|6N2cqsZ`DHHuu}nr8C+cscTSTFB?qjj(mIlx&8T;^Knzi~1@3 zA}0s2Akjd6JxFes=rx~@B;oc{1`Lr}LljU_z0Q(SItOP+yeCUACzi#b=SlfA70T%i zj8pc#?Xax!ICNqp(6kVEt6s3B4Wuy>Svm|r>Jsb}iakDM*!BWDO+6 zhyn5s4e-f~p~wlvgj#Ll$(3?#m&sl%g%o(LUd|0$!5VMPjr?{lmwBE&5O86{-8X+N zt$f50e%W9vqOQzd{^F%|)l;Yv7GMEw!qlnqb!R9pJELXQD!%WLhstqusC+@>2tq1! zrct5NP{%^3bu#F;1x9WK*Wb!MpysWHdLs3m6XuXSgSNvQYIgGZbHts_x*m3EH^K%d ztcUB*e)n@D9Z;_)$ZCQ*y16fQX*ZEJ(t0{~?wd)>JK>Iqa7lML;cf!3CSZ2vVw-vF z-5Z9AWUybXPR;VTPu@@aoj8J4bE&X=a}Yepfe)#XirkRjKf>=HW$EVf0^)^c=r#_0 z47X6HM?#W(-KTugo+agdhk)UudVx?Xv?v@)`<7PGMoAk_o1Hym^U{K#=jYD)4EJCq zkoGLUd=6`%p|NFkb!FZ1rizvBO5iy%4f3!GJ>*7h@ZIH1o)B=6zq4niB1zFjib zB^AvrOK^5xMccLxZktZlfNgHnM+Gl3Q#s6=6yv<%2q*orEi~p)j_Xw`rseAd*cL9a z{H7DS;Ehm3%D1QscEQ^rh?MVAzPkv3EV9V*M)(2I{4gAm@&g{(KkA9V`5{jxKcpMS)G)~@ z`iaDzsw<+u1(b86NO1}mfs`pwPBBpSP%%h@a*DzD0!fC1$@GhKvLbLAr2&!Y6j>r8 zOxHjR#c_r2hZ!)NVgx5}emLrw6s4ksD9X+S7Lc-3PO((jLjj6;VlD+& z^$O>AjhIh_*M`CQT}SM@MSMF1&TkP%x;O%yA1)XBY3B8RV(U3FnqOsU{=zFuOJ^%I zKj|;5EGX8doXMYm)!dTV3e7K(UX+!W&ML^4aDD`9La)jTic2dC^q08DcFLFx*gqG> zP3e@D6_jAK^q5~%T0vF~=_4!$$ABr66jYg%Ny;aQDWW*6Q+%gW!tHtjdimpM2?7R= zy2VYh@C`E1c@ym>_~N3xx`z3>+#QDELq^mPQ@u&D z45~84GJ4`bE`xF47EKa6jfZ42`dcjiwdh}G@vle!28(|q`meY6Z-8|19gF`)i$#`? zmHWAJOOcM;70S)U+_2>qc5#&|-ObAHRdmlPS6g;@QN=e`x%<`qL%DK0C`7dynx z$j00g#9iWU_4+CWVtHu*T%J8JF#xIPj152&MMrU{cGSNv7z)*Bj126)eqySuq zjtP1xXocQGk|hYEk3yV=KHMd=OwwR=Xq-r(2{{>y+95~heYsc>!63X4du)@q$dZIl zthU2go1h`u9x=kL5N#Lh;0MGk8%&HTI&U>_>uIc_huZ~`&1qE^YTMvG^?HE*sgC4b-GTxM{#G_!orRgK*DO zF*$}RLpIhd)mEhSF+%DQuuDHO8?|LC7K}{0#P}ftA0DQM0r;?$9un|j`(&~%L*jD% z-7x{!8HA_F>}LS>Qcfk3-=Nq=-EZ;j5ane zmzWPw%qiX=1PQIBHFH_aveqbFk=rd56{RXFrX3FHifk3n+i}&G^ySo7w%q3xgZm_i z2W`2_YkK@YD(2hZ{vMOv@0i5>?IPUYckuTfzwChb+u%6i{vOwnJZ#INKGK=oD7LEC z^RNiSPiA3{`w11~a=MiNM1ldgO8Z-Lr0K0ybWJZ!bxrWNf~RrZzrR}&xfm3c!BDNmv~)M zg7EvPI1as8bpQM3BK3xhqdftRtf-ycCo;D~N>`(O9ImiL`)lDp39+Vf6rKIr zbb(gg1)jB?N59a+`x&ETSt_j*4>MM_tBl=KXRAT1QKZupC&)W2vgdb*oZ@WE*Eq6h z{E2eEQ0`~SeFmhQ{2fkXC)hRR*IKAJZ(uZ;GIEHScTpRTVXU7eM(Ri zdo{tJltmh7Sj>_5x!Aeal2~||gd4U}S$rnwa4!TRC@QP`gs>cAn`}^A&8dYP8MnMlR48Ut!B^a+6s=ox01EmBXMMz0u z5MxRgpHoVTU)^V{8LSi0ULE{>yE#OR)C}}N+Z97)*oq;#w-tknCvuncCwiiL%;QSG zu-Xu9&o~Qt4m)U;h$yvT_nxL0yX_6XzN9fFGmJZbi$sP@Q=JI*)hccuFp!n_BX0kf z`WiOOX!O-bG$3JUr$kw#_;|M(Bc=5Qspia3Os&6%g!Q~6qK8X@RK0d^L%N0UMoGTw zJxC4cA~)4SIz-xhh$yI&W*eLuD#v32P``T??Ve_>iK;q{j?#-(Lz;OQN~cvMR#CBX z`RaHACkyKwNsvfziT(O0ewj$JrPNH*ef1Kwj6P10ZDypYlbfRLKkF9?#>~8FAVi;v z>gHy7Ij4clB5AWG*DtI?udV_KU#0|n&QQbjJc2i~S6?0G#BMg!_VVz2Q+!7rkx}NY zc)~qZNvL*5)6nynoU^XsJeW(ZP=(1gVDmOP2;NEJ#W_e- zA(GsOqhWDlQ*|L-`$`Rk6q5>HR@YL4Xw8J7W>`r}{SrFnZmeJ2Y>`f1s#Te*)$u!Z zzFHbmbppJ04BKuL8W>*OPglYUx{h9D;ytg{c+U+Xc+ZV=_KQ7s9raiTDK6M(Fs*gM zI_j$qP3br@_0V->)G(Gn|C*%P_?RZyWp0*LiS>>g#zB|1&Lsv0p@XiTW0%s!frA8V zdJ%=Pu_ksG3EZUg;BE16j}tbNwt~Hg9o3)oURj%j>x?Z4NPIum-SYZc2Wb-YRVK?6 za(fsaq7)yom9tbSN-w3j4YpE>k6|U%_*OSN;Bf&Hdgbp$J#M?Lx3RDjc2EwUMBZsj z>Eui>@ov~fIoM;Ou7wuWw)d$U3G)pBs`;G^s5WVo{YQP6wUU+QL#1yi&qJ*Q!xjh6 zn?Z%k)^pH44%%-9&1i1opa2K8nL#sG`8cSZgM!xC4O26_ODAEK^`pNOD-FhN(!At^ zBSdo~lm-(qX^uMKRifEUH2uvLK@XH^mi5805>ZDYNm8h3hCfhC5SP9Nsz4@2b#1J@ zVkIcETdr)fm3xsq%#ETc$pXflgiren3)w@_M@#I~!{EdnU~)-Lb`S=5b4<((Rq3k`YQ#CLX6IdZl3oL>F^Dh8pPdI^yuizl=1W#QBac86+I+}gRi1sn3OYM z)*&b%wc(rrW&A`ZqTTNi1aalo?l(!@_b3(99YYfBS6BJF52z@vkx_igM!ItbEa1<{ z06GkG$92MziSeF6@e;2%rYc8id(2SU9^ETR=$@jfks`ziR#-A4we_oIHC+hfbi5P!g zSp1ua^5jX3KRmXRCvx6q52ioC|Z-WOg>_HB5xE-DFC>vMb=T2yY z?f!1Rj_C;*(_nXOCp^V@y2l;Y22cCDH)#@X?+gz;Jj*n79@3ZSfEWDT*J(1JCi59& z(-heOf45N)Yc$y!gDhQ<9rSni*JRw-;GqX5JN1+qjCL0S~I!2|FRER)0PEjVT~ zh;#LsVXGb6IE0P%qGTI~Eo>u-m~v0zBS`$RBz`4?xZRHURV02*62BfojH@5ZMP9VL j$U6vQyxBBPHHX0Y$%boKme3ht202m#l(gK0sv?O0RSKakN^nV+1MD^8Vk9YnwmJ$8Ce@R zIY9vs{P{Tm03ZMcK-?9-Z~EH+;NPu@!le|pAPR3nlWqN`cPfUqwsyixQ%BzcAWg8E z5*5f>0m3Q$sxi64fNzj7TNwO4v&akx%I|GHmD4PjszEpyr)%EhY^Q6UkM6d>0G|cS zWH{kaW^?`l^Nsy&o!Iyb0}PoU+_0ESQ6%fE#}|oKm1x237T{y6h3ose2z8j?Jl>{^ zY+RUh{&wLlWGWS~K?ZJ^@tlob)EpP{5p#+CM`T{4>g5XrPLf}hA(=rDmnkcNtMBCV zzg32zpfG6)MikiA=zZV|3rxA?#`pQ)gJPJ}iXOChrVy*R9j4o2Tso5u-INYTKJ-Hg z2k=R|<3_-(C7#5~@p8x#N=xIgSQCtVCqC`Rw5M^kOGjgDz&=ymdYtSQ;_z5DD3HQ| zgs05E7rk(NdUIwg4ZeU2gtSWl843@`6$)pH^oyVh%mW=?(JDcm&(YfSp$}>l+k<#i zFZv`>O_U^NGwP}p%BOFS!VUYSD58Uu5)wJL^nd7zjp1ZGmo_K3m+%=iw5AMRptybm zDEy0e=_DsGwElRO3B3!?By@=aZstlyKy9e6lGzUBJnLYLp><+dtEC3* z5VEk1z_nIX5J25&Y2f3f&b21QE<7=1%j7&sDSw)R({&;lP!LO4x3-r-+E86)?;KHp zpMqS=(97_{OkEzbfEtNGFNsUbNoNpsz&YBW77|5pM@pAM4B5aaXA3%paDyRg0A~Kl zqxGVk+~p)p04<6&N{OmcC7lvMHbBUh(r%c4r!_bO<}?zA#yB3M&nCpy#Il1%wW)Z& zb)3O8N3t~ke5_(Bd-9gVuw(NNwF=B7`!Wuvu`J`zH?GOn_PQ&n zhxWS|!Z|(%8RP6y7uoNA6(o3tFfEN@^YS9X7z-YzV$8F-vgPn<8XkiaXo~u3^Ih+a zQs~gk?7R}#9>t1xa3Uy{jNdrf32X)NHf6ZFk^7{h4MlO1`-5?H@+3~S-idKOju}D@uwXg`1meMeFqLWNG zA&r6glqig%iJ~5|z7YyVuwThvh#69)7NQu+_9qdMr6L+CA}Z>)?dSJYmmL|i1(a`& zx5-w=dfV}q)6_K${q)!IEqU2b%f)ZTSFC-+l+kUZYw4g((pg)UA=V+IQ5A}0E!?xK zgucOyep@@L2t6{Z==HjZ%d4i+xUz@*nGgk^(w3HW*+u#p_(+=KyIj1mp>uVz{5lnB zs@)JzITNa|=OUatWyX0C-U4ov^GdtbOqn)bG|oYm7^zgU$xP09gbHiPL9f|*3!pGH zP^YCrf!6y4&5Az7nu}Rnr_w|+#-!-FCeegX6*&_bQYNjIzG%@s$PB)I=L-!L_^bXg zIrb(d#A_GivPn4EA}IdWtRZ9ejxuA8h4VF*eFPag@Pt{7- z^NK9UZYr!+wDSu?3KyAt>~$V#*q0Yt2$7ZHVoJKwd*MfDp)o~9A1Wflj9EK2Dda#m z`1kJRDYM2Lh?la9Ig9oA`$X)S{hARD$*emR-LrWBlZNSEg3vVOx5~7tlt1h5OH#ylR4Y+Kh0*@cuwIe$t5^T#yFHh}};j#pVp-+*S4dRA_Y|-A3od*e>V4`f^3vPt5(;s>P1TbrO>IGU_ZLM~O_O z3!N%tj&R6=?p;f#vzy2l!x-lDnN5_9Op|-vna8ac*Pu_wj}}!f;ckpdezQOn#P*gv zX%aRYM zwdAkLb2$~mq5p`KD=KrPJJ zGALUVB`b4bAwM|4=>w-Lap{;wSUl=+adet3h#g9VVwxUL+FeVZ6fvy!MB0I7Hv?07 zuS^c;KQ@iOo6EXjaO9u7IFENGF=!taNkO$mn{Pne;InIDBc5_juo1(PlU|} zDU&v$r8Q5abv#dgmPGT}qN}=rJG;d;Qu7&ea%1kwoe5J4z`dHq%Lfe|Gn`C#SH&5a z?v9FfAn6-(C zPY$6gzpeBZ6q`-)8wBnEX4!_AA;7xwky8s^0hb-2+P ze$|8db!fYz8TJ#&Ra5#OMw#2ic1&5b7}uMb2!iTr!DgycoQH`CR>xD>yd`ssGAu*L zUAH0M|=vePSNS|!=*`l1(BA12JHr#ywZQQ5EIE(;7+U)J+6##z;{lSZlX zgr{d492K{N^T8Vgh}X7g3q9Aoj5a6pVBtQ0cGK^@8Gx;@;sqo9`eDvY1Rkk(Gau>r z>#&b81QgP1ZD6zba7OyUi0}!y`1aLH>p_{ni^#cHH5!3wJYA?xft-$Qzm(~>uUySh zpfL^TCOYKzoc#MKI)VuC%z&uEEp_p0s580;M8+>GUvdH(6n}y3+~wehjF~yahjDzQlN&#yS>7-?9>v>&thf)*3e zv~NyJZBIq{n~xO+Z4R?T@!3zX5b?j`4eI=gdLYF8jLNII++DZw>UFTz-#c=)h=WR8 zO|>(=!m0J3#E%1Rddi4WtR5^vk)m8RoO|I5Kj9l^B30^9Gz10Xb#J44qfl`0-$8tB z#BjJPsN8GK;diHeg!&CKXeo%%q2Kzt>3@J!lUBeG3Ed0&W{QF1!4pWgqCdAuPVe4{ zGyv3{9Uu}6VA|uT=SGdgA&OTg0YhMrE{iDZ!r>1cLSSJkR-(!;4GQsAPqt!=2f0dS zAZDYn1oyKMGr1%W+m{YqDKMQ9#pLW6%+8t_WT4^RVCFWpBAIfvr7Mmj6vI=xtiM5f?d}E|4}v8 z@GHt(2BVHC@n;_gPpH{=@YLXJMe;uXH1{dA%Zmt~pxCj&K5X8VIZ2|>@hDN?r?(Ux z2g^{$K4c`QN(Bol=d6Wq_H+qw+?@&tauZV&un3Ka%vxI5GhmPhU=F1hZ4f|11Nsm$ zBKxi&2L0W=p?@~gv<%5%y$9ui5gZ61kSLBG9c0L)*`auy=7(r+oD8X>ImgCt!L~-z z+U?6Bu0v0CrC16Gpze5EjX?IzT{K*Gd+KUqO%@^vSd%^nDWzMdT{)y^h;v*%`JbN@ zwt*bl>RBBtNB4u#KqdBp*4*k=TZ7-`v22NMr z)1WkA0$xbjde4LpyRb6DDxmPFRbT}phDO=vsZb#Nzgq_~Je29`iNJ)$4hOBg!*l3O zMB@ET5Z(C3eC1S;w5!1g|(40AUhhBJ6jjg(8^R(e%fcM~Za8v)QnWzJ>U1 zFAO8?XpZRbU|+x754Uph}TW%)vf44vxX^dy!d?D#mR?!>T%6nN$viy<> zf57d=1y1!EE)AQOmSSr5C7**8+u_`wQCga#jU7~;b;%Hi<@`|X*5+sjKiMz(1-DHt zsgJl#4mWx}F=QL2KG3EMcYOdJBrj6D57?4stYUX|eJO2H#y0_f$|XBx7>R#-U(g9{ z_H2p6)!OI*fUV1-^jLZ>?YzzdF+ZE7>u`$|YjPAc$iMIyA`<%KK6l5}0FuM-HI#bB z-mA%Dc0-A9B@A%dR#3t$+c4b%0M`B|XIO8gppRKCmwj%#iA;*I7+4T3tfRt`KeD2v zX9o6+PecCnqn{3^3rLXt&2B}+-@8Foz|oz}!Gz)KpM&n=hlmD1Iw$pJH2;W{t5%!G z0uHga`wN5G1PiXGpC9%01EwQJX3_mfRtx}Tk_Gn*^joL+n<@4#Ud1u!j%(ijMg1dP z=CkQa7A!AoobZ?(rnu)%o#UQ)iV^Jxtj^&1dvDuE<9CwqfN<;f`>Tzw8HqI(;EkJq zmxlwCt=#raPOp_ROJ*4P{<#ucPv{RLxlNpmZ>pGc(hbLy@%3uQ5IUM;1S^QYEbc<(dPvgCuTt_ek&Uf=E5VyM>0&lGsX-V2-l55BrFb>cIvV)3Q@_3I%@zZv#nMV z^RoZZ_<`V3cgvNGO?gy0zi1(J19K7@0oOnuTh#x zm7o>z1CAxxe+UT@*(P|WwiOtBDZHa9fHPbs8(>JS^H$M^S-`LgCPpg{fm;sy);pJG z_iF@2I%{9OVnNEfgCZtK_g!tV{2s@J&XFipQTt{rMiUBka1CDNk%ue0zQY$)@tlXZ7c>n))g@et zo?j%H4$!Olvh?wch=U|p!bRyyfY^{WYKR1ByJinxi(-15g?+d`MyfQ@f0Bx`9W9~C zJQn(y@Iq+K;%wD2P^fjSk_|2XRo?K*xaItb>kO%Efwe-q4x&*E2u4|CDhT~70qXXk z;LI@7&vkPb#;Myfq7jqhp|iB$@7@wtf3fvH-9mJxiJDZ4~!Gh!oHNd zt&U3gFgL(^8OV|3tV?7>N&l&0eIbQO^aaPKZUNV~DG(1l zB8*t;B~QV3B!4rkq`_0@T(^_!%+>{+g}UO`39@a?Q&~O)*0YUWjERUJbFx;#qx|X>Ffxs#R0W|-@?v#?9 z*Sc|baaBR)2RKzw(OYHSK&(O`cMoY6&DE6O8YZPoNJ$2nElNudeFG}Rdr6em+rX`5 z7py!BDz+dvE~>Us`CwRZgglGNEOP2XBuVFQ3Iu}Wa zYmBDD$Qtl;NVf7kho-J|i`_WDQ#I+50(DZ;Q^qG}nvb|`tH%h?2UVIl$QCF0Rf%%E z9(%q$HQnTUA`99?+phIex1HXGl=ulhi}Yv|`IYD;R)E`NdWSp7Fpl)=3Q;FjzGigJy&J)8q^5Ee} z5@p9r*6cIErIl)*P0Bc?sZX?^2pJDo=q!%5E+Fntwi18VGwl-9&@Mkm;3aM zCG`zfU5=xBTn?d9udC7Ow^yoyKi3th20Mx!QkYYpA#a02gzyB`lFC-#EM%>0@ zcj4FN8R0@okcqKjCMDyZ#rK+>)8|uXhxADgcPy9Xd$f8C@s$2drZO*o0|tjA2jGv$ z7I@#xd}@)9WR%@1;w#JSbQY>(z@_uWIzxDt;k&#}Ys zyo(m?NaLR5y9*ZQztvRbR|H*>_r_e9hTXbXx^5ffAr&8XDt{x+#``{#=U^OnQ~JoS zjBMhoB+z?W$@q*{4;;AA0(~j_I*=h2 zLjP-bJj6n5>c+%$1)rkJJFYqoQajYbaw@3GG$8mfXT9iE>F#uJ|J?D0)Vl;qF5z|l z7*5&!t&#i0dR}V2X};u@h}%5h0=@7w#23p9i;soD)8Ohv_EY5-uIRw%Oxt27O3CTC zHi~@96_0)3Zpa}$I*)A(h}|6zOoE&BK$_dUE;n#D;2Pl7^{uUHcbmt(x>vkDMSKr? z)iN)^`P{=!dM}=(?LfOOaN|svi<{U5CsaK!dqQ!aZm!w9LtNdjiyVuU^?i-lk}|K8 zx@N&OYd(3az8Mcz~|#06g# z0s8$%)Xp#KpV=vbAK#AYdeDhqT3QyKR?#}Wz~-G@v2u(-Tbt5;P==dcHs(G0yb|9S zxh*E1r#&I5CgpnSL!joxZ4&0Dq4O8;g{zP-cOYq;Fq^+XbLZdQFE}P}ES8-{*L&vTO3~#nP>Q z_~`Ux#f&pAL*2N3G@ddWA4z^5*in>IAPFz(26`ifV7r=Vcig?3Ku_z?=SDv`Ks2OY z<@wU8kV=Mgrh1~qX+|9<`1A7g*dSf9euKS6v9RacIjj@VBU0|br4+qh0O|pns>3L^ z@yvCexl%!WLbN z6G3J#m=`s3s=B%mF=J+bnZXvd3#{pHiIp02=Y7NW-cShh$HVO9tP_Yt&MH09g(*(> z!9`lr@oI>6R7HN04j9NdpwbaqZBgM*z&4h&*Uo3)vE#%pJLaDsk&gx}h8{KlI(a`>^C@i`i(7#MCY7_5>1T#ftbPVA z`|%MjM)d)h7raZeNe2`Z*lRTyw}L@Q8^2NQb9p3hU>1x33P%g@A}hng`(#v_lKqqE zM1Z6;90%|LUeHkgW0UIgLjR-S<%}v|$9fj2OoAf>wQ#C9M8lgG+WpmV>qM)jkth}! zY%79JcDxVmeqQGDu+vsg_WhUf)cZo_a~J3J_JoHY*|87D@#p#x?|xtK@cB&(E!K9C z(#0+BF4WiY{$6oeY!wqa3{^tGrY9nX(9ExAjA?j8~|4_vIfKDLKoxz^%j6_d^f2PfQ=* z06m~1{uRB`x_1r2VrZtBzDynCamU%NSjH#t?#16dt>l-oFN;14Kf<~?Qv9IN2kpG* zBEAX4dy#;Bn3nGq{U)9jO?5I+ip`IM(uk)Z2R*J)0u?0jv)L^@K0KT^+zM~`Cy}06 zmreJ(=QFGb%YD;J$Ww0hCocA*#*%Nh8}HMZER(9#F(XhlW0!QGD{@@4E?GDlUT;JK zKfdUA9ncSaI8>E!S@M#EUJ{xU5XtqUdlHc*Qz`wd4sZ>rO(QtTfWXX}l@~fcjkufk zFZnG7`_7nDa=iz&Q{T!JGTgriPul?i~rT=JGj2;(Z zU3e(&#dB#@i%u70Rd&{j^zBlNUXHdbEr_!0ZAcy)ZRsm9tmUeT!JSQhED*->-87#( zC)OhNOFYEA;=)mdbCX-}FRU|FpVxgC?a1PW@SRz#hf~^Xh52nb+6^DV z{p#H>;mntKQC6!Qm%$zN7DmqnO2-1x1*`1pxeyE2<|Yd>aGJN6eBx6q^<6xuY)j3n zlUej)+<6Ie5$O9#S$F7>%(9&3;~NnWB-2g@f-r+J-5@3Rx@D7e zF#F>r%?f2%c+1WduoslfP+sBN$tB0YcnTS&v*UrHZh~6bAED5g{)2D2(Qc1GshF_I zV$!(DL&8U>(^|`?oR-6T2eh! z^Ed^j?z^|(Y!~wY&I1e-$(5oZsF<_7uqif5n`o_FF)v z!96-uqH=4z-iK!;`Pc#AT6`UBF&g+Im!PuUf~DUxJc0B1x+m}wix2)~%=x=O}ofY*-wOBj1p_frK4WXXLoqyxmY0oy4_Cd~*rxcPD=p9u0!$^|VBV_*3~h zOL;{f<~riX*!n&M*qcS3@1o|f+~eEUsg|4SY>_3YMfWA$ik#}oT0CWbQ_EWFi;|O4o5sBSnF3XV>!O0%?zI_&ZtMu?qi~xZ z`U>ecN(DtjHEz@?fBT=t8s?)()T zefOCGA8n}C9I0R6Y3J^$$3K}TVtP97`D-jMePo6Dim~XqGlz%od42(W#aUF9KuKl1 zUB5u^e8$0yS$dPGe)0dS3YuNa@tf(7#tr>P35EYlOEUj&mHXe-q`&Lh|G1A<7?lGO zMDQ78`x#vy)k=;Nswfg8wjXTHgTYGZUtp0NC~QhNgTXJ293BqN-y6%cR4anSxe{7^ zre0INbzXBFD=(th2S}&}-yRWX3$kw@uFFZs&-B=fZ*h8F>^y96d)HO~wq}qRXUV$+ zJe}aXERY#@IZm$WQnX#M)%0Fo0E-dyF-gBMBRqVa(4HcEngvn#ON!8+RcL{V z9WvZ$*zF;>my5}Qq)w0_)t8!=G%n-Uy)>~U&=JfgNm#O_KDC=Y4jpNxmS4*^IHU^( zZ_z*z$UIdIOJ7i0cu{8v6161IN5wA%IRYnQ2)3<$jQk_Lso|VzwN&}!XB~E=dVSBzgr)bRYzoT6y9jkXco*HAT|m{ zFf-x1;vfOERqH#XObNES=;+MgMsXXj8*@`8>G(0}?m+qxXn2frV<^=_;5)^#jciOv zD?-nijVrG!*SD?r>7JVJAplc{-Z+g$s{p~xMqqVx>JZ7$hREi_*NwZDHcW}byX$s) z??78jFzM_P{_;fVTXn&BgA>T_By<^DT$H8fY=}+uT!ttY!4z3VbhJ|@n1Z%D>n=TzFL^?W-!?6QU!-(1A>(8j53Y5Dy?mH z9WIK*<{3Po`?@aTI+Mq4Wwy7{y|VHHs4@)ZCCZ8nWqUq4CarPf&qtGSPnQx)H;8t2U8pOy&=twZFCYk=a&@Zf zh-%JrH z^Mgo3qR2nYy;&+HmPx&3WltsavD8eqlW%0fd$dDUBxMCPmAuYe*nr0Oyo$q!E6YlM zWO>iBw0DPG7uGW|X}_phzq4bC^bw<~UMO@7 zf=)@IO!mmFz7pZ7hhTqVm4;?v=t03KBgvNGK=_R=1>PikHA;jy@(Qz^xCDlDn5x?b zNA23&wd06|Sozd@NC$?>3zRWVd`w%phO8&u&Ox_hUJ=U72}uIy;vD!AhA*M}_QpC7 zoUlkms`xU?mM)edXL`W}*{`WH8gqP+N%DH*lrz6T#_pfz-QY`f_MY5pyfeGU-bzP_ z4Ov{cy(IULSXD5u1macHD7!+w$;Dk$K0#fpN~9+Dujxx%!ti9I+3W{qhD5F2NvvZ7|Fa&senH1JRE!Y3$Up%Gb!^?dx3FgmQ6<93_*A zPd+rH$`~WVZsq?%NwY5Zw~NgvRcR{U00WZADZKzd&89h-phJfON4mR$Lce5wD;g%eZ zbUP39_U6w~=1NecUuqhykHyn@c0t(vz$8cY4z4v+D~@W?ITS91S<%&!dy&>qg|!MA zY&FpO8Rv4S$Fa*F$$W7jp$ChtnK{5^z!~$>Co_aahrl-Rbm1%Vtr3y^ARanb=@1Es zjNU*|z|`)49Q2Bd=**-46>W~pN~-fMFS3z<4bIIuNXoL1NADyh-W5PA+V6=&V{ob8 z!RY=w3(LtUtA-ucup%g^-3~w!?_PM9|90Yly~4806QDpUC$7dw;AZE2XMg!{U--6QNiDD?4~qDQd$3-)l0 zupIK{4Q==GI;Uv@BIrJ1<5BLe zwdQ)DZ;!#pkgK&_f$i4uv>WT{C93H?3AoO%ORhMy_qj@sZg&O(-2^JrHQJ_F4{6ZV z^XQ?yO9ya>2i3;l_yZPA=a)Zby9`U-M-UdSNJ91M{g(rCDT~Y zCNp+PdxeoK%sBeC1ey{7Sjg$F@Z(@R4FyIS^U_VR14;}OsRr(;u-W?6g_yzZj<=PJ zp;GuMT1*0ae0Yc%(RVs7lk^$RH~O?@m5-nW%=)5hj8}oaB0G${ zmjPvCHn8d(g7>Dj@mspWjDdXyJ1(7$v;!mePlQ+@w-_e-7{PYDH-8ZND4wC{(nhH4 zkR59Xxt3lk`XVC~J@FaxV+GzypG-!x-(C@?(a0#V=?^%pPI!Z@a2xNi|62YeTB`@5 z{^4#X1ONcezw=kr+T=f@Z<5No61F%3FL4mvxE2OXYS7O%jwh-9ow&#>4Ms2^K@A{7 z9D~frPKm%q_a>qW)L?#6k5MB%_n+k&D#7JJogAvKr7E6k#17h=sAZO3uEo=*SM$8@ z&-^`~F>D)xX?^_aQ%+zeRXR;h-hB+GhhsXc>lCTatN0&>Mf7DK649I{Rd-5Y}2#0ae3T_w(7V8nG-XntG>N6iepz(sIbg- zPSU{v_85T93=fuNktFc>k|DVUhp$^>$q^9MEJRs(Fni?zbk0yA#t%&3!l}#5Sq>_H zW`#FbCK%R<2|W7K$koT3b$Vtqa-*i!+I~sS%w=5E+6{;0Ni{5skbAgLe#L8|T}sXm zvI)vBKPa^`9dNV1;6seHe zf^(zU*~xvYdHhKNB1a!XkDb*m1$ERr^bY85ekh_hj?^uGD zHXV`g9!f~V9=xEwGNlwX@==Xs(3}p!<}}fJjxNL!K6QhNLlm__Ly^J1MoTB<_+ZSh z^vqOrP`MIvxkkHHX)PjqTDnYyXP`Z-yN_W(Xlj*;lEQX~oyFrgmJEddR3@l;3dV?5 zo62GXrXTfcVc1`=sHv4~$aFDJe%c1Us%sG*QNg#Szl~_R3njhT91RkME^`QH_RGti z=%8ofIg{0Bo+RdNsC?2b1KY6E7>HME;e4qq*r_S2!!CNE(_RoUqr4A7Rvd!QJJPo? zp{N5mu4uZ%>U4Zht9`y&*VzU{MhDe%jsr0?_DjI-LmtFe#Oy-7^cES!@?`7zQurga z6@N~b_?WGpmxh)H-13B5(C-cXWqBBWWI+5u*L_*^bS1I$JP5HAt{-M_*s8V7m!ixm zHCb+xDM5hd3rlO?8=L;nBc<_DBp-Lg2${5PlYX}xyCCEiS%#%Efg5_k@0yK8`dhXUW%7x|QddM81=5Jy+mMv@Y1WhS9}6 z>bKbQ0P)1vZgn>TwPeep%#pRIaM>BnN3p*BLq6 z;Oy3M@C{+mD)*Opy+*|keIpV22?p`Bio{Cgz3g6CYJ+$HASn6bAW}YwVI!wgTP0O05xce2w+P@z zR!HgG0Pvs~$`CXB7{&54o5H-Fe#Y1DF+ir@Vca-fFETBay;N5HmO! zujP*Mp$s-QkBXX4Q>1)um@qx?9I@v>_;mA^U$RGt?GHym){i-cnS4%TrIvf&5zd&k z9Qh6^ergX){q0Ucav50sv~Xv)jL4&MO7RnF%{(8JOD-RFgPf1z7I@D!93PRF?pArv zjP&RszZF^u!-sXb$p8PTdu^odA;*T*+-$R_7giLLe-`ClE*BAmN34+;Pf z4-Ei-{qGJ}FmQDG-!}SlQ;Ytq(f+#)Ry$Y6K1BA_Ls~&dPS(EuEkw^kl2>Ze#9k*L zSSLXJgR)8}WfDm#e$%$ZBSqj}5x5vSYZ0H=uP*!*)2{tNI6@(Yu9>cSSN ztzk9P%YJI;zaF>lVbOyaSfkhO*s7OVU_l zg}K6#l3K0=2)ljG;&DR2ucISdX`<0oiUPf~Emucr4LJhOil5U%P?;7ozISMG-e5fH zysmm;0YzH{$~~Z}1e7Xf=&^N?P*^Mp-&bWlfDeg;h1XPeytMC)#~oZkC=36ww1_6a zr)smXMvmIFgw%+bt=2f9xA}*gmES2uOq_qbl!d3tkeao@^g0Muz~EcqX#>o$?vOA< z?Uif9$ZQn$rEoe@6JpnBxVzR69E*BB5I5*qV6arCqep~A!fe2%@7y|ZZQIXfL?f~J zeR?Lvs!TCIwXGC!o;*f71Ad{f6$36)rY9z6h|2>RS&WMdL>0)&@mR5bKK`eDMJN{P z6YjK%mY`vfr4kA|s}-e%G(=@Z$P)tK#hQ8+CL64jq|qR<-CBHcdx;-@wW)(k`8b|P zT1xX()iON0GwN08>4p|pZBcMMf`BLr#Jj2ZS?)@?OAhgMd*QC!0s-a{a)mO&i*put zr$CCLF$Edab4Jfgnna?~#g)`d*+a?)c>rSl%)Xfd`Ucz_Hj^fD7Hd&af-tpPlK!E1 zndw1hpsr}>bw2@YVRMk8UFGNXh9E*J7=n&LsOHl}L0dR6UF4=wo+r}V6+_O&stX&7 z{oT3BG|rqG;HT#=X;slW0*5|1LLvQ+@-bquEy;SMz79kdcoP{RgTqxpNuV4@7*1pc zYI~pj0OJuV`dNy@zW6rhWOOB29#e}AluFS-v;qcyZkMwvID+=&*xkfo~tNDX9rGtopbFQ&aCh?A(7&!=-Smy$?&p`~cPLp5oPNsPY4 z&f|U`!l~uU{uWTKF;HTq==*-(-4|>r%MH?uA?e&3R$YQXaf6*Un{#|Cig+L7jl0D< zTDfv@l^JR(D9#(c)9o3&zpLD|)M3B^c81*=BvQ;PN=<=?(f-x2~~_uO&2qoE-y-2nU*6+g5C%#{xn% z#lF@5rO@k@9gB1i5dw7h)WI4%gfRO0Il^Pv&nliW!@+fYOS5wg)Ug75$>r$E58`dT zoYU075o@H`F~PIX=^7GEUe$MB)wjO8lSKa`(;4Dg15Lh;5vQ{-dUvPD8pZ-vEHZFc zw^uC`Zi_zG(}npM(SIo8`3s6Z?^OIIXD8cnMU=R1%1ZWx{GvUw9HB-Ug6@dLts~t= z1suLgTMYpVdQ)s&Acz3J__%jZz!*{--KL4_O?}s4{lO{mK!r8d{TloutD5lhCPcenyvYhGh}H#kxAwPyqkF9uRxtTje3-zBdGJDN>;1m z(-}@(`?2cNR%lb-EP69Mv#NZn1XaOpmA1?-FWQ8grPu!Q!xi~TB>-R0H{yF}=3net zI(tKV#MI|t2nsXnwNq`R>!Y$&^z`?U1b|^h;OHog@+&cy#VqC!p$I}HoozJ)KT?h( zOqb?z3#fx!ovAs{#>3)V2_43nQYzVe`$Sow`h?e}g z+T0x$4BRKne0;%O+AAZ&w2X$}Wf>1`Nf(we6L#)h5Omlm6fwalR6EWKb^v3qml$el z2(AOKnPCujyt#qpv>oJ;2WcT`DGaC;VMyCu8KJHhwhcoFTnzQ0QDV@)NtD`*o7ux^ z(y=r~+C2q0$^rLO&F5@FlWxBjeOb4nk}w>SjIQYCU8i`ZlJMDVv2mk?)cl9cK$JJD z^w-971yOfMMg482SZ}-1NcFe`{vMI|7{Weq_2bHAuge@v0+Dm|Zn4ZGBK4>vvmX3$ zA;Iye6o6@Fkw*enEy4Uoo@s(=>XoDb$tnZt%*cEA#QRU<_1qdhB|sjP8C4RdP0rZz0pMv7q_GGw4q?XbPdc!A$axicZ> zpcb6k(5w{3(%a?%-L5asxu?wn#Itg=peiD915gsmd&cuA2Xfm8n=?A|(L~ne8U=`- zDxl;PIJ4Z;H!U{r&3%4Q&pDkwjdmrAf{L97_|2|bejliLUYqW3IO5gp z%|?9tW;mMy`rhv7UC7!eSd87Pq6cue^0F9~poESXFSg%Tr?Vbr&EV}?1m8y61@50l zj0#fDl+p@boH~*5-ym;sYo5HoE$NjWFTQCPuSy=zi`TyGx;lGw1Dit~P{GS%up4!X z1CUi=ZuS-RW98*l9n!aPvNi@#QT0B>VY*Lt=9?AI(V~k&SH#J~-8LFX77h?N$y@BX z%Jr-BQ{>BhW00QcxCXIQE8hJ?tq2onK^a6zYDdIc7P=695m z&Hh$#`JU$52&$R2JD6%K)-BGE&%Y`nl#}@Wo`EqlJ^ooFo1NxlXe#!5 zg2y@=^9QO2{n2%{S~jaiFrar_lqU>hItlQ`04u1XPkuyZW(2e&CQ?-o;qN(xDO!&k z62`ga$aP`Xt~hs=7_SsAteEE)^Y^-x8u=rmV6k(Wh!8(gM(^?;W)s80Mwbep1|L6d zyvfpCI)j_RM*EpgYOE@x$t)>OuiN8QZVMVe=>Iit%7!lB<^OpdcHz(U&yAJje|K2_ zn0NpCF!Jvu_CM~qAMKX;z)Zn(!SKYu(2hS6Rm8xmcRuFw4^&zva0o(|Ir(c^Nf>KL zXc$XSNKUnWWojwJL!y`%$JtZS$;I3}&OQe*2}DRcDMzkgYG7i5)FX`}Jvt%X&pm!7 z)GH-OuVAiVVv5Wzp7|#-GS!j`zeK@EVey?DwI3B86(1#m6p zDEL>Y|eI# z-HZEgTEf(`D9B~2&7}za$T_mWvT7`1>V&a+m%-JNJ$Pk}Wc%+8mNT2Su;b7j(F)h` zBuNcZ9cUc{G3?dR)X(m@v z+$CgD1AYNU4oF2o29w&Gx4-ToQcn8P@K>H^z-izZSN5ZY5qQpdbuRyg+L#$|56B#c`LVzRQTC2>K7jn-N^7W|ncSk$1GpF)Uk^P@Axa>$Zo zdo67@z#kO1aux`6Tnrn`$9-MQ_qVT4F|e5h()I;Bia|#dHBe>MN|T|kiDpHJX_(Nu znhq~iiw%-#q&VvsGR7brVzBE=%Xp;Bu!qpO1fUWx)JAB z8^1H^XuaX8w{knkjA{KdDPNtb(fmB{aQn%;R~GFdxlaIe-0E5?*H?i2fGg;h*_hus zG^i$XpzK2H0(YSQHLwx$l(-`OLHX;?Mf|_;^S_b)Pw5#P*C*F6fFgQLuoe(dS{fb> zt&5>Sfxjb#Et8&$l!4JQ|D-8B)Yquo|9^nq&sf_LB5FwGzJBU-Gkbe|{PJhb+*ioG zk~Kmy2b(8~JRwunY3wYUie5NUEbsTlnIiUNrtAP3UiQG_-HZYAb-|$WB(=el7)s>S zKtGW=kbz5F7~SE^R4~Tj01}tRrlX;rkr;_G8EWp8tl@uSKZt)lRvF%sE;sa_--7DA zhHk~F-T7Puv^lyqw+&!XDUHXv8yFCAz9@^SjX1m-@3hO8b^QOh8c_4p+u z{f?7Ct6xS|3yAL8=7JZB*1I<3TGp{b-4yw$#Jxh(q3=%7u~At6gEs;%@SqZ11knh782lRijU*y6a+Da--uYaNtmJ0A ztJMb^{s#d6SZjw0Oh4bnL?)-xk#To7KcC_tCm4uXVu*~n%sdhF3!9wtEM5_lx=?wV z1k^lE4|u0aofzcjIS+jHHTjor8czhx@q}pfjAj`7F1e7{*MN7QzvC`ad&UH`FwsJC zF_B8B8FN5NgO=vZ$L{a5-(}ywi4HF27}lI(3_TLS2C1b*&Ff*l%lm37n5uC*P7t(Q zT{CYYHmK1x3Y3!und+&rv>av2dww%@Dp3(4=F5#o}BQdKypLubT3|vL@nv_$H)nkUU2HRNwjhr?B$ZcQ4{rNh)>z2-fO< z7E=CF6wS>I?Cq^hoau$E?ToDcR`*@qBCHuWz^Qi#?wA=Y1JrF-vay@k0zpzz@n>IA~hwI z>#-{77a_$0Ok{4dzG~8}I=N1XoR$rsPEUDEC^ z9qFz*8-+p2s3&z?YuOYCPE{)-gt@S>ar%dV>^VdcP$G=dv4V(IYcwC~Ei%N^frv2@ z5>Nr%PKD?u)RSss6*CSJngv9ND-APb2t)*a)JMo}y3lw}ahF=$sQX}cC)TDpVVF`q*Nl_9tX-y$b(Cd8bFRw~8Ckiw0XRa@tvmnA$e zw3Sk<4tDRCVx{mr9}-XE;g3?Vb{tI}_;jWaTz~^P4cC%pXtR5ua|n1Edt&hoiBB9R zBuKsCB8X~lIe~xb0k)Y6-w)ZdhFiU;R1M&sd97bmx#4PJEoco;5k~+GOu8-??AXyL6Fz$pcGz%j!8nqYn5AR3&& z{d%PKI&JsK?T#Z`&2H_(A9^en+vMq44^Ci?-MHZMiuO?z#T%SQ|9%^LoM}PaF)1J{GL;Id!*5Q$IWzA3#?3 zpi8mssq>QxZ3ypmI?ElS1sn50@vsJ7ZuA2-j>8jh5uP@FvY-DcqCm=W+Do>uParO( zVb=Sq?+XF$^HYKi8y-htUG)>~Ujg&4tLxD%;HLOTxX=Xy06_b)Lzz z_3_%1Hy_FH#UG#LQkf{A>tyk>E~D{JP@2#B8Q2Gt9H_0DjMh9}hpItjjIO4M)R;!y ze+$Jgm-VaR~1pUGLL z2K{TiQig#@z;=u4EE+-U%6eBM6`)vvp zgK4~SfL8phAVh7f=!ccFN;+<90@o0Y%mGTG}w__T9 zmvD{vG#&b~khOC#Sz;)WDfx`ZuK^V{p3BuN-qI`$a!RuuERy|`A<42LC1mA*QlG_! z+1=3#=DAqbvp!g8tscs1EPM8sT1imll19 z!p9?F%C2k_L`^}ug-=x?XVP^`Hw#AR4d#_ROsJzK=oX9}2|ICXII1B(qH}Gp0NceM zAI8dx&o1_Z&v2+MI%MXr=5uBhok2y+(WfL%$8r~XSeg>9UPk2S(B>_)2KxbQGbj>hOH9+e|Kr=fU z_#Z21zq4(thZY+gjf17MN<-2+Ce2WzkGfr$;CF@Wm#%1c=*+~w@eRvv=N!x7XyP!U z5iGhfYzgOeyppuioP2uV$1Zdaje40X@b;h>XNr+@VGYa;X={C##jNyS-Qlp@A4&A< zDCSvgAtNllx1;Dzr5}XlP zz`OI|%IEY+&tvY0jiciemTq0;+HI}lDzyK&`(GND{)$!Hv1lr$4DoM*-T5-j9*` z&6t}iahtAnB4M`+_9DMW6o~2-&e?H)wDo@f{s;qBjE?AH@+J=7p;n!wCB#rKXkLjIE(sc)KK&K z)(Taj1PPnScv8Z?@0d)vQFG^;b(UA(cL|RZU5|IK+GM_VAWq(fg=r1AS?MO))l-Q?(l~gR7;GkeX~0NuGx>G%(UL)YA(96hXyj%3v3u1}()G z_uCKYZ;TctB1>cS52H2w1B>|o=|B{Wjm#a44V`TN!(KNzVwC@Pi_+h0q_UT{|TVe(8`MTVovbXUgbFVE|b$LDJwg23n5u~NtF>;h=GTh!hU;?x^lQsi*+uB6s6{b? zx5=IH6zrn#k;AJQGb-b0t9MR^>X}7Zfrs6tuxd5R*`Bhxlu;mQ%vwUlgS#|~j6LqL za18_k!X%+*DdA+iY>qHJq~CbF0m zZukUIpMUTA=7~tF8O8Ji^$(QFBUd~SMjH$0&7&;Vg^3p9@regYx-|9F2K!6x)CL9` z$QOFRBzggyEtqTq`qKivmmI5(}aX z-y*RTDrTApS6IfDW^M8~Cg{QQgsdvaE!DuJsqCIE5V!pn*Ji`cR=kz+AbxF)zo($) zrpt)MewG=7zvl356J&R)urTto_fIwg@!8W0!&3o#mKHgZEXJPmg3~HG}I9o%I}G8gEPgQyOO{{=}4em@Kcza%(xJ)ds&YLJ4-EckAubNtUhg zQr?=|1DLMpua!Pj;nEq@&0Jz~IAslulGg;PVvdA~JrO?fXxWBGxPK3(p-YDVMt>lR z_)oLYUoG7K%7*_?YH@3QQ)4N817j;9C0ile|Bh7uQ}A$>mzG`UL(W*1%P5e9fY3G1 z4TLWk@Jit<0h?0^ODGFbQrh!pF)`+JSd#DHzo};fCW8F{@J8ONq(#mhnVa&QzBe(s zEItkqJ+Siy)vwCbq7bM}mKy4MLmAwlYCy`wES*e^AbmQVw$zQ38c_5Q9R4Xdo zb0LI2G()D`&nzn4#u(#sHr5@C>>iCC=;hM42JPq1x}=Vj!yKVJ9aI3@%KqYe9qJ_& zs9NP9oX8g9VAuxXG0X+`6BcOX6ueJ4C5f0Disi$Q1Ys+IrG{HLcO`Wo@{50ZHnEuprui*c#YW$lY|GNu) zD^ULt|Nm}-R3Y4cilTgxax7_7N3+Qr98!=|%NMZG1Y*iXA#x^%T^7`y@90cvtcgh! zB&tzO3A4=&|qE4^lPEP__3q(%p^JuXJ@by%ur)W zYPO4XAqNCldvbZ9YDOOkW5lRNs|Y4ZAIybsN-e>1c0`45c&{a^UC9>#8mhC z>`9Ph$ahmt9mw~_E)&xTH_)rA+Ea|3eI(1b4y-0fDQr1McvHyzi6t`G_-mx zfZgedSz7^qAT_SQr-R1qmsm-jvOb3bJT-vZE$l1Sg3VYq`#m zmL~`TQ8S-^bz*d8=3CN7_ zLT;y^UahGoPNhzaDurri|F%)EsV0lHR^M#6H`@Ow)PwU_xf=%|+VkUf{W0xsPk3na zib3@-*-l)}H>lGzD;w6!o-!AclGTRP63hnH6#tP+U=43%K$oTXz_0?elZ4t;^yD>~<|50G?8)b=_PISUhH!`#K z5QDuy6t)sP+(TKE?E;|=Q4|4qU}~hbCxvp^JOl}A5X!78eyp`C+*jVxpfW8yb#~eG zF2gK{(Sg|v1#A*jL+xyrY%vsvs6)B$>=vmEI9ocYU8-q*kH0Zm?kW!kGvy*2wAo*H z2a3_W8@V9$Htz%txix`RT`48mr}@k6=N3T?1>27r3;-81qs_8c4KPttkzUSQ*x*lX zm*S0#XmjYhc6(BN`eYc0>qL9FEkPlYPZ#M(#TCe{Y4yzj&sCKyAMmX*FN}LQduwC+ zKv`3h5+y!`E~hr!A$paM&|iudWU1ZLSE;!9<|c74N&fmnQ2*{mK?!`RKbmufCIv#nWgP zqXdPfX6%W1C4DXa_BH{LZelxU>=LJ|;lH6y^rznD6}4Oa`3s{KGRMqT0mH87xyFJ% zF$lbbH!0c13ui*76+-!+CN;~S3g^tbu93O?#9bcT^KwzT{Yfv6zJ$*)mzvL>PBZFd zkH_b2C#Vm!r!|XjP%vcoFhMYI-8=cD>Le=atj)MKXTeh~AE5r^qr;F;*5d1< zMsnw}{LQ+Zc6^IFWy?apQiLdb=(v%80h4SO8x@a3phjPavnV}D2kP*ElS)BMFPp=z z=AJ8U+~qBUiMZ28z29*&0Y2ilPEdv!&DleiCm{wLeluwn*$(EEdG6S0U6*!;3b}7s z26|a`=--BSCUH@|Liqbt=^}Bq%9z<=YRK27Im_lUN8Ea?jP;$EWQNVuUgVYG9+r*c zabR3KxG8#PZf|4Lv_o*5xd&|~SZ&P%T%R~m0wvHa$MuTKyAO!yl-g<(Q?$zdsM@KE z){%%Co;uZO>9nYss1uV)oR&0>!Bt8!tDeX+?;YD~At!xMdfFQgjpN55_)&ZbCs68u zKk3P%H;0l?4!0L5rJ2bgJyq^53X_&Iv@=m(h`g}Dw^BjuXKuzx@PZD?U?ja&RAr6~_wngjBP1#j}>r>M!@W7q4PVf&upZ0b4? zBL!$S4g{E|cmT4|YNgT&ieG_=G@Xo@PJ*zZl;}Mm_&g$Ou0?#shY`b&auRgf6an2S zF1KB0cKrdv__14o`9!F{2cr~_O2vp&gIAaAsUTjtji?Wv>wdWc>Tex$9P%8lL?=Y+ zXRvsPW!0Ixv`g3XH!=RMaAv8J?hkF#*ywK=tLx5Cj`t2Oq8T;B2_?W`m+B7&JKq=P z;&B+E{;=VZbInMef7VXpIzSwMO{v5PGPyF%+X{EaM-yg4B>CVR**)gy7xK-&;Mjw0 z*8*g{+{N7+LhB2>n?(eOJfy2E=ZEp`?R~Tr+m?aLLh<{RSWe)?SC3WVk%XqZQ`S2Tw3IPn1zg(fqg zYjV?2pSz_0!*+TC3F_u&IUr;kLgx!M%{T79Q)@2G9$bU}Ewz@@xA`Bb_22o}KcAiD zwPnx#Q0vYd5Gqw*6!{hc1E9wr+sr(nX-vHv=?@}Ex)U0#*5a#(ZRnrsJUPGNz5sj@ zZmo0|(C3VfGv?VD>o3>e$0-$7gyZoyBW*wgr+yC+s%C)TGr!sp84eb30H31+5kgRgF|ZWOVCM)JRY|JX27}HF;i_=*pil^o(n_rag?3(2fy_6 z^60r|4mb7ijJdS*$NbDv^Arc1!m9uX%~^pJ(8F*FEFa2za3IJp@iP`bqp_2p%!t5E zq1hxAYSUzD>#9gpJo<-oYpFRFizFqyB$C}Hv&Wz&;EoLzc#1qulYznNc%Ty&ZIgA*`A@|(mNK%Y=;f;fKbov=GenCF%;$uX*xrwX1 z-Tn!fyK#C~t#p&7eVPW&kD=nH)b8^J8f9MpW%Z~ zcKhh|WOGuoc^V@5A~Ms-;G0lxS@92h*uN{E00do@A*XhjG`&;LT*RADI>t!PZ!k;I zEYEE1Qh&O|6GSjLJ#D-M>ZfrvBX>kLzr0|($h=xbs}zSoxw5&(HMl9A6=mhyw`5m& z`98N+@D>0j)|8OEOI4~Zn4j6cq?L9jmU9Klp5X7I{4RmYA6#;L74P(!eW1N1Pyb3> z$6DG6%~H6r%=&$77h8?JYY8K)xC{m99kQ*GUZp|UmIS-|%ur-sy5#iO(e4tiGq2ri z-1H6x>(NTWsW2x}o5NmO;kql^GDh`_q{dvHTc5qnIvJ8F_uS$wjnCC-$MWPvy%xs} zTqhY~M)wNf;JBv}ojUXBkG#d7+M1TX+@$lVHd@yr@4*%CW6Z!~I)^n`r0KIimNm3p zK5sml32!66OfB3VzG$YmPJGr%(!9}$Ca$*`))~9g3QyI_aYEFGiGM@fr#5KIz!!(( zs><^2P~6=;`Mq@^>2a%-`Y>%S6PI8v%ote#`Q`zN_$dVlc?Ls5XaONGoVh8MuOJwMnPGe}lz6&Pp zsVfr6Ea#g~AaZgS*pM_D*r*uHs3e?jfcPmVF_r}D6r{mLtOFca?DODOEx9`do2Z00 z-FfmU53cAuEQ@kGQNm6&cB5cuOf8>5->F)OMCao%-k3}|RO#cZv(YL1nt6~wR+do6 zV_GTEW_} zOkF0(fwlzDyGacAMXZTkx1|qZxygEJa1vFuJ3fWm6&E$3Y;zH%oB2}%(HilQyup^n zgygs8pStzWRBcz$+|20~qAC4mOuWGQT1XuXqL6C1!O-XW3l5q=AV1jOS2ws4qwVwt zuU3h^K8tywFH|7Pb$2?CALSag899nk4!rJOUS21ZsD6+~QAym5lH0O9jhzplI@$yU<>8EBknFYS*Lvhg9H? zYY)HwozF1trrEv!DKp&vLBqes%>GR(R5EsR;&(9C|3Ak;XC-aNbtQQ2IPCE_V@;X- zCJUf~Apd@LJ)9b6%&G+ST-Y+3&#uX%Z+IDA6-?|Hz&a}=Mi+K`l7i`{|4827Q z*H=65ZWC93RCSP($)d&6hD*JsgZD-hPu`S!E6Ki4-;Jh5%SjE--U}ZSaXulu8K+Zs5VRaodPGY5`ojkQbqbnZxtM_#fVVCZ zy@!fWL{3@%lQ8iPd_}fo@yU;0Px)(6jjK)h170Y$yV4H!SbZ~(wv=vQs^ne#Q(j*y zRk1ITO_S>J7R1fx3!~D2iqP4pcr{s`l^!!n_SlU5Q_-V{TZy+gChGb4$Io2l^Hz&q zcbNp+0hM8Jw}77CVm*WUAO7dSa8?rRc}AfOM)J21JUCTHJ(+=d{y$%od|edSAez;- z9U*P@r*aqsj|;Dsk}kzl6y^4S2JVe*a9fueIxPOo)@~HCuu}>_JR^HWfy9yOmeR>u zuseJDm`e_#wM@Ix)U7$Wm_)yBO7pIjsPzd3`;5M22AK>PicmR5D4rW5GTDtIA7&h@ z^OmX&s(NV^ikPp<1pLqqm?*L(tN8F}Ma${?{rWl4)!&Tu{R~u*V zT-DbH3e`-mml5cR;%DzXv`T8Dv9?hJ>hUNoWkpvju3bV@J2|S_a%`N|GU%PfX~sCT z3rCy|y>Zx8#(Q^=v?D(c&5OJI%8`~Hb-ZM?9Ss_C-r#nYnR7a1jM+p407x*6Q@QtW zZjemHRJ$-p@acPd3Xd`A4auxw#VuGS$JTd(K=TDE1Zy_)UI5{N@TyBVAf*5BxNTpU z6FBl5L(t96U2wyw%_8x=DG+KIK0kfi#iG(J{F8BDGKAL7v+@Q@HR?v4{tKwEkuV{g zFhJO#CdQ;;6dr{UgVA_aDWaw5#32-{hyYo!jeutmgs^IyBj_d+<`zbgM<~e}UnPuu zHetUAlW{&T^>?Z|VWISy`jKg1UXdw*x5V@r#!_ds1151)$cc`FQeEB!4LiM#YT45$OD<|5!OylP}1evp}R z6+?j}yy6-{xrk%Pi zlAji)kn>vgNFb>Bdm#UHUimNSdcVs?Qua@t#QeYJmH!o2oSmF(ZRDIC&4gY4DTOmNMO2(c_VTGJGC&QzKX5%dOi@9*&;NDl&tL9}fDAYLtNecP=ST8yF!1m0 zk}`L6GX9T^lz(^EKcD}9*Wcwv{#AdcCLf)KBBP$Nqn4bcyd9;Y5ucR&-xlC|bA{mw z(qj3UXuF9RD-op;2m>mD;bvo(D{60K~B^_ZQ#TGAjBBx?STH4B1*E& zLp=YPzXto0BK{jN3hLXq=sODh<6QnbF#hvz|J`OPpF1KQqIoA-#hJA8N!ltM7X7JL zD!}s>5HuC?(G`l-Hv0Clv|FRjZMLj7>|Fa3gt>N5hH3~=lR;*ZpPHE_%wm{6wEOt_ z1bW{DcuZZ9NJ~Nyc3!k!vrl`{OtW9F>VCaFalXv>QUVRAC@unvWtuEWm}x#DTOT#0 zi43Vgw@Zo}tFO8c;xL~#HIzC zTa~&42r{u`ps4ZHPc#~(PiTBpGE7dYk){l_fME7=a$#(F}82(MM*6K3NQ13xBR`C0`MJEwI+`7XV9GOq;C|DCD4xditvZH^tJ37 zLt0IgFdR5IgE0M3PJyg!;Y&=!q+5)kyI9ZK%>%=*K|Eq6aaBh?Yrc8_=B)T5Y-tk1 zL8x&4<_6r`BS>lGw0H7=snn zgDd>y!jO6Rl+&702zOFk4m<~Zn*Vlu!vua|a;m#fpUp+yfhVWf%@2mMQ8oOkLYDu{kbE&u@jHeH%O38R~ll=MCov90C<=gCmVKU-pv5!Un)d zSu(bf%q>l=W@?U81{szzU*p~M8EF_f0qf<K zFtQK3uecOMrUFxlY)E4AGL2B~AK`}0AQQ8t%V4eVB;3s~9LtAd;G*(=F}$UMJ|hQJ%91&VZR>^1q+s-E;_MpcJp`_NO80gqYKj zHeeWZh9tFORDr3eBDh_5F7w0>f?m>m(=hHP9q-x#72O2+jK5S+1IRjr#tv-Ue*US> zU(>nQV#MN48ds%?x#3>Zzcu(4)`Orv2W!FOf~z4%O$R$VR53_tUUPCt6YmpxsfE?Q ztfcNQkQ@AY4g5cWk5@k3(*y@~{gknojXCZgN?UA@*>r=gGz#5mc393L)fM1tyq;d} z@rKt3p1mh5ikV8$EhHQZ7?-lI)z;?Tn8xQ8WF%bH*r>ItNT~9s$N=%?uEo8sI%b>4 z)lcj9Djs6<8j%;?&~uCV+ASt>b@{>~1fzti^Q@3R`cq;;R;8NUwIx&TLa!;x2!H?y zkxEW6hX2&6`cY)`>}A=jT7CA_lKRIw=rKvMYCmu0k8xITA`jpv^_>@v^P4?~Yi6}s z4rj111XpEKa1R%+(HzXqi#i$z%k2w8w}fGu3xxkVeho`KjC*2?1tiNTtkRGBClSv9Y!> z{L)lav(lwr*R_4+$&&Z}bNbI`@t^?T=R4lFI-fH@MQa4e>AI9|NrLk+Xtgt$z>f71~xVe9;xs0y;7)^2` zX{W|nw~Y%aZJ=Y=vSzrIu{-IqUp{gwBTO1qJ1EX0xKr>QRqizVsVMJC)afc+!I;%x z28!}d&w@n6ozhL5^m`ktzC@|*mlCMWq}0~c&-h7kyE^kEI}Ta%P3*$G+Dj50!TnUXA* zYXJ~?TF8eZ$rIYFQ!OJri80LZ6O0o&X)ag;AoV_DJ`7pIVEDhQf&8;l4nMXg$8^e|d z=P@uEOVr=c=9ueh8CR+NA=FdFBQ#2d(XAIOY=5(Pu~_mfGX&Z7nL2RPi(Z=wV~Nb@ z&8k=+H7)ZSFPfIAPG(}rni!l~&9`J#7hmQbV@shau{LK6$|PN9@O2QQikIkz>xi<3 z&UWH}#gbzUL~2xCvQ1|x71cs9=uNjf*@7h$C)RqnvLrQ;6*<@byqK@OTIgBSQz-FDz*H49@^KkmJQb5w?I5hz@{*n~@#IRo ztRs`QO`yhOOYoh2Q{wQhztE^ZTda73C_n0$lyM1WsG%@3vMj5lY~0TK;S^8TnM$t4 z9a}~YQ7k1&gz2|%oWiMfLj7Q}da7BRX3)zFG`b@FYFK}A`M`p{-ryzeVd@Jz$4T-Q zIl|g&y9I*gA~5`>)=>`yy*EBOaXMI{(?=DA0V9 zyOfBC@$`rH8(wGj>DZ~#c1H7={nq~WmC>UZR32N=Om&k2=oNnv8XXk(j8* zo`>ADc49A|7|U`k;NDiju{JH4{FRr zRVxf>r+7VjM2m}n$%b2mYPVK?dJ;mM+%x^sVYvkfmpM(u9c5JCg!uJxA|H;kNT|yp z*%4qvJ!?(0KHJFL$YMOJdSYK&C0`RpoF63kR(5pHe8aD>fgUd0T=ZuaiZq}8Wqa8< z>SHJ&l!gB7b+=J-f3sGJcIu4$Es5&Ex`-WQ-&Ul;_To(XDpGh^qz)ne>pcQki7g+I zbO(1OV{BkBo$3we7b~Ca{PV6qo9}JQqhRGHZt0gcftMlCtp03tVssi8^X`(u3YsmMU5EW zCB*9}L9p)JZ$FT%(eZ-q*VE?*&CG5nd?>E(lKbcEDTl1kqm_NX^s_4 zDKb*6L2zHWPyjg^@L5S+iy2U-<-vye)qXcggX!4?G00Rch^&)cQQ`;C&U~T~#P#iC zi7HL$-)bFNa>1?jrsUPS`CWCSlH?z$jWj zPMJrw9YO<{0s;acc~I$0I0IH462r4*#byFr+$psEY7786&D5Q4do!YTVxUiT^jE%&pi>*3uwv$FJaMxe+pPT**kN@Qp0z^ z)4CB^{URZ*h3v~4v3zW`MUaCqRU6Svtt#W8p;+532TI z-hpWI1@nVG%`d4w?}2Y`x%IN;&j?tS{!L;jO6>> z=2Yfc-=Yt8jhG}4ecrH{kpZvc&bmp{pNW_Vz$ndLBgWd{1jjt8e`##N)^6dNr8wgC z@k|)#bi|x~V51HX;Ku)09tZUpA?74&OTua6WsWL05z{1=n#>ZWql|jTLl5~f!O(R| zS~g|BU=XSKT8S8Gi=dsWl)}y9uE~`NA~Y&$H_-R%k3YOg zy9KG9a%jF6T0125(zvO?;IM-!MQiSAbr@UE{8;L zo5zj1zP#3~L{=;&ar>SF^7!}jA8V)ar!VYs<-A9gac4ker!@{mk7vk2-enVn_wA*2 zFg@Soh~1m(m6s|s5B1a%?gySiaHD4Lcm|!-LpmFg=vjB^hKzv`#Z&k>@ejexWy^y| z4{slYd~gi_bP$^+k!5NB4mGM!)ct{NOH;rb)#_x{d1G%ix`%+YPz% z)!lnFl(I*rxw_gnO+}RfyD5Tl+A1%s7zE^*=FN1o4d!uPT|(S8zMKB|aP$TgO;1&l zzN2OKeM6}$)RI>Fu*@_BlnNI*QAv1(e{I${*ghp{Vh$?PyfS`)iyN?bjoy>fY?QA2 z?dk&LwZ{Nx`e3>dzr%1zD^{#XtUKTC$y(L;V(aa#z99FGd#S28T2(8lM27ku|Ba93 zEB|X%N$2r9$yxX4JD?-f#$C_)HbtxRa|`d-1Qw#4EX#ZVXMUw{mjN2XdHi#Jszb6; zxYY`yXjd4O)l03VZPi}1|N3}dgzvmS&IWz(>}oV6*S5AMFca`d4zQbjwE@mGv+S)o zLLncxjAblCQVbcdRH%=^gk1Y)Qxy}*3m?y$#r`^$Jge^zmf@fGnvl)-O#@kDG-5*s zuLT{2p-=(#DH@aM?88v2q$j{WHkhWw1q%f8-Uvy@kY|S!)UH3TE|yPVyhSZFv=;s+ z^5IK_Md@YDaFZ3$I#dR-nvVv|mg{FCs>mw)VB{ zXz`mjo(SRb0Oku{QU%sPazjSWilGGimHfLMyrx*Lic)jsq9|@$d+8=Q#S2~l)-5b} zAg0vPc~4>6EghZ2R{~7QE*iO;STR|&^>JUQre-ZSX6<4Tp4$5W*G_S$QZkfB7~Lkw-aGzVKiLCVO1tZJw6`t zL%pxWN?!OgSir{rfgZU5-P_YCG{)X-#> zvPCa|!EaaVgiJ5wmqb4x%S)zS98W4UwzicSK-gkG+u#XRw0o!@eiGEU2d}If?>h`& z5`{^y99%U)bpjh-rEz8Arh8(~xJe0_!AnqTIK*lJsKRgiF%e}UX}FK+ zv61QlQiN${X(=KOjD3;+x@I&kz%1xg9kT`2&+V?jgBv%k9}>QC!LEhMsdcoN5P5K- zA4?~y%cZXPq_%rLPAYstdWXn_X^FkI+^ZPq!l>eoDCvWAg#exy$)~vuIGO*@;1o3j zH*lK;(He51?#_kF5PXu3?qTB8_n`mgUUE?zXMC62DPf^yS_pcFhl4;}UeC?kWV#Ce z>2Iz$W9=Cs{r0{rm2ZT$WqEEyC+aieNmj-_EO;H#-2eWHPSoO>a4mE{M^;?mSBtfq zVi|OQ6;*>ETKK^5Fwo8DW z#A-lQ-reg$e|=qcyR6Jk^qS>)vZ z(Hs+se#bQ{PJAliFbU(OLfM0oSFyF`@7D>Cv1H7`yas`pU9po+^^fS6Wz<=(Zf`F} z*T*iqIii;CwZgwFX6B5@RBIH|L{H; zWgdVMLuwdntiiYj*F6&ech`{dO6cR? z2G@;B;lJOcMDPf9<4K^nI1gqE+|Q$%nWCdPV2&N_+c(zLWG@WQdtf1!fc_T~M)ba@#sTT|1IpV1a;Q)#i*gdLD3aKad(Ml>~NNaia z2B{!HI~|m8NQ?Azs$OK>Tm63gG<2>5_MY36G58Wr!{P>JnH^!Ib;ZxZF%Aev*ZB&L z<(7EWo>)yw+?iH+Z!>4M3cqV{c-VetOegf#Kgy|?GQTT61OfBX0o#_GvU>)XGNrLl zVRyF5(JzeW5E;BKFdB9LC%a8T{p?GmdZ(bz04AiSo$C6}a8~Sx`pf2DKMZ~L-h9*a z^@E{``-K}_YGr zztHD8>$0n@4S#7P1dRZ~>1-tL&?Bx*YP5RhKVh0as$7Kx7G8_9a6dNQqxqvj9a)g& zV!m&K<1r9+k?6Z;#a4j1safTqA|8DcY0T%4tsI!9ck~i01{|9(`aSTn`#$mc6dbz1 zKV3L6?iQ-m(F3h7i>l$!T@zmDoTU$^KuUFmOM2V|`X11^V9JfxJwO;vY1Ia>9p^Lw zy0St>0XtykNdm_c17a|#gA*X;9HA)yoS1~p79jf)hN8YtF3iexake(TsXKa$Rws48 zx#X0ue;oO}XLU85Z^;;Twznq*n~m!!fevkNTqjb^h*P2$h<)A9O9T7oAP)A2zmLf- znI#KWDZ2Fz6ZV?CJm-XMxodj^Y{QIM3&)ejH72sYDS8fBwJys zeK^AD`%3qiknO9?7YFp&L7{j2mEB>D+mmg#G`MTuUt7Ps+c$0d?^D`;rSK|WS0S9- zVobEk3QPrfF$}lXG#~MQ2}I#m-tvWPx#T!~)irYu%jSHGpFZ!wbGP9tgZVJ>;y&n9 zJNanB@I=;LFE5ONCw)XDEl{gEM-@0`EX}#C3ju%0^Xvsf)sJCS>?NxCh~mUqF{fqR zHgnvt!`zt)ksgodQz%XGBD6r$HK^gxo@&tm{BYpmS7GOM4fDBWN7aJEJOC(`lB>}; z1Rs766x@9*loJ<^(j7499v#0k<6mMaKIzoBF45^PcQ*xS6bF}PkQps-aC3OGA6MR8 zRepN!fS5?pF;>wj^dXaD)!U$U_SJLpQ*Uk{_+BV`sIR@EuM+;KF8NV`xyuWvT2bOW zH+_%ts$i>)k52d_@sV^?^M>ezmp)o5y%Bz9 zQ7h(#wpp6ra(R`nK8N%)hAsegV;SE;usK!f$fB0Kogm`)|4{ah(Uo>tzjwt>#ZD@= zZQFLmwr$%sDz{TT`*Z?J*eS_f9Db2eufb zjVYaVFvlToD*67|TdnIEl|8P3^|4TZm`W2w4rJm#X~@Tuhh{S`mbic-GhtR~GZXOE zusouzaw2c3#4VzEpS@R=cm1X`FOuE;2B02*L1R2VzY#4e8_JO%=EUdK>lEnHh;*o< z^xF#>PuXp0Ob`XZfg+(ereGX#sr?&QSTkVzN^H30XSLjh43k2VU7@s=sA;clh8hTw z3P(+zeA~@gi5xDYMMkp9-8)F>81|CZukZ#C1o?}FB|u0R{c{h4ZyajtE!NE|#Wt$r zcIukqXorUprR`jwt<}RAEp)(#cl#uwosm9}=+k#m7H z%g`M8rZc1EH~l({MzjfFB1YqKDgpwT4+8UzOSpB=9-ed{LSpDKQhM(6Mcym>lQ z@5HoYiT?z8$B_7b&SgmX>4R2c+j5RhS4pqv8JfZ%o=$XC{9-3P{2)3S6E|BXG0LYN zNRC4IEP?4L!C>CI4kK*@Cjv8Ovptzl`6>TP`-WDVh`CSo_K#*Saw$a}_Ak^5CHNnx z6(Ku2Au9(v*MBcQY_+2Qvm4{j)ltb@1=A4jizi+?Qd__aWl2hUKge(5zlcAp4g#5y zCd-HdsjmB*a)iG&v<<4@Uj7}->mJLSpNG`ssOIn=%^5hx4+!GmY{8z+#s`_M2dPk> zACHebAzK(;C?S)|P(eN!RTnF*bk<47yK5E;cA67*$qhHu6o(Iv`3Gr)$Vb$P_39NC z&Btu3S#_GPp#e_5m6nz=63I+uDV<#{mPeJqVp|@Ii00AjcODCN))1nJj{e%n!=i+6 z0>M72h_a#|-Q;Lazw4nvGFgX4Zvo*Q4b*U*R_i4nqx^6j#zJ=ecx4_~4K^C2%0w^p z6CFtok&y3lld(1PETnm3Vvw4Pqv~7NYIK?{>WY=Xd%snJ6Jq|JWR02}b+z{vv%ilE zSTbmj;`^?9@MO2)A)dV1t+d!lW+TRhO&*V~cA&VCG!yL{(ypIoRJLC#rMkj0me!fC z16;~`DAo|52&j*S9D-<`CEDXyoMEG`qiU(=xwq#$iHp=Kz{eiWeZZTy#nmo>Y^6%G ztX?4q32`~r9Eu6(IngqHW@U*Ua0G-NuZbM0`SK>U9VY2RI<5)@DUI6w*v~{b2ve4` z1TdVo&qxK(LWxrfp{yZ@)}hVn)WZq#F^9?DvrAIP}Ey2dpw9>FdSH?k<) zgQ*BhGe@0fxBIZ%WBgque8}bN4v}^SQ@vmC0hD$I$;~`*qxEyf6IWLRnB*R$<7JtX z?#!+MT7o@HnZ+}*26J-!0iPXz^5zyiW+jxSY&uu1;hO2wTEJi-yD!c1%5IFf|LYZT z<8WD8ZnkqcOzj3~8flGNdJN~dp)1pwGBigfgi)6yB8rvYDOPq$5o3~tK8^Mq?cJf>v!fOhqq|unooA}4ObSZ{HVp-AjmcS? z7kG&ddqb`81&Q`H?wJ-wlaXFj7XxyI$&+BLM3q|cn1<_imVAh$c%vD^V}i@mv1`Fj z@Mffxld!v8^QznLRa3M)vQU8>KhhN!TY!2jQ!Y1>i3aCc;a_#}XQj>JGVmVPzfoLa zKZvfla6oD=wk&>d1>A__e85ZBwSL0=>`a4 z`#3dM1l!)xgBg!V-;q+f|M|%yFk4%iP~MROHK0z~iff&{Hk!sZM$me;#;9=g!H z`DhqpP1>)(p7J9$&vNG-X!iW9A3eKV57M2t9<#H%;D%5x7zmv*o&E5dE+vONYm8xz z4Rx1lNM@@Ir_iJmpYQawn`iM8bzNy`HJwQf+^1Mku*rlu1d6;fgyVFNhh41egM%y^ zwcEK6JX3|!d>zr`^MPKU9e&{jTcD8bq3^iWi3|#iHSQ6>gsTqY`Aa~fpRB_d8k&yI)2pxqMzi#OicyUs<@he1wIx~2C&IOW)xMu&o-=&U)3zMi#Zn)kfI z=nL|S^^h~2MW6LF-ot=&0ZB%OH0E1*_(v+0<7 z&dy{fPb@!`bOQS&{{pcdFJBnL*qV$96Q2rx94H9OCExff)qVn+F><_)6pb9d$g;DL z@ST}POx@t4uDG0qV2TG9i~R z)4(Z%iFPh`gje1~Hw`e;NEaUm%$d*{^q!P@M&8QSX3Z}+qE2C~P9}lGDq^GJYjL}v zd$@8Dza@dIin^B4I}thi{b!1sQ|n2(#u?Z&jGik)y?J#Wn|B7gcA<1)>0P`V*bCt^ z)mMb&CIVe0kk`Gw(nFm`eBA}O!F+wHz<6untWKm^{SB)1r+V+E|G6n8SU?^W_D^ zhq%HFTEMMPJ11=;z<~u=jg4 zq_R!9$WAxMA{LqWNGOW8)s8DGoLhwq>Cww%OCu$}L`-m$B(@3s_%*(erK`mXFjQNC zfqoIKi!hdU+JmDH7Thj7x@YYgvdfdpo=%JF$0zkEC^hu}B$uYvySSh)XIQVlGaT&? z71jL`Tg90&t*A54eK8t_oW84iUfH0hf*06%C(mU|mndT9qEVsNcUo2YwJ>1SrP;l_ zRA41k=4cpi0rdcs4Jn%{1t`yn!&+O}L_066N#*!1JiD%P=^d^) zjE>f87(0f|1%aC;z#&eld-mrJ9 z_I)^&7t%K-uBKlcJFY(II-fd_RGHo3D28jE3*yMz?RRX9qU;G*+Rz;(?EQx8ftVr3 z9$|*rv#WNf)-DoW8H};4wI%n%huSnIkx~RDpOdu4p!H=X4`Flnv>Jkdy8L&qgqqqwI8)$zQ|oq zt<|*M`?5RI*2HYJ`R4n5<8$k|f6x+9M$*G!Cp9!$%EMy^5ivUhE$!*8AC+W~$t^n> zo)ts~;dv4UZeA3es#YfDhe>&RfnR@qr^a^$)|EiawOrn4*~Lzt^BtU52M z&kNf**9fPO@sd3--^{R$>7-9$(U!>$&SP-$p}B*-BfFO}p)FK=k2P-6xmEg8jwCn? z9XC0;$CU5XiqNa>cI9}bdmk%veW3!noqSqaAjsnjq0G8rz71KO?0h%i@a@4wf6 z#P%xWMR|9W)7RKqqdTAPPcu^b)q-ds^Lt$~jMOKYOBqX`uqCG%)PQ)fL$V$Ju&%b#4z2*K@}-)62gTCzs`zWk1p5N7+OZ zn=%XHoAnIKq1)QN>)R^)3rYu-iPBGv=SK7UhB{zvP^ZPokvB4Qllf!kV`rD8OC`<8 zL>oFm?`}Zvqr?~Lw&3r3KkRKb^LY5aeNm|}krO|Vs_zLvav?hHo8uDhf1&?Tsr)-%<7AW7i*JcW5wSi1{Dn2syXqYxnGk%}{a(Ll*(cl{!>$w;` zRB%6+^bTInocwAnnrYr|sCfH#5;??r=>^2>Iqv z={+WO@5I)|H^Gy0X`lOPY*;jtG4^cy+|`oq*Zuw2d&_I`0<2=2^YaHL`Sj=14#g(N zhziu~Z_c!c1H1gdQ%A@OUpP(GM0E2>J2usfZ%9c-$!-w2A>XXQCoj52Ej1k%xixBY zprmrF8Lf&{kYml{sCqrt`0SzFDm>ca>&7g@Q)D&`0QOuvo%^T7>uJ$V0g>QV^xLqR z`%z|ok7}XV*8*5cWXlG^!#9NtY{e1Zb>m>0>y<>aJb~u0v;CyhXBE(6%cp&{5u5H1 zj~y9UAlo3)gI6cF@&t3u`FWm8<+(IKUK3|oF8oU?TsbzdVf^s6pIyvCO-!-1INpMg z*(Z#Stl^0Q!ny!wU(O6@KkN)7@N0`G z_q8eBJ=sZDRaBTAuJ$V}zH7|c9Vv_PY$F0OL42|cK={zMRLIQ(Fc-a5the^_3Lf}R zKiPgKVaK7nbA=Xe=Yt?ZEtom3Mw#6_u`|8Iwj!BRXb{o>BKZ%=m2<9yI+>zOU(PTq zTz|m}c&c{is+?txxI*%WZM~|e)rL?QfV&TX?i9WYSqr&xFiC0FE;M;=*SQD6;HN{n;|)G&dagL*WI!#&g2>_ zxdyxP+k1>?9+s_B*#_;!AGm;vygxtXD=u~yHJR8+HVColzXACMKUQ7EZq_{?Zb;jmL*z-b~Sxy(wJLJVS_tPg@~5wtlmu6bimc4_7; zg<1);eu2JSVB8PTBo45=>`?6P)-zQ`%tX29L^$bhZX9(^#Z4-lt8yr=xaHI?ZN z4;FM*gWpPMIB2^g=c^LcP{`uLpVRUSwHAqfXCw`hzvo1!FJ4~ z<=4*BCs5doQuK#&`YlGPfkbcg8b8w_oMh0%+Oxh%G!;+X0yw)s-Q+vJ z`^58@Vqd2_0Me0zC!;%1jU#2DWH@$t^n*-z1$pStX33_0_^As#c_0vZB(io$!?y0fy}`i*wPX3HDC&L84DNB&XI6 z64LI67+U^nvyJ$`wO~u-g%2ps(op{E;1TE z$ZLfHhN3M=EpZFVSwVUeP?F=ka%wQQum<`ymiW?=G`>nE4=I%6rSQARUq)u}^Ll1N zFAuaz=@@<=p0<%)pQPx_eep;v$PAqNm^5BRZ4R&mBO&Nyv)Ut&OulDtu_Z;4`xxyW zKGf6tcRy429}{~tB3V-|l4yNNlTCH;ag{!$I8OGnqmrgS_*y8Lb%F9b$l*O}ML(GZ zF=*eTX9Vxu_h}N8^)f!n6y?u%e7c-#vdO4$-ZvOy!dNMzo)FAE&kMB)#;Rrky?$OS z3^UnES`IrOlVFJ_*!-r&#t4nCsE@SG}P>l62OE}>Sv3xZQ{-ah!kfRnhE%N_$n(( z^N8lhCMohy^82^MIMO4aXaGrmn*g`2+3K>xm+{qvD9`#&uCOCl` zr1G`&6+UhUCrSidHzQvHSux{wv|+LRIo_v)Qr02fv&^hj2G7WOpSgni#_!z@%}hWx zHW;jzl9X_zNtjm^Ld0E+ESk4^#r7mr45^PLCK*P#v>J1??Q6SE7qELz-|&5gEqWNG z9~A--GCYs@%CG$x(jkSWjea^;6{xcD9>HTFdu|*KHb9k5kX<1Xax35es9I@Lo3;@i ztB}^jMzg#}$dI&wKtY>ydi4zGR<~ z@&Y?AGIx0N=S|X zsHLbY{IHg2w7YOfq=R*R%`69b6$v+9H6ETgLK_5Vj{pP$AWz}1uQye)%EBRA18Y13?-1nU6hAUG4l`z{0aBnxHa zy2PA6nY53rrI3bI;C#1Y=@Y84Oj#t0v?b_wuq-ZLR~+omv}Ir=ZcN#Bk;6r%E0hr6 zGRcGCQy#Z5h8Udc4?5bCo;_VTG_OtVA=vu4tOTVg<|6|^3jvx zY2&Rf{kLVc>CNZo>*nXiW7OxnHIB#Lg}ZEYLbG^I?$9JU;7RpQhg#w6)FL5;Xv>x? zD^~)y&f)Zqq1wS;#t2F|hI;(j8RM8*&e?}iDTDQX!oCa0Cr(Qf52$yx`l3w{?SMi# zogMmuxU~!Ql9y&M<*VUY#u|{5h_X&87Y159I0Mgsm@5Lr(C$&Dk=Dno>4J-w zjO|>YJ?-D33E+^O;U^wF2C)=ua>K%_wRHC7GI4fkFuGHfOLh<~Nzx{n+g-qA&E6aY>j9eSD99>tbH#cLrY zmn@H?VZ2CEpbjJg(rGi$FmY;?dIGA|fX_JD1;x)quL{Wk@L5`1UM7Qb$qguLNqtD$N_&w0HGG_20^e8Bv z@eAuH8I|;Dc)Yu+n>M5PmwSiMmv`vXedBW4kP&fQyK0PnrGV*M7LY3yHIVBQks8hM zBp0q$(Q$RJ0PZA|q8^#96B)v88{WVg@U`K7lm)gJs~!&jQj3CHirt+Aon__Hbqfj- zaA6Oua?|j|=|jts)A#>z8wT?s?(d7`&!q{YTuZOI07I9a0*={!^p;P4!`cgfG_1I< zmTh_MX^o%g->5KsD><#xr&keANEJc5r5vJh(_+&LIfj6Yq$JscxV)@o-zvP~!^c8# z8aI8wYr;EYgEh3=!Sd7)UP~ejy@Yn~1bpntoFx?6m_P`^QtCpTC7_bu(SUcd4@&+5dATpC zEAFfW9I{a>5NQ05*aAz@o|cLT5QO?t(qjCmt6{i)ym7tdQH@1hvl zDNHkJPaL`|1x_*<5u^)rII1hb@1h> z+|gPSSjynvlM=j!@U4*GL`$tJ8%!!KRU(#`KVmCo%I+mmy8%>c$H~K#M#@G}{lRY` z3Ez>vYp&tZ14Hp`LmaSl1cN&q?0MuJ%WzfNwIgT(a~NHF>ouPBbmJj)D9C|^BX>)J zyfcC(F1pMr#IH&oX*JnHa|{yn9+2#by>k$ulkai`!HSHBb5s5ru2TwRfC@F?(ryR4 z|8cl(9;U|FySs`CJ%?@ZUZ{_#(;~LCFZ#KIEhKxmZ%xSL37vTwQGP)^Ancw-kuxGY zUjH_T=|aln37I3e042k3v-pY1ODdu=mqShOjf>~G?J8J(mEs&BnfQ0R=@Y|;qLL2&LEFi=EbHO%%{=Z&C_?G;&N&6+UAcVEM2Rl;#krc zlbeBjmw+tO6FRsiQIo2*X~CaV2|@s2CL!U%axzom&5aOUBq(X|t zOqOz6-ztsZ!=kdBnPvzXZ?a7ez{&^|6j+~$4%uajh008HQ!V!*#fBy^sArUMl@%<< z5QWO+2h3`2=-{p-M4z?k-Zf)&lFM^HZ26tREQXG#+9b*cs4O@fqsCA{lvd1zWUZSm z;^ccUABv%tPmhq4YqDYkpB|-IAL_Z2SdeUE$*ECLB|&XZ1y$J#^0X2=*(E zigh=25m;4(lj8fj3iBi!=2sMUEH*LL`o?v7PU~Mb4wl zEq8mCb`?@D|2V$w`Qh#to5tn+%Nh;?ldMO{mhBx`Fav)?u!18lBQObx!9>hyQb))R zr%c$m#tqcmq}8e3avh60OXwB4HO`Tt*#JjwWfAnS#JuQSq&;wvb z&;ypnxOc*oDwmEgz0W-5>V+)>x5PTNZ}ki0&z=-Qg*(7sq()j-YTq0Q!4e$MkqqJR z0OWAwG?Jn>pc}{_2~Lrr4~U&6LxdsGOtawRotGN`_E5CKEzrGml^|lbc<7p7C0Z+j zi8+$*U;wM#LO&@yxtlw~=27Qm=z+3Hw*5NZ1zcecq28K=0-WR<QO3bro z&&}OiJ_7NTbS`RNNA8wEeEV_Djy6)Bodx=dxFc>6!zTJ8%<&E=qYo>S=q=96+ZnLa zlJQ;tx!=fE%|_4X>C|*hc-8w*p(&RwrBEhr&O_=GF4Ky|W4zlqcR5m!Q^%Lv+LUlTi-kDdpqsm57f^U@#NB7$^Lj=otL z8VtY)_EuwM7$9?beBP6eY4XknYE9~zliHelso}Docs* zN$OnL8q!pNXGkU&rcIng9?LhPfx3=W!-#0H+@)Z%F2w-I-U=e#%o1i zXJ*9e`6^k96&fzpDRGj}W^Aw=sv8azkB-cw1KRF7Ni?NlXz_~cY?*3-5I|rJ(aG24 zsi>T0t=gH9Yu%J!m+Sz`DXPo2Mun*WyG5pvEls3Z6uU^_4(1ewv5+!yPTea;KxViX z))x#p_ud1>27v9!_K`)@Oz#2;{EQ7gBhpH-VxI~(WA(S7*>O?8O*?Q8*QUi*(3-V@ zwWga}b-3gG;rY`jyitoKq;OMdj!pu(v=F}x?=YIQa;7YrM6b(no+Y^1i1<~mc%sA%d)4iQp}??o4P za9%T>k!xsj#^frJiZnQqkM_N2t{d|He@6o^-v@LRRglt`T<`a)d^%^jSBQ z`6Q_`&Z9P_suQv%p@oT-tiN1xOsfIJ=z!SVrR36Zc zo<({17+9?Z{mS6Q4cXJhVg?fFRnX4=E|XegX)+V8Pk;%34L1UAH0XSN{v?2fEXv&# zh}t#Cf9EmvWHTi!^DQN$K(Fn5Q=#VDExm51>E{A^)?Ki-Lr~RAUp7bIQfhUFYt=ih zCf+#-b8E$x6S1KObVarQ9OAX2N7K78G4f{rZ};=fP9SeUsx=51X0(Tz@kds79?Cfx ze96rlqHjhFtE}1Z=_y+W@rNT2oMKc0o$AtvLN@YWF&J>Ih+=;QL5)Lx6 zeS*amOI=QY47U$qwm~m3DBC1 zX&o&M(41_ z-GAUB_fM^;xZQLmgU(Pk6`BW{s@hXVOF$oT^iu=EkjIFdMqehsZn)gg(7L@)8K?pc zik0T;0q=8JoLul~)rvpqZM>3r_`>vPAO{&J0MGpHMiWLShD}&z>3w)pKe7rDP6X2& zfX620)~^Odlq1T7eQe6ZA|EVCvZ$nJ8CW+mWxK*|5)&kcU*EFS-LhB3Ahs!&z+oEg zMqM96ghs9X5#;R>pAS&%Sk*D&8O9wL51kJ-YYq(Us!+_DzfCFqxQbTL>}s8fp*AAd zg>t|0U1}1xv%g!K>E`}SohCXT9cbrJ zea7?mSik5XA;?x;P;yd<9)_93HASF0Q5fny-r_I{_R1Z4`0tc9at}gQSy$=3u!8B# zo=!fmHcE*L91WiuHKW+8h1p1~!rHXwf&7=CaQQTj z#OyN~e9QnrLXLfrz+HjQ><-k1yrg2Pa$gwl3kqXw@a z5%+&3t_@z>iKmU!qGT^-Z!z;pb%YbGf?+1%^_ZFxkM$|Lp&FOhC%Q%1N9(AqP|qeA z!C2>Cfu|)V6wLxYUeSbf|K4oz-~Nb>G3!=yyl{b2%rO-|lL;+Na|4+JdE?Q*HT|1$-$>;N$%VuV zHmD}ytoO?aE|cW5APF%Dsa?L|K+-h=3W8Hs7#kmq7iHeQ4=q`fZgXEiXr2@jAY6eR zo1)A}WZKlONJTo1Hs^{<-yVcN!b@cyl=4n91l3yQl@m!f?Wjr>L9|Sk5jH3r9tubq zM~Wcq4;(O<=Whr`9?PPO6DEO(Pb|vjya{5SXMw8vUiJxeE4+Kt|EOCYSYgHiE#3+P z3oY$-t6SiayHq5RGg>3d8tC1pYuUlk!8Qk6;E7wZmL|1BQ1P_T6VSOu<;`q?rMXBr zcu(1;+m$sm(DXTNCa!M8O_x;Y!w$v%!BYK>deD*;Q*(x@PpA+20tB+$XGL8J6@qh# z5RWr7-WjP8ezsYM;LN!uB#_f+(&w)^g1KKcc0^@}9%^O+HuO1p33P z?h`uL{vIIM_7Iy($rFohYW|c$ZSj)#AF=}GE2T}~U$O#wU-_-Sp>6(kAN;@Xg2*pX zfq$@1f2eAiHgp05qCf`m@+MWVnj$tOnyOn^>?nfz_4ME2nwwfeNl+L&55(e#P2F|U z90|G26q-U2YH>76ke(yv#aX_kwc;)O%V~<)~z;^ zC{&Y-aL~t3f(e0vlT=iHCM8~sndiSqPfXh*5c&?(B=PyKOsEl?V9zv+MsK_!;WZ%u6Z4_vW)kDl z3hyG?W4&qWIF?wCLUpP@`-XP7CQRFX-vf%m5+SG5Aj+VJs~I0aSS4PU_SCY*Jv_C@ zY`G3aD|!SDdHymtGiD*K8@-wa<|I5ciw-8AI)ty%b8oZU;M|M|-Jm+Ph&&DvqwqQn z$m$Hu7t}6Xfu1&tiSR7J7SU;3VH?FoDDbsFhXqvCNrveqi98 zjQR48)AF5ty}VvX{8U0*0trMPZQpIAbv-P5fnMd)iRYY0B_*~B}URs2A^l`^|-v~IcxAy$$ta4V ztiez=1sq|rM8TEE9Rp#LLJl$%(IV7z54+Y8`XyD0+cSAb3Y%Daf1u6}CDX+feFF!E zWG2#8n!e2Pn|&lPp@QglaSQ#1s+*jB4o6uUH4hjLdqk~MHiZGVj>BIGCS8> z1=^Bh58{RJy?U??P|p%BJ5K^t4!n~A66ei9==naBd7WwPuVz;0IVPuAaj799%`515<_@D_g_54KS_LaUqevcX&4QG^`f z@-jsVIS&=(^lOmJu=;Pooi|P4(j%#{MJa0Q!%pH#jA6 z>iVjKO%bk8iHRi|*@ly|p^1U+noalk8i>NMr7WL9-c0(QLkyR4h7&7g4O&{LC1P_% zvpEy?nWeC8o3;<{2Vl1+uvMiDmW@oF7G4XhZ^S{D_NWmqkAtVD3dzDq?UEv1T+M^2 zy>q1S8gFK%^!ya??MB)-+`16l!)X}o8R-ZeHg$?>Vo1Tl_b7_T^V^5+p+|fM1~}c) z+?%`G-FhR$31irD*um>{M?jsA(JsRXTN7x9DvyNM%m-x!2Ge%Dx}vLZzIO4cB&L1m z1Z{4L!@~FGAWMD<00%+TRXtHmy~ce;F7?0>DwHbLeO&7k$z`~8$A+ZgIV;}XC&9j# zYDQ9`$A)QNG-Stct(bCP6iPJdvn`%!HQBWl%)6f{+{IPmkqMH)rS~@v&WoHWH0eX~ zN`#&=#NPv49K#!AdmwvD!;cn`Cef7NYsxr`cbD<~gqR6KsR}YJ)sTGrhGv#Iu%Qg* z4URPwrA*!;@}fb89BpCE5gaa3!?sPm)Q~waU?An^jouGckU)Ev04wxX-1*S;_aY)t5b#^p7fo^E>-qD_`@c_x{SQTvTNo7O z@GU`67_@ThZ8mRDv1uF&H+YGSr>dEdu8NS7t_X?nSUomFT{aE^=}Vw+r$)Yy zNm6~EoE+Exr*vV!7;eCCbo3M^#=b8kq6Pgey~LRdS~D7J%NHK8866!s26}qzOWx2x z)<6eH-1i#+9H5e)DJUo(=|pKmrmr!9A^>8Hf!-F#AJ+^i$fu0#FRMHLv|Nl&-@(+{ zO2O31{NGQPydzluETR6j{-uxkKbHS5^&9`k@<#_r&`=QL1H(FoYI=Hb1EM6NlS9IT zg40(L!vf;uYKCecq1c3DUqxE_Y9eC)aeV{0g)4wlGOCgBneRX+!!)&v(E5O-I$Jv5 z0EAI;&Y{T(f7$%kx}`h) zPi@fuvHgGht55v(t3NtSl1_|COWBH1iW&TO#Y#9qM$CV7&fWh5RkXiQ>-(>S zSl^DEdSJrwVcdc*w*daDI}89?!+bIO^>hH^B>&A1QXG&~%U?dA`MQGt$IT&TW%M89 z`2Mo{uk|nc9i#Z9`*@*+y5jkB3S?0%Soz2S*m#|RV}wg}H8FN!Y+ApY@2DLcTlw)t2VzzGY*V0n4 zKK`&RA=ZNMKwD6;(i$L3*dqz*Rw${LbFe*1?0x6Shp8AAbGeG|j~|5);u%OaI5 z?Gcrbyr{+M(kB2d#YuCK)LrRJeM(IRWW(#*ku`WpD?oDB3)2notP3&2ww@rv@H_p! zRK08mbq8hm7=>)H-T@gt0J>fU$`98p_$B%x&J8XvTBckl*{0asAFI5*-?6DJdh31K zSU7YcO@iwJJ;v883yySct(h52G11+JMUh?Xmr_$w>!@lW8HwYCsgvo?qdMzjY271L zXBA~hWW8ruEggPENapQ!KZ!9IQOE+P@xRYrJe|diHD1N|6pf9lIyJ$ z4L3m?9m|!yl==p)dkiSXd`XgIVEYvKeNUjXJgh6;5%Za5Brbm5C zs`<3@HEf7Ol%2~rjE}-qrgb7h*78^HA%~&DQfsJVOU(~sO0d}{OJ`spUjZiVYCxhv zy6B>r)8()>M99d>JfD(Ieb&;C8(sCezn!P-LkeIFxF&5lD^CnB4Uuih4Yb(KpQk<1 z+Q`Ccv?z6AV6M>*RxFElkV#Diw&wI5a@7y-zLC||p6G9n54;w8&dEoVp?fp+g|Y8T za_^vOpB4l_q|`;4susO#|5g5wFsB7FWp}o*kyew~o+^P(hp@+HaX8E&suDUTTNQs{?e*)#rL+ZZ!=Tbj7YRWesLIz=F?s)L~9%H?(!faKV~rmJ|IQB{#I{Qf4PR z4nWbIvyGi$OdeJv3#=WXw^Eq@+r4@C>d|z^UXh*1yk8pTU_bm30OJ5=Rfj%1lRVq~ zhuIT&^2qTAUq`C%T^z^V4I)DRRB*IN^UJ*8{Q~zsra*&wVVuv67OtW`?!y9_^-FW{ z&zgj{_MAxeytpH3${qjg3zX|z>9WBe2rX{cWbeT5{!W^93zyvtv)n-MC@0pVjS!)f z`S@|)RRux@ovsuWhRfT#{yjKW) z5(s^^<}o&1OLA0t_rYZ4Xy|pXW4DNGuIc>>aQYlXz)3Fz_TpC%#2bqzvY^U6{qBHD za9_13B5`!w<)29qi++aQ3@}w)*0xVkPV8~}lkpmMGs(v1TQK+*&Iaj7YD{xm-bKzU zHHO~>&kPrg_4LHJ;Uz6i0D4$!swxtCiy%AbI#D~LCTKYRNI@>t>P#>I)(~1nvJJBK zju5$MK|>E&E#FrY^x;ufiCOjJj3-E_ho2x$ft$WpJT(!ageY%iSdsORH)uc_XQ^g$NQ(-xD=GoTTt z@5vg;+Y1y+Ho5nDMI>9#Qjz36tvT|&>6s@mXD}{+C&1_(26we`P$qNBCntC7y!x^b z#Q>YC)0kJ5=$w~`0NT8-u;He&SFfzsLd&c@c*e-1zh|PbYM3e{!jg%{rGgO5#bBys16@mhHg0s! zk2jS0H6pjoK$d?5jqah&@1rZSU;Y}@;)YLm7Dk+|knFC2Z%;OL-e?egyv)Lm#*esW z%R>V~oIhr(1mUX;{{nHPDj|v~U)5JawkKfnRV-TJ6sL;={*w|#*#Xlej z9HVCamdE<`G^;DjO?Oi)X9?KQD5=khfw7X~TJ|hZJ))?{XG7fR7+N{$%J_DzY%_~I+#_EsC=tohJd&Z?H3y{j03hg-!cZct zuq{I@gJrGA@ea{m_#jIP)D*$Zf^af%>NX{f_TX(t(|yW z@wU#8tusUzD}B{nex)i?KkLpor{LO0>qS{l!xDQ>p&ZH>wvLWV_%vh?x19MftTYFh zQW`2uJvoPnei_{DaIrWf@YlK3EY&{O@{7tH&d@m6@R``u<%&nOE)Y%NH;KvlqZJpn zGZ+^Xk@nBPD9CaX>Z2u#+Ru=)eUD|NN+(C%ix>v?jd?N+`Prugf5Y83Vqz9vkDad~ zuK{B>lxPt50U~U;!i=?HeeOsQfi8QU(H@nc&1s*l5xP^c-3u(5Xry;SfV;@&EcqT z&HT{REXF_Yin@ZZbhaeGG^j6~)NStCl2u}tmww(pfGWOr)=j!cY7I`n(Y&G0{E(ON zt}&%Z1`U?mc^RZZp3Yp#S%VQWdmC0@jy!ij?*(fLnffL|mj>~=B|>ejKxDCXej*?L zO~UpC8BhDx5CJu7o`3c(V2MA7or^(@oc*vO56>ukTlTI6;}#4JPj~4TY^iaG9l9b8;NR|)K;Ka2-nd7Rk;0QtA?gK(H*vE1EZG(NuJvW6 z6JnUuSZA2E2DP>kXYdW%Q)CaO3&0aTR9-y7wRH^K9x7I|>=T>6`Qz9ZzKP}Qp>piKLfDh@WI zc&ykd|;}hIdfqcv5 z?}mHthn!ydtsaE^giNCDX{hP#m%5?c^_Y8!hd>~LdVLMZE%l@?!>6hj{-o!kbxX5z zy8RrWO|ZnxcY}jf1b;7zQop#B{-+j1coV?tudnv!w6F3I+TV`c|A^NA$X)#ViQ7gN z=byLtKUYr`*MBrXe|k#Q)^Vi%5_7ZqK8s?)l1^DtjGG=-ZyHB!#c#2aFrP2&MDp9z z*|>MyA`X9}c+1mV?wVI!<`*wBnH+Fpj>~4#mM_Uhlk!zZ>hFmQVj}Oo*8|VXmyPS! z4eqDq^~W4gI(Wq5bLP1;A5MdViiE{7O@T-IW|O6E%o9Ua4P}s<_n>EDncuAoTq7e#NM8 z5WX*Ku`};!6(!2#`8n_~c)-hFAiw5*VtW*-@^eU7Bf#=MCSP z!Upp81UCC*kOsz?SZT$*6bE3_<1bTJ8?jaNVJ#F#RG6TeNGrDp6C;Jy>OXCeHG|W2 z3Ln;nN|fejG?PFuwunii{U6TWF*ve?Z5y4~$;3`3wr$%sI<{@www;M>+qNf~*iOE@ zZ`H1Ip8cuL`O&p%{phah)zxcV_k9W3J=7pQ(=NcRJ}PoeT*-NoM4RwHF~-18FjriT zs&z8bBdb21Wr=wXX*jK1A03_lha9@PmWHgvmP==X$MC+$#NA&VrW>6Uco31PgIES`hQ)Bw;&g?mX(jip(JY{oZfObKm@T1v$# zf0&LwQe2C_tF6XI->9~dUS8L93x$1Q_Pb`h!RUPC7np51k+Tx!)*K4XAdvs?xFJ-i zU@O*uimP3sN_*g2@$MS?Ykfm2*^Mvge7T)ZoR<>1Yx*wMCMhv?!Vwn2T^lQDx(UrSf-+ToUW6 zq;~``GI*$K{}48C%1?&#h5H-WwI+aqAx)`-pzbg+PJh36LE2OxsIti1LE4eN_C#OJ z>!Liu10%1-xztujJYaVvUlvB`Upv<`moeBVL$TiBwbr70DtHG&?z^8@aqH> zL;q8){fR@Gr)UGBe7x$njr?DmK{)DXi^n&5u6e}-x&sef-3d-zxgWiA^kgg(j(5?z z{oBG2E<=4#FeDY9-UHn&I(T!$x#8FbG!-G)e4H<#-6 z_quY&Z)Njn3=@swmWn(!N9FXq{8fk&#GS)mc~M$+mA%9D(r!^76#}Ri4~AjC-IT%b z`^(35nQ@Zei&I|1qGI<4in0Tai~^opd#jD}SlSw6J1Fgn#EY2A&HsLG+(0dRWzd&p zo@Ag7W&>-Db1##IU-Hs#+GXr@bR`T@emew3SvthL9B&>UgGv zJBdag8NkPevw5XOV>G!>PcMgfa0Z*#T2)DrHdtF0oe(C13qH zj2bh2-qC0;h`K&pZt03?dKh}*M_$z1jffyZM;M;o(fVd=jr_cs{$7!HbS`(hpMm+x zAC}B#MfZRJ+gp$Z{GE!&Qf4uFRyU^DfUAA3pdX8y$#EvGGEFqy9n*V~_q#jln=Vf&X7eTQdQ_&aq))h5 z+KU=qG>kx>EqjFNwbuARnoW@__9+34lq{87l9+$!wP!#02I?0PwNK`kusO~8ZM6lx zV0nxwt@yrC)^TyqJ{|Qn+jy41utz5d*jHK1QUNg3SH(!rjhu(u_}olxAMyK2hfl(7 zTpsHSzNar*tO^{nPYA{paFQa6C6(Z8-pLHMu`^*fmd0WP>icXHN#&1JvLB4YN?~!r ze$?T=hHUy7l`>=~joBg(1&5-EQ8bvtULBu@=*Yj(!mk2}-$nf4CKfwU7EhTe%Sx~X z>cQCLga$0`tz~7*(ozOAP%^VBSp=aap&%)eOXSN9rpE6Oj42$&F(xb$R&hh3h_wCb zp6z_L7~6X$fKmD# zkO888K7NZ~cY|nk(JoYO)evUIeXBaB5P==KM>Wi%0beIi;cqfMyl$x0gp!ti(8_2R z_j*6}6<$@%yxBQnNHnc6&+I0zLei+?zbn6%4G_uHTq4Q-bKWp=$vGTJi)$lLZ8I01fQYRCWLwKwF8I9 z=KDXn>IdZIBQ z!wbYoLH`Lm;pj$zTpha-dX_HF7plgv$KvP)V(#t8jR8;lYk1w^ceJ~pqZ>AIHQmCk zENR?qhxo}6M<*X^td^*Sg^7K=U+j>k4a^Ff-AKOrgw7vHDqHsl+CeVp!L3gZxuowQ zllxoF{Fv~wgD>_??C3f;gC$?XtK6@K@rki9Tgr^4Wk}nz`jpr9&H3oQYgK}^XV3lN zV!=iPvQ9|2bCO6hxh`P&ZXM>Cz;P==)VJe~*hubhK%@PVg zy9?k9ir|8Hm}E8@T+=};|4h7|JE!`tU#!_KI`sPA79=g42GsrcuYb*|>i!4HMc)D` z#eWCV{P(Q-zh`d#jePzQF$XJd$RaDC=#-*!CJBtID9HC|X;D9bQ=-qMsAecj5Bl8% zOLL95=+mHEWA?+yF45fn28`$NT&$wzuNf#XRVGbZp}b_!|Dh4mYx`YQm99Jx1mTM`q{{xv`JA;&drHjE1=`Ew<25Z8*i5 z5<#yyAU`WQ)VAt7j+umnep(OsODUV54Y1R1l zD1wn_cc0p)^q7^I)#WHti?O6&pPI$~C_XX=1fvfbos$T``06Z8Mnp86n1;PiWB2o8 z1hSJIYs^MelB|@kw+F!BHPN8JN<;{%K#r)|h36-qg{ZSRDX7{76Nu+U1X#`=R-d&( z8^C^&PgNU_*TUWK4>?E8t|HyOw2NBne3D5~*{`W|G+D)ECPx=ZQri4li$L4t29o6} zIaux!amd{LmK^OefRnb68qjPcjfsa#5i1PwY?AbPhg`nTVa?t*D7Fxv*QS(%RCw4x zDowjUCn_^s9L6L=dFl>H>ue10IXF@(K4`Be3S@D38!nfbfe}tEN;JUgkUcskaSp~w zQ~VITR(PAgQ!w48z`mBHnBX$SdQm=@WWL0tDQ%P%ePgtVKkj%QrB(jAAMGuPy~v*k zeHjF5M)EvK6rA=Nd}&d?jfFt!@}J_zrAItRz+3Eogg8r!L~2msvI-f{eXhdPee9o^ zx~4>2c4@Z6$D$MNik#}{+GUR1$2+p?c>LfwF>IuX<{j?r_EYylFSKtC)G``Ai1){p zj(hW)Bw}nZ!egWG+7>_Z`IkH_g!>%8_03Uye!uYk1OLl9TmK(Qld=|!2Yb8eE%pZY*2&9i5>AZrdD032w7bpD_2Ud>vh-Qc<3STyeWh{<<7q9LW0y2vz#!lUJEp#%TY zQ6HZFRuqHy@nakQUjcs702@>1Z$jk%KAHW)s|KrGXek|Ie&J4YNQlSKQ7vg{1xn`XGS_l90`0kBeM0o*7%*UXnsE8CQ2jl>0-Zd;zQEfP*oQS52GIlNM;? zkx>JQ0W|JGa3LhtCa%YERniR>aRJl_>Ri?;mfNaT(E>s$vB`w&aU+w#$k2~xXeTI# zH#}%*3ghVvESJ2hqr;5AF1N+lY&T)S6W#`%7l&zTtSs;P3#JB>=}9f47TgXEzzi1O zN>Q#6h`Zzb-|}(G6aFAY^(SpQPLPv+-HjP^Vs3Vmq*rK>2C>!k&=HOON~GO^6_Rrs zSF-u80R~T{;LRX~qS~heY@hKnPK!oCV7_OmdE;BO@yF5hQ5O2spRx7elXp*96GJs0SPEMQKQ5kVp#h#n{oo%QLAD z)t?UhdUF0)WZ^8wCO2dEKlm;7a$_{*wO+8<8OFN(ngiO@)v_|}Ov+~=dn0jvI%%2f`MxkpK*C)}?i;jmZoybVV(|==>r$R)CMkMKu_`m&u z7>)>LT59IL8bR64vs#}tI4U!zRn|D9S$FCzo@%L!<~l`sNo0{!wXO2HQm*_kyo~l( zI*9lPBJt6z5)4=mptz$L-}7u8AAM8FLE^656SCn!s8;CC8m>4z^LQ}XR(HkhZq#*Z z4$0jkU9rpv7-z2u4$<07JxF`OkNyCDG9NpVgKK!^(E0>>QKoVvtBi|EBq0P9%c!RA z!nHJHj4*2DN^WuowRVa_@JroBw)mOBa(w`Z9VB`br;Fx68re7iGbMJ(W8h~RM+yrw zbIwwQjvl+l&)X6T2r2P2gJv@{hRQ_Go648EOhFj87rmdhZkVlTu=&_cqCO>N@3^hG zZmv|Z=RJbg-zaRwrSdHeP3!uE>C?I*=nlH@#+?WY;i6o9Fa<@gRf$>P#!)(|O%HbB z?(@mGM?tx&;?rgTtFF3d?Wo8$^T@Q}xhsSr@%z*f%ZeJMg84f4WA9=7+gPb^1 zOd9RDJgi&ly~6>e3KZp}J(b|Rc{|HPTjF_7^aHYtmKi!i+ZnqU6I7JgDg!OB$6*iY zcFNj2+OAMA*28`msB;W=o4efla+Po8mG1K7q}SOZ`tI=MZ<+zCt0;pU9_IDE})!EBKpYW0p! z9j70i6@{N{4IB!7y(d!ZHEKNGa;9{-@lEKyGo}nYC zMBpyE8P5ofXH&$Y+&51D)(&5lDy{87n^`4Fg8XzZlLesPD5&&>?kt{QO+B)mca zu#EdCJZ9hP--PFTL?dYojx<5|eU>>W|8e@b%4f0eTMYAnTB)nL&->HR0sh4o0$sQnF_Aif8P{~)^l;kbyEZH50A8jpVi zr+?0^6*gok8BlakoqkNjM;4UfATs#h1YBY1$s;30AsDicxicKB(vuj5(hp6TzW9;y zJ_GqA*}EbYLX}9YY*$*=bZvC|c6Jl^^DJT}TwIIN8)eyX-wvk3l8-eDp_;3m=3qxn z?VSdag=iv8^m0jtD{$Eripy)>db_g22H7|p7kMgfuFwr6&i3O7`TU&}jL^ga60+Id zZma55`B)x$;CEZ^=N2lMJ7<{0l^}Uw7{NDU+Ev#lcPZV3mniebTtZ-n9xVmri}#B* zyjkNSNcJo1ovHD zE@m2S;D)Bs&^sZkLxurCBJsj{C;Wt&bA1rSyw|-3ps+|AV{^}|&oO4iO!-0_Ny+oe zNI^peZ7WeRaQ$p<6BIh#yN<>QB`szU=Mntv)OuEI_Uq4oUxsfJ8PUQcNTiiPdK9kJHs}`A+ z_(M|{Msp`gaYqUIB0>?Be)n{7f=;pzMGM)^BrMhjIUwO9CqAE2dPu7y|uW8FZ3Dk&>GU|vGDu&RV> z6NrHBp=@^}n2E5yM`X3*u3lR@K~z5bIW6yYRf3|W5&AIO_t~92c-~Rj6AMVrW>%`| z%W)%h_N%VS!nq*He5l)+3{zjqM`o>c&;gwe$)0R+>MxlC5Z%w#wM}-;c3=e5O60}# z9+CzJY;oTAne=}fq(X3oc;13CA-rnAUZH}=lnFbhq{XhtguIo3ov;O?9S4nGmp_GB ztt$$Jh%xJWq(T9!=YbcsLi`N0W@gU99?qr2*mHXa3Fnu#jjv^bK)&Z`q@9=}3rfBXMnta+FS zQ|ETYTg~{@LiTIgG@*zm-=dr8JbK97zO9`Tj)FHa-!p=`d5t^oyeam#wAvgn88+^v z;o9Q>5YTyRRpie-AoD~B^GI3P%yMaFoQQ|e%Y{9H@;Nf%hCMS*PBbDDgo#5r2F(EK zT(T-@I}G@nX;bxVUNTECwjho~IMD;oV9uPlw6kk+uN1_43^C~ZPUb}Dp#=tLLR?-t z`**Outm36Tso8-=F(a%Eo6yhH;&(lQC^S(`HNq5eibzMlsLCHNSYF9Bo|5b=oE*HW zwXV{`&kK+(Q|NYo@(3S?H2j+GL<>%hsD)!P0%{t1$;h#wNjB2LOvUNxpoU{PvjR+^ zL590$U`oBOakwMxgoNf!32i=1NJ$bU+YBmHo!o$?Yuo7<$>0i5s9$NuAOu$^&t{$S`o z|H9ly)B_b`wnPGgLpv_4rq3rMYU)^5xP#L3N&+U1_4j=D6Ay!~T)R92DuM>O_JqwY37%DdS7o%=; z6xOY>BI5W$`}S}6l1}KinI(CQXV+CatVMGBsG7IHjych{`7M*VnJd)aQ#ldaw4C>;$0t zB~1fPV;d{R)W@DYBa!%VPnRW3{j9cbw8KS@y!Lm;=<>zYfhu(mFpcsxmhlzk1T}m* zU#(7_&022VZXvtTXhA-geceApVSj@xXef|UAHI%$U1F+}^hdj9pyT>`-3##<+e;(S zkZ$(dIc@V7QjDvE6Taihp0`_UQmJU5haYf>*6`!cs_Pm$l<@n(qV1D@B*nJ0Li8=( z`#cj{C^RADMN8q%R`DQbA8##IJcRh*jWznKf|<}_@v7WR%?Xq(c~J%dszW5$3OXUa zKmtEh#+r5BeoB8FZOO|c6fCKrr=#p3wK{xiZPAX?whos5V7F+ee1kSX0&UThAGao1 zwqB!q6}NjfHHUI=LE@SOuG%OQmCD^OK*_;Ff#89K3p5W+Ke!JPPE@~(W`2g`(lAgf&i-)jOZFS22=wosT0<`duAYZIY55LMB` zsIUXz;(6AbLcIG=SS8?rIxLW!FH>SN?T9j~Q-M}~!41@v&(qnUE#bb6*2{X5OM%0O z<$$)JpaMGBss-cY3n^I09t(E+Fb;lrd$8D+gJ(!HA_xh?ClDATdzaVdj_Z zQDx9&5M&arM3x|^Z%55y5_=N%Ha)2h+&97v#&qtn&`{$xLU`O4A+-7 z2mo@hMRaFVDRJYZOkjH=4BU({1YeNOI?OWeIYcp`F|ZyFYVud#34Oz)T2!UYpDnF! zBkOtkaVqJF5D|rOh0i>|$vcSE9hkeDgu*mc6oY{5K|$g@E>RNfu7)EMX%rE9^ArC= zT7gj|iIBGS2HN+3Ci)^O=Hgq*nh)8{rUU0g3=<8sbsMaL_9OBOC?LND|KLo&GE zD4dR;LZwNAgRL$XWF}JYb`SBr0Qb0ou?D?I+ItEjBp*Gu=+dGael1duNO*ndMD$3w zjU+ib@l6mO-@mjPs(p=^zUrOCpKd;A%cWu19RzKehE#oh19@|ii+R1nSj+A>#Xld; zyD%`DcAUqj|13uTN&f1@Zl*b3KXoxihds@CjC2n zoUgD~?lpqttx1^m;$>2(`mo5hWI-@}t!Ciytk?@zcE%$x9+h-QAdKYZu`U+0JgS6^ zw118HB~wu{qf4wq*J=28YQ#^W+Dm-43RX~eG%%>0WAPh@vNu2J&AS;fj6oJ8)Kl-~D0}vp@y;{+mJBlQ?E@ z{VCjtW|nxlYtH?VgS7TQH-Pr_g^6fK`Y!&~vJII_09wt;d)&b<_e#ZJQ!6!Yh;MLH z`*DFtW;ClbGXo?GH4Xn-(98r+S3tdZfRDS=>juvx_cr!Z`aUV_`b5Nyd+!|#KHjiS zmCe!iqaXHdxc$oGQvhaJhh?reX^Jo1(CZuhAK!CbwHMd@;W)k~#r;c73rk^H+3Ze?< z+IM!w1ka3+ymLsc#axC~En3v{IdpzEmkqIhyT0iiEk{YSF)k(x{%^3~%m9mMQ>K-P zvgc|9R-Nft>$HXG(p-aVg?6=~aj~$x2GBjqg_NE69It4}zVO#9!Tk!-9zsqq-k~mh z!5xt90%5f#%x45%jrz6gh&}^Pmkh=il+rbZyqN4y?KM+w6)BjUl|^?v>$Yij^@$ZS z!HTMV6R~rTVE@1C6!oIkF|*V)Uh@IDk~Sopk5sps^YKmEg7Y6@VoJT(H$A3(z7qY= zpGk#~EeRZ}f6r+9xQIlRb_w6V{Op13i>5ws@wBM#yMJ^u$?G2Y96Ychd~~0*1r-ww zi!5$1M=)wL%4AiXjC%x2=U!lN3j(GO0L`F<{`$L5V%k1ES-grVGDI3ZgFl=XsN0d3aNbbk) zI4IhCH?WIS+sd@vgrX#l@IJr7)QLqyeum>0i60*dM>y$*5toDi^Ok@^7!b$TK>E^~ z5rspqHI{f^D|R1bpWn^nOX~YU8w+lmK&gZKND4brqOuPA{n%EYhO*i=`IuxSw2xB? z>U72(tue!Kc4}hQ`l*x_8R8e7IYe!iXYB5#9I3ZDn0CsS-XIIwwt={#j}e4aWA7(woiEge80~&Lj)1&6mhEv@ z%h0xB=RiLmlr=20>&=P5&-T@e)LEg>t4RVZ*d?FBAY`l$WqX*GN!GN}lf`n_W>u{7 z5(HND7DM{YiuoU369d5JzYewzUFLt>J{gsMI7db%7HE>g;s)OyA!0gn{B_~DVw;e4 z@vDF1q}(XFl829RRLBPE`FYYBNr>rsE>EIUt?|r|bHH=IVYR2O6j@MD;_lYX9kvAR z`HrAO-$JZcC&gHWI0Cf5b1l@Ceqz*`OWpNbphgb0Vkan zNJIj=jCQ^Au0(X|6N?Qg)+S!DUdo%zwpxe7s4ZptzVS5TZ4~K@S^RtO-^=|& zw9>oT=ZQ1!nh@DHXRHNBSYyC=zxOf95JPC+)*sg4S#Sjo2;n_qqD^1S?Ng;02tB`f zro0w;xFyYPHwDXfzg+HjXrGL2gd0Q{KDI46`*t#H=V6Ro#p9Q}zT z+aM*bM_DzQ9L??EZUjIaJ-CpN^9&4*wnlLfHw=|;`(Qhve3^Gwehtu<@#uqICoe>) zpgM0u+vmPNM(5ByNqZ>1x#y=XfIK&zD$>vqDC5HR>UT`(p{?YYg5%7p^+fAMlZ(M~ z#)+^*deL0H11=wN4+R&D_ufV z*fMlQcELH_u#~hEST*te=ZdNyd|%!0Tb1zjO#uGKa#7J3VDiZQ-Kf(a2#Ns*z@C#q=^;$B zLf>F1tn}RzGg#4nR-9lD8we}3CD=*6bZ!w+#U_H2nzt(xV)$VuY-zY)>JB5+nY5P^ zrF&XwvrtOAd+tF}fXNmc zwT1KmWYVr40W&FSooXo;NdcC(HtYeaN& z2u0pdmz^nHON;0X1(zeYWG_*HY3?KBv;p7&qrY}N@M6zr25mMhjijfYQL&id9mupu zwZ$sVh+t4^_Q82c<{}M{?Li7TCmAag3AyxH#+sltnwYtQhovhY=G7+%n@b@k6Y9gv z-vYS_nXT&E2tKY8YdHX+jima}v3ApI&5^ShzN=$&tpGJm?z-s2B4Kwg#Z)Emp_KY3EUU(-h#PzD~XeU&?pRg4Se z^%0ss@d&qnrlxdD9T$>Nj>yqnCqwZ^f`%t#!yOO6>}AzPGI5s@K1@R|ceE7kjE9K63VqkU?!7pnN$45$&fWlom8w;?XC1uP{*nS9G@3UeP2D>d-aQ{6?D)KDV)%u|%+g;*jocSY?1e^amM<#2CR{(L7ILtIQn2yrvr^QV<&@o-8uN`C zn{`_bK8Hzq1sGXr4zCJxhJe z$txu}1#j0aYL>-gjRdXpoqPmzy zeGUV6^qP%K;m0-GrJI2MORXDTA*x2pu$);E$j&XpSphMb*B@jHW&OrB#+5%I7yI;^ zX?uE<7Uqh1S| zF7x%MBe>UpT6SpZ2DC@35}CyKr?2W(6zN3IRfua*lr#|7nlTTZ{9RRKg&N5Gt4-Eg zF#&9)Hf1l$b787(`6n;XIgfy-HH;n&9OkkRN^FB%razJBlVAy7E!6bg5``@c9;5J4s=pLlqB3|`hP;bx!`NvoGq9C@sWPtB?hdGZ zz+pBxV@FM|#{{}|1P?$9X(jmq+E@%L4%r6?_~yJ1wQN*6!%_@G9rtBp><3|mNf!69 zJGgD>Z(XiYp5)P$py41s8W29{4pinSx9sp+W#>9hvgNN}0w~u{#EFsbbBMcAx2Mc@ zdIizH)YPZB;B4*r1n{O6AL;XCt2cobi(7GIAZ&VN@RF1ankLmX z*iApQw<0a<1vI00$H?Xj(VQ{~=$#ZV+`ou0IT0{aKzAXl5%SS1I;Bj95&0;{QZeUu zx1;{y$rX!_Kjp|k|D0iJZx)i@cDN2e8} zyhnYlA3dsbi7-w=MQRn-3c9r{qdn{}Erkpu)nuFyTPO@}3}3FHb6)KpEl|v&hZ#i& z7|N{S&=fOBElY_o@WnGxt@XRLtCyvzi|Cot4a(b0rWvjYHYd;+RNPC7G;_ye^8{p( zP@+wqAiAWFj<{8;)5fOgFB1Jila}^t%09LN?CTpB1fftGAPxPkPiI=d_3oKHjwnnA z`_6n>pENUOmSmcbf;4>}F)jw*=f%pS z%1yqizMy~-ku1LQs70+3Q5>Zaq0Rzx&}PLElffo+P@+M3p&4`&o;bSS0ThfV)7dH< zx2;$lhNRc>94H+l1lwf4{aAR>XN8Vm)(D2LhJ~mjhJBiOPt&gj>;%@m!!}O>wgda# z8ej|b*&N^s;w#qY>7OfqO@8f)Y6a{o*LTpnqh^Qp3<1si<6Q{s*x$Ekm+(3kRU7;> zJm3oavpj&z-?wC!%g?uZx3ITI-VXIS6*>p}GdaN2&$nt9{Mr`9i|jfP+6L%Lwa>A) zN9mfUw@2;TyVqC#x~tb$`TC>RSMeI;xdr0ud6$FY6DY1;%u8k-gv!_{J6wNSd!}rUBYddjfBQhThc;1&0!QTk+INIQKu3@k=1E~;`Aw9 z;;qd`vf_4OkLbAP!-|x9?k6e5)yfX#A;>FNP*mG1%m+(BZ(kE#C^u{hUa95u!dr90 z-TmGsSo_{+jN|>!??&P`08L7CImzf$Gd?J?K z{JXir>ly7fSeSJxXEH3FcM+7qyMb4mL6)?|eOgvWY z?g_N=N;|VY(HvH+8AQ4Vv{V8GZ;H#L{@)UUB-wUwLUNKZu$+|1UVT#QVjf&kP~&f_ zT!oLOuqEk*wMAOnRW0|3Y%8%7Aomaz0Gnip2vhzG?p8YDp3Mb`WlQY6FA1|n5xk`&`J zKiwVC+>otC2kO*$E6moPbO(7h#30;E-L8whB8n>$s7HSOkt9c`#HkG9vnJuz`RxW) z+aFa(Ta@w&d{iw-#5yEP{MfXBp;X1+M@gU>7!uF$E*gb{8~!dX-$qnkF@sgv%yROC6bxes8ejmXTJ0qIQdl!c_C zAoffzM{wftUS911Q^g|BOsDdN?vzRCLfO3LU&U+A$kJ9#Vy+pw1$ra;pl|W{nDj)t zoMm^Fx9;g{eC}WyQ$ULJQ3NUUgtbOFwEL9%y*OdL15GHEUeMKv6mC_Mjg1e^n`C&p za+K<`>j0|kNp?V|g8rcwE@zEBv2|%;{ttKMINMQTqAd3XZDbW$f4(sY8*Zq)mLT_H&tBBpL*7(h_R?7vHboy;6vJPtpz@U!L z9vGlA_O|BTK|7-g(3v}Y(`LDnjXn%f4pU;>tRSMK>Wp)wA<2+6v!LioPJ5i_kFbZP z`n7j_-6z*K2N|==+Jo>Xi_I zv)YG@$za&s#+y1I_MmXHOayK#LBhCIbAp^{inwHEkE^$r>;}rFQZBysb!~Ig4`3nV zYr0FDH8~RM-pp~N-^1rZMl`y=Ft}k^s>sa`Cw-GOzK=p;u4%FH!x?JrXDtM|W~sd# z#lxv7=<>?Uk-25&@M={2Gp_xL1G%jaPZDW)uy>>Xn;l){Th@II%YnN4SNE@vH^M~o z3gKt@((x5cn=tBb!4xJ<%}*BdmyfKwM~>-N291;0qNAw9#w=VRry~LGUXUwnrp_rb zZuWUwPosmD>z}yU63aK)ieBhDs%VWH<_7QGjk^$0%-P;W86GEMZebk0(zp8*?-KYcf_EJ%73_68%uzLCm zqdsUbm2z`wdSZ7G-~9=ty|k#Ek9i5MHpxu8fm{Y_^5yS@f;cl);ohNqsa3n2SAB!t zi&5kbW`IdpNp5Sr6nLV06y7+OKM5ut-X*Me@ox>Dk0+rYMV_7O^LC`klu}~pukqhA zZ9~5lQ7;?dF@U?(2}~Y-Gse$^HXFNeF4qz;Ba-9oH`D;@1ffCdfPNrvybz)k6ZV!t zzNor2RT+~QsgMOrY{@YD{;k>VXGEFrNdsM;ViL(YrZj*O=wU901IMjgaloM(6Y^fx zs+A|0OEYEsAHp^7Fm*G}CmT-ik3EF!T?<+z#; z8b;|v1tjB?wFmaw8un~8Vj9PVX;Zp~^wm0lhZT*+oGa`h!t7UM*f8_&l*ZY6$3XSB^IV+Ey`5+ygSLoNrm z84P&U?ZM29^moR$lwom4m^YSHNP52hsy~k*QHiVExUg9SY^^1pf zeR%x2n7#A$IPJydzm1T1LTz+c#FnFgec~ZA?WFKvjHdxje+XrE+tOAr$Zd?m)|^oS zbQsXq^)feN_4I+QKl7$Dd5pvK7$_WG-JV(8#e&>{k6vK4espy|+P)YaSL_b$RgSJz zfFCjb8sx_%=v9*?Lu(#hJ6B)X=A5fnor6`Eq9@wYedW@Z!jjsnbi?9Jb`Z%*xDE!L zWAxl=8o2IxTB+0b@*qlrJ3IrV3lRqVVs*+%+?fy#*l9^r!Wo#+$_OOjUJRUMo`!-- zhoTH6a@gbtsj5y1=Le(>1nDu8@>YX#Wt3RJ(t4$2ZY{?MbubxgTw^w`@5Yx<(^9Z= zh+M~{eVYOhLhBlKbN=KyHZX^IN^C`PT14%aW&^o z)P9i?DMjnFP>3BP#;tJ0J9Y5ewQML(}*-t;gZB5_Z zp&DfJqWg1QV`c?CBm3m{ zKCMp_c(O&P9RM}$v= z{QtMz=^O9K0BpWZH4Xws06Sxc|NCm{AK3T*u-6x_}386SV+Iy69m8z)#tem$OSUso71pWJ09(hv~)TqIK1s9T{;YE`4ap%BK&U=?7xr3 z%35mJ{}s{0G)4?)y+^WWRafXUB9}>yfL6CO)KbbH3J^If=1I>YRtib~JyxXr73F=W zvK&yGg220Mocm7j37+aXBP~v@5!vAA(*1EU;mTU``F0>jTuJLkXLBvjiTio8>?qX)oY@I%nklnp!9huGJ@z-mDY=k{g8o*SH<6?bJ;@-K zHjW$xAG%1@dIi23dz3Iy1WO1QeK}^%*tX@cZ5&ROeCEV|7;Vh^=$-&R7Ag|zEUqfKx)`Ip(?i6t zeqqj<;@9NT>TV=Ip`7UndMYpJ6P?I8cu4}Z<_Ba3**tIl_P133gY*5ZD|yw%23{c} z12seIIC;kmF!7bRSWd6#t&$B>Z_4>?=$Gm|77>ikbl^67O#>SNshl<@3d6^XhI8e##eWSb*9GkCX&reu3HBZE zEZhY8xffh)XJpA&_i#aJ5KZA7konxmoxm+;%VuutCyUSx5Xuq!Wjw5G{(woA4>j<| zW(IbcQ%#&XLZjQG;0fLK(A)D$%SV*}VHfgk%y6>kOJW$oyAHqba2Jv7R>P(*jV)8uvcbLM4zPCE#6Yq`Z5+A6NCOKlwwIZzBI z;mI{1#~mV*I_*qZa5S$%3%O0DZ9e8uQ{MG3VjcDB>B2{Alk2)$o|#Vp@;yNHf#o7o z*`KCE3Ls-QnqDw!^?vc>##1B$ubTfl0@a|k-X}3RXp`>l73a<@*JHqP)`>}OuHAHQ?=Y;eEti00s9F2)IKPAj9+ z=MRtzk~-m9I9c}LSPSi#GsO>>!Cs3*b9a=XNEZek6125{`YP2|FNudleJqm6X5&j+ z@=6?~@{{vzbkeC#)ECkf%^;iJMg=8_6_C+_%oj$TtYy$hrw*p0wgU+jIZ19gIJy=D zDrOxlEc+3a^P4$HJDoy;v8TDvG1Uhy6i=w2UQVQ-2;MAGZ!6169s^SPM-4-ondCDwX5ao^<{dCuWc!eK~5wtZ-B)kYN^wP6MbV zrD3=Kw5VC<+F@*BO8oR&;%2^9h_XCxA6?e&q(HmxvIt9p2HFdW6~i!!3yaJ>oJN46pAo}(!8P|D_yLsaZ6Nnjzz4ffJQXE z;Vp{YOjG^@s~yX{>U>Iae=4aE2dPS9GPzX{eKJ*?umb%DQd4ScERu&JO}91+tdW#8x%yT!{vM3B(-d6N;ti0$PvM#<_ zx#M9AVpqHI5Al;t`0}E>rMGo4d++m{=j-l!Url4&0JznjFG6_wbO}Ha2_BwF*~=** zS%&;C<`UP4W#`DMgIIsJU)N&}b;fGeS~Z$WVGoZb<#-WvIT zNHfa^08tpb!T?=oO)(FSiJ-Fcw+34r>6bL%te7Xo|9aC-)jf0mHoNG(GwaqfT6j_k zep;J&x85Akdn8i|hlSc2X#I5Zb9RqV%ab%(hf>L#S?H3geJ6^Da3HZ|>YyPfx=$Py zsyjyMLYhq(a0FeIa}Y6mg?8caRbQgIq!qR}3!b(dLfM2uc@=Ax% zaDZSt7Ba104q}2^P{o)))XZhx-cNWbxq!zUMY?G;l|q|JGK*m0OBs{X6aRs^DnK6?O);G$dQUf;5L}6KWCm^ z6lu#YzJ~7KiD3q+@v~16~Z^XyN4$L3v zkb8MMtNG2T*|G%pJq^eop5g1VHPW=7h^nB)$Y72_J@z;Q$z%=@Z`oeH4q8>hE;?Ne ze7<^>5-q+hhf7DzZZLM99Kj%;)6HL7w~JBUR`{%0%<4B>I@7|qP3sOUQ+On6`8sr2 z^%@3MmhEt$7~dgp#Gkwt636(T(L{4OrQujF=l&3c-7uB*5>Xk0VHKNLp@U&HB9=lK zbs}D1dR*8~U&1wiRr@vLjT{W6MA5`zlgf%{BX*3}^)>9HG#W=vCap!uoq|+uCJh(6 zslAeP(5V;Bs#cfTC8snF$f~jkYbu25e*(&$p^p+yb9s_PQ== zRw5*u(4z@As*zSb6!d#;^H%jH!M^h&`irLXVJ{Z^sh$UdP*b5Rugl2>BDM|KsTmFE zz(BWEpSP(Fny*J*%}2~bEVci*n63%TPa9*#;nCn(%#OG1P=^|#Fi-ui|5G~V-B)ST zbx#U-*v^hN3$=0I?HJJFuq5}g`V0!afvs67$_9*^HrY@G)cwt3_r{=83SobI__6&y77M$EBYt`v*)w4ul<9J73jY$ta^_^qersO%ojs%HjOnlo# zE>b$0`R-owDUJItOSt78rD>W0aa?XR#;l;f3;dNegBelw!r{qg@d)(}uC)2=sbRl3 zzcfb6hnO;NBmd0qN;GC zKC5|DrD*0rsa|PEjFjPaByp9mA~oi9LjKCNXhz!M;HhEq4o4#7l#88M+;VFI#aa7Y}!)*|S=9ML*eC$rVP07(|AD|MNRxx> z3N*NrXz(3HCO>S#YO4(hK4MbVQ-0z6n1s_dtQxWF^$rWgE{kj~By4{@J!+lWIJIElzF}!wPZ!D3n!YL) z0%e9RU|p_d|zD+jK;i5=mc%iJmmB1P?ac+Mygix))rE+70HqC}TkD z?o){?FEkH^zQxR-!rjX&xgU#H?c)Z73;IBH3lJU|uq?WFa=`)W+;xPjT-3S5K*vpE zJlh~TeZABp-i>mtyrns~Q|KGb?^-lilWrTce%*Dl!s8in`Y(aAItf4xhNVJ=9sO1z z%a9kb1f#_gsU9nMIv@eeJGfZ}npv|`Lpo_*C?n7mqNVm@u@bx9@9$IG9Hsm}T%Qgt zNOEX5mH3)lUw*!Tjkk<$IcF72ryDqn@G2bA=&55_W~grWl+$ziScdeu!7=7k0Xuh> z-l;4z9hq344FrKczmBRg9Qhe4EE?%Lo27jDGA|MA<8lsfZzJv0n?WembWrLoc6q6T zx&&*78QNselG{2odP?;)`Hn>1Ee5z$Z*r-xO)5GaM|2P8gW+aDWGPfm1)t|3dWJ4q z=#a4LhPG*xVnk3JD{T0Ls`Q!VIeao6JtMnnirQ_v`*eDE_Es&7ru8*;M|`c8ywL45 z^%S}%RneX|r`a7kj+)5E*>yLBu`36Bzy1Z?NUkbDcKj)h<;njgTT!w#{Kwb(|9&yf z(tz~RQeNUcKAcKVu{mw@b^>fKX8d8)=F6Ds(N5Aea`WpLg0c4eRV{+MZV zeOv9}eZ?%#6WLcFaa5)`qyy!2@O~|9V9Dwe+$z^foH)$gq!?U^z;#J{7QcTwmKKgkM-3&xp6dQOichZ-ZwYArkq-mMR$3%fj zNHGzxfoM!Kci281yL4HO60^r$BN(zO!WVISgor$v+r*bHxvw+PwWW}E(r6$ztr12a z4?1Pa39rkkF@2w2w!(s@&JPB>Xi6O$KR_yjZPSuBYAWSNyPH>F0|=~{K2DIy(~}p9 zjm_^s_s0HZy%uTIn3K$(KvU96zhXHzgc4URNr$AJu@L+)4I|Rc=c+r*RKUN%QCHG> zG47S$!kI0QWUnhgX*`s|um-!NxNI~;4cUiz^r{^zxUalOP^<$R${H0JvtHTI za`HBuPiao=$8^=sV^LL9VW!Qj1_(@?8oLhQE!F{Pqkdf2(O#$0(Y)kQY<^fZq*md8 zS(FK5D^BF?f8Y$DwN{b+^lSSrY zm}Ya9Aidysb!d*^TO`~8GUc2^o+!N3&NI%?WtRE*B?)QKQU2`1{5Zb->R39W4Ya6u zvY{>qkM<}}FUG!3T`&WhkHMTORzxATDe5U4c`kaPNIl-#Asy^g!O#|$nV=It zz}v8WWbBbYwq;(E2x=QFS6>_OV|4v`*0KjVn?h6!O}@!oFa!Ie!f}j;UQ{w4;Le?O zE8r?w;5Q_N&QUW@JG0nz(KBCm-F)MNvkQk9!ZrN7HBjiuARnhG8psX7C{Flf;36&M zCQq`U2o;z-@n;jM2mVpk1Ap<`nHAs{D(U-)TpZkjHh!r=^+51Y=t*Gx3u19{$Q;QF zZ?4mzMR)cf4Y)2fR<38NiApJyH^E-J5X&FL0xu@9=Xuf8BW1KOQiiNHuh_)?S&8MR zIr(C7?v2DP?=@|ia^{UR;5**xz-MH;k<`kQf_)C-uxW{y_tRwjtXy!CUT%!h^UikK z_`do;B_LTP%Yy>&zz1;-W#czT#h}8j_|gw1Z;7Y(NesMJ^G#8B`l%6(rE86e(_h>} zLL3#Fw&F~Ga;V>aaZ{1M+|$*?^>*vHd5B^7aAXBT4QZ*S5RKBFz=zG=9BOBFgXr`k9WvdbsuRiR{z+otkM>VZ&z3S`P(6k^=j5!jnc#UG&aYWmF}hNs%ZbqVD^mj);#%H z-5j&JrTy?;Uz+0M_ldu4LaHl8y2bTPn01^3#!Jj7L(n6GW|asJUiXNs?ZE}yaFnI9 ziiP%C_F$c#(^rW}xNP2n9TcKd=#Rv`R^l<4kb<6rzv3h#_LuH5lRvfidnp6MUEARz3 zPyHHl`f7zr%1O2nu`vv(w<1g4zPyv@Gf)I2DoCit3$z|x)v7*EKzm;Uhuib3=G`1c z1Z-0oBG;62@WQabJ(++`X8LerkWH{I3DZP+)uxtF<*>YEQucD_YSzza*cem$rNDB4 zDFt1wx6&?g9}!fn^c6Fh9gs^7S~bKngA_btm<}7v>PH^8#b<;`x+H(GLGDn9gP|A0 z(yN8vz?em=M8Uz6vrG_s2TIW?^3+8@ez6=seWieKL$cT~1nt%x)`oDq0quvv88NDc zeIH(Ecx%vq_ehAazM3_2DW1#rXfGI-a)(5gxflf)PN0+!EpO?$5d1hwgr+OBGQKx) zU{+g|Nj}lUtlN(c%;Z%D@R=lRyR2e`HISj)+EfT3iITX5?O5T6)|09mB)6C9Qstt_ zK|9>0MRp5QqX#8x*UaA1+xw=t87TQ`75GPIoE9;!S}#IMZ|XJ~X|oz>OU2S>*6YB) ztSX}a72Kn>g$fQ^zsLcM-^?7_xPfv%e) z@2(i%_9!|PQl`?bb!es3t5;KbdHPx-P$RHrNyj%BKFFXZ0q~0U z1xz(p+G|AZXZosC2utLHD0#n-N7@6@yDGMFMV&5e{XvU*?29$_J$ z41@je#sn>Ply*l?mB{+*16PRjonR*(lcRa-yQi(YCvJ{?E4$r^XA7?`StNpLWS~=l z;9DMiun5PV&VJ%PB|VcrKc=jE=$$Vc?iywan@G?mNT3eM^z(v$MNFrpZk3az+PX>;&@5sh&-K9p2M?q z_^t$x>AUzsH`{I?w_JND2Bx`1n=F>O$PMLCWGyiWBRLk($LG05ON7#8&-5^u8Lsq% zGuN3j%RQ*Rn0zHn@)W8A4=ZBsKH{3+F!43;be%yba`tsl==ZCx_eBG^2FYSeGCi06 zuBC}X@ca7X1!ENGzQ05Q`efo^OS^d#lbzBkX+5ES)&CHptcVWlYxv_cqr?x9Jz4PC zsK3B`wTHcs0XExx8rdaWBYQ}7F!!#{kv<~? z6qXQp7rS`-_14C?+izosxSwxi^@!V~HUEf{x{5cut1LBsC>9fcZz%)67%3nJI+D^6qAOpFXh#dHw7uj$#$bVJij_=M!p&fT z1Y%?63_O{NbT9&|1@1U&o2$oscJ?7+mfsPrVnkv{G9N=f(Zw%}7&l==wa;Zt49wbo zWU;ya8r`O_>CY(7i}ntcY|j(HxNVgSll9&y@dl%HCsWpr+aq=WuJP)xssX1(NQUJ+#kx&xpj-`v6x2R^z`Qb5o|}vv6mP`q;;U$r_;n5u z-^FZ|nY1o2cLV}(ubVwt+QGM(;fcs&MU^{dG+G6UxSnKl_>ixm$PFI+IGarxl=pTm zHxr`eU-pDk4l6-ikZm7ZydJhe)wyJp_s4!$t3JN9bW=H`3HRRZ=CzcjiTc_c|Iv^rTLwZAg*in z%G3BWC^*-zyHUS^ftg>VuQN%MKB@s=Vq}+@H^7Yt`09U=f(MSoH3E)@0}r6#=N(*= z=k%zYO^xxL0WRTSdYp)P($gpH3We%OWYt)-5wo!wz)ztN^Mx!8x&hl~pSZ=yhVk;< zCT-sdG5p+B_iY)2Hb`uBhn(zQIP2|sUkBp(*UMZ@_6ZErI_~M!q+ECc^t0s7@Y6;H z=J?yIKbe-SaSF3j*T^_Mz)Gi{S~-slbTH;P#e!33o?z#Qn`JSns4mk}ef>;Ui!W(o zL*k#4%zB*2;_fYuiR><|aKYzG=*$f4v-8TIgte z2-$?`nD@nMMnC0^7!aN0629h?Zs9+H?{#v`%KeZi)#b@`jyM|Bh~SE z3}QJE$L`3yDv7?kQLkD+Q!RO{##y&a&t1tEaRuK%zpEg2SS2cF4Tu5%_;pv278;uK zE7u%~sy^?mt?d?L@M+e|@6`}$uoOjG8LbzQWPNNCH#}nWlAtbKk55!mT943z=?qc? zFJvW8S|}vyQqC>mJFbpcpn?P!F^k7P#s^cm=)W_8e5Dd zc+3}Li=CdN6FejUQ**V@)rDWsKjc2aMgYY)YUyCVU2~3xCAe~Bur?Ajj9l%rybqoa zfQsF6oLpy@Dj?g*`YJ}J)*Kx(P53!|b*j?1`ay3vxH*HS>UXt04$hNm9nwg$R9-#s zkWn~M*}KIXeAyP@zh>d4$!<>o_+J1sihLdX-uuwOmO{zyc89+>F=%e{0oQS%SN)Mf z!Oapo`<=`@{(MQigP#zO)B79(c53;=edO`gk?Xx5mJQO@db4}PQctj#|B!own;HZMh#t^90RD)uH%VL z&!+jbvjR~K|K1*dvTLjxq>dhk8CyWv!Ls>vz)Y{mCNAK}i;~45L|J4HSb<>}Z(UBK zQ?lbV_cV$w^_S(-z&lm{0kAzcTh}L|#R`z|w24Hu2R(66YU39Hv#X{Wi!=3uW9h?q zM50M78@bMtypk5t=8|k5gTDFUp-8W?4T!@|WVxy*wip9)KC2%%%|#&6kC&e3Uk zX5&N7tcAvD-Sk4Rrg*b z_^`4TA!8Esbg3A3wjrz?In#}*;f%&zGt zIQa&Uw}PYJ8rx($PZNGWNxHR{EnNtQO#%=AN(C2Y#d=kM>u6BFs@TgzGenL1&)?0X zxp?+S8h%^UqehnRg5Av^kqJ#&{b~YcCiX!l7=#m90&B`!_qhwPSdw6ccF)1-ZXRYX z-el_-7v-<*H%AX5oa6WDcyfhUt!bJXR`i-k-fwn~u-)2wlldz0=e*~iMA`LGn;X|w zqOCfnDgU$V8^*;fTCfgr4|sh3H~-BJ1ZswZtY)`3W9at`Y#iZ$SLn%~-18lSlXuja z6nAj)Go+2hPGC36?Y7w`vu$&wM#d>`kV`#dj2S1)qdLI57Q>QScNBt_`OB9qDPxRR z>7H`7J4t({gt^*74@iaN~_9B3E z$?9BC%cCd>EC1l~qS{;bm?*d4b^{yZZ-p1@LI%bDmH+^v1r^vvZC=wMKkg1POP~Mo z*YdlyZh->sQ?(9my=z=(2fA`Ht%dnWg+NjK!XmO2lmTDHlT#5Os44V9 zq7##5r!-8yM~`aw6i5m`7tP^Lt%`c|8od+>_9q&+S@lHnPhdI}JiKpOJ zEOxSbOL)&WF=;?C3ch}v(UoMy_U;0ma!7#Kb%I5jJW&UxSlUf%y(K#U76pecP}UG= zWD&!XN48la16XMlFo;ZkK)7U4z@o{ER>l~-?9~UR4FKqnS~P*cs~9p1!BuL8cGwm| zHZ^IAn^V}`8J$a*iIDb2GwU=BCO_aR{o@%#6`nhBQxvB2ZEJ48NGr`+4n&%3LH}KI zMJP!_Kwrs2daVg@+~MBl9}9LK;sP2FW3pCkXM!|Ricw#oOHQG$;RO0Nt_@o)g*nbj zBnSv_^ho%eqmdSwBK^njSg>gG=X=G+;fHs2)nSaU+bB-jLy|a4EfjzL6IF0yRk_-^ zgYZRcM!vof>I-nGU;+gceAt#yu56tCdFK;;1{>D&1GW&ohXSMgPrlu}zcU?a+ew}Y zkaf0`m)7yW?}YV-(hHa= zo3NOrbqdBt=szUT0PGLTmDA-_$dBONrHU4asuU;Tiwe;o-Hlsm4-)^*#j*Z8#pp3& z2#k>0jof<8?(#Vx$Rg50i1PXolt2_WnVw6bUB;k8>TY}i|I>w7;QnfC@Z&<{`f(wm z{fEfO*6_a%x1qBp`d=ESf7bskcTk0N!d6A?;!S3n{~;L5%+oc(Lc&&2PcR#sNB)AU z+eZkzNM&#FgiTDC^?2+K!?NV z0ELP0cdbPm2vP!r#vH-y;xsY=_PxkEXb zO?R!LP`SzDWEejb$m%g4RwQ1dE$HD8ksZdFqc#CyqgV|!u$==4LlZo75#K$1)Vs;h z=`-gC{l?s&Yi+Ga7%EJC#4E!@|sJA?i|^o-J`D= zN_6ojK2W41EbcX7VQ%ctb%BS4|3{vFwe#cvO`HT`qvq|97#dV1!>r^)sx_;gsaGq?=9eVA}hV;#2%rK?z2 z$*4)tByI7-1#{&#+{Gpr$ks}Zk*pz=bDsw`1qdiCQc5K0~H()815eHE>X#4stCTopM{i*Ci>L-1# zuu0gxmWbG6#TTNIZelrsPj6J#hd>u!e%iCjOWFP9vvg*YI6Eph@D^p-Qh){| z3ZSmb$3LICtoDSM3i28A+AK1=F}nkPRv(?K<(T`RBnJ%)SA(Wl6?X#)%3crg-*GBL zh&#cFji&*VZ_m|1GZSpV9iYq0elQln-cDjC`$_drPVu#Tp$S)WLXAHD=GvjOcdtE3 z$~=(-Z~pZv_$##gl8qGs&Jr)>Q8j-ly%3y?up9R%`@0T%!foj~Z6UQTbQG7@qKE7s}~PY~6QwOrAp-aCf)Tcs$pM8!*_Ylc%5GWp4~) zZWQ+>S-43-c}K)qzV@gxZ+|?b)g(i@`>HVatV#=oDp*X^T|FY-w)8_9A6o{cZ=$eM zTHI2K{?jX zRc6qYXA+2w`Kk_2?WdMc6ZPpyK)?HXUYnkDk@^WT{f?&Pa2ABJxeXTf%|nY0orD1> z&p%wHG>$5pTXH20f~nGja-FMuM_$2=V_pBkTcX`l5)eqm0{&)hwVg%=CB7E=t2zc@ zDKbhhJpC}J@)3Drko|kMZIjWlO>%-PGGw)ubGBu?fsmxY$dd+VbYXQ#U+fq{XBenp&po*npmcV(lt9VjxZSI& zRWUrKw@E26*w?Y8xIk(nPZyHP5OliY5F8j&0&?a(Jy8(_V(<>y=;|1fMAqD)tX?#5 z+J|3;7FK}r%qo3s*dz?~6b<~A3|C^Dg4GDJAH910qD9CJ>K=R}03g}kXr^Wwg2n9`)) z;QjZ@P}?Gt+M+_;1AU$f*4O(|a6GLGnxUwb_P#hYC7_l?F2GY6*k?{R;ZkAk_h~no zVdZ}}?6r1@Y-WT&P|*|!^8;q=!%;W)osSXL$53}>CJuI;NH{`07fX3>Q5;A4!`Y9X z&PDBzvAeUvD{etIONYrXyV%lAOs*!#D8`O7{?u;&pa2#q@J<{$-o4e0khC-N-QhBp zjrbD7R(Kuo!0kLynX5^DaWRE5 zFDh>81W?+E(i$SQx*q*?H@E{kE%)-BkaT_(YG=t;TrV&%Q)Mj%A$+8&DI5L0YLR;@qsFsJt8~Jvlti9}`!TY;) zza}FZbfisW>;cK!e$Y*Nndjl@Shk}YUuwu zi2lC^)BIDl{ImW;<>^w{`k!Ig-&;qPiB=npa?Y=E{DV%C;do)m0@Sc&g+$WQ>jAlY zEM1NM(#?gM5xVfxH|T5yj99S6e*9j<2vVB&3ivAZDrd&*I`rZvQkqT18>MRvA#MHRlUwy#^^{H& zwZ8UqY8nhhS?SH=4XAAz?aF1s2uLU9=IbMf{sm*3t9K5s5k;&Chnjoc(_u3#`5!ZPdV;Q65 zd4(IR;CZDP%XvMRLCoj=EJi?GWIZPu3ENo#XUPSdhW*vP@*B6H1voJf_I7L6kW19@ zyPren!{@xF_jFfJ_eN(HG!xQ1Z+Q7yV|1u<5<|*7Z@VDYK66o@`UB!EEey>(S9FB{ z@=a*@_Dz;eICp_YYz_rXxXH}$99%oHnP1RSbBDzmzQroXGyPH?DEhLQyKc(G#M-jd z{QcAP+0#I_hxL2ggtMpl)pWtd-`e);iOL84`N8u(!@AjYnWe`E;tRqDdkbrivYhgM z;|+{w5%e%+3?WgT1d{|=>c^!kW%95~=ruU&HxT*|v}YyqD3sDLcA_6Dd-6N<_)%za z4dqd&r6J9{<1Tnbro>zfY0%kwcQ6-iQNa6e_b6C3Z-r|5e6NqTqE}aah}(jy1cYS^ zGo*PJL}O|}^s9$HtOX?v^;PNq7mZ#MdQ~xp#geLZ^W`Dmxl?1-7enImMAY)3S%=q> zla%M{d^`5ZQj?7?4&K#hUO%s~4m-R&JLgN8J4hO~89s-d9!@0uATaHQZgU)K7{lFJ z-+RneeSxWEt}lKsxrSh)h*^=jcHy5A2Cvo(JJq% z$SY`HaA`z>7_@X)ZHR?0`EhiGXVfh?@|0x~5@C0ZYE>|azlHjxGNq`RpDpl~c`he- z2It?b>Xxd7eIYB`ReUcsJ`1d#$Arj0SGsDSCNI37zMfp4wvT(S;eB6Gamil7`NP!7 z1Ao)$p;~RRC5MKSI4@d88S#q=%AW05{o>KC(TfGs*cOf}ZtpK23iyG_!N6)Ut9JEU8~XdpEk zK*Mhg%iT&z4Z`6zv9yeP=~L;FtOSs{D^Xe>UT13u-`dMCDj2Xy!EiE~46l*q;Ya{j zhuz)a!|#mEHlqzGlb|QEy_8mjq$S+YUL2{(GS=b{d`;En8N<$ZM$9Ua=^gFKh)IT2I#n2y$sshme%H<(}C9Sb!7aZir zs)|ZuD2|PiWV=x5$Or(3GEuY@X{queXQAB#4S5WOB{g4D)L^+UkC#wuPu?Q_?f(h* zGJ77QlsWM0FP&(L8GEvgG4aE`I#`*|gp=t`Y#%@f9UswX!^Zf+FWh}*%>Kyg=o~o6 z5$z4h>dR8s-Sc|o@{{49YM#y>cXKW!Tg4Chy~#ZUeYy|bi|x;H41?3`|$sqCcO zA3-*lb2L;<^Wciv03BYMz0B{a+A0{u?G-G9YTuCeoFn)@{5sk)kcu?S_w>gFK?(Z+ zrWjZ$4o?fMbef;nve-hN$@RRA>a@WmcCd*VUG9_WuAB z+ds)CGN>e_?8K@9yG0)tAPcrc&7@8rWOWAJztHNo@)g_PDV{ob1p14-Qu9F3`*bL= zFC%0@auy$w-xGIs5jaLw<4U`}xO=hsJ>S3;%@#Wl@Z>@=O`|kg@no}5Z`cjc7DUV} zi8__13wsHOJ5jpI44P)9ZBy(yw*L(O!f3|~bHXYLO~kuIEK0)Eq3A~LK)$Il(}gzi z2hswBaa%@fl?QQv>Z2ROuGtNEe{U0aQ(m9A$mAT^Nn|jY1?QdnHhnTylW8oq7{zB0Py4@F6lY-grEDJWc6y)VGDfGNaoREPqq=J3#kMW@d!90{YCy$?DoIxd6L9qkCCU&6bi?Ux$@$H0;o z5ST?rLZ{195qUB2(-i!Z*9%0lR4%8CsIE-0Rw%3nU3;7;fq0C&+Y~3PVv;~ zRp%P>*!ZVU7SU!^v1hSyo6b8lQDO==;sha}pNi#kNtL`~s;)hkPof~MJ=lVn459#K zg%Lc*t4=hJO+bnQ7pqFR(>HeIg(f`b06-jFJgPAEfNqRTJYbMOJRy^|Mw{f6G)?&c zKJvv4tl+L>jQyAD0VQ#h>{q}duJBiRq01O!p$o;`3bAv`2W(jcfi7*?#$iSw3&q`K z0#;HFVUtGuu|&D-*YCDvkrYeSmVA@L!?y@dHC0)S0#@hyzn{&ocbWHdRlTvk|0>d1 zg>eR8p=9x

jXOi6?t#$#G}IAv2Hl%J5%3!6tRS8@BUs?+ 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 S;Xri<|BOHhBg2fJ@%{&*t^2zG diff --git a/doc/salome/gui/GUI/whcsh_home.htm b/doc/salome/gui/GUI/whcsh_home.htm deleted file mode 100755 index 5a486ba28..000000000 --- a/doc/salome/gui/GUI/whcsh_home.htm +++ /dev/null @@ -1,600 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whcshdata.htm b/doc/salome/gui/GUI/whcshdata.htm deleted file mode 100755 index 2832d87e0..000000000 --- a/doc/salome/gui/GUI/whcshdata.htm +++ /dev/null @@ -1,87 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whd_dpns.htm b/doc/salome/gui/GUI/whd_dpns.htm deleted file mode 100755 index 1bca23603..000000000 --- a/doc/salome/gui/GUI/whd_dpns.htm +++ /dev/null @@ -1,43 +0,0 @@ - - -Navigator Pane - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whd_hide0.gif b/doc/salome/gui/GUI/whd_hide0.gif deleted file mode 100755 index 97ea0bb6d7aae6a5c303f7288804f3ea9f0e2adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHbRAmrm*vtR|4Pe{=rW$~}1`s%K;J|;N_#fBm(s{K5IA+wS(XUH&97X-)sr-!@Y0 U%`L5M?HwJV-95d1eS!?u0EaP9SpWb4 diff --git a/doc/salome/gui/GUI/whd_hide1.gif b/doc/salome/gui/GUI/whd_hide1.gif deleted file mode 100755 index 97ea0bb6d7aae6a5c303f7288804f3ea9f0e2adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHbRAmrm*vtR|4Pe{=rW$~}1`s%K;J|;N_#fBm(s{K5IA+wS(XUH&97X-)sr-!@Y0 U%`L5M?HwJV-95d1eS!?u0EaP9SpWb4 diff --git a/doc/salome/gui/GUI/whd_hide2.gif b/doc/salome/gui/GUI/whd_hide2.gif deleted file mode 100755 index 97ea0bb6d7aae6a5c303f7288804f3ea9f0e2adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHbRAmrm*vtR|4Pe{=rW$~}1`s%K;J|;N_#fBm(s{K5IA+wS(XUH&97X-)sr-!@Y0 U%`L5M?HwJV-95d1eS!?u0EaP9SpWb4 diff --git a/doc/salome/gui/GUI/whd_next0.gif b/doc/salome/gui/GUI/whd_next0.gif deleted file mode 100755 index d92dda5223599ae2e8764bd25d24f93b5b35d887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_GOF0KgAF3IG5A diff --git a/doc/salome/gui/GUI/whd_next1.gif b/doc/salome/gui/GUI/whd_next1.gif deleted file mode 100755 index d92dda5223599ae2e8764bd25d24f93b5b35d887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_GOF0KgAF3IG5A diff --git a/doc/salome/gui/GUI/whd_next2.gif b/doc/salome/gui/GUI/whd_next2.gif deleted file mode 100755 index d92dda5223599ae2e8764bd25d24f93b5b35d887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_GOF0KgAF3IG5A diff --git a/doc/salome/gui/GUI/whd_nvp10.htm b/doc/salome/gui/GUI/whd_nvp10.htm deleted file mode 100755 index 209706456..000000000 --- a/doc/salome/gui/GUI/whd_nvp10.htm +++ /dev/null @@ -1,15 +0,0 @@ - - -Navigation Pane - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whd_nvp20.htm b/doc/salome/gui/GUI/whd_nvp20.htm deleted file mode 100755 index c5754bc41..000000000 --- a/doc/salome/gui/GUI/whd_nvp20.htm +++ /dev/null @@ -1,334 +0,0 @@ - - -navigation pane - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whd_prev0.gif b/doc/salome/gui/GUI/whd_prev0.gif deleted file mode 100755 index 518561a0d284eea6b136e0f65591bbe3f00173ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_ oU;NgcIXC46r>s_>iMrWq#-jL{%@sa+vrjf`sXCjtTbaQc0N6r5jsO4v diff --git a/doc/salome/gui/GUI/whd_prev1.gif b/doc/salome/gui/GUI/whd_prev1.gif deleted file mode 100755 index 518561a0d284eea6b136e0f65591bbe3f00173ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_ oU;NgcIXC46r>s_>iMrWq#-jL{%@sa+vrjf`sXCjtTbaQc0N6r5jsO4v diff --git a/doc/salome/gui/GUI/whd_prev2.gif b/doc/salome/gui/GUI/whd_prev2.gif deleted file mode 100755 index 518561a0d284eea6b136e0f65591bbe3f00173ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_ oU;NgcIXC46r>s_>iMrWq#-jL{%@sa+vrjf`sXCjtTbaQc0N6r5jsO4v diff --git a/doc/salome/gui/GUI/whd_show0.gif b/doc/salome/gui/GUI/whd_show0.gif deleted file mode 100755 index 60e8e689798894e49320835bacdce74069bc2755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHb)M5~3*vtR|4Pe{=rW$~}1`s%K;J|;N_E$rasmle_fbS~emu&&XWTYKFwOuzj8WaIn> egZkzce)i6;?w;Ph{%-S0lc!9bHhsDvgEasywN*#} diff --git a/doc/salome/gui/GUI/whd_show1.gif b/doc/salome/gui/GUI/whd_show1.gif deleted file mode 100755 index 60e8e689798894e49320835bacdce74069bc2755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHb)M5~3*vtR|4Pe{=rW$~}1`s%K;J|;N_E$rasmle_fbS~emu&&XWTYKFwOuzj8WaIn> egZkzce)i6;?w;Ph{%-S0lc!9bHhsDvgEasywN*#} diff --git a/doc/salome/gui/GUI/whd_show2.gif b/doc/salome/gui/GUI/whd_show2.gif deleted file mode 100755 index 60e8e689798894e49320835bacdce74069bc2755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHb)M5~3*vtR|4Pe{=rW$~}1`s%K;J|;N_E$rasmle_fbS~emu&&XWTYKFwOuzj8WaIn> egZkzce)i6;?w;Ph{%-S0lc!9bHhsDvgEasywN*#} diff --git a/doc/salome/gui/GUI/whd_sync0.gif b/doc/salome/gui/GUI/whd_sync0.gif deleted file mode 100755 index 1a9785ce625d4b5226515db4d6e0c7af3e416fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmZ?wbhEHbv|vM`9&x+nI$ zNd8r_c*)1$HEPY51-@OEc3gZ{eya7pwBt{WU+i`cUmmp8QZH$8UqzwSs@BDAwHYZ@ zNoh?j`R(#$ZiyX{(Jdi~6SEt%OMG>D%4g2fo-=KIR Lx^4SrK?Z98%;sR# diff --git a/doc/salome/gui/GUI/whd_sync1.gif b/doc/salome/gui/GUI/whd_sync1.gif deleted file mode 100755 index 1a9785ce625d4b5226515db4d6e0c7af3e416fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmZ?wbhEHbv|vM`9&x+nI$ zNd8r_c*)1$HEPY51-@OEc3gZ{eya7pwBt{WU+i`cUmmp8QZH$8UqzwSs@BDAwHYZ@ zNoh?j`R(#$ZiyX{(Jdi~6SEt%OMG>D%4g2fo-=KIR Lx^4SrK?Z98%;sR# diff --git a/doc/salome/gui/GUI/whd_sync2.gif b/doc/salome/gui/GUI/whd_sync2.gif deleted file mode 100755 index 1a9785ce625d4b5226515db4d6e0c7af3e416fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmZ?wbhEHbv|vM`9&x+nI$ zNd8r_c*)1$HEPY51-@OEc3gZ{eya7pwBt{WU+i`cUmmp8QZH$8UqzwSs@BDAwHYZ@ zNoh?j`R(#$ZiyX{(Jdi~6SEt%OMG>D%4g2fo-=KIR Lx^4SrK?Z98%;sR# diff --git a/doc/salome/gui/GUI/whd_tab0.gif b/doc/salome/gui/GUI/whd_tab0.gif deleted file mode 100755 index 955c42f47a076d635e5f28250996e98e7cd7c076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmV+&0pk8gNk%w1VeSDK0HXf@|NsBx<>kP@z`wu00002Mz`y_i00000A^8LW000F5 zEC2ui0PX=806+ucIJ(^aFv>}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{ za7Zi~kI1BQ$!z`v(5Q4uty-_xtai)odcWYXcuX#v&*-#z&0ag-@VIs;jK6uCK7M zvayD>wzs&sy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS*#O|-;^XAy j=I7|?>g(+7?(gvN^7Hid_V@Vt`uqI*-v0piBme+AZ&j?@ diff --git a/doc/salome/gui/GUI/whd_tab1.gif b/doc/salome/gui/GUI/whd_tab1.gif deleted file mode 100755 index b3ec41d6d8a6a3f2d06b41f8ea70572610acbfdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmZ?wbhEHbbYl=@*vtR|4Pe{=rW$~}1`s%K;J|;N_$ATn&sXV7$()z5O37izzJfJ!?b`Q$c;Bvk-@SYO2XPn1zT*pp zB8-__JR?GW^@#djjxO6e*VI2&EU2lc@8~ll%UIi3@4F^ZKI_$wf6tQps&@3Ne^E|F zLup%Hd_-awznW-Ok)e6q?^?=|z+uGd_>VZ)}) RYqxIm-m%k}fnAWn8USudW4QnT diff --git a/doc/salome/gui/GUI/whd_tab2.gif b/doc/salome/gui/GUI/whd_tab2.gif deleted file mode 100755 index 08fb0ce4fe630b4dd33f1f8d099945ff48531b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmZ?wbhEHbv||uu*vtR|4Pe{=rW$~}1`s%K;J|;N_amdW@3l){E)f@i$$g^S+H!mvz_+Zb?dcPZQ>AQ Gum%87{9UmC diff --git a/doc/salome/gui/GUI/whd_tab3.gif b/doc/salome/gui/GUI/whd_tab3.gif deleted file mode 100755 index 1819c8e8f786ed0b62007b198cb69dca982c49f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmZ?wbhEHbG-eQG*vtR|4Pe{=rW$~}1`s%K;J|;N_tQPIo@N&L#vFwFx*~w?0Zi@IVyZ?G?SxwgB2Sq=oM{i31m{lp1 o6|Yd&+>jp=)lsO@?iOr5ams`##?z)-O`hdDXRZYUyC8!#0CKBV4FCWD diff --git a/doc/salome/gui/GUI/whd_tab4.gif b/doc/salome/gui/GUI/whd_tab4.gif deleted file mode 100755 index 1a6fc4f4aa68d1b8fdd35c21c002f4a117133639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmZ?wbhEHb)MF53*vtR|4Pe{=rW$~}1`s%K;J|;N_j1LiMqShUz?=`!;bD@_^L1sSXX;;C5C diff --git a/doc/salome/gui/GUI/whd_tab6.gif b/doc/salome/gui/GUI/whd_tab6.gif deleted file mode 100755 index fe312d238ad98026d9171f20077f95e372a82752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmZ?wbhEHbG-D8D*vtR|4Pe{=rW$~}1`s%K;J|;N_*vtR|4Pe{=rW$~}1`s%K;J|;N_$5v+f;9S4GUsJ*HDtct_r7pLLGEFr+V_8Ee0O;8o<&2<`FKKp zgqPAJzo)&PT}q5Wa-}I#9eTspT+b9~?!S8>tcA^f&bH2eyZmdZ{r>)&Ny+JT znL<_d9VJB_oh^Np#xCXkwNtyg@*7p#oATmQ7Br?-^r+2=G;7V8xWXY%WBJ+@8#e`Q P+3L7`hb;rUAcHjkosMI* diff --git a/doc/salome/gui/GUI/whd_tab8.gif b/doc/salome/gui/GUI/whd_tab8.gif deleted file mode 100755 index c80acc8d57852a246362d981ae89d4148f157987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmZ?wbhEHbv|$is*vtR|4Pe{=rW$~}1`s%K;J|;N_WX{W2)us4ipV)^3U#ew_*Or&hV{|y+vg7j?6Bkay z$U8Fi;%Ua8k9bV=dSI~ftX`|PkLjzUMS>3vSbJQ%3r}pVys>U^^SeKxMtvvmrk72WmQa=UOuH{qFu0FTg{|-^09LkFYj1xWvjh*-FnScs{|RW E0hmEvxBvhE diff --git a/doc/salome/gui/GUI/whd_tabs.htm b/doc/salome/gui/GUI/whd_tabs.htm deleted file mode 100755 index 1568f573d..000000000 --- a/doc/salome/gui/GUI/whd_tabs.htm +++ /dev/null @@ -1,533 +0,0 @@ - - -WebHelp Tabs Frame in Navigation Pane - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whd_toc1.gif b/doc/salome/gui/GUI/whd_toc1.gif deleted file mode 100755 index 11017258c92970b19454ead146fd5b379bec281f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmZ?wbhEHb6krfw*v!E29|#!!A2@KJ0SFix6c`j3@B+o3EQ|~cj0`#;RUk8*S=?{xVR_$zZm5-g_Pmk7#Uti(DzxdWm!V8gx$+Ye-*fKA Z&qxFbzbZW-RFiQ{v>{?oou(jzH2|ujEKL9a diff --git a/doc/salome/gui/GUI/whd_toc2.gif b/doc/salome/gui/GUI/whd_toc2.gif deleted file mode 100755 index 975e5f6f4dde718d6af7eb7aaca2301a398d0985..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHb6krfw*v!E29|RbH@W6os4M4!qpunKOfEy_OWMO1rU}De#DFK<`%n}vg zp|pDIvWD7YY>bQ|?GtjD74se@CfrgKZZ@Bmp0zThw8(5iM~YSk!(9It&y2-*E@YG} v+8t4Edv%%mPet2C-OICinA>(d7FSUdOO|VTbKuP+zH@t`jkbp=F<1itbz3&o diff --git a/doc/salome/gui/GUI/whd_toc3.gif b/doc/salome/gui/GUI/whd_toc3.gif deleted file mode 100755 index 4b8122f0f430c4baa062d3681f98f0e41e749017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmZ?wbhEHb6krfw*v!E29|RbH@W6os4Gj$n3<^Lo2HZgLCkrD30~3P|ND0UcXBO{( z37)HW%xGY+`tCe2SC&&|MMdWPovo4CLd=bx@xKpd$4#<1nc$(rX1ea|6E)438OQq) gtyoviVpt_6a5ii8UHu;M1& diff --git a/doc/salome/gui/GUI/whd_toc4.gif b/doc/salome/gui/GUI/whd_toc4.gif deleted file mode 100755 index 3f9a036867847517b1eab4503a4bd378178c0bd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcmZ?wbhEHb6krfw_|Cxa9|RbH@C*>l1R^jjNr4Mc#bG=`Z##K4d?lL5$1V*qMm z0P}&YQ7{?;LplT$f3h$#FfcLbfP4YU6Yd<-7+5)EJT@#iz|5@VQZYdRD8a|bv%nyr z(WQ+;DCLYt;e!TFE@6k77X?ZO8M#FSIu0CYJjBQ%=+&cO^oW6hn}@@PL-EOpiE7+_ zOB}Xn1U57CJc(fte#zL$Am!4aQ0f%SsF82x@IfFcXc?2JjfX{pcEfa6R=o+UF047k gA!N-p;ls7Hhjyr|dn8ybc;CR}$jc=rA;4e_0PdJkt^fc4 diff --git a/doc/salome/gui/GUI/whd_topic.xml b/doc/salome/gui/GUI/whd_topic.xml deleted file mode 100755 index a1b0320fb..000000000 --- a/doc/salome/gui/GUI/whd_topic.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - -"]]> - - - - -"]]> - - - - -"; -OutputInTopicNavBarDataWebSearch.form();]]> - - - - - - - - - - -"]]> - - - diff --git a/doc/salome/gui/GUI/whd_wbsh0.gif b/doc/salome/gui/GUI/whd_wbsh0.gif deleted file mode 100755 index 383688e7cdf6fc64d789bef55fb569d00563682b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmZ?wbhEHb^k5KX*vtR|4Pe{=rW$~}1`s%K;J|;N_pi3um7TZ!{OM~2XVw-kO|^-f^X$8OVoiBY zc2#mlo_l>saATyygp%rj?#ZQ7CMony>nWRpi3um7TZ!{OM~2XVw-kO|^-f^X$8OVoiBY zc2#mlo_l>saATyygp%rj?#ZQ7CMony>nWRpi3um7TZ!{OM~2XVw-kO|^-f^X$8OVoiBY zc2#mlo_l>saATyygp%rj?#ZQ7CMony>nWR diff --git a/doc/salome/gui/GUI/whdata/whfwdata0.htm b/doc/salome/gui/GUI/whdata/whfwdata0.htm index e5eee4ffb..09a752158 100755 --- a/doc/salome/gui/GUI/whdata/whfwdata0.htm +++ b/doc/salome/gui/GUI/whdata/whfwdata0.htm @@ -14,576 +14,603 @@ diff --git a/doc/salome/gui/GUI/whdata/whtdata0.htm b/doc/salome/gui/GUI/whdata/whtdata0.htm index a037edb04..15cf816cf 100755 --- a/doc/salome/gui/GUI/whdata/whtdata0.htm +++ b/doc/salome/gui/GUI/whdata/whtdata0.htm @@ -18,7 +18,7 @@ aTE(2,0,"SALOME architecture","kernel/about_salome_pro_architecture.htm"); aTE(2,0,"Installing SALOME","kernel/readme.html"); aTE(2,0,"Running SALOME","kernel/running_salome_pro.htm"); - aTE(1,21,"GUI module"); + aTE(1,24,"GUI module"); aTE(2,0,"Introduction to GUI","introduction_to_gui.htm"); aTE(2,0,"Getting started","kernel/getting_started2.htm"); aTE(2,0,"SALOME desktop","kernel/salome_pro_desktop.htm"); @@ -33,6 +33,9 @@ aTE(2,0,"Using Object Browser","kernel/using_object_browser.htm"); aTE(2,0,"Using Registry tool","kernel/using_registry.htm"); aTE(2,0,"Using Catalog Generator","kernel/using_catalog_generator.htm"); + aTE(1,2,"Viewers"); + aTE(2,0,"OCC 3D Viewer","occ_3d_viewer.htm"); + aTE(2,0,"VTK 3D Viewer","vtk_3d_viewer.htm"); aTE(1,6,"Setting Preferences"); aTE(2,0,"Setting Preferences","setting_preferences.htm"); aTE(2,0,"Select Color and Font","select_color_and_font.htm"); diff --git a/doc/salome/gui/GUI/whfbody.htm b/doc/salome/gui/GUI/whfbody.htm deleted file mode 100755 index 5666e1b55..000000000 --- a/doc/salome/gui/GUI/whfbody.htm +++ /dev/null @@ -1,37 +0,0 @@ - - -Search Result - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whfdhtml.htm b/doc/salome/gui/GUI/whfdhtml.htm deleted file mode 100755 index 37429607b..000000000 --- a/doc/salome/gui/GUI/whfdhtml.htm +++ /dev/null @@ -1,30 +0,0 @@ - - -Search Frame - - - - - - - - - diff --git a/doc/salome/gui/GUI/whfform.htm b/doc/salome/gui/GUI/whfform.htm deleted file mode 100755 index 87d754ec4..000000000 --- a/doc/salome/gui/GUI/whfform.htm +++ /dev/null @@ -1,136 +0,0 @@ - - -Search Form - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whfhost.js b/doc/salome/gui/GUI/whfhost.js deleted file mode 100755 index 167acc459..000000000 --- a/doc/salome/gui/GUI/whfhost.js +++ /dev/null @@ -1,945 +0,0 @@ -// WebHelp 5.10.003 -var gsSK2=null; -var gsSK=null; -var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7"; -var gnCLF=0; -var gsHelpCannotSearch="Cannot search for that phrase."; -var gsNoTopics="No Topics Found."; -var gsLoadingDivID="LoadingDiv"; -var gsLoadingMsg="Loading data, please wait..."; -var gsSearchMsg="Searching..."; -var gsResultDivID="ResultDiv"; -var gaaFCD=new Array(); -var gaaFTCD=new Array(); -var goCF=null; -var goCTF=null; -var gaTI=null; -var gnCurrentOp=0; -var gbNot=false; -var gbReady=false; -var gnLoadFts=1; -var gnCacheLimits=5; -var gaCCD=new Array(); -var gbXML=false; -var gaData=new Array(); -var gsBgColor="#ffffff"; -var gsBgImage=""; -var gsMargin="0pt"; -var gsIndent="0pt"; -var gsCheckKey=null; -var gnIndexNum=0; -var gaFtsContentsCon=null; -var gaTopicCheckInfo=null; -var gnTopicCheck=0; -var goFont=null; -var goErrFont=null; -var goHoverFont=null; -var gsABgColor="#cccccc"; -var gbWhFHost=false; -var gbFirst=false; - -function setBackground(sBgImage) -{ - gsBgImage=sBgImage; -} - -function setBackgroundcolor(sBgColor) -{ - gsBgColor=sBgColor; -} - -function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) -{ - var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); - if(sType=="Normal") - goFont=vFont; - else if(sType=="Error") - goErrFont=vFont; - else if(sType=="Hover") - goHoverFont=vFont; -} - -function setActiveBgColor(sBgColor) -{ - gsABgColor=sBgColor; -} - -function setMargin(sMargin) -{ - gsMargin=sMargin; -} - -function setIndent(sIndent) -{ - gsIndent=sIndent; -} - -function updateCache(oCF) -{ - var len=gaCCD.length; - if(len0&&sURL) - { - var topic=new Object(); - topic.sTopicTitle=name; - topic.sTopicURL=sURL; - aTopics[aTopics.length]=topic; - } - } - oChild=oChild.nextSibling; - } - putFtsTData(aTopics); - } - } - else if(gnLoadFts==2) - { - var node=xmlDoc.lastChild; - if(node) - { - var oChild=node.firstChild; - var aFtsContents=new Array(); - while(oChild) - { - if(oChild.nodeName=="key") - { - var name=oChild.getAttribute("name"); - if(name&&name.length>0) - { - var item=new Object(); - item.sItemName=name; - aFtsContents[aFtsContents.length]=item; - var oChildChild=oChild.firstChild; - while(oChildChild) - { - if(oChildChild.nodeName=="#text") - { - var sIDs=oChildChild.nodeValue; - if(sIDs) - { - var nBPos=0; - do - { - var nPos=sIDs.indexOf(",",nBPos); - var sID=null; - if(nPos!=-1) - sID=sIDs.substring(nBPos,nPos); - else - sID=sIDs.substring(nBPos); - - if(sID) - { - var id=parseInt(sID); - if(!isNaN(id)) - { - if(!item.aTopics) - item.aTopics=new Array(); - item.aTopics[item.aTopics.length]=id; - } - } - nBPos=nPos+1; - }while(nBPos!=0&&nBPos0) - { - document.body.background=gsBgImage; - } - if(gsBgColor&&gsBgColor.length>0) - { - document.body.bgColor=gsBgColor; - } - writeResultDiv(); - loadFts(); - var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null) - SendMessage(oMsg); -} - -function writeResultDiv() -{ - var sHTML="

"; - document.body.insertAdjacentHTML("beforeEnd",sHTML); -} - -function loadFts() -{ - if(!gbReady) - { - var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null); - if(SendMessage(oResMsg)&&oResMsg.oParam) - { - gbReady=true; - var oProj=oResMsg.oParam; - var aProj=oProj.aProj; - gbXML=oProj.bXML; - if(aProj.length>0) - { - var sLangId=aProj[0].sLangId; - for(var i=0;i=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){ - gnCurrentOp=0; - gbNot=false; - }else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){ - gnCurrentOp=1; - gbNot=false; - }else if((sCW=="not")|| - ((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){ - gbNot=!gbNot; - }else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){ - var sCurrentStem=GetStem(sCW); - gsCW=sCurrentStem; - ftsFindKeyword(); - return; - } - findOneKey(); - } - else{ - displayTopics(); - checkAgain(); - } -} - -function checkAgain() -{ - gsCheckKey = ""; - gnIndexNum = 0; - gsSK=gsSK2; - gsSK2=null; - if(gsSK!=null) - setTimeout("findFTSKey();",1); -} - -function displayTopics() -{ - var sHTML=""; - var sLine=""; - for(var i=0;i"+_textToHtml(gaTI[i].sTopicTitle)+""; - if(i>>4<<4==i) - { - sHTML+=sLine; - sLine=""; - } - } - if(sLine.length>0) - sHTML+=sLine; - - if(sHTML.length==0) - sHTML="

"+gsNoTopics+"

" - else - sHTML="
"+sHTML+"
"; - - var resultDiv=getElement(gsResultDivID); - if(resultDiv) - resultDiv.innerHTML=sHTML; -} - -function displayMsg(sErrorMsg) -{ - var sHTML="

"+sErrorMsg+"

"; - - var resultDiv=getElement(gsResultDivID); - if(resultDiv) - resultDiv.innerHTML=sHTML; -} - -function ftsFindKeyword() -{ - var sKey=gsCW; - var bNeedLoad=false; - var aFtsContentsCon=null; - var s=0; - if(sKey==null) return; - if(!gsCheckKey||sKey!=gsCheckKey||gnIndexNum==0) - { - aFtsContentsCon=new Array(); - gnCheck=0; - gsCheckKey=sKey; - gnTopicCheck=0; - gaTopicCheckInfo=null; - } - else{ - s=gnIndexNum; - aFtsContentsCon=gaFtsContentsCon; - } - for(var i=gnCheck;i=aTI.length) - { - aLS=gaTI; - aSS=aTI; - } - else - { - aLS=aTI; - aSS=gaTI; - } - var s=0; - for(var i=0;i=0) - { - var nM; - var bFound=false; - do{ - nM=(nB+nE)>>1; - if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)>0) - nE=nM-1; - else if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0) - nB=nM+1; - else - { - bFound=true; - break; - } - }while(nB<=nE); - if(bFound) - insertItemIntoArray(aTI,nM,oTI); - else - { - if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0) - insertItemIntoArray(aTI,nM+1,oTI); - else - insertItemIntoArray(aTI,nM,oTI); - } - } - else - aTI[0]=oTI; -} - -function mergeTopics(aTI1,aTI2) -{ - var i1=0; - var i2=0; - var len1=aTI1.length; - var len2=aTI2.length; - var aTopicNew=new Array(); - var i=0; - while(i1>1; - if(compare(keys[nM].sItemName,sKey)>0) - nE=nM-1; - else if(compare(keys[nM].sItemName,sKey)<0) - nB=nM+1; - else{ - bFound=true; - break; - } - }while(nB<=nE); - if(bFound) - { - if(keys[nM].aTopics) - { - for(var i=0;i>1; - if(aFTCD[nM].nBegin>nTopicId) - nE=nM-1; - else if(aFTCD[nM].nEnd

"; -} - -function fakeItemsArea(nB,n,sKA,sKB,obj) -{ - this.nB=nB; - this.nNum=n; - this.sKA=sKA; - this.sKB=sKB; - this.obj=obj; - this.nMargin=(n-1)*gnUHeight; - - this.setNum=function(n) - { - var nLastobj=-1; - var nDelta=this.nMargin; - this.nMargin=(n-1)*gnUHeight; - nDelta=nDelta-this.nMargin; - if(n>0) - { - this.nNum=n; - var nMU=getMaxUnits(); - nLastobj=Math.floor((n-1)/nMU); - if(this.obj.length) - this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight; - else - this.obj.style.marginTop=((n-1)%nMU)*gnUHeight; - } - if(this.obj.length) - { - for(var i=this.obj.length-1;i>nLastobj;i--) - removeThis(this.obj[i]); - } - else - { - if(nLastobj==-1) - removeThis(this.obj); - } - return nDelta; - } - this.insertAdjacentHTML=function(sWhere,sHTML) - { - if(sWhere=="beforeBegin") - { - if(this.obj.length) - this.obj[0].insertAdjacentHTML(sWhere,sHTML); - else - this.obj.insertAdjacentHTML(sWhere,sHTML); - } - else if(sWhere=="afterEnd") - { - if(this.obj.length) - { - if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling) - this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML); - else - this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML); - } - else - { - if(gbMac&&gbIE5&&this.obj.nextSibling) - this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML); - else - this.obj.insertAdjacentHTML(sWhere,sHTML); - } - } - } - this.getBtm=function() - { - if(this.obj.length) - return this.obj[this.obj.length-1].offsetTop; - else - return this.obj.offsetTop; - } - this.getTop=function() - { - return this.getBtm()-this.nMargin; - } -} - -function usedItems(nB,nE) -{ - this.nB=nB; - this.nE=nE; - this.oN=null; -} - -function checkReady() -{ - var len=gaChunks.length; - var bNeedLoad=false; - var aDataCon; - var s=0; - var bDown=(gsSKB==null); - var sK=bDown?gsSKA:gsSKB; - if(sK==null) - { - markEnd(); - setTimeout("checkAgain();",50); - return; - } - if(!gsChK||sK!=gsChK||gnNum==0) - { - gnCheck=0; - gsChK=sK; - aDataCon=new Array(); - } - else{ - s=gnNum; - aDataCon=gaDataCon; - } - for(var i=gnCheck;i0&&aPos[i]>=0&&aPos[i]0) - { - sCurrentK=aDataCon[i].aKs[aPos[i]].sName; - } - } - } - return sCurrentK; -} - -function checkAgain() -{ - if(!gbProcess) - { - if(gsBCK!=null) - { - gsCK=gsBCK; - gsBCK=null; - findCK(); - } - else - { - markBegin(); - getUnitIdx(document.body.scrollTop,document.body.clientHeight); - } - } - else - setTimeout("checkAgain()",50); -} - -function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i) -{ - aMaxPos[i]=aDataCon[i].nNum; - aMinPos[i]=-1; - var oPNode=null; - if(aDataCon[i].oUsedItems) - { - var oUsedItems=aDataCon[i].oUsedItems; - do{ - if(oUsedItems.nB>aPos[i]) - { - aMaxPos[i]=oUsedItems.nB; - break; - } - oPNode=oUsedItems; - oUsedItems=oUsedItems.oN; - }while(oUsedItems!=null); - if(oPNode) - aMinPos[i]=oPNode.nE; - } - else if(aDataCon[i].aKs==null) - { - aMaxPos[i]=aMinPos[i]=aPos[i]; - } - if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i]) - { - aMaxPos[i]=aMinPos[i]=aPos[i]; - } -} - -function getIdxPos(oIdx,bDown,sK) -{ - var aKs=oIdx.aKs; - var nIdx; - if(bDown) - nIdx=oIdx.nNum; - else - nIdx=-1; - if(aKs!=null) - { - for(var i=0;i0) - { - nIdx=i; - break; - } - } - else - { - if(compare(aKs[i].sName,sK)<0) - nIdx=i; - else - break; - } - i+=aKs[i].nNKOff; - } - } - else if(oIdx.aKsOnly) - { - var aKsOnly=oIdx.aKsOnly; - for(var i=0;i0) - { - nIdx=i; - break; - } - } - else - { - if(compare(aKsOnly[i],sK)<0) - nIdx=i; - else - break; - } - } - } - } - return nIdx; -} - -function writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,nLevel) -{ - var aOldPos=new Array(); - for(var i=0;iaMinPos[i])) - { - if(sCurrentK==""|| - (bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)|| - (!bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)<0)) - { - sCurrentK=aDataCon[i].aKs[aPos[i]].sName; - p=0; - aCurIdxSet[p++]=i; - } - else if(compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)==0){ - aCurIdxSet[p++]=i; - } - } - else if(nLevel==1&&aMaxPos[i]!=aMinPos[i]){ - if(bDown&&aPos[i]==aMaxPos[i]) - { - if(aDataCon[i].aKs) - { - gsSKA=aDataCon[i].aKs[aOldPos[i]].sName; - return false; - } - } - else if(!bDown&&aPos[i]==aMinPos[i]) - { - if(aDataCon[i].aKs) - { - gsSKB=aDataCon[i].aKs[aOldPos[i]].sName; - return false; - } - } - } - } - if(p>=1){ - for(var s=0;s0); - return true; -} - -function updateUsedK(aDataCon,aOriPos,aOldPos,bDown) -{ - for(var i=0;inB) - { - if(oUsedItems.nB==nE+1) - { - oUsedItems.nB=nB; - } - else{ - var oNewNode=new usedItems(oUsedItems.nB,oUsedItems.nE); - oNewNode.oN=oUsedItems.oN; - oUsedItems.nB=nB; - oUsedItems.nE=nE; - oUsedItems.oN=oNewNode; - } - break; - } - oPNode=oUsedItems; - oUsedItems=oUsedItems.oN; - }while(oUsedItems); - if(!oUsedItems) - { - if(oPNode!=null) - oPNode.oN=new usedItems(nB,nE); - } - if(oPNode!=null){ - if(oPNode.nE==oPNode.oN.nB-1) - { - oPNode.nE=oPNode.oN.nE; - oPNode.oN=oPNode.oN.oN; - } - } - } -} - -function projInfo(sPPath,sDPath,sFile) -{ - this.sPPath=sPPath; - this.sDPath=sDPath; - this.sFile=sFile; -} - -function addProjInfo(sPPath,sDPath,sFile) -{ - var oIdxInfo=new projInfo(sPPath,sDPath,sFile); - gaData[gaData.length]=oIdxInfo; - return oIdxInfo; -} - -function writeDataIFrame() -{ - if(gnLoad=nPos) return true; - oUsed=oUsed.oN; - } - return false; -} - -function getKByIdx(oCData,nB) -{ - var nRelPos=nB-(oCData.nTotal-oCData.nNum); - var aIKs=oCData.aKs; - if(nRelPos>=0&&aIKs&&nRelPos=0) - { - do{ - oK=aIKs[nRelPos--]; - } - while((oK.nType==3||isUsed(oCData,nRelPos+1))&&nRelPos>=0); - } - if(oK.nType!=3) - { - return oK.sName; - } - } - } - return null; -} - -function loadData2(sFileName) -{ - disEvt(); - if(gbXML) - loadDataXML(sFileName); - else - loadData(sFileName); - enEvt(); -} - -function projReady(aChunk) -{ - gaChunks[gnLoad++]=aChunk; - var len=aChunk.length; - var nTotal=0; - if(len>0) - nTotal=aChunk[len-1].nTotal; - gnItems+=nTotal; - if(nTotal>gnMaxItems) - { - gnMaxItems=nTotal; - gnRef=gnLoad-1; - } - setTimeout("writeDataIFrame();",1); -} - -function writeFakeItems() -{ - disEvt(); - gnUHeight=15; - var sHTML=getFakeItemsHTMLbyCount(0,gnItems); - document.body.insertAdjacentHTML("beforeEnd",sHTML); - var obj=getH6ById(0); - if (document.body != null) - { - gnVisible=Math.ceil(document.body.clientHeight/gnUHeight); - } - gaFakes[0]=new fakeItemsArea(0,gnItems,"",getEndString(),obj); - enEvt(); -} - -function getEndString() -{ - var sBC=getBiggestChar(); - return sBC+sBC+sBC+sBC+sBC+sBC+sBC+sBC; -} - -function getUnitIdx(nScrl,nHeight) -{ - if(gaFakes.length==0) - { - markEnd(); - return; - } - var nB=0; - var nE=gaFakes.length-1; - var nM=-1; - var nTop=0; - var nBtm=0; - var bF=false; - do{ - nM=(nB+nE)>>1; - nBtm=gaFakes[nM].getBtm(); - nTop=gaFakes[nM].getTop(); - - if(nTop>=nScrl+nHeight) - nE=nM-1; - else if(nBtm=nB); - if(bF) - { - if(nTop>=nScrl){ - gsSKA=gaFakes[nM].sKA; - gsSKB=null; - gnNeeded=Math.ceil((nHeight-nTop+nScrl)/gnUHeight); - gnIns=gaFakes[nM].nB; - checkReady(); - } - else if(nBtm<=nScrl+nHeight){ - gsSKB=gaFakes[nM].sKB; - gsSKA=null; - gnNeeded=Math.ceil((nBtm-nScrl+gnScrlMgn)/gnUHeight); - gbNeedCalc=true; - checkReady(); - } - else{ - gnNeeded=gnVisible; - var nUnitIdx=gaFakes[nM].nB+Math.floor((nScrl-nTop)/gnUHeight); - if (!showItemsInEvaluation(nUnitIdx)) - { - gsSKA=gaFakes[nM].sKA; - gsSKB=null; - gnNeeded=Math.ceil(nHeight/gnUHeight); - gnIns=gaFakes[nM].nB; - checkReady(); - } - } - } - else - markEnd(); -} - -function disEvt() -{ - window.onscroll=null; - window.onresize=null; -} - -function enEvt() -{ - window.onscroll=window_OnScroll; - window.onresize=window_OnResize; -} - -function insertIdxKs(nIns,oHTML,bScrl) -{ - var bRtn=true; - disEvt(); - var nCount=oHTML.nConsumed; - var nB=0; - var nE=gaFakes.length-1; - var nM=-1; - var bF=false; - do{ - nM=(nB+nE)>>1; - if(gaFakes[nM].nB>nIns) - nE=nM-1; - else if(gaFakes[nM].nB+gaFakes[nM].nNum<=nIns) - nB=nM+1; - else{ - bF=true; - break; - } - }while(nE>=nB); - if(bF) - { - var oFIA=gaFakes[nM]; - var nOffsetTop=oFIA.getTop(); - var nOffsetBottom=oFIA.getBtm(); - var nDelta=0; - var nHDiff=nIns-oFIA.nB; - var nTDiff=oFIA.nNum+oFIA.nB-(nIns+nCount); - if(nHDiff>0) - { - nDelta=oFIA.setNum(nHDiff); - var sOldKBefore=oFIA.sKB; - oFIA.sKB=oHTML.sFK; - if(nTDiff>0) - { - var sHTML=getFakeItemsHTMLbyCount(nIns,nTDiff); - oFIA.insertAdjacentHTML("afterEnd",sHTML); - var obj=getH6ById(nIns); - insertItemIntoArray(gaFakes,nM+1,new fakeItemsArea(nIns+nCount,nTDiff,oHTML.sLK,sOldKBefore,obj)); - } - oFIA.insertAdjacentHTML("afterEnd",oHTML.sHTML); - if(bScrl) - { - if(gbMac&&gbIE4) - { - var nScrollPos=nOffsetBottom-nDelta; - while(document.body.scrollTop!=nScrollPos) - document.body.scrollTop=nScrollPos; - } - else - window.scrollTo(0,nOffsetBottom-nDelta); - } - } - else{ - oFIA.insertAdjacentHTML("beforeBegin",oHTML.sHTML); - if(bScrl){ - if(gbMac&&gbIE4) - { - var nScrollPos=nOffsetTop; - while(document.body.scrollTop!=nScrollPos) - document.body.scrollTop=nScrollPos; - } - else - window.scrollTo(0,nOffsetTop); - } - - if(nTDiff>0) - { - oFIA.nB=nIns+nCount; - nDelta=oFIA.setNum(nTDiff); - oFIA.sKA=oHTML.sLK; - } - else{ - gaFakes[nM].setNum(0); - removeItemFromArray(gaFakes,nM); - } - } - } - else - bRtn=false; - enEvt(); - return bRtn; -} - -function window_OnScroll() -{ - gnSE++; - setTimeout("procScroll();",50); -} - -function procScroll() -{ - if(gnSE==1&&!gbProcess) - { - markBegin(); - getUnitIdx(document.body.scrollTop,document.body.clientHeight); - } - gnSE--; -} - -function window_OnResize() -{ - gnRE++; - setTimeout("procResize();",50); -} - -function procResize() -{ - if(gnRE==1&&!gbProcess) - { - markBegin(); - gnVisible=Math.ceil(document.body.clientHeight/gnUHeight); - if(gnIns==-1) - getUnitIdx(document.body.scrollTop,document.body.clientHeight); - } - gnRE--; -} - -function getChunkByIdx(nIdx,nPosition) -{ - var oCData=null; - if(nIdx0) - { - var nB=0; - var nE=len-1; - var bF=false; - do{ - var nM=(nB+nE)>>1; - if(nPositionnB); - if(bF) - oCData=gaChunks[nIdx][nE]; - else if(nPosition0) - { - var nB=0; - var nE=len-1; - var bF=false; - do{ - var nM=(nB+nE+(bDown?0:1))>>1; - if(bDown) - { - if(compare(sK,gaChunks[nIdx][nM].sEK)<0) - { - bF=true; - nE=nM; - } - else - nB=nM+1; - } - else - { - if(compare(sK,gaChunks[nIdx][nM].sBK)>0) - { - bF=true; - nB=nM; - } - else - nE=nM-1; - } - }while(nE>nB); - if(bF) - { - if(bDown) - nCandId=nE; - else - nCandId=nB; - } - else - { - if(bDown) - { - if(gaChunks[nIdx].length>nB&&compare(sK,gaChunks[nIdx][nB].sEK)<0) - nCandId=nB; - else - nCandId=gaChunks[nIdx].length-1; - } - else - { - if(0<=nE&&compare(sK,gaChunks[nIdx][nE].sBK)>0) - nCandId=nE; - else - nCandId=0; - } - } - return gaChunks[nIdx][nCandId]; - } - } - return null; -} - -function findCK() -{ - if(gsCK!=null) - { - gsSKA=gsCK; - gbFindCK=true; - gnNeeded=1; - markBegin(); - checkReady(); - } -} - -function writeLoadingDiv(nIIdx) -{ - return ""; -} - -var gbWhHost=true; \ No newline at end of file diff --git a/doc/salome/gui/GUI/whibody.htm b/doc/salome/gui/GUI/whibody.htm deleted file mode 100755 index d95ca0a27..000000000 --- a/doc/salome/gui/GUI/whibody.htm +++ /dev/null @@ -1,284 +0,0 @@ - - -Index content - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whidhtml.htm b/doc/salome/gui/GUI/whidhtml.htm deleted file mode 100755 index 72400e6e0..000000000 --- a/doc/salome/gui/GUI/whidhtml.htm +++ /dev/null @@ -1,30 +0,0 @@ - - -Index - - - - - - - - - diff --git a/doc/salome/gui/GUI/whiform.htm b/doc/salome/gui/GUI/whiform.htm deleted file mode 100755 index 563bc3c3e..000000000 --- a/doc/salome/gui/GUI/whiform.htm +++ /dev/null @@ -1,91 +0,0 @@ - - -Index form - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whihost.js b/doc/salome/gui/GUI/whihost.js deleted file mode 100755 index 9aaf13a6a..000000000 --- a/doc/salome/gui/GUI/whihost.js +++ /dev/null @@ -1,424 +0,0 @@ -// WebHelp 5.10.002 -var gsDefaultTarget="bsscright"; -var gsBgColor="#ffffff"; -var gsBgImage=""; -var goIdxFont=null; -var goIdxEmptyFont=null; -var goIdxHoverFont=null; -var gsIdxMargin="0pt"; -var gsIdxIndent="8pt"; -var gsIdxActiveBgColor="#cccccc"; -var gsCK = null; -var gsBCK = null; -var gbCR = false; -var gbBCR = false; -var gbWhIHost=true; - -function myEvent() -{ - this.pageX = 0; - this.pageY = 0; -} -var _event=new myEvent(); - -function setBackgroundcolor(sBgColor) -{ - gsBgColor=sBgColor; -} - -function setBackground(sBgImage) -{ - gsBgImage=sBgImage; -} - -function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) -{ - var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); - if(sType=="Normal") - goIdxFont=vFont; - else if(sType=="Empty") - goIdxEmptyFont=vFont; - else if(sType=="Hover") - goIdxHoverFont=vFont; -} - -function setActiveBgColor(sBgColor) -{ - gsIdxActiveBgColor=sBgColor; -} - -function setMargin(sMargin) -{ - gsIdxMargin=sMargin; -} - -function setIndent(sIndent) -{ - gsIdxIndent=sIndent; -} - -function writeOneItem(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel) -{ - var sHTML=""; - var nIdxSet=aCurIdxSet[0]; - var nIIdx=aPos[nIdxSet]; - var sKOriName=getItemName(aDataCon,nIdxSet,nIIdx); - var sKName=_textToHtml(sKOriName); - - var nIdxIndent=parseInt(gsIdxIndent); - var sTopics=""; - if(nLevel==1){ - if(getItemType(aDataCon,nIdxSet,nIIdx)==1) - { - sHTML+="
"; - sHTML+=""+sKName+"
"; - } - else{ - for(var i=0;i"; - sHTML+="0) - sHTML+=sTopics+");return false;\">"+sKName+"

"; - else - sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"

"; - } - } - else if(nLevel>=2){ - var nIndent=nIdxIndent*nLevel; - for(var i=0;i"; - else - sHTML+="
"; - sHTML+="0) - sHTML+=sTopics+");return false;\">"+sKName+"
"; - else - sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+""; - } - oHTML.addHTML(sHTML,nLength,bDown,(nLevel==1),sKOriName); -} - -function getTargetName(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - if(aDataCon[nIdxSet].aKs[nIIdx].sTarget) - return aDataCon[nIdxSet].aKs[nIIdx].sTarget; - return gsDefaultTarget; -} - -function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel) -{ - var oLocalHTML=new indexHTMLPart(); - writeOneItem(oLocalHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel); - - var aLocalPos=new Array(); - var aMaxPos=new Array(); - for(var i=0;i0) - aMaxPos[aCurIdxSet[i]]=aLocalPos[aCurIdxSet[i]]+nNKOff; - } - var oSubHTML=new indexHTMLPart(); - writeItems(oSubHTML,aDataCon,aLocalPos,null,aMaxPos,true,nLevel+1); - oLocalHTML.addSubHTML(oSubHTML,true); - oHTML.appendHTML(oLocalHTML,bDown); -} - -function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos) -{ - if(bDown) - { - for(var i=0;inIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].sName; - else - return null; -} - -function getItemType(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].nType; - else - return 0; -} - -function getNKOff(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].nNKOff; - else - return null; -} - -function getPKOff(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].nPKOff; - else - return null; -} - -function window_OnLoad() -{ - if(gsBgImage&&gsBgImage.length>0) - { - document.body.background=gsBgImage; - } - if(gsBgColor&&gsBgColor.length>0) - { - document.body.bgColor=gsBgColor; - } - document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv()); - loadIdx(); - var oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null) - SendMessage(oMsg); -} - -function loadIdx() -{ - if(!gbReady) - { - var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null); - if(SendMessage(oResMsg)&&oResMsg.oParam) - { - gbReady=true; - var oProj=oResMsg.oParam; - var aProj=oProj.aProj; - gbXML=oProj.bXML; - if(aProj.length>0) - { - var sLangId=aProj[0].sLangId; - for(var i=0;inIIdx) - { - if(aDataCon[nIdxSet].aKs[nIIdx].aTopics) - { - var nLen=aDataCon[nIdxSet].aKs[nIIdx].aTopics.length; - var nProj=aDataCon[nIdxSet].nProjId; - var sPath=gaData[nProj].sPPath; - for(var i=0;i>1; - sItem=getInnerText(oP[nM]); - - if(compare(sItem,sK)==0) - { - bF=true; - break; - } - else if(compare(sItem,sK)>0) - nE=nM-1; - else if(compare(sItem,sK)<0) - nB=nM; - } - if(!bF) - { - if(nB==nE) nM=nB; - - if(nM+10){ - var nbTag=getElementsByTag(oMatch,"NOBR"); - if(nbTag&&nbTag.length>0) - HighLightElement(nbTag[0], gsIdxActiveBgColor, "transparent"); - if (gbCR) - { - if (gbIE4) - tempColl(0).click(); - else - { - var strCommand = tempColl[0].getAttribute("onClick"); - var nstrCommand = strCommand.indexOf(";"); - strCommand = strCommand.substring(0, nstrCommand); - strCommand = strCommand.replace("event", "_event"); - window._event.pageX = oMatch.offsetLeft ; - window._event.pageY = oMatch.offsetTop + 20; - window.setTimeout(strCommand, 100); - } - } - } - } - gsCK=gsBCK; - gbCR=gbBCR; - if(gsBCK!=null) - { - gsBCK=null; - gbBCR=false; - findCK(); - return false; - } - - } - return true; -} - -function clearHighLight() -{ - resetHighLight(gsBgColor); -} - -function IndexWriteClassStyle() -{ - var sStyle=""; - sStyle+=""; - document.write(sStyle); - return; -} - -function window_Unload() -{ - UnRegisterListener2(this,WH_MSG_PROJECTREADY); - UnRegisterListener2(this,WH_MSG_SEARCHINDEXKEY); -} - -function onSendMessage(oMsg) -{ - if(oMsg) - { - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_SEARCHINDEXKEY) - { - if(oMsg.oParam && oMsg.oParam.sInput) - { - if(gsCK==null) - { - gsCK=oMsg.oParam.sInput; - gbCR = oMsg.oParam.bCR; - findCK(); - } - else - { - gsBCK=oMsg.oParam.sInput; - gbBCR = oMsg.oParam.bCR; - } - } - } - else if(nMsgId==WH_MSG_PROJECTREADY) - { - loadIdx(); - } - } - return true; -} - -if(window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhHost&&window.gbWhProxy) -{ - RegisterListener2(this,WH_MSG_PROJECTREADY); - RegisterListener2(this,WH_MSG_SEARCHINDEXKEY); - goIdxFont=new whFont("Verdana","8pt","#000000","normal","normal","none"); - goIdxEmptyFont=new whFont("Verdana","8pt","#666666","normal","normal","none"); - goIdxHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline"); - - window.onload=window_OnLoad; - window.onbeforeunload=window_BUnload; - window.onunload=window_Unload; - gbWhIHost=true; -} -else - document.location.reload(); - diff --git a/doc/salome/gui/GUI/whlang.js b/doc/salome/gui/GUI/whlang.js deleted file mode 100755 index 870be0e17..000000000 --- a/doc/salome/gui/GUI/whlang.js +++ /dev/null @@ -1,453 +0,0 @@ -// WebHelp 5.10.001 -var garrSortChar=new Array(); -var gaFtsStop=new Array(); -var gaFtsStem=new Array(); -var gbWhLang=false; - -garrSortChar[0] = 0; -garrSortChar[1] = 1; -garrSortChar[2] = 2; -garrSortChar[3] = 3; -garrSortChar[4] = 4; -garrSortChar[5] = 5; -garrSortChar[6] = 6; -garrSortChar[7] = 7; -garrSortChar[8] = 8; -garrSortChar[9] = 40; -garrSortChar[10] = 41; -garrSortChar[11] = 42; -garrSortChar[12] = 43; -garrSortChar[13] = 44; -garrSortChar[14] = 9; -garrSortChar[15] = 10; -garrSortChar[16] = 11; -garrSortChar[17] = 12; -garrSortChar[18] = 13; -garrSortChar[19] = 14; -garrSortChar[20] = 15; -garrSortChar[21] = 16; -garrSortChar[22] = 17; -garrSortChar[23] = 18; -garrSortChar[24] = 19; -garrSortChar[25] = 20; -garrSortChar[26] = 21; -garrSortChar[27] = 22; -garrSortChar[28] = 23; -garrSortChar[29] = 24; -garrSortChar[30] = 25; -garrSortChar[31] = 26; -garrSortChar[32] = 38; -garrSortChar[33] = 45; -garrSortChar[34] = 46; -garrSortChar[35] = 47; -garrSortChar[36] = 48; -garrSortChar[37] = 49; -garrSortChar[38] = 50; -garrSortChar[39] = 33; -garrSortChar[40] = 51; -garrSortChar[41] = 52; -garrSortChar[42] = 53; -garrSortChar[43] = 88; -garrSortChar[44] = 54; -garrSortChar[45] = 34; -garrSortChar[46] = 55; -garrSortChar[47] = 56; -garrSortChar[48] = 115; -garrSortChar[49] = 119; -garrSortChar[50] = 121; -garrSortChar[51] = 123; -garrSortChar[52] = 125; -garrSortChar[53] = 126; -garrSortChar[54] = 127; -garrSortChar[55] = 128; -garrSortChar[56] = 129; -garrSortChar[57] = 130; -garrSortChar[58] = 57; -garrSortChar[59] = 58; -garrSortChar[60] = 89; -garrSortChar[61] = 90; -garrSortChar[62] = 91; -garrSortChar[63] = 59; -garrSortChar[64] = 60; -garrSortChar[65] = 131; -garrSortChar[66] = 148; -garrSortChar[67] = 150; -garrSortChar[68] = 154; -garrSortChar[69] = 158; -garrSortChar[70] = 168; -garrSortChar[71] = 171; -garrSortChar[72] = 173; -garrSortChar[73] = 175; -garrSortChar[74] = 185; -garrSortChar[75] = 187; -garrSortChar[76] = 189; -garrSortChar[77] = 191; -garrSortChar[78] = 193; -garrSortChar[79] = 197; -garrSortChar[80] = 214; -garrSortChar[81] = 216; -garrSortChar[82] = 218; -garrSortChar[83] = 220; -garrSortChar[84] = 225; -garrSortChar[85] = 230; -garrSortChar[86] = 240; -garrSortChar[87] = 242; -garrSortChar[88] = 244; -garrSortChar[89] = 246; -garrSortChar[90] = 252; -garrSortChar[91] = 61; -garrSortChar[92] = 62; -garrSortChar[93] = 63; -garrSortChar[94] = 64; -garrSortChar[95] = 66; -garrSortChar[96] = 67; -garrSortChar[97] = 131; -garrSortChar[98] = 148; -garrSortChar[99] = 150; -garrSortChar[100] = 154; -garrSortChar[101] = 158; -garrSortChar[102] = 168; -garrSortChar[103] = 171; -garrSortChar[104] = 173; -garrSortChar[105] = 175; -garrSortChar[106] = 185; -garrSortChar[107] = 187; -garrSortChar[108] = 189; -garrSortChar[109] = 191; -garrSortChar[110] = 193; -garrSortChar[111] = 197; -garrSortChar[112] = 214; -garrSortChar[113] = 216; -garrSortChar[114] = 218; -garrSortChar[115] = 220; -garrSortChar[116] = 225; -garrSortChar[117] = 230; -garrSortChar[118] = 240; -garrSortChar[119] = 242; -garrSortChar[120] = 244; -garrSortChar[121] = 246; -garrSortChar[122] = 252; -garrSortChar[123] = 68; -garrSortChar[124] = 69; -garrSortChar[125] = 70; -garrSortChar[126] = 71; -garrSortChar[127] = 27; -garrSortChar[128] = 114; -garrSortChar[129] = 28; -garrSortChar[130] = 82; -garrSortChar[131] = 170; -garrSortChar[132] = 85; -garrSortChar[133] = 112; -garrSortChar[134] = 109; -garrSortChar[135] = 110; -garrSortChar[136] = 65; -garrSortChar[137] = 113; -garrSortChar[138] = 223; -garrSortChar[139] = 86; -garrSortChar[140] = 213; -garrSortChar[141] = 29; -garrSortChar[142] = 255; -garrSortChar[143] = 30; -garrSortChar[144] = 31; -garrSortChar[145] = 80; -garrSortChar[146] = 81; -garrSortChar[147] = 83; -garrSortChar[148] = 84; -garrSortChar[149] = 111; -garrSortChar[150] = 36; -garrSortChar[151] = 37; -garrSortChar[152] = 79; -garrSortChar[153] = 229; -garrSortChar[154] = 222; -garrSortChar[155] = 87; -garrSortChar[156] = 212; -garrSortChar[157] = 32; -garrSortChar[158] = 254; -garrSortChar[159] = 251; -garrSortChar[160] = 39; -garrSortChar[161] = 72; -garrSortChar[162] = 97; -garrSortChar[163] = 98; -garrSortChar[164] = 99; -garrSortChar[165] = 100; -garrSortChar[166] = 73; -garrSortChar[167] = 101; -garrSortChar[168] = 74; -garrSortChar[169] = 102; -garrSortChar[170] = 133; -garrSortChar[171] = 93; -garrSortChar[172] = 103; -garrSortChar[173] = 35; -garrSortChar[174] = 104; -garrSortChar[175] = 75; -garrSortChar[176] = 105; -garrSortChar[177] = 92; -garrSortChar[178] = 122; -garrSortChar[179] = 124; -garrSortChar[180] = 76; -garrSortChar[181] = 106; -garrSortChar[182] = 107; -garrSortChar[183] = 108; -garrSortChar[184] = 77; -garrSortChar[185] = 120; -garrSortChar[186] = 199; -garrSortChar[187] = 94; -garrSortChar[188] = 116; -garrSortChar[189] = 117; -garrSortChar[190] = 118; -garrSortChar[191] = 78; -garrSortChar[192] = 131; -garrSortChar[193] = 131; -garrSortChar[194] = 131; -garrSortChar[195] = 131; -garrSortChar[196] = 131; -garrSortChar[197] = 131; -garrSortChar[198] = 131; -garrSortChar[199] = 150; -garrSortChar[200] = 158; -garrSortChar[201] = 158; -garrSortChar[202] = 158; -garrSortChar[203] = 158; -garrSortChar[204] = 175; -garrSortChar[205] = 175; -garrSortChar[206] = 175; -garrSortChar[207] = 175; -garrSortChar[208] = 154; -garrSortChar[209] = 193; -garrSortChar[210] = 197; -garrSortChar[211] = 197; -garrSortChar[212] = 197; -garrSortChar[213] = 197; -garrSortChar[214] = 197; -garrSortChar[215] = 95; -garrSortChar[216] = 197; -garrSortChar[217] = 230; -garrSortChar[218] = 230; -garrSortChar[219] = 230; -garrSortChar[220] = 230; -garrSortChar[221] = 246; -garrSortChar[222] = 227; -garrSortChar[223] = 224; -garrSortChar[224] = 131; -garrSortChar[225] = 131; -garrSortChar[226] = 131; -garrSortChar[227] = 131; -garrSortChar[228] = 131; -garrSortChar[229] = 131; -garrSortChar[230] = 131; -garrSortChar[231] = 150; -garrSortChar[232] = 158; -garrSortChar[233] = 158; -garrSortChar[234] = 158; -garrSortChar[235] = 158; -garrSortChar[236] = 175; -garrSortChar[237] = 175; -garrSortChar[238] = 175; -garrSortChar[239] = 175; -garrSortChar[240] = 154; -garrSortChar[241] = 193; -garrSortChar[242] = 197; -garrSortChar[243] = 197; -garrSortChar[244] = 197; -garrSortChar[245] = 197; -garrSortChar[246] = 197; -garrSortChar[247] = 96; -garrSortChar[248] = 197; -garrSortChar[249] = 230; -garrSortChar[250] = 230; -garrSortChar[251] = 230; -garrSortChar[252] = 230; -garrSortChar[253] = 246; -garrSortChar[254] = 227; -garrSortChar[255] = 250; - -gaFtsStop[0] = "a"; -gaFtsStop[1] = "about"; -gaFtsStop[2] = "after"; -gaFtsStop[3] = "against"; -gaFtsStop[4] = "all"; -gaFtsStop[5] = "also"; -gaFtsStop[6] = "among"; -gaFtsStop[7] = "an"; -gaFtsStop[8] = "and"; -gaFtsStop[9] = "are"; -gaFtsStop[10] = "as"; -gaFtsStop[11] = "at"; -gaFtsStop[12] = "be"; -gaFtsStop[13] = "became"; -gaFtsStop[14] = "because"; -gaFtsStop[15] = "been"; -gaFtsStop[16] = "between"; -gaFtsStop[17] = "but"; -gaFtsStop[18] = "by"; -gaFtsStop[19] = "can"; -gaFtsStop[20] = "come"; -gaFtsStop[21] = "do"; -gaFtsStop[22] = "during"; -gaFtsStop[23] = "each"; -gaFtsStop[24] = "early"; -gaFtsStop[25] = "for"; -gaFtsStop[26] = "form"; -gaFtsStop[27] = "found"; -gaFtsStop[28] = "from"; -gaFtsStop[29] = "had"; -gaFtsStop[30] = "has"; -gaFtsStop[31] = "have"; -gaFtsStop[32] = "he"; -gaFtsStop[33] = "her"; -gaFtsStop[34] = "his"; -gaFtsStop[35] = "however"; -gaFtsStop[36] = "in"; -gaFtsStop[37] = "include"; -gaFtsStop[38] = "into"; -gaFtsStop[39] = "is"; -gaFtsStop[40] = "it"; -gaFtsStop[41] = "its"; -gaFtsStop[42] = "late"; -gaFtsStop[43] = "later"; -gaFtsStop[44] = "made"; -gaFtsStop[45] = "many"; -gaFtsStop[46] = "may"; -gaFtsStop[47] = "me"; -gaFtsStop[48] = "med"; -gaFtsStop[49] = "more"; -gaFtsStop[50] = "most"; -gaFtsStop[51] = "near"; -gaFtsStop[52] = "no"; -gaFtsStop[53] = "non"; -gaFtsStop[54] = "not"; -gaFtsStop[55] = "of"; -gaFtsStop[56] = "on"; -gaFtsStop[57] = "only"; -gaFtsStop[58] = "or"; -gaFtsStop[59] = "other"; -gaFtsStop[60] = "over"; -gaFtsStop[61] = "several"; -gaFtsStop[62] = "she"; -gaFtsStop[63] = "some"; -gaFtsStop[64] = "such"; -gaFtsStop[65] = "than"; -gaFtsStop[66] = "that"; -gaFtsStop[67] = "the"; -gaFtsStop[68] = "their"; -gaFtsStop[69] = "then"; -gaFtsStop[70] = "there"; -gaFtsStop[71] = "these"; -gaFtsStop[72] = "they"; -gaFtsStop[73] = "this"; -gaFtsStop[74] = "through"; -gaFtsStop[75] = "to"; -gaFtsStop[76] = "under"; -gaFtsStop[77] = "until"; -gaFtsStop[78] = "use"; -gaFtsStop[79] = "was"; -gaFtsStop[80] = "we"; -gaFtsStop[81] = "were"; -gaFtsStop[82] = "when"; -gaFtsStop[83] = "where"; -gaFtsStop[84] = "which"; -gaFtsStop[85] = "who"; -gaFtsStop[86] = "with"; -gaFtsStop[87] = "you"; - -gaFtsStem[0] = "ed"; -gaFtsStem[1] = "es"; -gaFtsStem[2] = "er"; -gaFtsStem[3] = "e"; -gaFtsStem[4] = "s"; -gaFtsStem[5] = "ingly"; -gaFtsStem[6] = "ing"; -gaFtsStem[7] = "ly"; - - -// as javascript 1.3 support unicode instead of ISO-Latin-1 -// need to transfer come code back to ISO-Latin-1 for compare purpose -// Note: Different Language(Code page) maybe need different array: -var gaUToC=new Array(); -gaUToC[8364]=128; -gaUToC[8218]=130; -gaUToC[402]=131; -gaUToC[8222]=132; -gaUToC[8230]=133; -gaUToC[8224]=134; -gaUToC[8225]=135; -gaUToC[710]=136; -gaUToC[8240]=137; -gaUToC[352]=138; -gaUToC[8249]=139; -gaUToC[338]=140; -gaUToC[381]=142; -gaUToC[8216]=145; -gaUToC[8217]=146; -gaUToC[8220]=147; -gaUToC[8221]=148; -gaUToC[8226]=149; -gaUToC[8211]=150; -gaUToC[8212]=151; -gaUToC[732]=152; -gaUToC[8482]=153; -gaUToC[353]=154; -gaUToC[8250]=155; -gaUToC[339]=156; -gaUToC[382]=158; -gaUToC[376]=159; - -var gsBiggestChar=""; -function getBiggestChar() -{ - if(gsBiggestChar.length==0) - { - if(garrSortChar.length<256) - gsBiggestChar=String.fromCharCode(255); - else - { - var nBiggest=0; - var nBigChar=0; - for(var i=0;i<=255;i++) - { - if(garrSortChar[i]>nBiggest) - { - nBiggest=garrSortChar[i]; - nBigChar=i; - } - } - gsBiggestChar=String.fromCharCode(nBigChar); - } - - } - return gsBiggestChar; -} - -function getCharCode(str,i) -{ - var code=str.charCodeAt(i) - if(code>256) - { - code=gaUToC[code]; - } - return code; -} - -function compare(strText1,strText2) -{ - if(garrSortChar.length<256) - { - var strt1=strText1.toLowerCase(); - var strt2=strText2.toLowerCase(); - if(strt1strt2) return 1; - return 0; - } - else - { - for(var i=0;igarrSortChar[getCharCode(strText2,i)]) return 1; - } - if(strText1.lengthstrText2.length) return 1; - return 0; - } -} -gbWhLang=true; \ No newline at end of file diff --git a/doc/salome/gui/GUI/whmozemu.js b/doc/salome/gui/GUI/whmozemu.js deleted file mode 100755 index 84c6de1ed..000000000 --- a/doc/salome/gui/GUI/whmozemu.js +++ /dev/null @@ -1,67 +0,0 @@ -// WebHelp 5.10.002 -if (! window.gbIE4 && window.gbNav6 && !document.childNodes[0].insertAdjacentHTML){ - -HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode) -{ - switch (where){ - case 'beforeBegin': - this.parentNode.insertBefore(parsedNode,this); - break; - case 'afterBegin': - this.insertBefore(parsedNode,this.firstChild); - break; - case 'beforeEnd': - this.appendChild(parsedNode); - break; - case 'afterEnd': - if (this.nextSibling){ - this.parentNode.insertBefore(parsedNode,this.nextSibling); - } else { - this.parentNode.appendChild(parsedNode); - } - break; - } -} - -HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){ - - var r = this.ownerDocument.createRange(); - r.setStartBefore(this); - var parsedHTML = r.createContextualFragment(htmlStr); - this.insertAdjacentElement(where,parsedHTML); -} - - -HTMLElement.prototype.insertAdjacentText = function(where,txtStr){ - - var parsedText = document.createTextNode(txtStr); - this.insertAdjacentElement(where,parsedText); -} -} - -function testScroll() { - // Initialize scrollbar cache if necessary - if (window._pageXOffset==null) { - window._pageXOffset = window.pageXOffset; - window._pageYOffset = window.pageYOffset; - } - // Expose Internet Explorer compatible object model - document.scrollTop = window.pageYOffset; - document.scrollLeft = window.pageXOffset; - window.document.scrollHeight = document.height; - window.document.scrollWidth = document.width; - window.document.clientWidth = window.innerWidth; - window.document.clientHeight = window.innerHeight; - - // If cache!=current values, call the onscroll event - if (((window.pageXOffset!=window._pageXOffset) || (window.pageYOffset!=window._pageYOffset)) && (window.onscroll)) - window.onscroll(); - // Cache new values - window._pageXOffset = window.pageXOffset; - window._pageYOffset = window.pageYOffset; - } - -// Create compatibility layer for Netscape -if (window.gbNav6 && !window.gbNav7) { - setInterval("testScroll()",50) -} \ No newline at end of file diff --git a/doc/salome/gui/GUI/whmsg.js b/doc/salome/gui/GUI/whmsg.js deleted file mode 100755 index 52ffcd243..000000000 --- a/doc/salome/gui/GUI/whmsg.js +++ /dev/null @@ -1,69 +0,0 @@ -// WebHelp 5.10.002 -var WH_MSG_RESIZEPANE =0x0100; -var WH_MSG_SHOWPANE =0x0101; -var WH_MSG_HIDEPANE =0x0102; -var WH_MSG_SYNCTOC =0x0103; -var WH_MSG_NEXT =0x0104; -var WH_MSG_PREV =0x0105; -var WH_MSG_NOSEARCHINPUT =0x0106; -var WH_MSG_NOSYNC =0x0107; -var WH_MSG_ENABLEWEBSEARCH =0x0108; - -var WH_MSG_ISPANEVISIBLE =0x0109; -var WH_MSG_PANESTATUE =0x010a; - -var WH_MSG_SYNCINFO =0x010b; -var WH_MSG_PANEINFO =0x010c; -var WH_MSG_WEBSEARCH =0x010d; - -var WH_MSG_SEARCHINDEXKEY =0x0201; - -var WH_MSG_SEARCHFTSKEY =0x020a; - -var WH_MSG_PROJECTREADY =0x0301; -var WH_MSG_GETPROJINFO =0x0302; - -var WH_MSG_SHOWTOC =0x0401; -var WH_MSG_SHOWIDX =0x0402; -var WH_MSG_SHOWFTS =0x0403; -var WH_MSG_SHOWGLO =0x0404; - -var WH_MSG_SHOWGLODEF =0x0500; - -var WH_MSG_GETTOCPATHS =0x0600; -var WH_MSG_GETAVIAVENUES =0x0601; -var WH_MSG_GETCURRENTAVENUE =0x0602; -var WH_MSG_GETPANEINFO =0x0603; -var WH_MSG_AVENUEINFO =0x0604; - -var WH_MSG_GETSTARTFRAME =0x0701; -var WH_MSG_GETDEFAULTTOPIC =0x0702; - -var WH_MSG_SEARCHTHIS =0x0801; -var WH_MSG_GETSEARCHS =0x0802; - -var WH_MSG_ISINFRAMESET =0x0900; - -var WH_MSG_TOOLBARORDER =0x0a00; -var WH_MSG_MINIBARORDER =0x0a01; -var WH_MSG_ISSYNCSSUPPORT =0x0a02; -var WH_MSG_ISSEARCHSUPPORT =0x0a03; -var WH_MSG_GETPANETYPE =0x0a04; -var WH_MSG_BACKUPSEARCH =0x0a05; -var WH_MSG_GETPANES =0x0a06; -var WH_MSG_INITSEARCHSTRING =0x0a07; -var WH_MSG_RELOADNS6 =0x0a08; -var WH_MSG_ISAVENUESUPPORT =0x0a09; - -var WH_MSG_GETCMD =0x0b00; -var WH_MSG_GETPANE =0x0b01; -var WH_MSG_GETDEFPANE =0x0b02; - -function whMessage(nMessageId,wSender,nVersion,oParam) -{ - this.nMessageId=nMessageId; - this.wSender=wSender; - this.nVersion=nVersion; - this.oParam=oParam; -} -var gbWhMsg=true; \ No newline at end of file diff --git a/doc/salome/gui/GUI/whnjs.htm b/doc/salome/gui/GUI/whnjs.htm deleted file mode 100755 index f65e76c50..000000000 --- a/doc/salome/gui/GUI/whnjs.htm +++ /dev/null @@ -1,25 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - - -<p>Your browser does not support frames. We recommend that you update your browser to a version that supports frames.</p><p>To view the Help system without frames click on this<a href="whgdata/whnvp30.htm">hyperlink.</a></p> - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whphost.js b/doc/salome/gui/GUI/whphost.js deleted file mode 100755 index e76edcdfb..000000000 --- a/doc/salome/gui/GUI/whphost.js +++ /dev/null @@ -1,582 +0,0 @@ -// WebHelp 5.10.005 -var gaProj=new Array(); -var gnChecked=0; -var gsProjName=""; -var gbReady=false; -var goMan=null; -var gbXML=false; -var gsFirstPane=""; -var gServerEnabled=false; -var gsPath=""; -var gbWhPHost=false; -var goDiv = null; -var gsHTML = ""; - -if (navigator.currentNavPen) - gsFirstPane = navigator.currentNavPen; - - -function delayLoad() -{ - if (goDiv&&gsHTML) - { - goDiv.innerHTML=gsHTML; - goDiv=null; - gsHTML=""; - } -} - -function whCom(sName,sComFile) -{ - this.msName=sName; - this.msDivId=sName+"Div"; - this.msIFrameId=sName+"IFrame"; - this.msComFile=sComFile; - this.mbloaded=false; - this.mbShow=false; - this.show=function(bShow) - { - if(this.mbShow!=bShow) - { - if(bShow&&!this.mbloaded) - { - this.load(); - } - - var oDiv=getElement(this.msDivId); - if(oDiv) - { - if(gbIE55||(gbIE5&&gbMac)) - { - var oIframe=getElement(this.msIFrameId); - if(oIframe) - { - if(bShow) - { - oDiv.style.zIndex=3; - if(oIframe!=null) - { - oIframe.style.zIndex=3; - if (!gbIE55) - oIframe.style.visibility="visible"; - } - } - else - { - oDiv.style.zIndex=2; - if(oIframe!=null) - { - oIframe.style.zIndex=2; - if (!gbIE55) - oIframe.style.visibility="hidden"; - } - } - } - } - if (!gbIE55) - oDiv.style.visibility=(bShow==true)?'visible':'hidden'; - this.mbShow=bShow; - } - - } - } - this.load=function() - { - if(!this.mbloaded) - { - if(this.msComFile.length>0){ - var strFile= _getFullPath(getPath(), this.msComFile); - var oDiv=getElement(this.msDivId); - if(oDiv){ - if(gbIE4||gbOpera7){ - var nIFrameHeight=oDiv.style.pixelHeight; - var nIFrameWidth=oDiv.style.pixelWidth; - var sHTML=""; - }else{ - sHTML+="100%; height:100%;\">"; - } - oDiv.innerHTML=sHTML; - }else if(gbNav6){ - gsHTML=""; - goDiv = oDiv; - setTimeout("delayLoad()", 100); - } - this.mbloaded=true; - } - } - } - } - this.unload=function() - { - var oDiv=getElement(this.msDivId); - if(oDiv) - oDiv.innerHTML=""; - } - this.getDivHTML=function() - { - var sHTML=""; - if(gbMac&&gbIE4) - sHTML+="
"; - else if(gbIE5) - sHTML+="
"; - else if(gbIE4||gbWindows) - sHTML+="
"; - else - //sHTML+="
"; - sHTML+="
"; - sHTML+="
"; - return sHTML; - } -} - -function whComMan() -{ - this.sName=""; - this.maCom=new Array(); - this.addCom=function(sName,sComFile) - { - var owhCom=new whCom(sName,sComFile); - this.maCom[this.maCom.length]=owhCom; - } - this.init=function() - { - var sHTML=""; - for(var i=0;i0) - { - if(oMsg.oParam==1) - gsFirstPane="toc"; - else if(oMsg.oParam==2) - gsFirstPane="idx"; - else if(oMsg.oParam==3) - gsFirstPane="fts"; - else if(oMsg.oParam==4) - gsFirstPane="glo"; - } - else if(oMsg.oParam==0) - { - bHidePane=true; - } - } - goMan.init(); - if(gsProjName!="") - loadData2(gsProjName); - if (bHidePane) - { - gsFirstPane=""; - var oMsg1=new whMessage(WH_MSG_HIDEPANE, this, 1, null) - SendMessage(oMsg1); - } - else - { - if(gsFirstPane!="") - goMan.show(gsFirstPane); - else - goMan.showById(0); - } -} - -function setServerEnabled() -{ - gServerEnabled = true; -} - -function loadData2(strFile) -{ - if(gbXML) - loadDataXML(strFile); - else - loadData(strFile); -} - -function addProject(bPreferXML,sXMLName,sHTMLName) -{ - var bLoadXML=bPreferXML; - if(!gbIE4&&!gbNav6&&!gbOpera7) - return; - if(gbIE4&&!gbIE5) - bLoadXML=false; - if (gbIE5&&!gbMac) - bLoadXML=true; - if(gbIE55||gbNav6) - bLoadXML=true; - if(gbOpera7) - bLoadXML=false; - if(bLoadXML) - addProjectXML(sXMLName); - else - addProjectHTML(sHTMLName); -} - -function addProjectHTML(sName) -{ - gbXML=false; - gsProjName=sName; -} - -function addProjectXML(sName) -{ - gbXML=true; - gsProjName=sName; -} - -function window_MyBunload() -{ - goMan.unload(); - window_BUnload(); -} - -function putDataXML(xmlDoc,sdocPath) -{ - if(xmlDoc!=null) - { - var projectNode=xmlDoc.getElementsByTagName("project")[0]; - if(projectNode) - { - var aRProj=new Array(); - aRProj[0]=new Object(); - aRProj[0].sPPath=_getPath(sdocPath); - var sLangId=projectNode.getAttribute("langid"); - if(sLangId) - { - aRProj[0].sLangId=sLangId; - } - var sDPath=projectNode.getAttribute("datapath"); - if(sDPath) - { - if(sDPath.lastIndexOf("/")!=sDPath.length-1) - sDPath+="/"; - aRProj[0].sDPath=sDPath; - } - else - aRProj[0].sDPath=""; - aRProj[0].sToc=projectNode.getAttribute("toc"); - aRProj[0].sIdx=projectNode.getAttribute("index"); - aRProj[0].sFts=projectNode.getAttribute("fts"); - aRProj[0].sGlo=projectNode.getAttribute("glossary"); - var RmtProject=projectNode.getElementsByTagName("remote"); - var nCount=1; - for (var i=0;i 1 && document.body.clientHeight>1) - { - var oMsg = new whMessage(WH_MSG_RESIZEPANE, this, 1, null); - SendMessage(oMsg); - } - } -} - -function window_unload() -{ - UnRegisterListener2(this,WH_MSG_GETPROJINFO); - UnRegisterListener2(this,WH_MSG_SHOWTOC); - UnRegisterListener2(this,WH_MSG_SHOWIDX); - UnRegisterListener2(this,WH_MSG_SHOWFTS); - UnRegisterListener2(this,WH_MSG_SHOWGLO); - UnRegisterListener2(this,WH_MSG_GETPANEINFO); -} - -function onSendMessage(oMsg) -{ - if(oMsg) - { - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_GETPROJINFO) - { - if(gbReady) - { - var oProj=new Object(); - oProj.aProj=gaProj; - oProj.bXML=gbXML; - oMsg.oParam=oProj; - } - else - return false; - } - else if(nMsgId==WH_MSG_SHOWTOC) - { - if(goMan) - goMan.show("toc"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "toc"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_SHOWIDX) - { - if(goMan) - goMan.show("idx"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "idx"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_SHOWFTS) - { - if(goMan) - goMan.show("fts"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_SHOWGLO) - { - if(goMan) - goMan.show("glo"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "glo"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_GETPANEINFO) - { - oMsg.oParam=goMan.getCurrent(); - return false; - } - } - return true; -} - -if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy) -{ - RegisterListener2(this,WH_MSG_GETPROJINFO); - RegisterListener2(this,WH_MSG_SHOWTOC); - RegisterListener2(this,WH_MSG_SHOWIDX); - RegisterListener2(this,WH_MSG_SHOWFTS); - RegisterListener2(this,WH_MSG_SHOWGLO); - RegisterListener2(this,WH_MSG_GETPANEINFO); - - if((gbMac&&gbIE4)||(gbSunOS&&gbIE5)||gbOpera7) - { - window.onresize=window_resize; - } - else if(gbIE4) - { - window.onresize=window_resize2; - } - window.onload=window_OnLoad; - window.onbeforeunload=window_MyBunload; - window.onunload=window_unload; - gbWhPHost=true; -} -else - document.location.reload(); - diff --git a/doc/salome/gui/GUI/whproj.htm b/doc/salome/gui/GUI/whproj.htm deleted file mode 100755 index 821daea24..000000000 --- a/doc/salome/gui/GUI/whproj.htm +++ /dev/null @@ -1,24 +0,0 @@ - - -project description - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whproj.js b/doc/salome/gui/GUI/whproj.js deleted file mode 100755 index ae38fa994..000000000 --- a/doc/salome/gui/GUI/whproj.js +++ /dev/null @@ -1,85 +0,0 @@ -// WebHelp 5.10.001 -var gaProj=new Array(); - -gaProj[0]=new project(""); - -function setLangId(sLangId) -{ - gaProj[0].sLangId=sLangId; -} - -function setDataPath(sPath) -{ - if(sPath.length!=0) - { - if(sPath.lastIndexOf("/")!=sPath.length-1) - sPath+="/"; - gaProj[0].sDPath=sPath; - } - else - gaProj[0].sDPath=""; -} - -function addToc(sFile) -{ - gaProj[0].sToc=sFile; -} - -function addIdx(sFile) -{ - gaProj[0].sIdx=sFile; -} - -function addFts(sFile) -{ - gaProj[0].sFts=sFile; -} - -function addGlo(sFile) -{ - gaProj[0].sGlo=sFile; -} - -function addRemoteProject(sProjRelPath) -{ - if(sProjRelPath.lastIndexOf("/")!=sProjRelPath.length-1) - sProjRelPath+="/"; - gaProj[gaProj.length]=new project(sProjRelPath); -} - -function project(sPPath) -{ - this.sPPath=sPPath; - this.sLangId=""; - this.sDPath=""; - this.sToc=""; - this.sIdx=""; - this.sFts=""; - this.sGlo=""; -} - -window.onload=window_OnLoad; - -function window_OnLoad() -{ - gsName=document.location.href; - gsName=_replaceSlash(gsName); - var nPos=gsName.lastIndexOf("/"); - if(nPos!=-1) - gaProj[0].sPPath=gsName.substring(0,nPos+1); - else - alert("Error in Loading navigation component. Please regenerate WebHelp."); - patchPath(gaProj); - if(parent&&parent!=this&& typeof(parent.putProjectInfo)=="function") - { - parent.putProjectInfo(gaProj); - } -} - -function patchPath(aProj) -{ - for(var i=1;i - - diff --git a/doc/salome/gui/GUI/whproxy.js b/doc/salome/gui/GUI/whproxy.js deleted file mode 100755 index d0ee29813..000000000 --- a/doc/salome/gui/GUI/whproxy.js +++ /dev/null @@ -1,74 +0,0 @@ -// WebHelp 5.10.001 -var gbInited=false; -var gWndStubPage=null; -function getStubPage() -{ - if(!gbInited) - { - gWndStubPage=getStubPage_inter(window); - gbInited=true; - } - return gWndStubPage; -} - -function getStubPage_inter(wCurrent) -{ - if(null==wCurrent.parent||wCurrent.parent==wCurrent) - return null; - - if(typeof(wCurrent.parent.whname)=="string"&&"wh_stub"==wCurrent.parent.whname) - return wCurrent.parent; - else - if(wCurrent.parent.frames.length!=0&&wCurrent.parent!=wCurrent) - return getStubPage_inter(wCurrent.parent); - else - return null; -} - -function RegisterListener(framename,nMessageId) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this) - return wSP.RegisterListener(framename,nMessageId); - else - return false; -} - -function RegisterListener2(oframe,nMessageId) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this) - return wSP.RegisterListener2(oframe,nMessageId); - else - return false; -} - -function UnRegisterListener2(oframe,nMessageId) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this&&wSP.UnRegisterListener2) - return wSP.UnRegisterListener2(oframe,nMessageId); - else - return false; -} - -function SendMessage(oMessage) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this&&wSP.SendMessage) - return wSP.SendMessage(oMessage); - else - return false; -} - -var gbWhProxy=true; - -var gbPreview=false; -gbPreview=false; -if (gbPreview) - document.oncontextmenu=contextMenu; - -function contextMenu() -{ - return false; -} diff --git a/doc/salome/gui/GUI/whres.xml b/doc/salome/gui/GUI/whres.xml deleted file mode 100755 index 89ee8b328..000000000 --- a/doc/salome/gui/GUI/whres.xml +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - </fonts> - <button normal="" hover="" /> - <editwith value="28" /> - </form> - <background color="" img="" /> - <fonts> - <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" /> - <empty name="Arial" size="9pt" color="#666666" style="normal" weight="normal" decoration="none" /> - </fonts> - <activebackgroundcolor attr="#cccccc" /> - <margin attr="0pt" /> - <indent attr="9pt" /> - </index> - <fts> - <form> - <fonts> - <title name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - </fonts> - <button normal="" hover="" /> - <editwith value="28" /> - </form> - <background color="" img="" /> - <fonts> - <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" /> - <error name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - </fonts> - <activebackgroundcolor attr="#cccccc" /> - <margin attr="0pt" /> - <indent attr="9pt" /> - </fts> - <glossary> - <background color="" img="" /> - <fonts> - <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" /> - </fonts> - <activebackgroundcolor attr="#cccccc" /> - <margin attr="0pt" /> - <indent attr="9pt" /> - </glossary> - </paneskin> -</resource> \ No newline at end of file diff --git a/doc/salome/gui/GUI/whskin_blank.htm b/doc/salome/gui/GUI/whskin_blank.htm deleted file mode 100755 index 43439a8c7..000000000 --- a/doc/salome/gui/GUI/whskin_blank.htm +++ /dev/null @@ -1,10 +0,0 @@ -<html> -<head> -<title>Blank Page - - - - - - - diff --git a/doc/salome/gui/GUI/whskin_homepage.htm b/doc/salome/gui/GUI/whskin_homepage.htm deleted file mode 100755 index 774d93c9a..000000000 --- a/doc/salome/gui/GUI/whskin_homepage.htm +++ /dev/null @@ -1,180 +0,0 @@ - - -GUI Module Reference Manual - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whskin_info.htm b/doc/salome/gui/GUI/whskin_info.htm deleted file mode 100755 index 65b15aa27..000000000 --- a/doc/salome/gui/GUI/whskin_info.htm +++ /dev/null @@ -1,20 +0,0 @@ - - -WebHelp 5.50 - - - - -

WebHelp 5.50 System Info

- - - - - - - - - -
Start Page index.htm
Skin Name
Generating Time 12:34 06/02/2006
Language ID 1033
Compile Script webhelp5_compile_script.xml
Compile Build Version 13.10.606
Product Name WebHelp 5.50
Authoring Tool Name RoboHelp X5
- - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whskin_pickup.htm b/doc/salome/gui/GUI/whskin_pickup.htm deleted file mode 100755 index 816fc7058..000000000 --- a/doc/salome/gui/GUI/whskin_pickup.htm +++ /dev/null @@ -1,229 +0,0 @@ - - -Select a Topic                                                                                    - - - - - - -

Select a topic, then click Display

-
-
-
- - - -
- - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whskin_tw.htm b/doc/salome/gui/GUI/whskin_tw.htm deleted file mode 100755 index 69737fa1e..000000000 --- a/doc/salome/gui/GUI/whskin_tw.htm +++ /dev/null @@ -1,63 +0,0 @@ - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whstart.js b/doc/salome/gui/GUI/whstart.js deleted file mode 100755 index ec5af6fdd..000000000 --- a/doc/salome/gui/GUI/whstart.js +++ /dev/null @@ -1,432 +0,0 @@ -// WebHelp 5.10.003 -RegisterListener2(this, WH_MSG_GETSTARTFRAME); -RegisterListener2(this, WH_MSG_GETDEFAULTTOPIC); -RegisterListener2(this, WH_MSG_MINIBARORDER); -RegisterListener2(this, WH_MSG_TOOLBARORDER); -RegisterListener2(this, WH_MSG_ISSEARCHSUPPORT); -RegisterListener2(this, WH_MSG_ISSYNCSSUPPORT); -RegisterListener2(this, WH_MSG_ISAVENUESUPPORT); -RegisterListener2(this, WH_MSG_GETPANETYPE); -RegisterListener2(this, WH_MSG_GETPANES); -RegisterListener2(this, WH_MSG_RELOADNS6); -RegisterListener2(this, WH_MSG_GETCMD); -RegisterListener2(this, WH_MSG_GETPANE); -RegisterListener2(this, WH_MSG_GETDEFPANE); - -if (gbNav6) -{ - var gnReload=0; - setTimeout("delayReload();",5000); -} - -function delayReload() -{ - if (!(this.cMRServer && cMRServer.m_strVersion)) - { - if(gnReload!=2) - { - if(nViewFrameType&&nViewFrameType==1) - document.location=document.location; - } - } -} - -var gsToolbarOrder = ""; -var gsMinibarOrder = ""; - -var gsTopic = "kernel/introduction.htm"; -var PANE_OPT_SEARCH = 1; -var PANE_OPT_BROWSESEQ = 2; -var gnOpts=-1; -var gnCmd=-1; -var gnPans=2; -var gsBtns="invalid"; -var gsDefaultBtn="invalid"; -var gbHasTitle=false; - -if (location.hash.length > 1) -{ - var sParam = location.hash; - if (sParam.indexOf("#<") == 0) - { - document.location = "whcsh_home.htm#" + sParam.substring(2); - } - else if (sParam.indexOf("#>>") == 0) - { - parseParam(sParam.substring(3)); - sParam = "#" + gsTopic + sParam.substring(1); - } - else - { - var nPos = sParam.indexOf(">>"); - if (nPos>1) - { - gsTopic = sParam.substring(1, nPos); - parseParam(sParam.substring(nPos+2)); - } - else - gsTopic = sParam.substring(1); - } - if (gnPans == 1 && gsTopic) - { - var strURL=location.href; - if (location.hash) - { - var nPos=location.href.indexOf(location.hash); - strURL=strURL.substring(0, nPos); - } - if (gbHasTitle) - document.location=_getPath(strURL)+ "whskin_tw.htm" + sParam; - else - document.location=_getPath(strURL)+ gsTopic; - } -} - -function parseParam(sParam) -{ - if (sParam) - { - var nBPos=0; - do - { - var nPos=sParam.indexOf(">>", nBPos); - if (nPos!=-1) - { - if (nPos>0) - { - var sPart=sParam.substring(nBPos, nPos); - parsePart(sPart); - } - nBPos = nPos + 2; - } - else - { - var sPart=sParam.substring(nBPos); - parsePart(sPart); - break; - } - } while(nBPos < sParam.length); - } -} - -function parsePart(sPart) -{ - if(sPart.toLowerCase().indexOf("cmd=")==0) - { - gnCmd=parseInt(sPart.substring(4)); - } - else if(sPart.toLowerCase().indexOf("cap=")==0) - { - document.title=_browserStringToText(sPart.substring(4)); - gbHasTitle=true; - } - else if(sPart.toLowerCase().indexOf("pan=")==0) - { - gnPans=parseInt(sPart.substring(4)); - } - else if(sPart.toLowerCase().indexOf("pot=")==0) - { - gnOpts=parseInt(sPart.substring(4)); - } - else if(sPart.toLowerCase().indexOf("pbs=")==0) - { - var sRawBtns = sPart.substring(4); - var aBtns = sRawBtns.split("|"); - for (var i=0;i0) - { - frame=getframehandle(frames[i].frames,framename); - if(null!=frame) - return frame; - } - } - return frame; -} - -function AddToArray(arr,obj) -{ - var bFound=false; - for(var i=0;ii) - return gArrayCompoentsArray[i]; - else - return null; - } - } - return null; -} - -function CreateComponentsArray(nMessageId) -{ - var len=gArrayRegistedMessage.length; - gArrayRegistedMessage[len]=nMessageId; - gArrayCompoentsArray[len]=new Array(); - return gArrayCompoentsArray[len]; -} - -function listener(sName,oWindow) -{ - this.sName=sName; - this.oWindow=oWindow; -} - -function RegisterListener(windowName,nMessageId) -{ - var arrayComponents=GetComponentsArray(nMessageId); - if(arrayComponents==null) - arrayComponents=CreateComponentsArray(nMessageId); - - if(arrayComponents!=null) - { - for (var i=0;i0){ - for(var i=0;i - -Table of contents - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whthost.js b/doc/salome/gui/GUI/whthost.js deleted file mode 100755 index 54ddc9aac..000000000 --- a/doc/salome/gui/GUI/whthost.js +++ /dev/null @@ -1,1504 +0,0 @@ -// WebHelp 5.10.007 -var gaHSLoad=new Array(); -var gnMinIdx=0; -var gnInsIdx=-1; -var gsLoadingDivID="LoadingDiv"; -var gsLoadingMsg="Loading, click here to cancel..."; -var gaProj=null; -var gaTocs=new Array(); -var goChunk=null; -var gbReady=false; -var gbToc=false; -var gbXML=false; -var gaRoot=new Array(); -var gnCC=-1; -var gsTP=""; -var gaBTPs=""; -var gsCTPath=""; -var gnLT=-1; -var gsPathSplit="\n"; -var gsBgColor="#ffffff"; -var gsBgImage=""; -var goFont=null; -var goHFont=null; - -var gsMargin="0pt"; -var gsIndent="15pt"; -var gsABgColor="#cccccc"; - -var giBookClose=""; -var giBookOpen=""; -var giBookItem=""; -var giURLItem=""; -var giNewBookClose=""; -var giNewBookOpen=""; -var giNewBookItem=""; -var giNewURLItem=""; -var gnImages=0; -var gnLoadedImages=0; -var gaImgs=new Array(); -var gbLoadData=false; -var gobj=null; -var gaTocsNs61Fix=null; -var gbWhTHost=false; -var gBookItems=new Array(); -var gInSync=false; -var gbLData=false; -var gbNeedFillStub=false; -var gbLoadToc=false; - -function chunkInfoQueue() -{ - this.aContent=new Array(); - this.inQueue=function(cInfo) - { - this.aContent[this.aContent.length]=cInfo; - } - this.deQueue=function() - { - var cInfo=null; - if(this.aContent.length>0) - { - cInfo=this.aContent[0]; - for(var i=1;i0) - { - var nCIdx=0; - do { - nCIdx++; - var i=nIdx+nCIdx; - var nItemType=getItemType(i); - if(nItemType==1){ - if (!isBookEmpty(i)) - return false; - } - else if(nItemType==4){ - var sSrc=getRefURL(i); - var nProj=getProject(sSrc); - if(nProj!=-1){ - sSrc=gaRoot[nProj].sToc; - if(sSrc) - return false; - } - } - else if(nItemType==2||nItemType==16||nItemType==8) - return false; - } while(nCIdx

\"Book\""; - sHTML+=" "+sName+"

"; - var sURL=_textToHtml_nonbsp(getItemURL(nIdx)); - if(sURL!="") - addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL); - sHTML+="
"; - } - else - sHTML=""; - } - else - { - sHTML+="stub>
"; - gbNeedFillStub=true; - setTimeout("fillStub("+nIdx+","+bLocalProject+");",100); - } - return sHTML; -} - -function checkFillStub() -{ - if(!gbLData) - { - if(gchunkRequestQueue.length()>0) - { - var cInfo=gchunkRequestQueue.deQueue(); - if(cInfo) - { - fillStub(cInfo.nIdx,cInfo.bLocal); - return; - } - } - } - if(gbNeedFillStub) - { - gbNeedFillStub=false; - setTimeout("syncInit()",1); - } -} - -function fillStub(nIdx,bLocalProject) -{ - if(!gbLData) - { - gbLData=true; - var sObj=getElement(getPBId(nIdx)); - if(sObj!=null) - { - tocExpandHelpSet(nIdx,bLocalProject); - gbNeedFillStub=false; - setTimeout("syncInit()",1); - } - else - setTimeout("fillStub("+nIdx+","+bLocalProject+");",100); - } - else - gchunkRequestQueue.inQueue(new chunkInfo(nIdx,bLocalProject)); -} - -function getBookId(nIdx){return "B_"+nIdx;} - -function getItemId(nIdx){return "I_"+nIdx;} - -function markBook(nIdx) -{ - var obj=getElement(getItemId(nIdx)); - if(obj==null) - obj=getElement(getBookId(nIdx)); - if(gbNav6) - { - gobj=obj; - setTimeout("delayMarkObj();",1); - } - else - markObj(obj); -} - -function delayMarkObj() -{ - if(gobj) - { - markObj(gobj); - gobj=null; - } -} - -function markObj(obj) -{ - if(obj!=null) - { - HighLightElement(obj,gsABgColor,"transparent"); - var sPath=calTocPath(obj); - if(gsCTPath!=sPath) - gsCTPath=sPath; - } -} - -function markItem(nIdx) -{ - var obj=getElement(getItemId(nIdx)); - if(gbNav6) - { - gobj=obj; - setTimeout("delayMarkObj();",1); - } - else - markObj(getElement(getItemId(nIdx))); -} - -function calTocPath(obj) -{ - var sPath=getInnerText2(obj); - var pObj=getParentNode(obj); - do - { - while(pObj!=null&&!isCBId(pObj.id)) pObj=getParentNode(pObj); - if(pObj!=null) - { - var nId=getIdByCBId(pObj.id); - var sObj=getElement(getPBId(nId)); - if(sObj!=null) - { - var objs=getItemsByBook(sObj); - for(var i=0;i\""+sAltString+"\" "+sName+"

"; - return sHTML; -} - -function writeBookItems(nIdx,num) -{ - var sHTML=""; - if(num>0){ - var nCIdx=0; - do{ - nCIdx++; - var i=nIdx+nCIdx; - var nItemType=getItemType(i); - if(nItemType==1||nItemType==4||nItemType==8){ - sHTML+=writeBook(i); - nCIdx+=getItemContentsNum(i); - } - else if(nItemType==2||nItemType==16){ - sHTML+=writeAnItem(i); - } - } - while(nCIdx"+gsLoadingMsg+"
"; -} - -function getItemName(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - return oChunk.aTocs[nIdx-oChunk.nMI].sItemName; - else - return null; -} - -function getItemContentsNum(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - return oChunk.aTocs[nIdx-oChunk.nMI].nContents; - else - return null; -} - -function getItemType(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - return oChunk.aTocs[nIdx-oChunk.nMI].nType; - else - return 0; -} - -function getItemURL(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sItemURL; - if(!(sPath==null||sPath=="")) - { - return _getFullPath(oChunk.sPPath,sPath); - } - } - return ""; -} - -function getRefURL(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL; - if(!(sPath==null||sPath=="")) - { - return _getFullPath(oChunk.sPPath,sPath) - } - } - return ""; -} - -function getTopicTarget(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sTarget)!="undefined") - return oChunk.aTocs[nIdx-oChunk.nMI].sTarget; - } - return ""; -} - -function getItemIcon(nIdx,nIconIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sIconRef)!="undefined") - { - var sIconRef=oChunk.aTocs[nIdx-oChunk.nMI].sIconRef; - var nIndex=sIconRef.indexOf(";"); - while(nIconIdx-->0&&nIndex!=-1) - { - sIconRef=sIconRef.substring(nIndex+1); - nIndex=sIconRef.indexOf(";"); - } - if(nIconIdx<0) - { - if(nIndex!=-1) - sIconRef=sIconRef.substring(0,nIndex); - return _getFullPath(oChunk.sPPath,sIconRef) - } - } - } - return ""; -} - -function TocWriteClassStyle() -{ - var sStyle=""; - document.write(sStyle); -} - -function TocWriteFixedWidth(bBegin,nWidth) -{ - if((gbIE4)&&(gbMac)&&(!gbIE5)){ - if(bBegin) - document.write("
"); - else - document.write("
"); - } -} - -function TocInitPage() -{ - var tempColl=getItemsByBook(document.body); - if(tempColl.length>0) - tempColl[0].focus(); -} - -function getItemsFromObj(obj) -{ - var aAnchor=new Array(); - var tempColl=getChildrenByTag(obj,"P"); - if(tempColl&&tempColl.length>0) - { - var anobr=new Array(); - for(var i=0;i0) - for(var j=0;j0) - for(var u=0;u0) - for(var j=0;jdocument.body.clientHeight){ - nNewScroll=nTop-20; - } - } - document.body.scrollTop=nNewScroll; -} - -function TocExpand(nId,bChangeImg,bForceOpen) -{ - var oDiv=getElement(getCBId(nId)); - if(oDiv==null) return null; - - var whichIm=document.images[getBId(nId)]; - if((oDiv.style.display!="block")||bForceOpen){ - oDiv.style.display="block"; - if(bChangeImg){ - var sPath=getPath(whichIm.src); - sPath=_getFullPath(sPath,getBookImage(nId,false)); - whichIm.src=sPath; - } - }else{ - oDiv.style.display="none"; - if(bChangeImg){ - var sPath=getPath(whichIm.src); - sPath=_getFullPath(sPath,getBookImage(nId,true)); - whichIm.src=sPath; - } - if(gbMac&&gbIE5){ - this.parent.document.getElementById("tocIFrame").style.width="101%"; - this.parent.document.getElementById("tocIFrame").style.width="100%"; - } - } - return oDiv; -} - -function getChunkId(n) -{ - var nCan=-1; - for(var i=0;i=gaTocs[nCan].nMI) - nCan=i; - } - if(nCan!=-1) - return nCan; - else - return -1; -} - -function getChunk(n) -{ - if(gnCC!=-1&&gaTocs[gnCC].nMI<=n&&(gnCC==gaTocs.length-1|| - gaTocs[gnCC+1].nMI>n)) - { - return gaTocs[gnCC]; - } - else{ - gnCC=getChunkId(n); - if(gnCC!=-1) - return gaTocs[gnCC]; - else - return null; - } -} - -function getBookImage(nIdx,bClosed) -{ - var nIdx=bClosed?0:1; - var sIcon=getItemIcon(nIdx,nIdx); - if(sIcon=="") - if(bClosed) - sIcon=giBookClose; - else - sIcon=giBookOpen; - return _getFullPath(gaProj[0].sPPath,sIcon); -} - -function getItemImage(nIdx,bRemote) -{ - var sIcon=getItemIcon(nIdx,0); - if(sIcon=="") - if(bRemote) - sIcon=giURLItem; - else - sIcon=giBookItem; - return _getFullPath(gaProj[0].sPPath,sIcon); -} - -function getInnerText2(obj) -{ - var sText=getInnerText(obj); - if(sText.length>0&&!gbOpera7) - sText=sText.substring(1); - return sText; -} - -function expandToc(oObj,sRest,aIdList) -{ - var len=aIdList.length; - var nPos=sRest.indexOf(gsPathSplit); - if(nPos!=-1) - { - sPart=sRest.substring(0,nPos); - sRest=sRest.substring(nPos+1); - } - else - { - sPart=sRest; - var aTagAs=getItemsByBook(oObj); - for(var s=0;s0) - { - if(gbNav6) - { - var sCommand=obj[0].getAttribute("onClick"); - var nCommand=sCommand.indexOf(";"); - sCommand=sCommand.substring(0,nCommand); - setTimeout(sCommand,1); - } - else - obj[0].click(); - } - return -1; - } - var nRet=expandToc(oCObj,sRest,aIdList); - if(nRet) - return nRet; - } - } - aIdList.length=len; - return 0; -} - -function getIdByPBId(sPId) -{ - return parseInt(sPId.substring(2,sPId.length-1)); -} - -function getIdByCBId(sCId) -{ - return parseInt(sCId.substring(2,sCId.length-1)); -} - -function isPBId(sId) -{ - return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1); -} - -function isCBId(sId) -{ - return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1); -} - -function getBId(nIdx) -{ - return "B_"+nIdx; -} - -function getPBId(nIdx) -{ - return getBId(nIdx)+"P"; -} - -function getCBId(nIdx) -{ - return getBId(nIdx)+"C"; -} - -function getClosestTocPath(aPaths) -{ - var nMaxSimilarity=0; - var nThatIndex=-1; - var sPath=null; - if(aPaths.length==0) return sPath; - for(var i=0;inMaxSimilarity) - { - nMaxSimilarity=nSimilarity; - nThatIndex=i; - } - } - if(nThatIndex!=-1) - sPath=aPaths[nThatIndex]; - else - sPath=aPaths[0]; - return sPath; -} - -function comparePath(sPath1,sPath2) -{ - var nMaxSimilarity=0; - var nStartPos1=0; - var nPos1=-1; - var nStartPos2=0; - var nPos2=-1; - do{ - var sCheck1=null; - var sCheck2=null; - nPos1=sPath1.indexOf(gsPathSplit,nStartPos1); - if(nPos1!=-1) - { - sCheck1=sPath1.substring(nStartPos1,nPos1); - nStartPos1=nPos1+1; - } - else - { - sCheck1=sPath1.substring(nStartPos1); - nStartPos1=-1; - } - nPos2=sPath2.indexOf(gsPathSplit,nStartPos2); - if(nPos1!=-1) - { - sCheck2=sPath2.substring(nStartPos2,nPos2); - nStartPos2=nPos2+1; - } - else - { - sCheck2=sPath2.substring(nStartPos2); - nStartPos2=-1; - } - if(sCheck1==sCheck2) - nMaxSimilarity++; - else - break; - }while(nStartPos1!=-1&&nStartPos2!=-1); - return nMaxSimilarity; -} - -function getTocPaths(oTopicParam) -{ - var aRelTocPaths=oTopicParam.aPaths; - var aPaths=new Array(); - for(var i=0;i0) - { - for(var i=0;i0) - { - document.body.background=gsBgImage; - } - if(gsBgColor&&gsBgColor.length>0) - { - document.body.bgColor=gsBgColor; - } - loadToc(); - var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null) - SendMessage(oMsg); -} - -function loadImages() -{ - if(giBookClose) - { - gaImgs[gnImages]=giBookClose; - gnImages++; - } - if(giBookOpen) - { - gaImgs[gnImages]=giBookOpen; - gnImages++; - } - if(giBookItem) - { - gaImgs[gnImages]=giBookItem; - gnImages++; - } - if(giURLItem) - { - gaImgs[gnImages]=giURLItem; - gnImages++; - } - if(giNewBookClose) - { - gaImgs[gnImages]=giNewBookClose; - gnImages++; - } - if(giNewBookOpen) - { - gaImgs[gnImages]=giNewBookOpen; - gnImages++; - } - if(giNewBookItem) - { - gaImgs[gnImages]=giNewBookItem; - gnImages++; - } - if(giNewURLItem) - { - gaImgs[gnImages]=giNewURLItem; - gnImages++; - } - if(gnImages>0) - { - setTimeout("loadDataAfter();",1000); - loadImage(gaImgs[0]); - } - else - loadDataAfter(); -} - -function loadImage(sURL) -{ - var oImg=new Image(); - oImg.onload=checkImageLoading; - oImg.onerror=errorImageLoading; - oImg.src=_getFullPath(gaProj[0].sPPath,sURL); -} - -function loadDataAfter() -{ - if(!gbLoadData) - { - gbLoadData=true; - loadTData(); - } -} - -function errorImageLoading() -{ - gnLoadedImages++; - if(gnImages==gnLoadedImages) - loadDataAfter(); - else - loadImage(gaImgs[gnLoadedImages]); -} - -function checkImageLoading() -{ - gnLoadedImages++; - if(gnImages==gnLoadedImages) - loadDataAfter(); - else - loadImage(gaImgs[gnLoadedImages]); -} - -function window_unload() -{ - UnRegisterListener2(this,WH_MSG_PROJECTREADY); - UnRegisterListener2(this,WH_MSG_SYNCTOC); - UnRegisterListener2(this,WH_MSG_SHOWTOC); -} - -function onSendMessage(oMsg) -{ - if(oMsg) - { - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_PROJECTREADY) - { - loadToc(); - } - else if(nMsgId==WH_MSG_SYNCTOC) - { - if(gbReady) - { - syncWithPaths(oMsg.oParam); - } - } - else if(nMsgId==WH_MSG_SHOWTOC) - { - if(!gbNav6) - document.body.focus(); - } - } - return true; -} - -if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy) -{ - RegisterListener2(this,WH_MSG_PROJECTREADY); - RegisterListener2(this,WH_MSG_SYNCTOC); - RegisterListener2(this,WH_MSG_SHOWTOC); - goFont=new whFont("Verdana","8pt","#000000","normal","normal","none"); - goHFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline"); - - window.onload=window_OnLoad; - window.onbeforeunload=window_BUnload; - window.onunload=window_unload; - gbWhTHost=true; -} -else - document.location.reload(); \ No newline at end of file diff --git a/doc/salome/gui/GUI/whtopic.js b/doc/salome/gui/GUI/whtopic.js deleted file mode 100755 index 6cd121195..000000000 --- a/doc/salome/gui/GUI/whtopic.js +++ /dev/null @@ -1,725 +0,0 @@ -// WebHelp 5.10.005 -var gsPPath=""; -var gaPaths=new Array(); -var gaAvenues=new Array(); - -var goFrame=null; -var gsStartPage=""; -var gsRelCurPagePath=""; -var gsSearchFormHref=""; -var gnTopicOnly=-1; -var gnOutmostTopic=-1; - -var BTN_TEXT=1; -var BTN_IMG=2; - -var goSync=null; - -var goShow=null; -var goHide=null; - -var goPrev=null; -var goNext=null; -var gnForm=0; -var goShowNav=null; -var goHideNav=null; - -var goWebSearch=null; - -var gsBtnStyle=""; -var gaButtons=new Array(); -var gaTypes=new Array(); -var whtopic_foldUnload=null; -var gbWhTopic=false; -var gbCheckSync=false; -var gbSyncEnabled=false; - -function setButtonFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) -{ - var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); - gsBtnStyle+=".whtbtn"+sType+"{"+getFontStyle(vFont)+"}"; -} - -function writeBtnStyle() -{ - if(gaButtons.length>0) - { - if(gsBtnStyle.length>0) - { - var sStyle=""; - document.write(sStyle); - } - } -} - -function button(sText,nWidth,nHeight) -{ - this.sText=sText; - this.nWidth=nWidth; - this.nHeight=nHeight; - - this.aImgs=new Array(); - var i=0; - while(button.arguments.length>i+3) - { - this.aImgs[i]=button.arguments[3+i]; - i++; - } -} - -//project info -function setRelStartPage(sPath) -{ - if(gsPPath.length==0) - { - gsPPath=_getFullPath(_getPath(document.location.href),_getPath(sPath)); - gsStartPage=_getFullPath(_getPath(document.location.href),sPath); - gsRelCurPagePath=_getRelativeFileName(gsStartPage,document.location.href); - } -} - -function getImage(oImage,sType) -{ - var sImg=""; - if(oImage&&oImage.aImgs&&(oImage.aImgs.length>0)) - { - sImg+="\""+sType+"\"0) - sImg+=" width="+oImage.nWidth; - if(oImage.nHeight>0) - sImg+=" height="+oImage.nHeight; - sImg+=" border=0>"; - } - return sImg; -} - -function addTocInfo(sTocPath) -{ - gaPaths[gaPaths.length]=sTocPath; -} - -function addAvenueInfo(sName,sPrev,sNext) -{ - gaAvenues[gaAvenues.length]=new avenueInfo(sName,sPrev,sNext); -} - -function addButton(sType,nStyle,sText,sHref,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sImg1,sImg2,sImg3) -{ - var sButton=""; - var nBtn=gaButtons.length; - if(sType=="prev") - { - if(canGo(false)) - { - var sTitle="Previous Topic"; - goPrev=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goPrev.sText; - else - sButton+=getImage(goPrev,sTitle); - sButton+=""; - } - } - else if(sType=="next") - { - if(canGo(true)) - { - var sTitle="Next Topic"; - goNext=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goNext.sText; - else - sButton+=getImage(goNext,sTitle); - sButton+=""; - } - } - else if(sType=="show") - { - if(isTopicOnly()&&(!gbOpera6||gbOpera7)) - { - var sTitle="Show Navigation Component"; - goShow=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goShow.sText; - else - sButton+=getImage(goShow,sTitle); - sButton+=""; - } - } - else if(sType=="hide") - { - if(!isTopicOnly()&&!gbOpera6) - { - var sTitle="Hide Navigation Component"; - goHide=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goHide.sText; - else - sButton+=getImage(goHide,sTitle); - sButton+=""; - } - } - else if(sType=="shownav") - { - if(isShowHideEnable()) - { - var sTitle="Show Navigation Component"; - goShowNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goShowNav.sText; - else - sButton+=getImage(goShowNav,sTitle); - sButton+=""; - } - } - else if(sType=="hidenav") - { - if(isShowHideEnable()) - { - var sTitle="Hide Navigation Component"; - goHideNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goHideNav.sText; - else - sButton+=getImage(goHideNav,sTitle); - sButton+=""; - } - } - else if(sType=="synctoc") - { - if(gaPaths.length>0) - { - var sTitle="Sync TOC"; - goSync=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goSync.sText; - else - sButton+=getImage(goSync,sTitle); - sButton+=""; - } - } - else if(sType=="websearch") - { - if(gsSearchFormHref.length>0) - { - var sTitle="WebSearch"; - goWebSearch=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goWebSearch.sText; - else - sButton+=getImage(goWebSearch,sTitle); - sButton+=""; - } - } - else if(sType=="searchform") - { - gaButtons[nBtn]="NeedSearchForm"; - gaTypes[nBtn]=sType; - } - if(sButton.length!=0) - { - if(nStyle==BTN_TEXT) - sButton+=" "; - gaButtons[nBtn]=""+sButton+""; - gaTypes[nBtn]=sType; - } -} - -function isSyncEnabled() -{ - if(!gbCheckSync) - { - var oMsg=new whMessage(WH_MSG_ISSYNCSSUPPORT,this,1,null); - if(SendMessage(oMsg)) - { - gbSyncEnabled=oMsg.oParam; - } - gbCheckSync=true; - } - return gbSyncEnabled; -} - -function isInPopup() -{ - return (window.name.indexOf("BSSCPopup")!=-1); -} - -function getIntopicBar(sAlign) -{ - var sHTML=""; - if(gaButtons.length>0) - { - sHTML+="
"; - - sHTML+=""; - for(var i=0;i0) - { - var sHTML=""; - if(nAligns!=0) - { - sHTML+="
" - if(nAligns&1) - sHTML+=""; - if(nAligns&2) - sHTML+=""; - if(nAligns&4) - sHTML+=""; - sHTML+="
"+getIntopicBar("left")+""+getIntopicBar("center")+""+getIntopicBar("right")+"
"; - document.write(sHTML); - } - } -} - -function sendAveInfoOut() -{ - if(!isInPopup()) - setTimeout("sendAveInfo();",100); -} - -function sendAveInfo() -{ - var oMsg=new whMessage(WH_MSG_AVENUEINFO,this,1,gaAvenues); - SendMessage(oMsg); -} - - -function onNext() -{ - var oMsg=new whMessage(WH_MSG_NEXT,this,1,null); - SendMessage(oMsg); -} - -function onPrev() -{ - var oMsg=new whMessage(WH_MSG_PREV,this,1,null); - SendMessage(oMsg); -} - -function createSyncInfo() -{ - var oParam=new Object(); - if(gsPPath.length==0) - gsPPath=_getPath(document.location.href); - oParam.sPPath=gsPPath; - oParam.sTPath=document.location.href; - oParam.aPaths=gaPaths; - return oParam; -} - -function syncWithShow() -{ - if(isTopicOnly()) - show(); - else - { - sync(); - showTocPane(); - } -} - -function showTocPane() -{ - var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null); - SendMessage(oMsg); -} - -function sendSyncInfo() -{ - if(!isInPopup()) - { - var oParam=null; - if(gaPaths.length>0) - { - oParam=createSyncInfo(); - } - var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,oParam); - SendMessage(oMsg); - } -} - -function sendInvalidSyncInfo() -{ - if(!isInPopup()) - { - var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,null); - SendMessage(oMsg); - } -} - -function enableWebSearch(bEnable) -{ - if(!isInPopup()) - { - var oMsg=new whMessage(WH_MSG_ENABLEWEBSEARCH,this,1,bEnable); - SendMessage(oMsg); - } -} - -function autoSync(nSync) -{ - if(nSync==0) return; - if(isInPopup()) return; - if(isOutMostTopic()) - sync(); -} - -function isOutMostTopic() -{ - if(gnOutmostTopic==-1) - { - var oMessage=new whMessage(WH_MSG_ISINFRAMESET,this,1,null); - if(SendMessage(oMessage)) - gnOutmostTopic=0; - else - gnOutmostTopic=1; - } - return (gnOutmostTopic==1); -} - -function sync() -{ - if(gaPaths.length>0) - { - var oParam=createSyncInfo(); - var oMessage=new whMessage(WH_MSG_SYNCTOC,this,1,oParam); - SendMessage(oMessage); - } -} - - -function avenueInfo(sName,sPrev,sNext) -{ - this.sName=sName; - this.sPrev=sPrev; - this.sNext=sNext; -} - -function getCurrentAvenue() -{ - var oParam=new Object(); - oParam.sAvenue=null; - var oMessage=new whMessage(WH_MSG_GETCURRENTAVENUE,this,1,oParam); - SendMessage(oMessage); - return oParam.sAvenue; -} - -function unRegisterListener() -{ - sendInvalidSyncInfo(); - enableWebSearch(false); - if(whtopic_foldUnload) - whtopic_foldUnload(); -} - -function onSendMessage(oMsg) -{ - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_GETAVIAVENUES) - { - oMsg.oParam.aAvenues=gaAvenues; - return false; - } - else if(nMsgId==WH_MSG_GETTOCPATHS) - { - if(isOutMostTopic()) - { - oMsg.oParam.oTocInfo=createSyncInfo(); - return false; - } - else - return true; - } - else if(nMsgId==WH_MSG_NEXT) - { - goAvenue(true); - } - else if(nMsgId==WH_MSG_PREV) - { - goAvenue(false); - } - else if(nMsgId==WH_MSG_WEBSEARCH) - { - websearch(); - } - return true; -} - -function goAvenue(bNext) -{ - var sTopic=null; - var sAvenue=getCurrentAvenue(); - var nAvenue=-1; - if(sAvenue!=null&&sAvenue!="") - { - for(var i=0;i0&&bNext) - { - sTopic=gaAvenues[i].sNext; - break; - } - else if(gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext) - { - sTopic=gaAvenues[i].sPrev; - break; - } - } - } - - if(sTopic!=null&&sTopic!="") - { - if(gsPPath!=null&&gsPPath!="") - { - sFullTopicPath=_getFullPath(gsPPath,sTopic); - document.location=sFullTopicPath; - } - } -} - -function canGo(bNext) -{ - for(var i=0;i0&&bNext)|| - (gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext)) - return true; - } - return false; -} - -function show() -{ - if(gsStartPage!="") - window.location=gsStartPage+"#"+gsRelCurPagePath; -} - -function hide() -{ - if(goFrame!=null) - { - goFrame.location=window.location; - } -} - -function isTopicOnly() -{ - if(gnTopicOnly==-1) - { - var oParam=new Object(); - oParam.oFrame=null; - var oMsg=new whMessage(WH_MSG_GETSTARTFRAME,this,1,oParam); - if(SendMessage(oMsg)) - { - goFrame=oParam.oFrame; - gnTopicOnly=0; - } - else - gnTopicOnly=1; - } - if(gnTopicOnly==1) - return true; - else - return false; -} - -function websearch() -{ - if(gbNav4) - { - if(document.ehelpform) - document.ehelpform.submit(); - } - else - { - if(window.ehelpform) - window.ehelpform.submit(); - } -} - -function addSearchFormHref(sHref) -{ - gsSearchFormHref=sHref; - enableWebSearch(true); -} - -function searchB(nForm) -{ - var sValue=eval("document.searchForm"+nForm+".searchString.value"); - var oMsg=new whMessage(WH_MSG_SEARCHTHIS,this,1,sValue); - SendMessage(oMsg); -} - -function getSearchFormHTML() -{ - var sHTML=""; - gnForm++; - var sFormName="searchForm"+gnForm; - var sButton="" - sButton+=""; - if(""=="text") - { - sButton+=""; - } - else if(""=="image") - { - sButton+="" - sButton+=""; - } - sButton+=""; - sHTML=""+sButton+""; - return sHTML; -} - -function showHidePane(bShow) -{ - var oMsg=null; - if(bShow) - oMsg=new whMessage(WH_MSG_SHOWPANE,this,1,null); - else - oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null); - SendMessage(oMsg); -} - -function isShowHideEnable() -{ - if(gbIE4) - return true; - else - return false; -} - - -function PickupDialog_Invoke() -{ - if(!gbIE4||gbMac) - { - if(typeof(_PopupMenu_Invoke)=="function") - return _PopupMenu_Invoke(PickupDialog_Invoke.arguments); - } - else - { - if(PickupDialog_Invoke.arguments.length>2) - { - var sPickup="whskin_pickup.htm"; - var sPickupPath=gsPPath+sPickup; - if(gbIE4) - { - var sFrame=PickupDialog_Invoke.arguments[1]; - var aTopics=new Array(); - for(var i=2;i1) - { - var nWidth=300; - var nHeight=180; - var nScreenWidth=screen.width; - var nScreenHeight=screen.height; - var nLeft=(nScreenWidth-nWidth)/2; - var nTop=(nScreenHeight-nHeight)/2; - if(gbIE4) - { - var vRet=window.showModalDialog(sPickupPath,aTopics,"dialogHeight:"+nHeight+"px;dialogWidth:"+nWidth+"px;resizable:yes;status:no;scroll:no;help:no;center:yes;"); - if(vRet) - { - var sURL=vRet.m_url; - if(sFrame) - window.open(sURL,sFrame); - else - window.open(sURL,"_self"); - } - } - } - else if(aTopics.length==1) - { - var sURL=aTopics[0].m_sURL - if(sFrame) - window.open(sURL,sFrame); - else - window.open(sURL,"_self"); - } - } - } - } -} - -if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy) -{ - RegisterListener("bsscright",WH_MSG_GETAVIAVENUES); - RegisterListener("bsscright",WH_MSG_GETTOCPATHS); - RegisterListener("bsscright",WH_MSG_NEXT); - RegisterListener("bsscright",WH_MSG_PREV); - RegisterListener("bsscright",WH_MSG_WEBSEARCH); - if(gbMac&&gbIE4) - { - if(typeof(window.onunload)!="unknown") - if(window.onunload.toString!=unRegisterListener.toString) - whtopic_foldUnload=window.onunload; - } - else - { - if(window.onunload) - if(window.onunload.toString!=unRegisterListener.toString) - whtopic_foldUnload=window.onunload; - } - window.onunload=unRegisterListener; - setButtonFont("show","","","","","",""); -setButtonFont("hide","","","","","",""); - - gbWhTopic=true; -} -else - document.location.reload(); \ No newline at end of file diff --git a/doc/salome/gui/GUI/whutils.js b/doc/salome/gui/GUI/whutils.js deleted file mode 100755 index 85fae7e05..000000000 --- a/doc/salome/gui/GUI/whutils.js +++ /dev/null @@ -1,527 +0,0 @@ -// WebHelp 5.10.004 -var gsFileName=""; -var gsDivName=""; -var xmlDoc=null; -var sdocPath=null; -var gsInsertBeforeEndHTML=""; -var sReplaceStringsSrc=new Array(); -var gsDivName="dataDiv"; -var gnLoadDivNum=0; -sReplaceStringsSrc[0]="&"; -sReplaceStringsSrc[1]=">"; -sReplaceStringsSrc[2]="<"; -sReplaceStringsSrc[3]="""; -sReplaceStringsSrc[4]=String.fromCharCode(8364); -sReplaceStringsSrc[5]=" "; - -var sReplaceStringsDst=new Array(); -sReplaceStringsDst[0]="&"; -sReplaceStringsDst[1]=">"; -sReplaceStringsDst[2]="<"; -sReplaceStringsDst[3]="\""; -sReplaceStringsDst[4]=String.fromCharCode(128); -sReplaceStringsDst[5]=" "; -var goHighLighted=null; - -function _getRelativePath(strParentPath,strCurrentPath) -{ - if(_isAbsPath(strCurrentPath)) return _getPath(strCurrentPath); - strParentPath=_replaceSlash(strParentPath); - strParentPath=_getPath(strParentPath); - strCurrentPath=_replaceSlash(strCurrentPath); - strCurrentPath=_getPath(strCurrentPath); - for(var i=0;i0) - { - var nPosx=sPath.indexOf("/",nPos+2); - if(nPosx>0) - return sPath.substring(0,nPosx); - else - return sPath; - } - return sPath; -} - -function _getFullPath(sPath,sRelPath) -{ - if(_isAbsPath(sRelPath)) - return sRelPath; - else if(_isAbsPathToHost(sRelPath)) - return _getHost(sPath)+sRelPath; - else - { - var sFullPath=sPath; - var nPathPos=0; - while(nPathPos!=-1) - { - var nPathPos=sRelPath.indexOf("../"); - if(nPathPos!=-1) - { - sRelPath=sRelPath.substring(nPathPos+3); - sFullPath=sFullPath.substring(0,sFullPath.length-1); - var nPos2=sFullPath.lastIndexOf("/"); - if(nPos2!=-1) - sFullPath=sFullPath.substring(0,nPos2+1); - else - break; - } - } - sFullPath+=sRelPath; - return sFullPath; - } -} - -function _isAbsPath(strPath) -{ - var strUpper=strPath.toUpperCase(); - return (strUpper.indexOf(":")!=-1||strUpper.indexOf("\\\\")==0); -} - -function _replaceSlash(strURL) -{ - var re=new RegExp("\\\\","g"); - var strReplacedURL=strURL.replace(re,"/"); - return strReplacedURL; -} - -function _getPath(strURL) -{ - pathpos=strURL.lastIndexOf("/"); - if(pathpos>0) - return strURL.substring(0,pathpos+1); - else - return ""; -} - -function removeItemFromArray(oArray,i) -{ - if(oArray.length&&i>=0&&i=0&&i<=oArray.length) - { - var len=oArray.length; - for(var s=len;s>i;s--) - oArray[s]=oArray[s-1]; - oArray[i]=obj; - } -} - -function loadData(sFileName) -{ - var i=gnLoadDivNum; - var sName=gsDivName+gnLoadDivNum++; - loadData_2(sFileName,sName); -} - -function loadData_2(sFileName,sDivName) -{ - if(!getElement(sDivName)) - { - if(!insertDataDiv(sDivName)) - { - gsFileName=sFileName; - gsDivName=sDivName; - return; - } - } - var sHTML=""; - if(gbMac) - sHTML+=""; - else - sHTML+=""; - - var oDivCon=getElement(sDivName); - if(oDivCon) - { - if(gbNav6) - { - if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0) - { - oDivCon.getElementsByTagName("iFrame")[0].src=sFileName; - } - else - oDivCon.innerHTML=sHTML; - } - else - oDivCon.innerHTML=sHTML; - } -} - -function loadDataXML(sFileName) -{ - var sCurrentDocPath=_getPath(document.location.href); - sdocPath=_getFullPath(sCurrentDocPath,sFileName); - if(gbIE5) - { - xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async=true; - xmlDoc.onreadystatechange=checkState; - if(document.body!=null) - xmlDoc.load(sdocPath); - } - else if(gbNav6) - { - xmlDoc=document.implementation.createDocument("","",null); - xmlDoc.addEventListener("load",initializeData,false); - xmlDoc.load(sdocPath,"text/xml"); - } -} - -function initializeData() -{ - if(xmlDoc!=null) - putDataXML(xmlDoc,sdocPath); -} - -function checkState() -{ - if(xmlDoc!=null) - { - var state=xmlDoc.readyState; - if(state==4) - { - var err=xmlDoc.parseError; - if(err.errorCode==0) - putDataXML(xmlDoc,sdocPath); - else - onLoadXMLError(); - } - } -} - -function insertDataDiv(sName) -{ - var sHTML=""; - if(gbMac) - sHTML+="
"; - else - sHTML+="
"; - if((gbIE5||gbNav6)&&document.body) - document.body.insertAdjacentHTML("beforeEnd",sHTML); - else - { - gsInsertBeforeEndHTML=sHTML; - setTimeout("insertWhenBodyReady();",100); - return false; - } - return true; -} - -function insertWhenBodyReady() -{ - if(gsInsertBeforeEndHTML=="") return; - if(document.body) - { - document.body.insertAdjacentHTML("beforeEnd",gsInsertBeforeEndHTML); - gsInsertBeforeEndHTML=""; - loadData_2(gsFileName,gsDivName); - } - else - { - setTimeout("insertWhenBodyReady();",100); - } -} - -function window_BUnload() -{ - for(var i=0;i='0'&&sBStr.charAt(i)<='9') - { - sNum+=sBStr.charAt(i++); - } - if(sNum!=""){ - var nNum=parseInt(sNum,16); - sText+=String.fromCharCode(nNum); - sBStr=sBStr.substring(i); - } - nPos=sBStr.indexOf('%'); - } - sText+=sBStr; - return sText; -} - -function excapeSingleQuotandSlash(str) -{ - if(str==null) return null; - var nPos=0; - var sRes=""; - var nPosNew=str.indexOf("\\",nPos); - while(nPosNew!=-1){ - sRes+=str.substring(nPos,nPosNew+1)+"\\"; - nPos=nPosNew+1; - nPosNew=str.indexOf("\\",nPos); - } - if(nPos=4) - { - if(navigator.appName=="Netscape") - { - gbNav4=true; - if(gnVerMajor>=5) - gbNav6=true; - } - gbIE4=(navigator.appName.indexOf("Microsoft")!=-1); - } - if(gbNav6) - { - var nPos=gAgent.indexOf("gecko"); - if(nPos!=-1) - { - var nPos2=gAgent.indexOf("/", nPos); - if(nPos2!=-1) - { - var nVersion=parseFloat(gAgent.substring(nPos2+1)); - if(nVersion>=20010726) - { - gbNav61=true; - if (nVersion>=20020823) - gbNav7=true; - } - } - } - }else if(gbIE4) - { - var nPos=gAgent.indexOf("msie"); - if(nPos!=-1) - { - var nVersion=parseFloat(gAgent.substring(nPos+5)); - if(nVersion>=5) - { - gbIE5=true; - if(nVersion>=5.5) - gbIE55=true; - } - } - } -} -else if (gbOpera) -{ - var nPos = gAgent.indexOf("opera"); - if(nPos!=-1) - { - var nVersion=parseFloat(gAgent.substring(nPos+6)); - if(nVersion>=6) - { - gbOpera6=true; - if(nVersion>=7) - gbOpera7=true; - } - } -} -else if (gbKonqueror) -{ - var nPos = gAgent.indexOf("konqueror"); - if(nPos!=-1) - { - var nVersion = parseFloat(gAgent.substring(nPos+10)); - if (nVersion >= 3) - { - gbKonqueror3=true; - } - } -} - -var gbWhVer=true; \ No newline at end of file diff --git a/doc/salome/gui/GUI/whxdata/whftdata0.xml b/doc/salome/gui/GUI/whxdata/whftdata0.xml index e5729238b..b7e1347fa 100755 --- a/doc/salome/gui/GUI/whxdata/whftdata0.xml +++ b/doc/salome/gui/GUI/whxdata/whftdata0.xml @@ -14,7 +14,7 @@ - + @@ -24,8 +24,10 @@ + + diff --git a/doc/salome/gui/GUI/whxdata/whfwdata0.xml b/doc/salome/gui/GUI/whxdata/whfwdata0.xml index a6ea6fb6d..8aa4a5702 100755 --- a/doc/salome/gui/GUI/whxdata/whfwdata0.xml +++ b/doc/salome/gui/GUI/whxdata/whfwdata0.xml @@ -2,576 +2,603 @@ 14, 14, - 6,14,2,24,16, - 24, - 24, - 5,14,24,15, - 14,24, - 24, + 14, + 14, + 6,2,25,16,14, + 25, + 25, + 5,25,15,14, + 25,14, + 25, 14, 14, - 24, - 24, - 5,14,24,15, - 24, + 25, + 25, + 5,25,15,14, + 25, 14, 14, - 24, - 6,10,2,24, - 6,14,2,15,16, + 25, + 14, + 6,10,2,25, + 6,2,15,16,14, 14, - 24, - 10,2,24,18, + 25, + 10,2,24,25,14,18,28, 14, 14, - 24, - 14, - 24, + 25, + 25, 14, 14, 14, 14, - 3,6,14,18, + 3,6,24,14,18,28, 14, 8,14, - 23,24, - 24, + 23,25, + 25, 5, - 24, - 3,1,23,24,16,18,21, - 10,26, - 14, - 14,24,15,16, + 14, + 25, + 3,1,23,24,25,16,18,21,28, + 10,27, + 25,15,16,14, 14, 3, 4, - 24, - 5,6,24,16,17, + 25,14, + 5,6,25,16,17, 5,16,17, - 24, - 5, - 0,25,19, + 25, + 5,14, + 0,14,26,19, 3, - 14,15,16,25,18,19, + 15,16,14,26,18,19, 5,14, - 3,14,2,24,15,16,21, - 24, - 24, + 3,2,25,15,16,14,21, + 25, + 25, 14,19, 3, - 6,14,12,17, - 3,14,11, - 3,0,7,1,14,11,23,24,15,16,17,25,18,26,19,22, + 6,12,14,17, + 3,11,14, + 3,0,7,1,11,23,24,25,15,16,14,17,26,18,27,19,22,28, 17, - 11,18, + 11,18,28, 19, - 24, + 25, 14, 11, 14, - 24, - 14, + 25, 3,17, - 14, - 3,4,6,8,14,11,12,24,15,16,17,26, + 3,4,6,1,8,11,12,25,15,16,14,17,27, 14, - 26, - 0,24, + 27, + 0,25, 0,8,9,14,18,19,22, 23, 4, - 3,6,0,10,2,15,16,17,18,26,19, - 14,11,16, - 14,10, + 1, + 3,6,0,10,2,15,16,14,17,18,27,19, + 11,16,14, + 10,14, 14, - 25, + 26, 3,0,10, - 6,16,18, + 6,24,16,18,28, 14, - 24, + 24,28, + 25, 17,18, - 14, - 24, - 13,24,21, - 10, - 21, + 25, + 13,25,21, + 10,14, + 14,21, 8,19, - 14,18, - 23,18, - 0,14,23,13,24,15,16,17,26, + 18, + 23,14,18, + 0,23,13,25,15,16,14,17,27, 7, - 3,5,7,14,10, - 24, - 24, + 3,5,7,10,24,14,28, + 25, + 25, 0,14, 14, - 14, - 18, - 18, + 24,18,28, + 18,28, 14, - 14,23, - 24,18, - 23,24,21, - 3,10,2,17, + 23,14, + 25,18, + 23,25,21, + 3,10,2,24,14,17, 14, - 3, - 3,14,11,16,25, - 3,0,14,15, - 14, - 6,24, + 3,24,25, + 3,11,16,14,26, + 3,0,15,14, + 1,14, + 6,25,14, 14, - 18,22, + 14,18,22, 3, - 10, - 24, - 14,12,24, - 24, - 24, - 24, - 14,15,19, + 10,14, + 25, + 12,25,14, + 25, + 25, + 25, + 15,14,19, 14, - 14,17, + 17, 14, 3, + 24,28, 14, 20, 14, 14, 14, 23,16, - 2,23,24, - 10,23,24,18, - 0,1,8,14,23,13,24,17,25,18,26,19,22, + 2,23,25,14, + 10,23,25,14,18, + 24,28, + 1, + 0,1,8,23,24,13,25,14,17,26,18,27,19,22,28, 14, + 14, 10, - 6,14,12, + 6,12, 2, - 4,5,6,0,14,2,13,16,17,18,19,21, - 14, - 14,24,19, - 14,11,24, - 14,2,12,13,24,17,25,18,26,19,22, - 3,14,15, + 4,5,6,0,2,13,25,16,14,17,18,19,21, + 25,14,19, + 11,25,14, + 2,12,24,13,25,14,17,26,18,27,19,22,28, + 14, + 14, + 14, + 3,15,14, 10, 10,11, 3,0,14, 9,10,11, 14,17,19,22, 3, - 24, + 25, 14, 19, 14, - 14,10, + 10, 14, 23, 10, - 3,8,14,11,24,16,17, - 14, + 3,8,11,25,16,14,17, + 24,14, 14, - 14, 19, 19, 19, 2,15, 20, 14, - 24,25, - 24, - 24, - 24, + 25,26, + 24,28, + 25, + 25, + 25, 15, - 3,6,8,14,23,24,16,17,18,26, - 24, + 3,6,8,23,24,25,16,14,17,18,27,28, + 25, 4, - 25, + 26, 14, - 0,14,24,16,18, + 0,25,16,14,18,28, + 14, 14, - 14,23,24,18, - 0,14,24,25, - 5,7,1,8,14,23,13,24,16,25,19,22, - 24,25,19, - 24, + 23,25,14,18, + 0,25,14,26, + 5,7,1,8,23,24,13,25,16,14,26,19,22,28, + 25,26,19, + 25, 16, + 25, 14, 16, - 5,6,0,7,1,8,14,23,12,13,24,16,17,25,18,26,19,20,21,22, + 5,6,0,7,1,8,23,12,24,13,25,16,14,17,26,18,27,19,20,21,22,28, 12, 3, - 24, - 3,14,12,24,17,26,20, + 24,25, + 24, + 3,12,25,14,17,27,20, 3, 3,14, 23, 14, 14, - 1,23,24,25,18, + 1,23,25,26,18,28, 18,21,22, - 11,24, + 11,25, 16, 14, - 3,0,14,15, - 14,2,11,16,17,26, + 3,0,15,14, + 2,11,16,14,17,27, 3,23, - 14, 14, 8,14,20,22, 3,10, - 3,4,0,7,10,2,11,12,13,24,16,17,18,19,21,22, - 24, + 3,4,0,7,10,2,11,12,13,25,16,17,18,19,21,22, + 25, 14,18, 3,10, 10, 3,12, - 14,10, + 10,14, 3, 14, 14, - 14, - 14,10, + 14, + 10,14, 11, 14, 0,14, + 14, + 14, 9,11,13,16,18, 16, - 6,14,10,15,16,17,18, + 6,10,15,16,14,17,18, 3,15, - 10,11, - 0, - 3,4,5,0,8,14,13,15,16,26,19,20,21,22, + 10,11,24, + 0,14, + 3,4,5,0,8,13,15,16,14,27,19,20,21,22, 15, - 0,14,24,20, - 14,16,21, + 0,24,25,14,20,28, + 16,14,21, 14, - 5,14,23,24, + 5,23,25, 0,14, 11, - 18, - 24, - 7,14,16,17, + 24,18,28, + 25, + 7,16,14,17, 14, 3,5,2,15, - 24,17,25, + 25,17,26, 16, - 14,23,13,24,15,20, + 23,13,25,15,14,20, 10, 3,10, 15, 15, - 3,4,5,6,0,9,14,10,2,11,23,13,15,16,17,18,19,21, - 3,14,2, - 12,17, - 14,15, + 3,4,5,6,0,9,10,2,11,23,24,13,25,15,16,14,17,18,19,21, + 3,2,25,14, + 12,24,17, + 15,14, 15, - 24, - 6,0,8,14,12,24,15,17,18,26,21,22, - 24, - 18, - 10,25,18,19, - 3, - 24, - 25, + 25, + 6,0,8,12,24,25,15,14,17,18,27,21,22, + 25, + 25,18, + 10,15,26,18,19, + 14, + 3,14, + 25, + 25, + 25, + 26, 14, 8,22, - 3,5,0,9,14,10,2,11,17,18,19, + 3,5,0,9,10,2,11,25,17,18,19, 3, 21, - 24, - 5,1,14,23,24,15,16,17,18,26,21, - 3,0,1,14,10,23,24,15,25, + 25, + 5,1,23,24,25,15,16,14,17,18,27,21,28, + 3,0,1,10,23,24,25,14,26,28, 3,5,7,15,16,21,22, - 3,10,20, + 3,1,10,20, + 28, 10, 17, - 10,2,24, - 7,14,21, + 10,2,25, + 7,25,14,21, 14, 14, 3, 3,4,14,19, - 14,15,19, - 10,24, + 15,14,19, + 10,25, 19, - 6,9,14,2,16,17, + 6,9,2,16,14,17, 9,16,21,22, - 12, + 12,14, 14,18, - 14, - 3, + 3,24,14, 3,10, - 24, + 25, 23, - 0,1,8,14,23,13,24,16,17,25,18,26,19,22, + 0,1,8,23,13,25,16,14,17,26,18,27,19,22, 14, 16, - 3,14,16,17, - 3,4,5,9,14,13,24,15,16,17,21, + 3,16,14,17, + 3,4,5,9,13,25,15,16,14,17,21, 23, 10, 14, - 6,24, + 14, + 6,24,25, 14,18, - 14,15,17,18,26,19, - 14,24,15, + 15,14,17,18,27,19, + 25,15,14, 14, - 14,15, - 6,1,14,23,12,24,15,16,17,18,20,21,22, - 24, + 15,14, + 6,1,23,12,24,25,15,16,14,17,18,20,21,22,28, + 25,28, 3, - 3,14, + 3, 14, - 4,24,22, + 4,25,22, 7,14, 6,2,16,17, - 5,0,9,14,16, - 14, + 5,0,9,16,14, + 24, 3,11, - 24, - 14,24,19, + 25, + 24,25,14,19,28, 14, 22, 8,12, + 24,28, 14, - 14, - 14, - 16, + 24,16,28, 3, + 24,28, 14, 12,16, - 0, + 0,24,28, 14, + 24, 2, - 11,24, - 14,2,15,16,17, + 11,25, + 2,15,16,14,17, 3,10, 3, 3, - 23, - 7,8,14,2,15, - 24, - 24, - 26, + 1,23, + 7,8,2,25,15,14, + 25, + 25, + 27, 10, - 14, - 24,25,18,19, + 25,14,26,18,19, 10, 10, - 10,23,24, + 10,23,25, 15, 6, - 18,20, + 14,18,20, 3, - 3,14,24,18,26, + 3,25,14,18,27, 3, 3, 14, 3,10, - 8,14,15,17, + 8,15,14,17, 14, 23, 18,21, 14, + 14, 14, 14, 14, - 3,6,9,14,10,2,15, + 3,6,9,10,2,15,14, + 14, 3,14, 10, 0,14, - 3,14,2,11,24,16, + 3,2,11,25,16,14, 22, - 3,16, - 10,20, + 3,16,14, + 10,25,20, 14, 10, 3, 15, - 14,24, - 6,14,10,16,17,19, - 24, - 2,15, + 25,14, + 14, + 6,10,16,14,17,19, + 25, + 14,28, + 2,15,14, 3, + 14, + 14, 10,11, - 3,14,11,13,17,26,19, + 3,11,13,14,17,27,19, 14, 12, 3, 10, + 14, 0, 3, 4, - 10,23, + 10,23,24,28, 3, - 25, - 17,26, - 18, + 24,26,28, + 17,27, + 14,18, 14, 10, - 14,15, - 23,24,18, + 15,14, + 23,25,18, 3,11, - 14,16, + 16, 19, 14, 14, - 24, - 4,14,24, - 8,14,10,23,24,25, + 25, + 4,25,14, + 14, + 8,10,23,25,14,26, 14, 1,14, - 5,0,8,14,11,13,24,15,16,17,18,26,19, + 5,0,8,11,13,25,15,16,14,17,18,27,19, 23, + 14, 14,19,20, 14, 3, - 14,12,24, + 12,25,14, 10, - 0,14,24,18,21, - 18, + 0,25,14,18,21, + 24,18,28, 14, 3,0, - 14,10,2, - 24, + 10,2,14, + 25, 12, 14,17,21, - 3,0,8,9,14,12,13,15,16,17,18,26,19,20,22, - 23,24,25,18, + 14, + 3,0,8,9,12,13,15,16,14,17,18,27,19,20,22, + 23,25,14,26,18,28, + 14, 19, - 4,10,13,18, - 24, - 24, - 14,24, + 14, + 4,10,24,13,18,28, + 25, + 25, + 24,25,14,28, 2, - 10,24, + 1,10,25, 10, - 24, + 25, 0, - 24,20, - 0,14,10,11,16,17, + 25,20, + 0,10,11,16,14,17, 14, 16, - 10, - 3,4,7,9,16,19, + 10,24,28, + 3,4,7,9,24,16,19,28, 3, 14, - 14,15, + 15,14, 23, - 2,24, + 2,25,28, 14, - 9,14,23,16,18, - 0,14,11,19, + 9,23,16,14,18, + 0,11,25,14,19, 10,2,19, 10,11, - 14,11, - 1,10,11,24, - 3,1,11,24,16, - 4,9,14,10,21, - 0,8,14,16,25, - 14,11,24, - 24, - 24, + 11,14, + 1,10,11,24,25, + 3,1,11,24,25,16, + 4,9,10,14,21, + 0,8,16,14,26, + 11,25,14, + 25, + 24,25,28, 20, - 14,12, + 12,14, + 24, + 28, 6,11,18, - 24, + 25, 0,2, 14, - 0,24, - 25, - 14, - 23,24,25, - 3,5,0,14,2,11,15,17,18,26, - 14,15, - 24, + 0,24,25,28, + 26, + 23,24,25,26, + 3,5,0,2,11,15,14,17,18,27, + 14, + 15,14, + 25, 3,12,20, - 14,10,2,15, - 14,15, + 10,2,15, + 15,14, 17, 11,12,21, 18, - 14,13,17,18, + 13,14,17,18, 14, 14, 10, - 23,24, + 23,25, 22, - 3,4,14,10,12,13,15,18,20,21, + 3,4,10,12,13,15,14,18,20,21, 14, - 14,23,24,18, + 23,25,14,18, 10, - 24,16,18,21, - 14,10, - 14,23,21, - 14, + 24,25,16,18,21,28, + 10, + 23,14,21, 22, - 14,26, - 6,23,24,18, + 14,27, + 14, + 6,23,25,18, 3, 12, + 14, 3,14, 14, 4,20, 14, - 14,2,15,16,17, + 2,15,16,17, 5,7,16,19, 14, 21,22, 14, 3,19, 18, - 5,6,0,7,14,23,13,24,15,16,17,18,19,21, + 5,6,0,7,23,24,13,25,15,16,14,17,18,19,21,28, 10, 14, - 10,24, + 10,24,25,28, 12, 3,14, - 3,19, - 14, - 0,14,10,2,11,24,16,26, + 3,14,19, + 0,10,2,11,25,16,14,27, 14, - 24, - 2, - 14, - 14,12,24,20, + 25, + 2,14, + 12,25,14,20, 3, - 0,10,24, - 1,24, + 0,10,25, + 1,25, 3, 3, 3, 23,21, 16,17, - 3,8,14,12,24,17,20,22, + 3,8,12,25,14,17,20,22, 9, 10,19, - 14, - 3,6,12,24,19, - 14,24, + 3,6,12,25,19, + 25,14, 14,19, 14, - 14,15, + 15,14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, - 14,15, + 15,14, 14, 14, 14, 14, 14, 5, + 14, 3, 14, 23, 3,10,2,11, 3,10,2,19, - 14, 2, 3,0,10,2,16,19, 23, @@ -581,146 +608,145 @@ 21, 15, 2,16, - 24,22, - 14,10,2,11, + 25,22, + 10,2,11,14, 17, - 14,16, + 24,25, + 16,14, 18,21, - 18, - 14, + 1, + 1,18, + 24,28, 8,10,2, - 24, + 25, 14, 4, + 24,28, + 24,28, 14,18, 15, 14, - 14,11,15, - 14,24, - 24, + 11,15,14, + 25,14, + 25, 15, 15, 8,12, 19, 0, 15, - 23,24, + 23,25,14,28, 3, 14, - 24, - 18,22, - 24, - 25, - 4,0,14,13,15,26,19,22, + 25, + 14,18,22, + 25, + 26, + 4,0,13,15,14,27,19,22, 5, 0,17, 14, 17, - 14,10, - 14,23,24,25,18,20, + 10,14, + 23,24,25,14,26,18,20,28, 18, - 24, - 24, - 3,23,24, + 25,28, + 25, + 3,23,25, 14, 14, 14, 14, 14, - 14, 14, - 14,2, - 14, - 14, - 14, + 2,14, 14, 14, - 3,6,14,12,24,16,17,19,21, + 3,6,12,25,16,14,17,19,21, 14, - 24, - 24, - 4,1,14,23,24,15,18, + 25, + 25, + 4,1,23,25,15,14,18, 18, 3,10,12, 4,14, - 8,14,12,24,15,18,20,22, + 8,12,25,15,14,18,20,22, 14, - 18, - 3,0,2,13,24,15,16,18,26,21, - 24, - 3,24,15,16,18,20,21, + 24,18,28, + 3,0,2,13,25,15,16,18,27,21, + 25, + 3,24,25,15,16,18,20,21,28, 0,19, - 8,24, - 15, - 24,18, + 8,24,25,28, + 15,14, + 25,18, 3,14, 14,19,20, - 23,24, + 23,25, 17, 16, - 14,24,25,20, + 25,14,26,20, 15, 3,17,22, 4, - 3, - 24, - 5,0,7,8,14,10,13,24,16,17,18,19,22, + 3,14, + 25, + 5,0,7,8,10,13,25,16,14,17,18,19,22, 14, - 5,14,10,23, + 5,10,23,14, 14, 14, 10,18, 10,2,16, 14, 14, - 24, - 24, - 4,0,14,18, + 25, + 25, + 4,0,24,14,18,28, 3, - 14,18, + 24,25,14,18,28, 18, 10, 3, 14, 20, - 24, - 24, + 25, + 25, 5, - 24, - 6,9,14,24,16,17, + 25, + 6,9,25,16,14,17, 0,2,15, 14, 10, - 24, + 24, + 25, 14, - 3,5,0,7,8,2,23,12,13,24,16,17,25,18,26,19,21,22, + 3,5,0,7,8,2,23,12,13,25,16,17,26,18,27,19,21,22, 16, - 3,10,11,23,24,16, - 8,14,2,15, - 14, - 24, + 3,10,11,23,24,25,16,14,28, + 8,2,15,14, + 25, 5, - 24, + 25, 14, 16, 16, - 3,0,1,14,23,24,15, + 3,0,1,23,25,15,14, 3,10,11,23, 10, + 14, 3,0,8, - 0,14,10, - 3,4,7,1,14,2,11,23,24,15,16,17,18,26,19, - 14, - 14, + 0,10,14, + 3,4,7,1,2,11,23,24,25,15,16,14,17,18,27,19,28, 15, 15, 15, - 24, - 14,24, - 24, - 23,24,16, + 25, + 25,14, + 25, + 23,24,25,16,28, 6, - 24, + 25, 18, 14, 14, @@ -728,119 +754,121 @@ 6,9,10,2,16,19, 17,18, 17, - 24, + 25, 3, 3,10,11, - 14,24,15, - 3,5,0,8,14,17,19,21,22, + 25,15,14, + 3,5,0,8,14,17,19,21,22,28, 14, 7, 3, - 14,12, - 4,12,24, + 12,14, + 4,12,25, 4, - 6,14,12,25,18, - 0,14,23,15,16,17,21, - 24, - 24, + 6,12,14,26,18, + 0,23,15,16,14,17,21, + 25, + 25, 14, 14, 4,18, - 14, - 3,5,8,9,14,10,17,18,26,19, - 8,14,15,26,19, - 14, + 3,5,8,9,10,24,25,14,17,18,27,19, + 8,15,14,27,19, 23,19, 6, - 14,15, + 15,14, 14, 3, 14, - 26, - 24, + 27, + 25, 9, 16, - 24, - 14,24, - 14,11,23,24,15,18,26,22, - 14,23,24, - 14,10,11,25, + 25, + 25, + 11,23,25,15,14,18,27,22,28, + 23,25,14, + 10,11,14,26, 3,9,10, 15, - 3,5,6,0,7,2,23,13,24,16,17,18,26,21, + 3,5,6,0,7,2,23,24,13,25,16,17,18,27,21,28, 3, 14, - 5,6,2,18, + 25, + 5,6,2,24,18, + 14, 14, 14, 14, + 14, 14, 3, + 14, 14, + 28, 10, - 14,13,26, + 13,14,27, 3, - 14, - 14, 14, 14, 14, 14, - 3,6,0,7,14,2,12,13,24,15,16,17,25,18,26,19, - 24, + 3,6,0,7,2,12,13,25,15,16,14,17,26,18,27,19, + 25, 20, - 24, - 6,0,9,14,10,11,12,13,24,15,17,19,20, - 14, + 25, + 6,0,9,10,11,12,24,13,25,15,14,17,19,20, 0, - 7,9,23,24,17, - 14,10,24, + 7,9,23,25,14,17, + 10,25,14, 11, - 7,8,14,13,24,15,16,17,18,21, - 14,10,11, + 7,8,13,25,15,16,14,17,18,21, + 10,11,14, 14, - 23,24, + 23,25, 3, - 23,24, - 23,24, + 24,28, + 23,24,25, + 23,24,25,28, 0, 11, 14, 14, 4,0, - 0,14,24,17, - 10,23,25, + 0,25,14,17, + 10,23,24,26,28, 23, - 14,2, - 24,16, + 2,14, + 25,16, 14, - 14,2,11,16, + 14, + 2,11,16,14, 15, - 14,15,19, + 15,14,19, 14,20, - 12,17,20, + 12,24,17,20,28, 3, 14,19, - 3,14,24,25,18,19, - 24, - 6,14,16, + 3,25,26,18,19,28, + 25, + 6,24,16,14,28, 10,17, - 11, - 14, + 11,14, 7,16, 14, - 24, - 14,24, + 25, + 25,14, 3, - 24, - 14,10,11,23,24, - 3,9,10, + 25, + 10,11,23,24,25,14,28, + 3,9,10,25,14, + 25, 14, 3, 20, 10, 3,10,11, - 14,24, + 25,14, 14, 14, 14, @@ -848,59 +876,59 @@ 8, 22, 3, - 24, - 6,14,2,16, - 23,24, - 3,4,6,0,9,14,10,2,11,15,16,17,19,22, + 25, + 6,2,24,16,14,28, + 23,25, + 24,14, + 3,4,6,0,9,10,2,11,15,16,14,17,19,22, 0, 14, - 6,2, + 6,2,25, 5,18, 2, + 24,28, 14, - 3,14,2,23,24,18, + 3,1,2,23,24,25,14,18,28, 12,13,16,21, 12, 15, 15, - 24,16,17,18, + 24,25,16,17,18,28, 16, - 3,0,14,15,25,19, - 3,0,14,16,17,25,21, - 3,10,11,24,16,17, + 3,0,15,14,26,19, + 3,0,16,14,17,26,21, + 3,10,11,25,16,17,28, 2, - 10,11, + 10,11,14, 23, 14, - 3,14,25, + 3,14,26, 15, - 1,23,24,25,18,26,21, - 14, + 1,23,25,26,18,27,21, 14, - 14, 14, - 14,24,18, + 24,25,14,18,28, 23, 23, - 23,24, - 5,23,24,16,18, - 24, - 25, - 14,13, - 14,11,13,17, - 24, - 14,15, + 23,25, + 5,23,25,16,18,28, + 25, + 24,25,26, + 13,14, + 11,13,25,14,17, + 25, + 15,14, 14, 10, - 3,11,24,16,17, + 3,11,25,16,17,28, 5, - 0,14,10, + 0,10,14, 9,14, - 14,15, - 3,0,14,10,2,11,24,22, + 15,14, + 3,0,10,2,11,25,14,22, 3,10, - 24, - 14,10,15, + 25, + 10,15,14, 14, 14, 14, @@ -911,190 +939,205 @@ 15, 3,14, 10, - 14,24, - 24, - 14,15, + 25,14, + 25, + 15,14, 0, - 14, 14, - 8,10,11,24,18, - 14,2, - 3,7,14,10,2,11,24,15,25,19,20,22, + 8,10,11,25,18,28, + 25, + 2,14, + 3,7,10,2,11,24,25,15,14,26,19,20,22, 0,17, 3, 9,21, - 15, + 14, + 15,14, 15, 14, + 14, 14, - 24, - 3,6,0,14,10,2,15,16,17,18, + 25, + 3,6,0,10,2,15,16,14,17,18, 14, + 14, 14, 14, 14, 14, 14, - 10,23,24, + 10,23,25, 10, - 14, 14,18,21, - 0,14,17,26, + 0,14,17,27, 14, 14, + 14, + 14, 14, 15, 14, - 24, - 11,24, + 25, + 11,25, 3, - 24, + 25, 0, - 24, - 0,12, + 25, + 0,12,14, 10, - 14,10,12, + 10,12,14, 14, - 24, + 25, 9, - 24, - 26, - 14,24, - 8,24, - 21, + 14, + 25, + 27, + 25,14, + 8,25, + 14,21, + 28, 15, 10, - 18,26, + 14,18,27, 14, - 4,12,24,18,21, - 10,24, + 4,12,25,18,21, + 10,25, 22, 22, - 24, + 25, 2,15,22, 14, 14, 14, 12,20, - 14,23,18, + 23,14,18, 14, + 14, 12, 10, 17, 16, - 3, - 5, - 14,18, + 3,24, + 5,24,28, + 24,25,14,18, 17, - 24, + 25, + 25, 18, - 24, - 3,9,10,11,20, - 6,11,24,18, - 24, - 14,10,13,24,17, + 25, + 3,9,10,11,24,20,28, + 6,11,24,25,18, + 25, + 10,13,25,14,17, 3,10,15, - 14, - 18, - 24, + 14, + 24,14,28, + 24,18,28, + 25, 0, - 14,2,24,15, - 24,26, - 24, + 2,25,15,14, + 1,25,27, + 25, 3, 14, 18, - 10,17,18,26, - 9,10,24, - 26, + 14, + 10,24,25,17,18,27,28, + 9,10,24,25, + 14, + 14, + 27, + 24,14, 3, 10, - 0,24, - 6,14,12,13,24,16,17,25,18,20,21, + 0,25, + 6,12,13,25,16,14,17,26,18,20,21, 10, 10, 3, 14, - 24, - 24, + 24,25,28, + 24,25,28, 14, - 3,14,15,19,22, - 25, + 3,15,14,19,22, + 26, 14, 15,19, 19, - 3,14,12,15, + 3,12,15,14, 2, - 3,4,5,6,0,7,9,14,10,2,11,12,13,24,15,16,17,18,26,19,20,21,22, + 3,4,5,6,0,7,9,10,2,11,12,13,25,15,16,14,17,18,27,19,20,21,22, 14, 19, 15, - 26, + 27, 0, - 6,12,24,16,17,19,22, - 25, - 3,0,14,10,2,16,17,18,26, - 3,24,18, - 23,24, - 3,14,10, + 6,12,25,16,14,17,19,22, + 14,26, + 3,0,10,2,24,16,14,17,18,27, + 3,25,18,28, + 23,25, + 24,28, + 3,10,14, 10, 3, 6,15, - 3,0,14,15,25,19, + 3,0,15,14,26,19, 8, - 6,8,14,13,17,18,19,21, - 4,14,13,17,20, - 0,14,24, - 14,16,18, - 14, - 14, + 6,8,24,13,14,17,18,19,21,28, + 4,13,14,17,20, + 0,25,14, + 24,16,14,18, 23, - 5,6,0,1,8,14,23,13,24,17,25,18,20, + 5,6,0,1,8,23,24,13,25,14,17,26,18,20,28, 16, - 2,23,24, + 2,23,25, 14, 16,21, - 3,14,24,16, + 3,25,16,14, 3,19, 3,15, 3,14,19, - 1,23,13,24,15,17,18,26,21,22, - 4,0,1,8,14,10,23,24,15,16,17,18,26,21,22, - 14,24,16,17,18,26, + 1,23,13,25,15,17,18,27,21,22, + 4,0,1,8,10,23,24,25,15,16,14,17,18,27,21,22,28, + 25,16,14,17,18,27, 10, 14, - 1,23,24, - 24, + 1,23,25, + 24,25, 15, - 14,2,11,15, + 14, + 2,11,15,14, 14,20, 6, 9,14,17,19, - 14, + 24,25,14,28, 8,14, 23, - 23,24, - 14,2, + 23,25,14, + 2,14, 14, 14, + 14, + 14, 3, 14, 3, 10,11, - 6,9,14, + 6,9,25,14, 2, 14, 14, 14, 3, - 6,23,24,16,17,25,18, + 6,23,25,16,17,26,18, 14, - 14, - 24, - 24, + 25, + 24,28, + 25, 18, - 24, - 3,7,14,24,15,20,21, + 25, + 3,7,25,15,14,20,21, 3,10,11, 10, 10, @@ -1102,154 +1145,169 @@ 14, 18, 14, - 14,10,11,15, - 14,23,24, - 24, - 24, - 3,14,13,24,15,16,17,18, - 3,24, - 3,0,10,15,16,26,20, + 10,11,15,14, + 23,25,14, + 25, + 25, + 3,13,25,15,16,14,17,18, + 3,25, + 3,0,10,15,16,14,27,20, 11, 17,18,19, - 24, + 25, 1, 15, 18, 6, - 24, - 24, + 25, + 25, 2,15, - 3,5,14,2,13,24,16,17,26,19, + 3,5,2,13,25,16,14,17,27,19, 14, - 6,9,14,16,18,26,19,22, + 6,9,25,16,14,18,27,19,22, + 14, 0,14,17,18, 3, 14, - 1,14,10,24, - 14, - 3,0,14,13,17,18,19, + 1,10,25,14, + 14, + 3,0,13,14,17,18,19, 14, - 14, + 28, + 24,14,28, 14, - 25, - 3,14,10,2,13,21, + 26, + 3,10,2,13,25,14,21, 10, 5,6,7,9,10,2,13,16,17, - 3,5,6,0,7,8,9,10,2,13,24,15,16,17,18,26,19,21,22, + 3,5,6,0,7,8,9,10,2,13,25,15,16,17,18,27,19,21,22, 5, - 25,18, - 14,20, + 28, + 26,18, + 24,14,20, 5,16,18, - 25, - 24, + 14, + 26, + 25, 14, 2, 14, - 24, + 25, 15, 15, 2,15,19, 11,18,19, 21,22, - 14,10,19, + 14, + 10,14,19, 14, 14, 23, - 24, + 25, 14, - 6,14,2,24, - 3,4,14,10,12,24,20, - 7,14,24,15,16,17,18,19, + 6,2,25,14, + 14, + 3,4,10,12,25,14,20, + 7,24,25,15,16,14,17,18,19,28, 6,20,22, - 14,25, + 25,26, 14, 10, 3,14, - 14,15, + 25,15,14, 14, 14, 14, 14, 0, 14, + 14, + 14, 14, - 14, 3, 10, - 3,14, - 14, + 3,24, 14, 14, 14, 14, 14, - 24, + 25, 10,12,20, - 14,15, + 15,14, 3,14,19, - 14,12,20, - 24, - 3,6,14,10,23,15,16,25,22, + 12,14,20, + 25, + 3,6,10,23,24,15,16,14,26,22,28, 14, 11, 14,18,20, 14, - 24, - 3,0, - 3,6,0,8,14,10,24,15,17,26,19,22, - 14,23,24,18, + 25, + 3,0,14, + 28, + 3,6,0,8,10,25,15,14,17,27,19,22, + 14, + 23,25,14,18, 14, + 14, + 14, 14, 14, - 14, - 23,24,21, - 24, - 3,14,2,11,16,19,22, - 3,5,7,2,13,16,17, - 2, - 5,14,2,24,16,18, + 23,25,21, + 25, + 3,2,11,16,14,19,22, + 3,5,7,2,24,13,16,17,28, + 2,14, + 14, + 5,2,25,16,14,18, 4,12,20, 14, 14, 3, 0, - 14, 10, - 24, - 24, - 24, - 24, + 24, + 25, + 25, + 25, + 25, 5,14,18,19,21, 14, - 18, + 24,28, + 24,18,28, 14, + 14, 14, 8,14,17,19, 14, 14, 14, - 24, - 6,14,12,24,17,19, - 0,14,23,24,25,18,19, + 14, + 25, + 6,12,25,14,17,19, + 0,23,25,14,26,18,19, 19, 18, 3, - 24,16, - 25, + 24,25,16,28, + 26, + 14, 14, 14, - 24, + 25, 4, 13,17, 14, + 14, 14, 0, - 14,10,12,13,16,17,25,21, - 23,24,16,17,19, + 10,12,13,16,14,17,26,21, + 23,25,16,17,19, 2,16, - 3,0,1,8,9,14,10,2,11,23,24,15,16,17,25,18,26,19,20,21,22, + 3,0,1,8,9,10,2,11,23,24,25,15,16,14,17,26,18,27,19,20,21,22,28, 2, - 14,24, + 25,14, 8,19, 14, 14, @@ -1257,70 +1315,71 @@ 14,18, 18, 3, - 1,14,23,24,18,21, - 14,15, + 1,23,25,14,18,21, + 15,14, 4,12, - 14,11, + 11,14, 14,18, - 24, - 14, - 14, - 14, - 6,14,2,16,26,19, - 6,23,24,18, - 14,10,2,24,16, - 3,5,8,14,2,23,12,24,16,18,20,22, + 1,25, + 6,2,16,14,27,19, + 1, + 6,23,25,18, + 10,2,25,16,14, + 24,14,28, + 3,5,8,2,23,12,24,25,16,14,18,20,22,28, 5,6,2,11,16,17,18, + 24,28, 11, - 1,24, - 10,24, + 1,25, + 10,24,25,28, 9,10,2,11,16, - 5,6,14,2,18, + 5,6,2,14,18,28, 14, 14, - 6,14,12, - 8,14,24, - 14,11,19, + 6,12,14, + 8,25,14, + 11,14,19, 4, 4,10, - 3,14,10,12,26,21, + 3,10,12,14,27,21, 23,18, 6, - 14, 3, - 24,18,26, + 25,18,27, 23, - 4,11,25, + 14, + 4,11,26, 11, - 23,24, - 4,5,0,8,14,23,13,24,15,16,17,25,18,26,19,21,22, - 4,5,6,9,14,2,12,24,15,16,17,25,18,22, + 23,25, + 4,5,0,8,23,24,13,25,15,16,14,17,26,18,27,19,21,22, + 4,5,6,9,2,12,25,15,16,14,17,26,18,22, + 1, 1,23, - 6, - 14, + 6,24,14,28, 3,5,7,22, - 3,0,14,24,15,26, + 3,0,25,15,14,27, 14, - 7,14,15, + 7,15, 20, - 3,6,0,9,14,11,24,16,17, - 14,16,17,19, - 10,17, + 3,6,0,9,11,24,25,16,14,17, + 16,17,19, + 10,14,17, 3,17, 14, 3, - 23,24,15, - 14,15,19, + 23,25,15, + 15,14,19, 15, 14, - 14,23,24, + 25, + 23,25, 10, 8,14, 14,18, - 5,6,0,7,8,14,23,24,15,17,18,26,19, - 25, + 5,6,0,7,8,23,25,15,14,17,18,27,19, + 26, 15, - 5,6,24, - 24,17, + 5,6,25, + 24,25,17,28, diff --git a/doc/salome/gui/GUI/whxdata/whtdata0.xml b/doc/salome/gui/GUI/whxdata/whtdata0.xml index 6b0205e6a..d79d74806 100755 --- a/doc/salome/gui/GUI/whxdata/whtdata0.xml +++ b/doc/salome/gui/GUI/whxdata/whtdata0.xml @@ -28,6 +28,10 @@ + + + + diff --git a/doc/salome/gui/Makefile.in b/doc/salome/gui/Makefile.am similarity index 71% rename from doc/salome/gui/Makefile.in rename to doc/salome/gui/Makefile.am index 926f14922..04ccab4ba 100644 --- a/doc/salome/gui/Makefile.in +++ b/doc/salome/gui/Makefile.am @@ -20,29 +20,34 @@ # Author : Vasily Rusyaev (Open Cascade NN) # Module : doc -top_srcdir=@top_srcdir@ -top_builddir=../../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am -@COMMENCE@ +EXTRA_DIST+=GUI + +doxygen=@DOXYGEN@ usr_docs: - cp -fr $(srcdir)/GUI ./ - -find $(PWD) -name CVS -prune -exec rm -rf {} \; + cd ./GUI; \ + echo "Running doxygen in directory: "`pwd`; \ + $(doxygen) ./doxyfile; docs: usr_docs -clean: - rm -fr `ls | grep -v "Makefile"` - -distclean: clean - rm -fr GUI +clean-local: + cd ./GUI; \ + rm -fr `ls | grep -v "doxyfile"` + rm -fr `ls | grep -vE "Makefile|GUI"` -install: +install-data-local: usr_docs mkdir -p $(docdir)/gui cp -rf GUI $(docdir)/gui -find $(PWD) -name CVS -prune -exec rm -rf {} \; -uninstall: +uninstall-local: rm -rf $(docdir)/gui/GUI + +docguidir=$(docdir)/gui/GUI + +nodist_docgui_DATA= GUI/doxyfile +GUI/doxyfile: GUI/doxyfile.in +EXTRA_DIST+= GUI/doxyfile.in \ No newline at end of file diff --git a/doc/salome/tui/GUI/sources/doxygen.css b/doc/salome/tui/GUI/sources/doxygen.css index bda046724..4893b5e2a 100755 --- a/doc/salome/tui/GUI/sources/doxygen.css +++ b/doc/salome/tui/GUI/sources/doxygen.css @@ -94,10 +94,13 @@ DIV.groupText { font-size: smaller } -BODY { - background: url(sources/bg_salome.gif) +BODY { background: #FFFFFF } +/* BODY { + background: url(sources/bg_salome.gif) +} */ + div.tabs { text-align: justify; font-weight: bold; diff --git a/doc/salome/tui/Makefile.in b/doc/salome/tui/Makefile.am similarity index 78% rename from doc/salome/tui/Makefile.in rename to doc/salome/tui/Makefile.am index dc94bcbb7..fd092e676 100644 --- a/doc/salome/tui/Makefile.in +++ b/doc/salome/tui/Makefile.am @@ -20,27 +20,22 @@ # Author : Vasily Rusyaev (Open Cascade NN) # Module : doc -top_srcdir=@top_srcdir@ -top_builddir=../../.. -root_srcdir=@ROOT_SRCDIR@ -srcdir=@srcdir@ -VPATH=.:@srcdir@ -doxygen=@DOXYGEN@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am -@COMMENCE@ +EXTRA_DIST+=GUI dev_docs: cp -fr $(srcdir)/GUI ./INPUT; \ cp -f ./GUI/doxyfile ./INPUT; \ cd INPUT; \ - sed 's|../../../share/salome|$(root_srcdir)|' ./doxyfile > ./doxyfile1; \ + sed 's|../../../share/salome|$(top_srcdir)|' ./doxyfile > ./doxyfile1; \ sed 's|../../build/salome|$(top_builddir)|' ./doxyfile1 > ./doxyfile2; \ mv -f doxyfile2 doxyfile1; \ echo "DOXYGEN SUPPORT PYTHON - @DOXYGEN_WITH_PYTHON@"; \ if( test "x@DOXYGEN_WITH_PYTHON@" = "xyes"); then \ sed 's|python_extension_must_be_here|*.py|' ./doxyfile1 > ./doxyfile2; \ mv -f doxyfile2 doxyfile1; \ - $(doxygen) -u ./doxyfile1; \ + $(DOXYGEN) -u ./doxyfile1; \ else \ sed 's|python_extension_must_be_here||' ./doxyfile1 > ./doxyfile2; \ mv -f doxyfile2 doxyfile1; \ @@ -51,21 +46,12 @@ dev_docs: fi; \ mv -f doxyfile1 doxyfile; \ echo "Running doxygen in directory:"`pwd`; \ - $(doxygen) ./doxyfile; \ + $(DOXYGEN) ./doxyfile; \ cd ../; \ - cp -fr $(srcdir)/GUI/sources/ GUI ; \ + cp -fr $(srcdir)/GUI/sources/ GUI/ ; \ rm -fr INPUT -clean: - rm -fr GUI +doctuidir=$(docdir)/tui/GUI -distclean: clean - rm -fr INPUT - -install: - $(INSTALL) -d $(docdir); \ - mkdir -p $(docdir)/tui - cp -fr GUI $(docdir)/tui - -uninstall: - rm -fr $(docdir)/tui/GUI +nodist_doctui_DATA= GUI/doxyfile +EXTRA_DIST+= GUI/doxyfile.in diff --git a/idl/Makefile.am b/idl/Makefile.am new file mode 100644 index 000000000..cd0eb79f3 --- /dev/null +++ b/idl/Makefile.am @@ -0,0 +1,93 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# +# This Makefile is responsible of generating the client and server +# implementation of IDL interfaces for both C++ and python usage. +# The building process of the C++ files is in charge of each source +# package and then is not manage here. +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +BASEIDL_FILES= SalomeApp_Engine.idl + +EXTRA_DIST+= $(BASEIDL_FILES) + +# This variable defines the files to be installed +salomeidl_DATA = $(BASEIDL_FILES) + +# GUI idl common library +lib_LTLIBRARIES = libSalomeIDLGUI.la + +# Sources built from idl files +nodist_libSalomeIDLGUI_la_SOURCES= SalomeApp_EngineSK.cc + +# header files must be exported: other modules have to use this library +nodist_salomeinclude_HEADERS= $(BASEIDL_FILES:%.idl=%.hh) + +libSalomeIDLGUI_la_CPPFLAGS =\ + -I$(top_builddir)/salome_adm/unix \ + -I$(top_builddir)/idl \ + @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @KERNEL_CXXFLAGS@ +libSalomeIDLGUI_la_LDFLAGS = -no-undefined -version-info=0:0:0 +libSalomeIDLGUI_la_LIBADD = @CORBA_LIBS@ + +# These variables defines the building process of CORBA files +OMNIORB_IDL = @OMNIORB_IDL@ +OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@ +OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(top_builddir)/idl/salome -I$(KERNEL_ROOT_DIR)/idl/salome +IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_builddir)/idl/salome -I$(KERNEL_ROOT_DIR)/idl/salome -I$(top_builddir)/salome_adm/unix +IDLPYFLAGS = @IDLPYFLAGS@ -I$(KERNEL_ROOT_DIR)/idl/salome + +# potential problem on parallel make on the following - multiple outputs +SUFFIXES = .idl .hh SK.cc +.idlSK.cc: + $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< +.idl.hh: + $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< + +install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%) + $(INSTALL) -d $(pkgpythondir) + ls $^ | while read file; do \ + $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(pkgpythondir) $$file ; \ + done + +# uninstall-local removes too much, but it works in distcheck +uninstall-local: + rm -rf $(pkgpythondir)/* + +mostlyclean-local: + -rm -f *.hh *.cc .depidl + +# we use cpp to generate dependencies between idl files. +# option x c tells the preprocessor to consider idl as a c file. +# if an idl is modified, all idl dependencies are rebuilt + +.depidl: $(BASEIDL_FILES) + @echo "" > $@ + @for dep in $^ dummy; do \ + if [ $$dep != "dummy" ]; then \ + echo Building dependencies for $$dep; \ + $(CPP) $(C_DEPEND_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome $$dep 2>/dev/null | \ + sed 's/\.o/\SK.cc/' >>$@; \ + fi; \ + done ; + +-include .depidl diff --git a/resources/Makefile.am b/resources/Makefile.am new file mode 100644 index 000000000..c9700c374 --- /dev/null +++ b/resources/Makefile.am @@ -0,0 +1,95 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Guillaume Boulant (CSSI) +# Module : KERNEL +# $Header$ +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# +# =============================================================== +# Files to be installed +# =============================================================== +# + +DEPRECATED_FILES=\ +plot2d_settings.png \ +view_fitall.png \ +cascade.png \ +plot2d_fitarea.png \ +view_reset.png \ +save.png \ +view_back.png \ +plot2d_linear_y.png \ +plot2d_legend.png \ +paste.png \ +plot2d_fitall.png \ +view_bottom.png \ +plot2d_log_y.png \ +plot2d_log.png \ +view_triedre.png \ +view_glpan.png \ +new.png \ +copy.png \ +plot2d_linear.png \ +reset.png \ +plot2d_points.png \ +view_front.png \ +view_rotate.png \ +open.png \ +close.png \ +view_fitarea.png \ +view_top.png \ +view_camera_dump.png \ +plot2d_pan.png \ +view_left.png \ +view_zoom.png \ +view_right.png \ +plot2d_lines.png \ +plot2d_splines.png \ +plot2d_zoom.png \ +view_pan.png \ +print.png \ +help.png + +dist_salomeres_DATA=\ +default.png \ +uc_new.png \ +uc_add.png \ +select1.png \ +dl_delete.png \ +dl_moveup.png \ +home.xpm \ +forward.xpm \ +Tools_en.xml \ +plot2d_dump.png \ +uc_clear.png \ +dl_movedown.png \ +back.xpm \ +uc_del.png \ +uc_current.png \ +tile.png \ +dl_insert.png \ +channel.cfg \ +$(DEPRECATED_FILES) + +EXTRA_DIST+= Tools_fr.xml diff --git a/resources/copy.png b/resources/copy.png index 1ba2eca28870d38b00926919445e873729dc0d7d..1e43a09c2f80427d80e154e552661e4cf9596317 100644 GIT binary patch delta 225 zcmV<703QF*0rdfp9Df05^w0MI006v6L_t(|oP|?S7Q`?FfdWC$><}#b8w-64@PmayvdX*&k3K;;_!Co+m=!RQ2++bE z${kf7jVfI81Q27Xk3GmVD}%{oY)^*ZfT+2E3Vuzh0xH8ZgIa^h%~)z_mngd^2hj~M zDeS{szWFq}&Z4QW9aLgxm)u<+PTDR*aPx9$AME%YI-=-M9W*`mTejkBpTT~xoc|z* bgX-b}*D!os%$qEI00000NkvXXu0mjfLgpbC-*sSelw;6qCRA{k3 z@e*PP`gsr)l9ER diff --git a/resources/help.png b/resources/help.png index e57336285ea67f393322fd6f19a64d9d1de42e53..452b45f62a547640e2a9de3ad3870bbdcf8c0a44 100644 GIT binary patch literal 910 zcmXAnJxJ7X7{{Nu8xB$O8XQUjopO+dryz%h4#k8{4qt|X@F4h&(Gb{B@~6OP2!cR- zhCt~B8Y;Nv;3k87XjF)-!9kEfZxb4xKL1}o_}}mK`My2(tTj75(08^^L+kQc*Xu(=L&L+vqobo^ zV`Gbpi_K=U(P&IeOvJ+?TCE*<>3`yAXY1f#=fnFKDw0G@!~s`Pm84=St`hl9lcXe; z#FIpRswTUB;P=g}8mWe=x3Gl!`T3%9MZWcK#%s|ZE-6Cg)H@La> zu*gx8JxLQSSrQu|kqR;3TUI_{4mXIV44J6Q{28=F1*Yr)&$;J-5xFHqhC^7{2l3@* z(mmQj6G)wy$(1Z=9%+#fkx+wsdWl6mmGz~}vbE$6KZGCxNh!~{WJfUo|0iZvZ)Id@ zX=!_IkaOlau&+ys`17D2nor6B2o1X2m#v zx4yx7?f%^Cd_Lg**OMLXCW~OE*KQ`Kr{{g4UsYCz( delta 198 zcmeBUzs5L0qMnJFfq_wUmU;>U0|RG(Pl)S*0|);92XYt|?~f}1Qj8@*e!&b5&u*lF zI7!~_E=+0MH6Z0;C9V-A!TD(=<%vb94C$F^Mg@843PyScdWN=f`!awkd^}woLn`JZ zCnN+UFfb~zi7BjPdXi~Spk`2@VqjouU|?e3up~lQ!bHrVK-Iv&%t6q@E1Q*>Irxf+ rf;zK@K|vZrXptU+kb)gTe~DWM4faqu?5 diff --git a/resources/paste.png b/resources/paste.png index d86ece38be776c9ad1efa18546100571bf7a0507..c7446259534a83a6e06232c80c732b459919cd15 100644 GIT binary patch delta 260 zcmV+f0sH>o0hj`i9Df05^w0MI007@fL_t(|oQ+Ze4#Xe`lZ1bZFJ~6UWa_+YVx~|F zma(c9fQd+P;3v`=sfZNr2c!s51UWXymLlU$px+Js&_$o)f|$5Oj(g;B`62VgykIzAsU>U3}r@LtbGW81T&Hm-W-D468X?A zOfT3FfZM^?>p}?9Qv#DoiT`}aPY1G@i@=zb*uwtpmkY)pB zs?6AgR+}@z?hGG;nxQ>UM}d_sb$2!y`xFvE#0JsnlkTNl?Bk=UNyGU9Q zA(Khkc>?M8q;);$aZn13;`I8u0^bwf&~=cJGxweY2Q{R<2}NOctT~vKw8QMstAji- z6U)6N2X%~6&|EA;`IoQ_T^(_ioa0000$f!pK|o;`QW%9iY=3KZ>?|BI41;baV+C4z ze+DhUx>sE#&ay0uli=5tOXJB{D>+osPG2L#Hrow9Q?}fM{aIbH-4~bq zZ$E<>xzP4`@+YJEb-CK0GoFQ(jtzA)Uk5A#)&VB@3Ij|J*ZJ zq^{S&P+$Rr1Mw^iFj+`DcUXXlmH~_Ur(3VQQte0Ssre3dWFz$xV$98vNn@ zQGwwIYU%wGivzyfZ7X2_U?C(o`0UQ+^DHij42a3+rNc+53WkQ3F9BKkO;Z3ucpGXc nE`n2G3a}`gOOe)JuqyokM_mFKEZ}>m00000NkvXXu0mjf{p#aC delta 292 zcmV+<0o(qI1iu21B!31;L_t(|oTZe(wS*uHMK5zKgifRsmy}@{E-fW=l1`X~#Nqo9 z_4qb`CtmVQj1v(62q7clc&TBBl~vaj@4W*U$MU==rT-TmV?K9pZoyj5Kebg|SNt@g zs=4*@9i3)q(3HfbB<^U#!#48TwqLRF!BLsiYSos`5a%YTvqVvPG9{>GeUXoWc{ z#^~zxsM|$pL0Zs9z@N?b`7yADv|wP3eIl!%?dt-V-D6A__yhGDyKbq+malXh*lXB@dvgNisOkO9UF>GgOm!$CwcZbs%A@BKC;9w^N7p7F3{ q92}6n_W;;>B^^Iaz&1y>jpi>eIF!SK*d>?%0000?PhRGdP)2p#HH z|33Q%C|O!E6r^~zZJJKum8 zORTbgse|=z`i3FT^C*Yj`=-PCLXZL5d~SG6hcvDdJ~n-rGPJfSRfR7h#XoTlb8Ls& ztu{F=hdP%XT0AfK9QJWmWH$lfX5bCXSXM&_sfv2nJqlKVMy$~x(t)D)h~aPx!DaWV zOS8urf5SZ#$A2-OsRx#t!}U63uF|w!*EPz*bxpO8_q=X&D4iTn#(5JY&Cz5;m;eBV zw?kv^WS3ERKfDXVGp5s~Y-<)2b9hgk&a?7nxo1F2P6XxjE`%k`G77Y-{h6j)$z zAnURKD+_5CzzR%81~BQi)Dq$p?V@%(qXzHvjRgJ5T}H}F%3<@TIsHdki=X3bWjt5mYsgNpGr2qf` delta 285 zcmV+&0pkAu1GfT@BYyz?NklZW4y|2Znu0?c48l$?Qv})Ui z%rm9RyBJyzW|qEDS1TRMAj}N54H0o>mSX%2X2s_RamEdg?+Gpj7!T|WpBvKp06#p?AJZd zEPJ1hP4z<8@+I jUP0y=*!Spuuom!HE9XPz1Z$vi!vUUz@DL`3!kYtP=iy&zkp=%%I{ z0NeTtoDI(ah<~qQmfx3L-;7&&2^+x!Stnl;BotJY>15hhLNZUNHWh(*ZwIw;27^m8 zPgax#fKRjzz`0#ht19F7V`iUb6i>c3kN^?cg_8fsx&3h4njQ@!qG7~zGUfdBc}vuY zrCCZK0g;V}Y=pHI8`^HlX_mIP0mwi)&r?;dZ^k6^q<_-^5=z_T9ryB8?wZ1;H7?#= zbP~-LDXNMMExJ`?Af1Wn5XPg}h|~pFyQaOrTVf1+`8@OKZ|N0-znJA@o=`j$L^cBc zWtQB0Gt&^)wXUk4MOw^&6Eu<|e}&|C|5-002ov KPDHLkU;%<%A^U~^ delta 431 zcmV;g0Z{&-1jz%CB!7@eL_t(|oSl@xk*pvTMGsRQh6_UYv!_afaIYZ{f*}|J>)(pl*BE2WXT<7p zFZhG9)@JV=0N%Tus0y%I?YbPDLysfTIkeV0JJ#Cr^2f&~_ka7X%%zmnOTvGxTWhnm zR<3z}|HHbj0Icg;NZ;xpVvJAe+O{iV0LB=WWhwVsYbEv%2}M+F4#UVWjD<+5?|a&| z%QE*el-j2Ej{E&aO{%q4Vqbz%bsvUlLTfDxcP&xd?E8KPuq+FgBf5E>l@JVZ4YA1 Ze*uHp=nsA88Cw7V002ovPDHLkV1hbb(8K@$ diff --git a/resources/plot2d_zoom.png b/resources/plot2d_zoom.png index 35e185b066cccc19bc9688fc33d9fcd46d176fb4..b46573914ded57ddbdbd0fdfdeca02dbe772beca 100644 GIT binary patch delta 462 zcmV;<0Wtpf0_X#fB!90-L_t(|+O3qmYr;Sn#^00-7jRH$2Zb&|hq%>Iagt6#q2_P2 ze?Uu?mP`egLb}jmQ&lvizrUWkmMZZx26Skmst4*RMsB_t&#p8naVLf;a ziacwZf@lWrK%dKN2q9Ie-gS@sXFtVUZG=b%3g1J9BU%VicCWhR%{~4`^iUK(^b delta 348 zcmV-i0i*ut1NQ=uB!50hL_t(|oTZe}&4VxugfECOc!)&Dh(w0y0F1y0jL;D>K!PaXPfln7-Y(qo<0C+DTGWb#58@8{^EV?;OUi7&N>|2{LemY*3 zsX@$33_ u+;5J(0U*{|0D!LFWak+Gz#(ienB@=A_^{1PKL-y00000 #include +#include #include /*! @@ -87,8 +88,11 @@ void CAF_Study::createDocument() if ( app && !app->stdApp().IsNull() ) { try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif TColStd_SequenceOfExtendedString formats; - app->stdApp()->Formats( formats ); + app->stdApp()->Formats( formats ); if ( !formats.IsEmpty() ) app->stdApp()->NewDocument( formats.First(), myStdDoc ); } @@ -121,6 +125,9 @@ bool CAF_Study::openDocument( const QString& fname ) bool status = false; try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif status = app->Open( CAF_Tools::toExtString( fname ), myStdDoc ) == CDF_RS_OK; } catch ( Standard_Failure ) { @@ -149,6 +156,9 @@ bool CAF_Study::saveDocumentAs( const QString& fname ) bool status = false; try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if ( save ) status = app->Save( stdDoc() ) == CDF_SS_OK; else @@ -185,6 +195,9 @@ bool CAF_Study::openTransaction() bool res = true; try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if ( myStdDoc->HasOpenCommand() ) myStdDoc->AbortCommand(); @@ -207,8 +220,11 @@ bool CAF_Study::abortTransaction() bool res = true; try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif myStdDoc->AbortCommand(); - update(); + update(); } catch ( Standard_Failure ) { res = false; @@ -226,12 +242,15 @@ bool CAF_Study::commitTransaction( const QString& name ) bool res = true; try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif myStdDoc->CommitCommand(); if ( canUndo() ) { Handle(TDF_Delta) d = myStdDoc->GetUndos().Last(); - if ( !d.IsNull() ) + if ( !d.IsNull() ) d->SetName( CAF_Tools::toExtString( name ) ); } } @@ -313,18 +332,21 @@ void CAF_Study::clearModified() */ bool CAF_Study::undo() { - if ( myStdDoc.IsNull() ) + if ( myStdDoc.IsNull() ) return false; try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif myStdDoc->Undo(); undoModified(); /* decrement modification counter */ } catch ( Standard_Failure ) { - SUIT_MessageBox::error1( application()->desktop(), tr( "ERR_ERROR" ), - tr( "ERR_DOC_UNDO" ), tr ( "BUT_OK" ) ); - return false; - } + SUIT_MessageBox::error1(application()->desktop(), tr( "ERR_ERROR" ), + tr( "ERR_DOC_UNDO" ), tr ( "BUT_OK" )); + return false; + } return true; } @@ -333,10 +355,13 @@ bool CAF_Study::undo() */ bool CAF_Study::redo() { - if ( myStdDoc.IsNull() ) + if ( myStdDoc.IsNull() ) return false; try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif myStdDoc->Redo(); doModified(); /* increment modification counter */ } diff --git a/src/CAF/Makefile.in b/src/CAF/Makefile.am similarity index 55% rename from src/CAF/Makefile.in rename to src/CAF/Makefile.am index d50233a40..f60c261af 100755 --- a/src/CAF/Makefile.in +++ b/src/CAF/Makefile.am @@ -21,51 +21,39 @@ # Module : caf # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES = libcaf.la -@COMMENCE@ - -# header files -EXPORT_HEADERS= CAF.h \ - CAF_Application.h \ - CAF_Operation.h \ - CAF_Study.h \ - CAF_Tools.h - -# .po files to transform in .qm -PO_FILES = CAF_images.po \ - CAF_msg_en.po - -# Libraries targets -LIB = libcaf.la - -LIB_SRC= CAF_Application.cxx \ - CAF_Operation.cxx \ - CAF_Study.cxx \ - CAF_Tools.cxx - -LIB_MOC = \ +salomeinclude_HEADERS= \ + CAF.h \ CAF_Application.h \ CAF_Operation.h \ - CAF_Study.h - -RESOURCES_FILES = \ -redo.png \ -undo.png - - -CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) -I${QTDIR}/src/kernel -I$(QTDIR)/mkspecs/linux-g++ - -LDFLAGS+=$(QT_MT_LIBS) $(CAS_OCAF) $(CAS_OCAFVIS) -LIBS+= -lstd -lsuit - -@CONCLUDE@ - - - - + CAF_Study.h \ + CAF_Tools.h + +dist_libcaf_la_SOURCES= \ + CAF_Application.cxx \ + CAF_Operation.cxx \ + CAF_Study.cxx \ + CAF_Tools.cxx + +MOC_FILES= \ + CAF_Application_moc.cxx \ + CAF_Operation_moc.cxx \ + CAF_Study_moc.cxx +nodist_libcaf_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA = \ + resources/redo.png \ + resources/undo.png + +nodist_salomeres_DATA = \ + CAF_images.qm \ + CAF_msg_en.qm + +libcaf_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) -I${QTDIR}/src/kernel -I$(QTDIR)/mkspecs/linux-g++ \ + -I$(srcdir)/../STD -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx +libcaf_la_LDFLAGS=$(QT_MT_LIBS) $(CAS_OCAF) $(CAS_OCAFVIS) +libcaf_la_LIBADD=../STD/libstd.la ../SUIT/libsuit.la diff --git a/src/CAM/CAM_Application.cxx b/src/CAM/CAM_Application.cxx index baabb3970..cc2d1f703 100755 --- a/src/CAM/CAM_Application.cxx +++ b/src/CAM/CAM_Application.cxx @@ -467,7 +467,13 @@ void CAM_Application::readModuleList() QString modTitle = resMgr->stringValue( *it, QString( "name" ), QString::null ); if ( modTitle.isEmpty() ) - continue; + { + printf( "****************************************************************\n" ); + printf( "* Warning: %s not found in resources.\n", (*it).latin1() ); + printf( "* Module will not be available\n" ); + printf( "****************************************************************\n" ); + continue; + } QString modLibrary = resMgr->stringValue( *it, QString( "library" ), QString::null ).stripWhiteSpace(); if ( !modLibrary.isEmpty() ) @@ -499,7 +505,11 @@ void CAM_Application::readModuleList() if ( desktop() && desktop()->isShown() ) SUIT_MessageBox::warn1( desktop(), tr( "Warning" ), tr( "Modules list is empty" ), tr( "&OK" ) ); else - qWarning( tr( "Modules list is empty" ).latin1() ); + { + printf( "****************************************************************\n" ); + printf( "* Warning: modules list is empty.\n" ); + printf( "****************************************************************\n" ); + } } } diff --git a/src/CAM/CAM_Module.cxx b/src/CAM/CAM_Module.cxx index 9b37b3347..511cad9e3 100755 --- a/src/CAM/CAM_Module.cxx +++ b/src/CAM/CAM_Module.cxx @@ -87,10 +87,13 @@ CAM_Module::~CAM_Module() void CAM_Module::initialize( CAM_Application* app ) { myApp = app; - if (myApp) { + if ( myApp ) + { SUIT_Session* aSession = SUIT_Session::session(); - connect(aSession, SIGNAL( applicationClosed( SUIT_Application* ) ), - this, SLOT( onApplicationClosed( SUIT_Application* ) )); + connect( aSession, SIGNAL( applicationClosed( SUIT_Application* ) ), + this, SLOT( onApplicationClosed( SUIT_Application* ) ) ); + + connect( myApp, SIGNAL( infoChanged( QString ) ), this, SLOT( onInfoChanged( QString ) ) ); } } @@ -167,6 +170,38 @@ void CAM_Module::studyChanged( SUIT_Study* , SUIT_Study* ) { } +/*!Return true if module is active.*/ +bool CAM_Module::isActiveModule() const +{ + return application() ? application()->activeModule() == this : false; +} + +/*! + Put the message into the status bar of the desktop. Message will be displayed + during specified \amscec milliseconds. If parameter \amsec is negative then + message will be persistently displayed when module is active. +*/ +void CAM_Module::putInfo( const QString& msg, const int msec ) +{ + if ( application() ) + application()->putInfo( msg, msec ); + + if ( msec < 0 ) + myInfo = msg; +} + +/*! + Restore persistently displayed info string when previos information status string erasing + if module is active. +*/ +void CAM_Module::onInfoChanged( QString txt ) +{ + if ( txt.isEmpty() && isActiveModule() && !myInfo.isEmpty() && application() ) + application()->putInfo( myInfo ); +} + + + /*!Public slot, nullify application pointer if the application was closed.*/ void CAM_Module::onApplicationClosed( SUIT_Application* theApp ) { @@ -640,10 +675,10 @@ void CAM_Module::connectToStudy( CAM_Study* camStudy ) CAM_DataModel* dm = it.current()->dataModel(); if( it.current() == this && !camStudy->containsDataModel( dm ) ) { - if( prev ) - camStudy->insertDataModel( it.current()->dataModel(), prev ); + if ( prev ) + camStudy->insertDataModel( it.current()->dataModel(), prev ); else - camStudy->insertDataModel( it.current()->dataModel(), 0 ); + camStudy->insertDataModel( it.current()->dataModel(), 0 ); } prev = dm; } diff --git a/src/CAM/CAM_Module.h b/src/CAM/CAM_Module.h index 3409905e7..df9282a41 100755 --- a/src/CAM/CAM_Module.h +++ b/src/CAM/CAM_Module.h @@ -64,6 +64,10 @@ public: virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& title ) {}; virtual void updateCommandsStatus() {}; + virtual void putInfo( const QString&, const int = -1 ); + + bool isActiveModule() const; + /** @name Set Menu Shown*/ //@{ virtual void setMenuShown( const bool ); @@ -89,6 +93,9 @@ public slots: virtual void onApplicationClosed( SUIT_Application* ); +private slots: + void onInfoChanged( QString ); + protected: virtual CAM_DataModel* createDataModel(); @@ -136,6 +143,7 @@ private: CAM_Application* myApp; QString myName; QPixmap myIcon; + QString myInfo; CAM_DataModel* myDataModel; QMap myActionMap; @@ -146,7 +154,8 @@ private: #pragma warning( default: 4251 ) #endif -extern "C" { +extern "C" +{ typedef CAM_Module* (*GET_MODULE_FUNC)(); } diff --git a/src/CAM/CAM_Study.cxx b/src/CAM/CAM_Study.cxx index d874e5a3f..65ded0325 100755 --- a/src/CAM/CAM_Study.cxx +++ b/src/CAM/CAM_Study.cxx @@ -127,10 +127,8 @@ void CAM_Study::dataModelInserted( const CAM_DataModel* dModel ) openDataModel( studyName(), dm ); else // no, just need to update data model's connection to study tree //(some application may want to show model's root in a study tree even if a model is empty) - { dm->create( this ); - updateModelRoot( dm ); - } + updateModelRoot( dm ); } /*! \retval false*/ diff --git a/src/CAM/Makefile.am b/src/CAM/Makefile.am new file mode 100755 index 000000000..4e0a1e5f3 --- /dev/null +++ b/src/CAM/Makefile.am @@ -0,0 +1,59 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : CAM +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libCAM.la + +salomeinclude_HEADERS= \ + CAM_Application.h \ + CAM_DataModel.h \ + CAM_DataObject.h \ + CAM.h \ + CAM_Module.h \ + CAM_Study.h \ + CAM_RootObject.h + +dist_libCAM_la_SOURCES= \ + CAM_Application.cxx \ + CAM_DataModel.cxx \ + CAM_DataObject.cxx \ + CAM_Module.cxx \ + CAM_Study.cxx \ + CAM_RootObject.cxx + +MOC_FILES= \ + CAM_Application_moc.cxx \ + CAM_Module_moc.cxx \ + CAM_Study_moc.cxx \ + CAM_DataModel_moc.cxx +nodist_libCAM_la_SOURCES= $(MOC_FILES) + +nodist_salomeres_DATA=CAM_msg_en.qm + +libCAM_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../STD -I$(srcdir)/../Qtx +libCAM_la_LDFLAGS=$(QT_MT_LIBS) +libCAM_la_LIBS=../SUIT/libsuit.la ../STD/libstd.la + +# what is that? +#LDFLAGSFORBIN= -lSUITApp diff --git a/src/CASCatch/CASCatch.hxx b/src/CASCatch/CASCatch.hxx new file mode 100644 index 000000000..03541f951 --- /dev/null +++ b/src/CASCatch/CASCatch.hxx @@ -0,0 +1,55 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _CASCatch_HeaderFile +#define _CASCatch_HeaderFile + +#include +#include + + +#ifdef try +# undef try +#endif + +#ifdef catch +# undef catch +#endif + +#ifdef NO_CXX_EXCEPTION +# if defined(DO_ABORT) +# define CASCatch_TRY \ + Standard_ErrorHandler _Function; \ + K_SETJMP = 1 ; \ + if(DoesNotAbort(_Function)) +# else //If DO_ABORT is not defined +# define CASCatch_TRY \ + Standard_ErrorHandler _Function; \ + if(DoesNotAbort(_Function)) +# endif //DO_ABORT +# define CASCatch_CATCH(Error) \ + else if(_Function.Catches(STANDARD_TYPE(Error))) +#else +# define CASCatch_TRY try +# define CASCatch_CATCH catch +#endif //NO_CXX_EXCEPTION + + +#endif diff --git a/src/CASCatch/CASCatch_CatchSignals.cxx b/src/CASCatch/CASCatch_CatchSignals.cxx new file mode 100644 index 000000000..b039baaa2 --- /dev/null +++ b/src/CASCatch/CASCatch_CatchSignals.cxx @@ -0,0 +1,333 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "CASCatch_CatchSignals.hxx" + +#include "CASCatch_Failure.hxx" +#include "CASCatch_ErrorHandler.hxx" +#include + +#define MAX_HANDLER_NUMBER 6 + + +//================================================================================ +/*! Public - + * \brief creates a CASCatch_CatchSignals + */ +//================================================================================ +CASCatch_CatchSignals::CASCatch_CatchSignals() + :myIsActivated(Standard_False) +{ + + Standard_Integer i = 0; + for(; i<=MAX_HANDLER_NUMBER; i++) + mySigStates[i] = NULL; +} + +#ifndef WNT + +//================================ UNIX part ================================================== + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef LIN +#include +#endif + +//============================== +typedef void (ACT_SIGIO_HANDLER)(void) ; + +ACT_SIGIO_HANDLER *ADR_ACT_SIGIO_HANDLER = NULL ; + +typedef void (* SIG_PFV) (int); + +#ifdef SUN +# include +#endif + +#ifdef SOLARIS +# include +# include +# include +# include +#endif + +#include +#include + +#ifdef LIN +# include +# include +#else +# ifdef SA_SIGINFO +# ifndef AIX +# include +# endif +# endif +#endif + + +#ifdef IRIX +# include +# include +#endif + + +//================================================================================ +/*! Private - + * \brief universal handler for signals + */ +//================================================================================ +static void Handler(const OSD_Signals theSig, const OSD_Signals) +{ + sigset_t set; + sigemptyset(&set); + sigaddset(&set, theSig); + sigprocmask(SIG_UNBLOCK, &set, NULL) ; + + TCollection_AsciiString aMessage(theSig); + aMessage+=" signal detected"; + + CASCatch_Failure::Raise(aMessage.ToCString()); +} + + +#ifdef SA_SIGINFO +//================================================================================ +/*! Private - + * \brief handler for SIGSEGV signal + */ +//================================================================================ +static void SegvHandler(const OSD_Signals, const Standard_Address, const Standard_Address) +{ + sigset_t set; + sigemptyset(&set); + sigaddset(&set, SIGSEGV); + sigprocmask (SIG_UNBLOCK, &set, NULL); + + CASCatch_Failure::Raise("SIGSEGV detected"); +} +#endif + + +//================================================================================ +/*! Public - + * \brief activates a signals handling + */ +//================================================================================ +void CASCatch_CatchSignals::Activate() +{ + if(myIsActivated) return; + + struct sigaction act; + + Standard_Integer i = 0; + for(; i<=MAX_HANDLER_NUMBER; i++) + mySigStates[i] = new struct sigaction(); //Initialize structures + + int stat; + act.sa_handler = (SIG_PFV) &Handler ; + sigemptyset(&act.sa_mask) ; + + + stat = sigaction(SIGHUP,&act,(struct sigaction*)mySigStates[0]); // ...... hangup + stat = sigaction(SIGFPE,&act,(struct sigaction*) mySigStates[1]); // ...... floating point exception + stat = sigaction(SIGINT,&act,(struct sigaction*)mySigStates[2]); // ...... interrupt + stat = sigaction(SIGQUIT,&act,(struct sigaction*)mySigStates[3]); // ...... quit + stat = sigaction(SIGBUS,&act,(struct sigaction*)mySigStates[4]); // ...... bus error + stat = sigaction(SIGILL,&act,(struct sigaction*)mySigStates[5]); // ...... illegal instruction + +#ifdef SA_RESTART + act.sa_flags = SA_RESTART ; +#else + act.sa_flags = 0 ; +#endif + act.sa_handler = (SIG_PFV) &SegvHandler ; + +#ifdef SA_SIGINFO // OSF,SOLARIS,IRIX + act.sa_flags = act.sa_flags | SA_SIGINFO ; +# ifdef SOLARIS + act.sa_sigaction = (void(*)(int, siginfo_t *, void*)) &SegvHandler ; +# endif +#endif + + stat = sigaction( SIGSEGV , &act , (struct sigaction*)mySigStates[6]); // ...... segmentation violation + + myIsActivated = Standard_True; +} + + +//================================================================================ +/*! Public - + * \brief deactivates a signals handling + */ +//================================================================================ +void CASCatch_CatchSignals::Deactivate() +{ + if(!myIsActivated) return; + + struct sigaction oact; + int stat; + + stat = sigaction(SIGHUP,(struct sigaction*)mySigStates[0],&oact); // ...... hangup + stat = sigaction(SIGFPE,(struct sigaction*)mySigStates[1],&oact); // ...... floating point exception + stat = sigaction(SIGINT,(struct sigaction*)mySigStates[2],&oact); // ...... interrupt + stat = sigaction(SIGQUIT,(struct sigaction*)mySigStates[3],&oact); // ...... quit + stat = sigaction(SIGBUS,(struct sigaction*)mySigStates[4],&oact); // ...... bus error + stat = sigaction(SIGILL,(struct sigaction*)mySigStates[5],&oact); // ...... illegal instruction + stat = sigaction(SIGSEGV,(struct sigaction*)mySigStates[6],&oact); // ...... segmentation violation + + + Standard_Integer i = 0; + for(; i<=MAX_HANDLER_NUMBER; i++) + delete (struct sigaction*)mySigStates[i]; + + myIsActivated = Standard_False; +} + + + +#else +//====================================== WNT part ==================================================== +#include + +#include +#include +#include + +#define _OSD_FPX ( _EM_DENORMAL | _EM_INEXACT | _EM_UNDERFLOW | _EM_ZERODIVIDE | _EM_OVERFLOW) //Mask these exceptions + +//================================================================================ +/*! Private - + * \brief handler for unexpected exceptions + */ +//================================================================================ +static Standard_Integer WntHandler(const Standard_Address theExceptionInfo) +{ + LPEXCEPTION_POINTERS lpXP = ( LPEXCEPTION_POINTERS )theExceptionInfo; + DWORD dwExceptionCode = lpXP -> ExceptionRecord -> ExceptionCode; + + TCollection_AsciiString aMessage((Standard_Integer)dwExceptionCode); + aMessage+=" Exception code - unexpected exception"; + + CASCatch_Failure::Raise(aMessage.ToCString()); + + return EXCEPTION_EXECUTE_HANDLER; +} + +void SIGWntHandler(int , int ) ; +static void (*SIGWNTHANDLER)(int) = ( void (*)(int) ) ( &SIGWntHandler ) ; + + +//================================================================================ +/*! Private - + * \brief handler for signals + */ +//================================================================================ +static void SIGWntHandler(const int signum , const int theCode) +{ + + void (*OLDSIGWNTHANDLER)(int) ; + switch( signum ) { + case SIGFPE : + _fpreset() ; + _clearfp() ; + _controlfp ( _OSD_FPX, _MCW_EM ); + OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER ); + + if(theCode == _FPE_UNDERFLOW || theCode == _FPE_INEXACT) return; + CASCatch_Failure::Raise ("Floating point error"); + break; + case SIGSEGV : + OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER ); + CASCatch_Failure::Raise("Access violation"); + break; + case SIGILL : + OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER ); + CASCatch_Failure::Raise("Illegal instruction" ); + break; + } +} + + +//================================================================================ +/*! Public - + * \brief activates a signals handling + */ +//================================================================================ +void CASCatch_CatchSignals::Activate() +{ + if(myIsActivated) return; + + mySigStates[0] = SetUnhandledExceptionFilter (( LPTOP_LEVEL_EXCEPTION_FILTER )&WntHandler); + + myFloatOpWord = _controlfp(0, 0); + _controlfp ( _OSD_FPX, _MCW_EM ); //Enable floating point exceptions + + mySigStates[1] = signal( SIGSEGV , SIGWNTHANDLER ); + mySigStates[2] = signal( SIGFPE , SIGWNTHANDLER ); + mySigStates[3] = signal( SIGILL , SIGWNTHANDLER ); + + myIsActivated = Standard_True; +} + +//================================================================================ +/*! Public - + * \brief deactivates a signals handling + */ +//================================================================================ +void CASCatch_CatchSignals::Deactivate() +{ + if(!myIsActivated) return; + + SetUnhandledExceptionFilter (( LPTOP_LEVEL_EXCEPTION_FILTER )mySigStates[0]); + + _controlfp ( myFloatOpWord, _MCW_EM ); + + signal( SIGSEGV , ( void (*)(int) )mySigStates[1]); + signal( SIGFPE , ( void (*)(int) )mySigStates[2]); + signal( SIGILL , ( void (*)(int) )mySigStates[3]); + + Standard_Integer i = 0; + for(; i<=MAX_HANDLER_NUMBER; i++) + mySigStates[i] = NULL; + + myIsActivated = Standard_False; +} + +#endif + +//================================================================================ +/*! Private - + * \brief deactivates a signals handling + */ +//================================================================================ +void CASCatch_CatchSignals::Destroy() +{ + if(myIsActivated) Deactivate(); +} + diff --git a/src/CASCatch/CASCatch_CatchSignals.hxx b/src/CASCatch/CASCatch_CatchSignals.hxx new file mode 100644 index 000000000..a3fc42c3e --- /dev/null +++ b/src/CASCatch/CASCatch_CatchSignals.hxx @@ -0,0 +1,63 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _CASCatch_CatchSignals_HeaderFile +#define _CASCatch_CatchSignals_HeaderFile + +#include + +/*! + * \class CASCatch_CatchSignals + * \brief This class controls an exception handling + * + */ +class CASCatch_CatchSignals { + +public: + + // Methods PUBLIC + // +Standard_EXPORT CASCatch_CatchSignals(); +Standard_EXPORT void Destroy() ; +~CASCatch_CatchSignals() { Destroy(); } +Standard_EXPORT void Activate() ; +Standard_EXPORT void Deactivate() ; + +private: + +/*!\var mySigStates[7], private + * \brief stores signals' handler functions + */ +Standard_Address mySigStates[7]; + +/*!\var myFloatOpWord + * \brief stores a float operation word, private + */ +Standard_Integer myFloatOpWord; + +/*!\var myIsActivated + * \brief stores a flag whether a catcher is activated, private] + */ +Standard_Boolean myIsActivated; + +}; + + +#endif diff --git a/src/CASCatch/CASCatch_ErrorHandler.cxx b/src/CASCatch/CASCatch_ErrorHandler.cxx new file mode 100644 index 000000000..49af8d356 --- /dev/null +++ b/src/CASCatch/CASCatch_ErrorHandler.cxx @@ -0,0 +1,122 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifdef NO_CXX_EXCEPTION + +#include "CASCatch_ErrorHandler.hxx" + +// During setjmp()/longjmp() K_SETJMP_CASCatch is non zero (try) +// So if there is an abort request and if K_SETJMP_CASCatch is non zero, the abort +// request will be ignored. If the abort request do a raise during a setjmp +// or a longjmp, there will be a "terminating SEGV" impossible to handle. + + +Standard_EXPORT int K_SETJMP_CASCatch = 0 ; + +static Handle(CASCatch_Failure) GlbError; //Last caught Error, Null if there is no error + +static CASCatch_ErrorHandler* Top = 0; //The top of the Errors Stack + +//======================================================================= +//function : CASCatch_ErrorHandler +//purpose : Constructor +//======================================================================= +CASCatch_ErrorHandler::CASCatch_ErrorHandler () +{ + Previous = Top; + Top = this; + CaughtError.Nullify(); + GlbError.Nullify(); +} + +//======================================================================= +//function : ~CASCatch_ErrorHandler +//purpose : Destructor : Delete the ErrorHandler and Abort if there is a 'Error'. +//======================================================================= +CASCatch_ErrorHandler::~CASCatch_ErrorHandler() +{ + Top = Top->Previous; + if( !GlbError.IsNull() ) Abort(); +} + +//======================================================================= +//function : Abort: make a longjmp to the saved Context. +//purpose : Abort if there is a non null 'Error' +//======================================================================= +void CASCatch_ErrorHandler::Abort () +{ + //==== Check if can do the "longjmp" ======================================= + if(Top == NULL || Top->Label == NULL) { + cout << "*** Abort *** an exception was raised, but no catch was found." << endl; + cout << "\t... The exception is:" << GlbError; + exit(1); + } + +#ifdef DO_ABORT + if ( K_SETJMP_CASCatch ) + cout << "Recursive abort ===> Terminating SEGV ..." << endl ; + K_SETJMP_CASCatch = 1 ; +#endif + + longjmp(Top->Label, Standard_True); +} + +//======================================================================= +//function : Catches +//purpose : If there is a 'Error', and it is in good type +// returns True and clean 'Error', else returns False. +//======================================================================= +Standard_Boolean CASCatch_ErrorHandler::Catches + (const Handle(Standard_Type)& AType) +{ +#ifdef DO_ABORT + K_SETJMP_CASCatch = 0 ; +#endif + if(GlbError.IsNull()) + return Standard_False; + + if(GlbError->IsKind(AType)){ + CaughtError = GlbError; + GlbError.Nullify(); + return Standard_True; + } else { + return Standard_False; + } +} + +//======================================================================= +//function : LastCaughtError +//purpose : +//======================================================================= +Handle(CASCatch_Failure) CASCatch_ErrorHandler::LastCaughtError() +{ + return Top->CaughtError; +} + +//======================================================================= +//function : Error +//purpose : +//======================================================================= +void CASCatch_ErrorHandler::Error(const Handle(CASCatch_Failure)& aError) +{ + GlbError = aError; +} + +#endif diff --git a/src/CASCatch/CASCatch_ErrorHandler.hxx b/src/CASCatch/CASCatch_ErrorHandler.hxx new file mode 100644 index 000000000..05c6b2356 --- /dev/null +++ b/src/CASCatch/CASCatch_ErrorHandler.hxx @@ -0,0 +1,92 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _CASCatch_ErrorHandler_HeaderFile +#define _CASCatch_ErrorHandler_HeaderFile + +#include "CASCatch_Failure.hxx" + +#include +#include + + +extern int K_SETJMP_CASCatch ; + +/*! + * \class CASCatch_ErrorHandler + * \brief This class is an exception handler, private + * + */ +class CASCatch_ErrorHandler +{ + friend class CASCatch_Failure; // To execute the raise exception. + + public: + + Standard_EXPORT CASCatch_ErrorHandler(); + Standard_EXPORT ~CASCatch_ErrorHandler(); + Standard_EXPORT Standard_Boolean Catches (const Handle(Standard_Type)&); + + private: + Standard_EXPORT static void Abort(); + Standard_EXPORT static void Error(const Handle(CASCatch_Failure)&); + Standard_EXPORT static Handle(CASCatch_Failure) LastCaughtError(); + + //==== The fields =========================================================== + private: + CASCatch_ErrorHandler* Previous; + Handle(CASCatch_Failure) CaughtError; + + public: + jmp_buf Label; + +}; + +#undef CASCatch_TRY +#define CASCatch_TRY try + +#undef CASCatch_CATCH +#define CASCatch_CATCH catch + + +#ifdef NO_CXX_EXCEPTION +# undef CASCatch_TRY +# undef CASCatch_CATCH + +# if defined(DO_ABORT) + +# define DoesNotAbort_CASCatch(aHandler) !(K_SETJMP_CASCatch = setjmp(aHandler.Label)) + +# define CASCatch_TRY CASCatch_ErrorHandler _Function; \ + K_SETJMP_CASCatch = 1 ; \ + if(DoesNotAbort_CASCatch(_Function)) + +# else //If DO_ABORT is not defined +# define DoesNotAbort_CASCatch(aHandler) !setjmp(aHandler.Label) + +# define CASCatch_TRY CASCatch_ErrorHandler _Function; \ + if(DoesNotAbort_CASCatch(_Function)) +# endif //DO_ABORT + + +# define CASCatch_CATCH(Error) else if(_Function.Catches(STANDARD_TYPE(Error))) +#endif //NO_CXX_EXCEPTION + +#endif //_CASCatch_ErrorHandler_HeaderFile diff --git a/src/CASCatch/CASCatch_Failure.cxx b/src/CASCatch/CASCatch_Failure.cxx new file mode 100644 index 000000000..6e5d3d884 --- /dev/null +++ b/src/CASCatch/CASCatch_Failure.cxx @@ -0,0 +1,126 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "CASCatch_Failure.hxx" +#include "CASCatch_ErrorHandler.hxx" +#include +#include +#include + +IMPLEMENT_STANDARD_HANDLE( CASCatch_Failure, Standard_Transient ) +IMPLEMENT_STANDARD_RTTIEXT( CASCatch_Failure, Standard_Transient ) + + +#ifndef NO_CXX_EXCEPTION +static Handle(CASCatch_Failure) RaisedError; +#endif + +//================================================================================ +/*! Public - + * \brief creates a CASCatch_Failure + */ +//================================================================================ +CASCatch_Failure::CASCatch_Failure () { myMessage = "Signal detected";} + + +//================================================================================ +/*! Public - + * \brief creates a CASCatch_Failure with a message + * \param an exception message + */ +//================================================================================ +CASCatch_Failure::CASCatch_Failure (const Standard_CString AString) +{ + if(AString) { + myMessage = new Standard_Character[strlen(AString) + 1]; + strcpy(myMessage,AString); + } +} + +//================================================================================ +/*! Public - + * \brief returns the last caught exception + */ +//================================================================================ +Handle(CASCatch_Failure) CASCatch_Failure::Caught() +{ +#ifdef NO_CXX_EXCEPTION + return CASCatch_ErrorHandler::LastCaughtError(); +#else + return RaisedError ; +#endif +} + +//================================================================================ +/*! Public - + * \brief raises a CASCatch_Failure exception + * \param an exception message + */ +//================================================================================ +void CASCatch_Failure::Raise (const Standard_CString AString) +{ + Handle(CASCatch_Failure) E = new CASCatch_Failure() ; + E->Reraise (AString) ; +} + + +//================================================================================ +/*! Public - + * \brief re-raises a CASCatch_Failure exception + * \param an exception message + */ +//================================================================================ +void CASCatch_Failure::Reraise (const Standard_CString AString) +{ + if(AString){ + myMessage = new Standard_Character[strlen(AString) + 1]; + strcpy(myMessage,AString); + } + +#ifdef NO_CXX_EXCEPTION + CASCatch_ErrorHandler::Error(this) ; + CASCatch_ErrorHandler::Abort(); +#else + RaisedError = this ; + Throw() ; +#endif +} + +//================================================================================ +/*! Public - + * \brief returns an exception message + */ +//================================================================================ +Standard_CString CASCatch_Failure::GetError() const +{ + return myMessage; +} + +//================================================================================ +/*! Public - + * \brief Is called when using standard C++ exceptions + */ +//================================================================================ +void CASCatch_Failure::Throw() const +{ +#ifndef NO_CXX_EXCEPTION + throw CASCatch_Failure() ; +#endif +} + diff --git a/src/CASCatch/CASCatch_Failure.hxx b/src/CASCatch/CASCatch_Failure.hxx new file mode 100644 index 000000000..102f0ec4e --- /dev/null +++ b/src/CASCatch/CASCatch_Failure.hxx @@ -0,0 +1,60 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef _CASCATCH_FAILURE_HeaderFile +#define _CASCATCH_FAILURE_HeaderFile + +#include +#include +DEFINE_STANDARD_HANDLE( CASCatch_Failure, Standard_Transient ) + +#include + +/*! + * \class CASCatch_Failure + * \brief This class presents an exception to be thrown + * + */ +class CASCatch_Failure : public Standard_Transient +{ + +public: + +Standard_EXPORT CASCatch_Failure(); +Standard_EXPORT CASCatch_Failure(const Standard_CString aString); +Standard_EXPORT void Reraise(const Standard_CString aMessage) ; +Standard_EXPORT Standard_CString GetError() const; +Standard_EXPORT static Handle_CASCatch_Failure Caught() ; +Standard_EXPORT static void Raise(const Standard_CString aMessage = "") ; +Standard_EXPORT virtual void Throw() const;public: + +public: + +DEFINE_STANDARD_RTTI( CASCatch_Failure ) + +private: +/*!\var myMessage + * \brief stores an exception message + */ +Standard_CString myMessage; + +}; + + +#endif diff --git a/src/CASCatch/Makefile.am b/src/CASCatch/Makefile.am new file mode 100644 index 000000000..a4b9f7156 --- /dev/null +++ b/src/CASCatch/Makefile.am @@ -0,0 +1,41 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG +# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Sergey RUIN (OCN) +# Module : SALOME + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + + +salomeinclude_HEADERS = CASCatch.hxx \ + CASCatch_CatchSignals.hxx \ + CASCatch_ErrorHandler.hxx \ + CASCatch_Failure.hxx + +lib_LTLIBRARIES = libCASCatch.la +libCASCatch_la_SOURCES = \ + CASCatch_CatchSignals.cxx \ + CASCatch_ErrorHandler.cxx \ + CASCatch_Failure.cxx + +COMMON_CPPFLAGS = \ + @CAS_CPPFLAGS@ @CAS_CXXFLAGS@ + +libCASCatch_la_CPPFLAGS = $(COMMON_CPPFLAGS) +libCASCatch_la_LIBADD = $(CAS_KERNEL) diff --git a/src/DDS/DDS_DicGroup.cxx b/src/DDS/DDS_DicGroup.cxx index 4ecf18b3e..56197a523 100644 --- a/src/DDS/DDS_DicGroup.cxx +++ b/src/DDS/DDS_DicGroup.cxx @@ -33,6 +33,15 @@ IMPLEMENT_STANDARD_HANDLE(DDS_DicGroup, MMgt_TShared) IMPLEMENT_STANDARD_RTTIEXT(DDS_DicGroup, MMgt_TShared) +/*! + \class DDS_DicGroup + + This class to provide set of DDS_DicItem objects from one component. +*/ + +/*! + Constructor. Create the group with name \aname. +*/ DDS_DicGroup::DDS_DicGroup( const TCollection_AsciiString& name ) : MMgt_TShared(), myName( name ), @@ -40,15 +49,25 @@ myActiveSystem( UNIT_SYSTEM_SI ) { } +/*! + Copy constructor. +*/ DDS_DicGroup::DDS_DicGroup( const DDS_DicGroup& ) { } +/*! + Get the name of group (component). +*/ TCollection_AsciiString DDS_DicGroup::GetName() const { return myName; } +/*! + Returns the names list of defined unit systems. + Parameter \atheSystems will contains the sequence of string names. +*/ void DDS_DicGroup::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystemSeq ) const { theSystemSeq.Clear(); @@ -61,6 +80,9 @@ void DDS_DicGroup::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystemSeq ) } } +/*! + Returns the label of unit system \aname. If unit system not found then empty string returned. +*/ TCollection_ExtendedString DDS_DicGroup::GetUnitSystemLabel( const TCollection_AsciiString& name ) const { TCollection_ExtendedString aLabel; @@ -69,21 +91,33 @@ TCollection_ExtendedString DDS_DicGroup::GetUnitSystemLabel( const TCollection_A return aLabel; } +/*! + Gets the name of active unit system. +*/ TCollection_AsciiString DDS_DicGroup::GetActiveUnitSystem() const { return myActiveSystem; } +/*! + Sets the name of active unit system. +*/ void DDS_DicGroup::SetActiveUnitSystem( const TCollection_AsciiString& theSystem ) { if ( myUnitSystem.IsBound( theSystem ) ) myActiveSystem = theSystem; } +/*! + Assignment operator. +*/ void DDS_DicGroup::operator=( const DDS_DicGroup& ) { } +/*! + Fill the internal data structures from XML parsed structures. Internal. +*/ void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM_Element& theDocElement ) { TCollection_AsciiString aCompName = theComponentData.getAttribute( DDS_Dictionary::KeyWord( "COMPONENT_NAME" ) ); @@ -140,9 +174,9 @@ void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM } /*! - Returns DicItem with all attached data + Gets dictionary item with specified identifier \atheID. + If dictionary item not found then null handle returned. */ - Handle(DDS_DicItem) DDS_DicGroup::GetDicItem( const TCollection_AsciiString& theID ) const { Handle(DDS_DicItem) aDicItem; diff --git a/src/DDS/DDS_DicItem.cxx b/src/DDS/DDS_DicItem.cxx index 1582aab3f..48ce715a9 100644 --- a/src/DDS/DDS_DicItem.cxx +++ b/src/DDS/DDS_DicItem.cxx @@ -35,6 +35,15 @@ IMPLEMENT_STANDARD_HANDLE(DDS_DicItem, MMgt_TShared) IMPLEMENT_STANDARD_RTTIEXT(DDS_DicItem, MMgt_TShared) +/*! + \class DDS_DicItem + + This class to provide information about datum (phisical characteristic parameter). +*/ + +/*! + Constructor. Creates the instance of empty dictionary item. +*/ DDS_DicItem::DDS_DicItem() : myType( 0 ), myDefValue( 0 ), @@ -46,54 +55,87 @@ myZoomOrder( 2 ) { } +/*! + Copy constructor. Internal. +*/ DDS_DicItem::DDS_DicItem( const DDS_DicItem& ) { } +/*! + Assignment operator. Internal. +*/ void DDS_DicItem::operator=( const DDS_DicItem& ) { } +/*! + Gets the identifier of parameter. +*/ TCollection_AsciiString DDS_DicItem::GetId() const { return myId; } +/*! + Gets the type of parameter. +*/ DDS_DicItem::Type DDS_DicItem::GetType() const { return (DDS_DicItem::Type)myType; } +/*! + Gets the label of the parameter. +*/ TCollection_ExtendedString DDS_DicItem::GetLabel() const { return myLabel; } +/*! + Gets the filter (regular expression) for the parameter values. +*/ TCollection_ExtendedString DDS_DicItem::GetFilter() const { return myFilter; } +/*! + Gets the Required attribute of the parameter. +*/ TCollection_ExtendedString DDS_DicItem::GetRequired() const { return myRequired; } +/*! + Gets the wrong value warning level of the parameter. +*/ DDS_MsgType DDS_DicItem::GetWarningLevel() const { return (DDS_MsgType)myWarnLevel; } +/*! + Gets the long description of the parameter. +*/ TCollection_ExtendedString DDS_DicItem::GetLongDescription() const { return myLongDescr; } +/*! + Gets the short description of the parameter. +*/ TCollection_ExtendedString DDS_DicItem::GetShortDescription() const { return myShortDescr; } +/*! + Gets the name of component - owner of parameter. +*/ TCollection_AsciiString DDS_DicItem::GetComponent() const { TCollection_AsciiString aCompName; @@ -103,11 +145,18 @@ TCollection_AsciiString DDS_DicItem::GetComponent() const return aCompName; } +/*! + Gets the parameter unit of measure for active unit system. +*/ TCollection_AsciiString DDS_DicItem::GetUnits() const { return GetUnits( GetActiveUnitSystem() ); } +/*! + Gets the parameter unit of measure for specified unit system \atheSystem. + If specified unit system doesn't exist then empty string returned. +*/ TCollection_AsciiString DDS_DicItem::GetUnits( const UnitSystem& theSystem ) const { TCollection_AsciiString anUnits; @@ -117,31 +166,54 @@ TCollection_AsciiString DDS_DicItem::GetUnits( const UnitSystem& theSystem ) con return anUnits; } +/*! + Gets the minimum value of parameter for active unit system. + Returned value converted to SI. +*/ Standard_Real DDS_DicItem::GetMinValue() const { return GetMinValue( GetActiveUnitSystem() ); } +/*! + Gets the minimum value of parameter for specified unit system \atheSystem. + Returned value converted to SI. +*/ Standard_Real DDS_DicItem::GetMinValue( const UnitSystem& theUnitsSystem ) const { return FromSI( myMin, theUnitsSystem ); } +/*! + Gets the maximum value of parameter for active unit system. + Returned value converted to SI. +*/ Standard_Real DDS_DicItem::GetMaxValue() const { return GetMaxValue( GetActiveUnitSystem() ); } +/*! + Gets the maximum value of parameter for specified unit system \atheSystem. + Returned value converted to SI. +*/ Standard_Real DDS_DicItem::GetMaxValue( const UnitSystem& theUnitsSystem ) const { return FromSI( myMax, theUnitsSystem ); } +/*! + Gets the precision (number of digit after decimal point) of parameter for active unit system. +*/ Standard_Integer DDS_DicItem::GetPrecision() const { return GetPrecision( GetActiveUnitSystem() ); } +/*! + Gets the precision (number of digit after decimal point) of parameter for specified + unit system \atheSystem. If specified unit system doesn't exist then zero returned. +*/ Standard_Integer DDS_DicItem::GetPrecision( const UnitSystem& theSystem ) const { Standard_Integer aRes = 0; @@ -151,11 +223,21 @@ Standard_Integer DDS_DicItem::GetPrecision( const UnitSystem& theSystem ) const return aRes; } +/*! + Gets the default value of parameter for active unit system. Default value returned as string. + If type of value is numeric (Float or Integer) and default value defined then returned number + converted to SI. +*/ TCollection_ExtendedString DDS_DicItem::GetDefaultValue() const { return GetDefaultValue( GetActiveUnitSystem() ); } +/*! + Gets the default value of parameter for specified unit system \atheSystem. Default value returned + as string. If type of value is numeric (Float or Integer) and default value defined then returned + number converted to SI. +*/ TCollection_ExtendedString DDS_DicItem::GetDefaultValue( const UnitSystem& theSystem ) const { if ( !myDefString.Length() ) @@ -179,11 +261,21 @@ TCollection_ExtendedString DDS_DicItem::GetDefaultValue( const UnitSystem& theSy return aStr; } +/*! + Gets the format string of parameter for active unit system. If argument \atheCanonical + is true then format string will be reduced to sprintf() specification (without extra + non standard qualifiers). +*/ TCollection_AsciiString DDS_DicItem::GetFormat( const Standard_Boolean theCanonical ) const { return GetFormat( GetActiveUnitSystem(), theCanonical ); } +/*! + Gets the format string of parameter for specified unit system \atheSystem. If argument + \atheCanonical is true then format string will be reduced to sprintf() specification + (without extra non standard qualifiers). +*/ TCollection_AsciiString DDS_DicItem::GetFormat( const UnitSystem& theSystem, const Standard_Boolean theCanonical ) const { @@ -212,8 +304,8 @@ TCollection_AsciiString DDS_DicItem::GetFormat( const UnitSystem& theSystem, } /*! - Access valueList:name of the parameter. This string is void if the list is - not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue + Gets name of a list referenced by the parameter. This string is empty if the list + refernce is not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue */ TCollection_ExtendedString DDS_DicItem::GetNameOfValues() const { @@ -221,8 +313,8 @@ TCollection_ExtendedString DDS_DicItem::GetNameOfValues() const } /*! - Access valueList of the parameter. This sequence is empty if the list is - not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue + Gets item names and item ids of a list referenced by the parameter. This sequences is empty if + the list reference is not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue */ Standard_Boolean DDS_DicItem::GetListOfValues( Handle(TColStd_HArray1OfExtendedString)& theStrings, Handle(TColStd_HArray1OfInteger)& theIntegers ) const @@ -233,8 +325,8 @@ Standard_Boolean DDS_DicItem::GetListOfValues( Handle(TColStd_HArray1OfExtendedS } /*! - Access valueList of the parameter. This sequence is empty if the list is not - defined - then use other properties: Type, DefaultValue, MaxValue, MinValue + Gets item names, item ids and item icons of a list referenced by the parameter. This sequences is empty + if the list reference is not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue */ Standard_Boolean DDS_DicItem::GetListOfValues( Handle(TColStd_HArray1OfExtendedString)& theStrings, Handle(TColStd_HArray1OfInteger)& theIntegers, @@ -246,6 +338,10 @@ Standard_Boolean DDS_DicItem::GetListOfValues( Handle(TColStd_HArray1OfExtendedS return !theIntegers.IsNull() && !theStrings.IsNull() && !theIcons.IsNull(); } + +/*! + Gets special values of the parameter. +*/ Standard_Boolean DDS_DicItem::GetSpecialValues( TColStd_MapOfReal& theMap ) const { theMap.Clear(); @@ -266,7 +362,7 @@ Standard_Boolean DDS_DicItem::GetSpecialValues( TColStd_MapOfReal& theMap ) cons } /*! - Returns min value of lateral zooming + Gets minimum value of lateral zooming */ Standard_Real DDS_DicItem::GetMinZoom() const { @@ -274,7 +370,7 @@ Standard_Real DDS_DicItem::GetMinZoom() const } /*! - Returns Max Value of lateral zooming + Gets maximum value of lateral zooming */ Standard_Real DDS_DicItem::GetMaxZoom() const { @@ -282,25 +378,31 @@ Standard_Real DDS_DicItem::GetMaxZoom() const } /*! - Get Order of lateral zooming + Gets order of lateral zooming */ Standard_Real DDS_DicItem::GetZoomOrder() const { return myZoomOrder; } +/*! + Convert value \atheVal to default SI units according to active unit system. +*/ Standard_Real DDS_DicItem::ToSI( const Standard_Real theVal ) const { return ToSI( theVal, GetActiveUnitSystem() ); } +/*! + Convert value \atheVal from default SI units according to active unit system. +*/ Standard_Real DDS_DicItem::FromSI( const Standard_Real theVal ) const { return FromSI( theVal, GetActiveUnitSystem() ); } /*! - Convert value to default SI units according to current units + Convert value to default SI units according to unit system \atheUnitsSystem. */ Standard_Real DDS_DicItem::ToSI( const Standard_Real theVal, const UnitSystem& theUnitsSystem ) const { @@ -312,7 +414,7 @@ Standard_Real DDS_DicItem::ToSI( const Standard_Real theVal, const UnitSystem& t } /*! - Convert value from default SI units according to current units + Convert value from default SI units according to unit system \atheUnitsSystem. */ Standard_Real DDS_DicItem::FromSI( const Standard_Real theVal, const UnitSystem& theUnitsSystem ) const { @@ -324,7 +426,7 @@ Standard_Real DDS_DicItem::FromSI( const Standard_Real theVal, const UnitSystem& } /*! - Returns 'true' if specified data exist. + Returns 'true' if data specified by \aflag exist. */ Standard_Boolean DDS_DicItem::HasData( const Standard_Integer flag ) const { @@ -332,7 +434,33 @@ Standard_Boolean DDS_DicItem::HasData( const Standard_Integer flag ) const } /*! - Parse record in XML file and retrieve information relevant for this data dic item + Returns options for specified name \aname. If option not found then empty string returned. +*/ +TCollection_ExtendedString DDS_DicItem::GetOption( const TCollection_AsciiString& name ) const +{ + TCollection_ExtendedString res; + if ( myOptions.IsBound( name ) ) + res = myOptions.Find( name ); + return res; +} + +/*! + Returns names list of existing options in the specified sequence \anames. + If list not empty retunrs 'true' otherwise 'false'. +*/ +Standard_Boolean DDS_DicItem::GetOptionNames( TColStd_SequenceOfAsciiString& names ) const +{ + names.Clear(); + + for ( OptionsMap::Iterator it( myOptions ); it.More(); it.Next() ) + names.Append( it.Key() ); + + return !names.IsEmpty(); +} + + +/*! + Parse record in XML file and retrieve information relevant for this dictionary item */ void DDS_DicItem::FillDataMap( TCollection_AsciiString theID, const LDOM_Element& theDatum, const LDOM_Element& theCompElement, const LDOM_Element& theDocElement, @@ -576,6 +704,31 @@ void DDS_DicItem::FillDataMap( TCollection_AsciiString theID, const LDOM_Element } } + // Quantity::Options + LDOM_Element anOpt = theDatum.GetChildByTagName( DDS_Dictionary::KeyWord( "OPTIONS" ) ); + if ( !anOpt.isNull() ) + { + LDOM_NodeList anOptions = anOpt.getElementsByTagName( DDS_Dictionary::KeyWord( "OPTION" ) ); + for ( Standard_Integer oi = 0; oi < anOptions.getLength(); oi++ ) + { + LDOM_Node node = anOptions.item( oi ); + if ( node.getNodeType() != LDOM_Node::ELEMENT_NODE ) + continue; + + LDOM_Element& elem = (LDOM_Element&)node; + TCollection_AsciiString name = elem.getAttribute( DDS_Dictionary::KeyWord( "OPTION_NAME" ) ); + + TCollection_ExtendedString value; + const LDOM_Node aNode = elem.getFirstChild(); + LDOM_Text anOptTxt( (const LDOM_Text&)(aNode) ); + if ( !anOptTxt.isNull() ) + value = anOptTxt.getData(); + + if ( !name.IsEmpty() && value.Length() && !myOptions.IsBound( name ) ) + myOptions.Bind( name, value ); + } + } + NCollection_DataMap aDimMap; for ( NCollection_DataMap::Iterator it( myUnitData ); it.More(); it.Next() ) @@ -793,7 +946,7 @@ void DDS_DicItem::GetFloatFormat( const TCollection_AsciiString& theFlags, } /*! - Prepares three formants for each unit systems + Prepares formats for each unit systems */ void DDS_DicItem::PrepareFormats( const TCollection_AsciiString& theFormat ) { @@ -915,6 +1068,9 @@ void DDS_DicItem::PrepareFormats( const TCollection_AsciiString& theFormat ) } } +/*! + Split the string \atheStr by spaces and returns substrings in array \aaRes. +*/ void DDS_DicItem::Split( const TCollection_AsciiString& theStr, Handle(TColStd_HArray1OfExtendedString)& aRes ) { aRes.Nullify(); @@ -946,6 +1102,9 @@ void DDS_DicItem::Split( const TCollection_AsciiString& theStr, Handle(TColStd_H } } +/*! + Returns unit structure for given unit system \asys. +*/ DDS_DicItem::UnitData* DDS_DicItem::GetUnitData( const UnitSystem& sys ) const { UnitData* unit = 0; @@ -956,6 +1115,9 @@ DDS_DicItem::UnitData* DDS_DicItem::GetUnitData( const UnitSystem& sys ) const return unit; } +/*! + Gets the active unit system. +*/ DDS_DicItem::UnitSystem DDS_DicItem::GetActiveUnitSystem() const { UnitSystem aSystem; diff --git a/src/DDS/DDS_DicItem.h b/src/DDS/DDS_DicItem.h index 36b30811e..b32639900 100644 --- a/src/DDS/DDS_DicItem.h +++ b/src/DDS/DDS_DicItem.h @@ -47,8 +47,23 @@ class TColStd_SequenceOfExtendedString; class DDS_DicItem : public MMgt_TShared { public: - enum Type { String, Float, Integer, List, Unknown }; - enum Data { MinValue = 0x01, MaxValue = 0x02, DefaultValue = 0x04 }; + /*! Enum describes type of datum value */ + enum Type + { + String, //!< String type of value + Float, //!< Real (double) numeric type of value + Integer, //!< Integer (int) numeric type of value + List, //!< List type of enumerable value + Unknown //!< Unknown or undefined type of value + }; + + /*! Enum describes the flags for existance of domain data */ + enum Data + { + MinValue = 0x01, //!< Flag of minimum value definition existence + MaxValue = 0x02, //!< Flag of maximum value definition existence + DefaultValue = 0x04 //!< Flag of default value definition existence + }; // This struct is intended for map of Format, Units, Precision and Scale struct UnitData @@ -66,114 +81,64 @@ public: DDS_DicItem(); Standard_EXPORT TCollection_AsciiString GetId() const; - // to access Type of the parameter - Standard_EXPORT DDS_DicItem::Type GetType() const; - // to access Type of the parameter - Standard_EXPORT TCollection_ExtendedString GetLabel() const; - // to access Label (name) of the parameter - Standard_EXPORT TCollection_ExtendedString GetFilter() const; - // to access filter (regexp) for the parameter values - Standard_EXPORT TCollection_ExtendedString GetRequired() const; - // to access Required of the parameter - Standard_EXPORT DDS_MsgType GetWarningLevel() const; - // to access wrong value warning level of the parameter - Standard_EXPORT TCollection_ExtendedString GetLongDescription() const; - // to access Long Description of the parameter - Standard_EXPORT TCollection_ExtendedString GetShortDescription() const; - // to access Short Description of the parameter - Standard_EXPORT TCollection_AsciiString GetComponent() const; Standard_EXPORT TCollection_AsciiString GetUnits() const; Standard_EXPORT TCollection_AsciiString GetUnits( const UnitSystem& ) const; - // returns units for indicated unit systems Standard_EXPORT TCollection_ExtendedString GetDefaultValue() const; Standard_EXPORT TCollection_ExtendedString GetDefaultValue( const UnitSystem& ) const; - // to access Default Value of the parameter Standard_EXPORT Standard_Real GetMinValue() const; Standard_EXPORT Standard_Real GetMinValue( const UnitSystem& ) const; - // get Min Value of the parameter, either in specified unit system or in internal units (basic SI) Standard_EXPORT Standard_Real GetMaxValue() const; Standard_EXPORT Standard_Real GetMaxValue( const UnitSystem& ) const; - // get Max Value of the parameter, either in specified unit system or in internal units (basic SI) Standard_EXPORT Standard_Integer GetPrecision() const; Standard_EXPORT Standard_Integer GetPrecision( const UnitSystem& ) const; - // returns precision for indicated unit systems Standard_EXPORT TCollection_AsciiString GetFormat( const Standard_Boolean = Standard_True ) const; Standard_EXPORT TCollection_AsciiString GetFormat( const UnitSystem&, const Standard_Boolean = Standard_True ) const; - // returns format for indicated unit systems - Standard_EXPORT TCollection_ExtendedString GetNameOfValues() const; - // to access valueList:name of the parameter. - // This string is void if the list is not defined - then use other properties: - // Type, DefaultValue, MaxValue, MinValue - Standard_EXPORT Standard_Boolean GetListOfValues( Handle(TColStd_HArray1OfExtendedString)&, Handle(TColStd_HArray1OfInteger)& ) const; - // to access valueList of the parameter - // This sequence is empty if the list not defined - then use other properties: - // Type, DefaultValue, MaxValue, MinValue - Standard_EXPORT Standard_Boolean GetListOfValues( Handle(TColStd_HArray1OfExtendedString)&, Handle(TColStd_HArray1OfInteger)&, Handle(TColStd_HArray1OfExtendedString)& ) const; - // to access valueList of the parameter - // This sequence is empty if the list not defined - then use other properties: - // Type, DefaultValue, MaxValue, MinValue - Standard_EXPORT Standard_Boolean GetSpecialValues( TColStd_MapOfReal& ) const; - // get values from specVal Standard_EXPORT Standard_Real GetMinZoom() const; - // get Min Value of lateral zooming - Standard_EXPORT Standard_Real GetMaxZoom() const; - // get Max Value of lateral zooming - Standard_EXPORT Standard_Real GetZoomOrder() const; - // get Order of lateral zooming - Standard_EXPORT Standard_Real ToSI( const Standard_Real ) const; - Standard_EXPORT Standard_Real FromSI( const Standard_Real ) const; + Standard_EXPORT Standard_Real ToSI( const Standard_Real ) const; + Standard_EXPORT Standard_Real FromSI( const Standard_Real ) const; - Standard_EXPORT Standard_Real ToSI( const Standard_Real, const UnitSystem& ) const; - Standard_EXPORT Standard_Real FromSI( const Standard_Real, const UnitSystem& ) const; - // convert value to and from default SI units according to current units + Standard_EXPORT Standard_Real ToSI( const Standard_Real, const UnitSystem& ) const; + Standard_EXPORT Standard_Real FromSI( const Standard_Real, const UnitSystem& ) const; Standard_EXPORT Standard_Boolean HasData( const Standard_Integer ) const; + Standard_EXPORT TCollection_ExtendedString GetOption( const TCollection_AsciiString& ) const; + Standard_EXPORT Standard_Boolean GetOptionNames( TColStd_SequenceOfAsciiString& ) const; + private: DDS_DicItem( const DDS_DicItem& ); - // Copy constructor - void operator=( const DDS_DicItem& ); - // Assignment operator - void FillDataMap( TCollection_AsciiString, const LDOM_Element&, const LDOM_Element&, const LDOM_Element&, const TColStd_SequenceOfAsciiString& ); - // prepares formants for each unit systems - - void PrepareFormats( const TCollection_AsciiString& ); - // prepares three formats for each unit systems - void GetDefaultFormat(); - // returns three default formants for each unit systems - UnitSystem GetActiveUnitSystem() const; void GetStringFormat( const TCollection_AsciiString&, @@ -181,29 +146,26 @@ private: const TCollection_AsciiString&, const TCollection_AsciiString&, TCollection_AsciiString& ); - // returns format for the string - void GetIntegerFormat( const TCollection_AsciiString&, const TCollection_AsciiString&, const TCollection_AsciiString&, const TCollection_AsciiString&, const Standard_Character, TCollection_AsciiString& ); - // returns format for the integer - void GetFloatFormat( const TCollection_AsciiString&, const TCollection_AsciiString&, const TCollection_AsciiString&, const TCollection_AsciiString&, const Standard_Character, TCollection_AsciiString& ); - // returns format for the float - void Split( const TCollection_AsciiString&, Handle(TColStd_HArray1OfExtendedString)& ); UnitData* GetUnitData( const UnitSystem& ) const; +private: + typedef NCollection_DataMap OptionsMap; + private: TCollection_AsciiString myId; TCollection_ExtendedString myLabel; @@ -237,6 +199,7 @@ private: Handle(Standard_Transient) myComponent; + OptionsMap myOptions; // unitData NCollection_DataMap myUnitData; @@ -247,10 +210,8 @@ public: DEFINE_STANDARD_RTTI(DDS_DicItem) }; -// Definition of HANDLE object using Standard_DefineHandle.hxx DEFINE_STANDARD_HANDLE(DDS_DicItem, MMgt_TShared) -// Container class XMLTools_IndexedDataMapOfDicItems (map of handles) DEFINE_BASECOLLECTION(DDS_BaseCollectionOfDicItems, Handle(DDS_DicItem)) DEFINE_INDEXEDDATAMAP(DDS_IndexedDataMapOfDicItems, DDS_BaseCollectionOfDicItems, TCollection_AsciiString, Handle(DDS_DicItem)) diff --git a/src/DDS/DDS_Dictionary.cxx b/src/DDS/DDS_Dictionary.cxx index adaff0469..dd741872f 100644 --- a/src/DDS/DDS_Dictionary.cxx +++ b/src/DDS/DDS_Dictionary.cxx @@ -37,19 +37,224 @@ IMPLEMENT_STANDARD_HANDLE(DDS_Dictionary, MMgt_TShared) IMPLEMENT_STANDARD_RTTIEXT(DDS_Dictionary, MMgt_TShared) +/*! + \class DDS_Dictionary + + This class to provide information about used datums, reading them from 'xml' file + + Datum is the set of parameters described a phisical characteristic. These parameters loaded from + special XML which has following format: + + \hr + + + + + + + ... + + + + + + + + + + [brief_desription_text] + [full_description_text] + + + + + ... + + + + + ... + + + [list_element_name] + [list_element_name] + ... + [list_element_name] + + + ... + + + + + \hr + + In description of datum file format used internal keys as XML tag and attributes names. + Concrete XML keywords defined by DDS_KeyWords class. + + Describe datum file format more detailed. XML file should have one main tag named as "dictionary" (key "D_URI"). + This tag should contains one or several components. Component is a independent set of datums and unit systems. + Components defined as XML tag named "component" (key "COMPONENT") with attribute "name" (key COMPONENT_NAME). + Component name used as component identifier and should be unique. Component tag can contains: + + \li Tag "unit_systems" (key UNIT_SYSTEMS) defines set of used unit systems. Should exist at least one unit + system named SI ("System International"). If this system not exist then it will be defined automatically. + Each unit system defined by XML tag "unit system" (key UNIT_SYSTEM) under tag "unit_systems" with attributes + "name" (key UNIT_SYSTEM_NAME) and "label" (key UNIT_SYSTEM_LABEL). Name is identifier of unit system. Label is + human readable description. + + \li One or several tag "datum" (key DATUM). For this tag can be defined following attributes: + + \lo Identifier (key DATUM_ID) specify the unique id string for the datum. + \lo Label (key DATUM_LABEL) specify human readable name of the datum. + \lo Units of measure (key DATUM_UNITS) for given unit system. Attribute name consist of a name + of unit system and a keyword got from DDS_KeyWords by key DATUM_UNITS. For example for unit system + named SI and default keyword attribute name will be "SIunits". This attribute should be specified + for each deaclared unit system. Value of this attribute should be string describs units of measure. + Possible designations for units of measure and their multiple prefixes see in package UnitsAPI of + library OpenCascade (files Units.dat and Lexi_Expr.dat). Units of measure will be used for numeric + value conversion from one unit system to another one. + \lo Format (key DATUM_FORMAT) specify the format string which will be used during initial formatting + of value. This string should be specified in sprintf() format. + \lo Filter (key DATUM_FILTER) specify the regualr expression. Each user entered string will be checked up + on matching to this expression (if it defined). Non matched strings will be rejected. + \lo Required value (key DATUM_REQUIRED). If this attributed defined and value is true then user can't + leave a input filed blank (parameter must be always entered). + + Tag "description" (key DESCR) can be defined under the tag "datum". This tag contains two sub tags: + \lo "short description" (key SHORT_D) specify a brief datum description text + \lo "long description" (key LONG_D) specify a detailed description text + + Tag "options" (key OPTIONS) can be defined under the tag "datum". This tag contains one or more sub + tags "option" (key OPTION). Each of these XML elements should contain text option value and attribute + "name" (key OPTION_NAME) which specified option name. + + Each tag "datum" define most common parameters of phisical characteristic. + This parameters placed in two groups: + \lo Domain parameters under tag "domain" (key DY_DOMAIN). This tag can contains value description tag + (key VALUE_DESCR) for discrete data or list reference tag (key VALUE_LIST_REF) for enumerable data. + Discrete data described following parameters: + default value (key VD_DEFV) + maximum value (key VD_MAXV) + minimum value (key VD_MINV) + type of value (key VD_TYPE) - possible values: String, Integer, Float, List + Enumerable data described by "list reference" attribute (key VLR_LIST) which reference on + list (see "list definition" tag) by list id. + + \li One or several tag "list definition" (key VALUE_LIST). This tag define the list of items for enumerable + data. Attribute "list id" (key VALUE_LIST_ID) specify the identifier string for the list and attribute + "list name" (key VALUE_LIST_NAME) define a list name string. Each list item described by tag "list value" + (key VALUE_LIST_VALUE) under tag "list definition". Each this tag contains item string text and have + following attributes: + \lo "list item id" (key VALUE_LIST_VALUEID) - integer numerical identifier for item + \lo "list item icon" (key VALUE_LIST_VALUEICON) - icon file name for item + + Below the example of a XML file with use default keywords. + + + + + + + + + + + + + + + + + + + + X coordinate for object + X multiplier of object coordinates. Describe position of object in direction of X axis + + + + + + + + + Y coordinate for object + Y multiplier of object coordinates. Describe position of object in direction of Y axis + + + + + + + + + + + + Name of object + + + + + + + + + + + + + + Side of object + + + + + + left + right + top + bottom + undefined + + + + + + +*/ + +/*! + Constructor. Creates the instance of dictionary. Private method. Use DDS_Dictionary::Get() instead. +*/ DDS_Dictionary::DDS_Dictionary() : MMgt_TShared() { } +/*! + Copy constructor. Internal. +*/ DDS_Dictionary::DDS_Dictionary( const DDS_Dictionary& ) { } +/*! + Assigment operator. Internal. +*/ void DDS_Dictionary::operator=( const DDS_Dictionary& ) { } +/*! + Returns the names list of defined unit systems from all components. + Parameter \atheSystems will contains the sequence of string names. +*/ void DDS_Dictionary::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystems ) const { theSystems.Clear(); @@ -71,6 +276,11 @@ void DDS_Dictionary::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystems ) } +/*! + Returns the names list of defined unit systems from the specified component \atheComponent. + Parameter \atheSystems will contains the sequence of string names. If component not found then + empty list returned. +*/ void DDS_Dictionary::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystems, const TCollection_AsciiString& theComponent ) const { @@ -79,6 +289,10 @@ void DDS_Dictionary::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystems, myGroupMap.FindFromKey( theComponent )->GetUnitSystems( theSystems ); } +/*! + Returns the label of unit system \atheSystem. Function find the given unit system in + all components. If unit system not found in any component then empty string returned. +*/ TCollection_ExtendedString DDS_Dictionary::GetUnitSystemLabel( const TCollection_AsciiString& theSystem ) const { TCollection_ExtendedString aLabel; @@ -87,6 +301,11 @@ TCollection_ExtendedString DDS_Dictionary::GetUnitSystemLabel( const TCollection return aLabel; } +/*! + Returns the label of unit system \atheSystem from component \atheComponent. Function find + the given unit system in the specified component only. If unit system not found in the + component then empty string returned. +*/ TCollection_ExtendedString DDS_Dictionary::GetUnitSystemLabel( const TCollection_AsciiString& theSystem, const TCollection_AsciiString& theComponent ) const { @@ -96,6 +315,10 @@ TCollection_ExtendedString DDS_Dictionary::GetUnitSystemLabel( const TCollection return aLabel; } +/*! + Gets the name of active unit system from first got component. If any component exist then + active unit system name returned or empty string otherwise. +*/ TCollection_AsciiString DDS_Dictionary::GetActiveUnitSystem() const { TCollection_AsciiString aSystem; @@ -104,6 +327,10 @@ TCollection_AsciiString DDS_Dictionary::GetActiveUnitSystem() const return aSystem; } +/*! + Gets the name of active unit system from component \atheComponent. If this component exist + active unit system name returned or empty string otherwise. +*/ TCollection_AsciiString DDS_Dictionary::GetActiveUnitSystem( const TCollection_AsciiString& theComponent ) const { TCollection_AsciiString aSystem; @@ -112,12 +339,20 @@ TCollection_AsciiString DDS_Dictionary::GetActiveUnitSystem( const TCollection_A return aSystem; } +/*! + Sets the active unit system named \atheSystem. This unit system will be activated in all + existing components if component have it. +*/ void DDS_Dictionary::SetActiveUnitSystem( const TCollection_AsciiString& theSystem ) { for ( Standard_Integer i = 1; i <= myGroupMap.Extent(); i++ ) myGroupMap.FindFromIndex( i )->SetActiveUnitSystem( theSystem ); } +/*! + Sets the active unit system named \atheSystem for component \atheComponent. If specified unit + system doesn't exist in the component then function do nothing. +*/ void DDS_Dictionary::SetActiveUnitSystem( const TCollection_AsciiString& theSystem, const TCollection_AsciiString& theComponent ) { @@ -138,6 +373,10 @@ Handle(DDS_Dictionary) DDS_Dictionary::Get() return sDictionary; } +/*! + Load datum definitions in the dictionary from XML file \atheFileName. Returns true if load + successed or false otherwise. +*/ Standard_Boolean DDS_Dictionary::Load( const TCollection_AsciiString theFileName ) { static NCollection_Map _LoadMap; @@ -164,6 +403,10 @@ Standard_Boolean DDS_Dictionary::Load( const TCollection_AsciiString theFileName return Standard_True; } +/*! + Gets XML keyword as LDOMString by specified \akey. If key doesn't exist then empty string + returned. This function provided for convenience. +*/ LDOMString DDS_Dictionary::KeyWord( const TCollection_AsciiString& key ) { LDOMString keyWord; @@ -178,25 +421,25 @@ LDOMString DDS_Dictionary::KeyWord( const TCollection_AsciiString& key ) } /*! - Returns DicItem from specified group with all attached data + Gets dictionary item with specified identifier \atheID from specified component \atheComponent. + If component or item not found then null handle returned. */ - Handle(DDS_DicItem) DDS_Dictionary::GetDicItem( const TCollection_AsciiString& theID, - const TCollection_AsciiString& theGroup ) const + const TCollection_AsciiString& theComponent ) const { Handle(DDS_DicItem) aDicItem; Handle(DDS_DicGroup) aDicGroup; - if ( myGroupMap.Contains( theGroup ) ) - aDicGroup = myGroupMap.FindFromKey( theGroup ); + if ( myGroupMap.Contains( theComponent ) ) + aDicGroup = myGroupMap.FindFromKey( theComponent ); if ( !aDicGroup.IsNull() ) aDicItem = aDicGroup->GetDicItem( theID ); return aDicItem; } /*! - Returns DicItem with all attached data + Gets dictionary item with specified identifier \atheID. Function find the item in all components. + If item not found in any component then null handle returned. */ - Handle(DDS_DicItem) DDS_Dictionary::GetDicItem( const TCollection_AsciiString& theID ) const { Handle(DDS_DicItem) aDicItem; @@ -205,6 +448,9 @@ Handle(DDS_DicItem) DDS_Dictionary::GetDicItem( const TCollection_AsciiString& t return aDicItem; } +/*! + Fill the internal data structures from XML parsed structures. Internal. +*/ void DDS_Dictionary::FillDataMap( const LDOM_Element& theComponentData, const LDOM_Element& theDocElement ) { TCollection_AsciiString aCompName = theComponentData.getAttribute( KeyWord( "COMPONENT_NAME" ) ); @@ -215,12 +461,19 @@ void DDS_Dictionary::FillDataMap( const LDOM_Element& theComponentData, const LD myGroupMap.Add( aCompName, aDicGroup ); } +/*! + Convert numeric value \atheValue from specified unit of measure \atheUnits to SI unit of measure + (mm for Length, radians for Angles, etc). Converted value returned. +*/ Standard_Real DDS_Dictionary::ToSI( const Standard_Real theValue, const Standard_CString theUnits ) { Standard_Real aRetValue = theValue; if ( theUnits && *theUnits && strcmp( theUnits, "%" ) ) { try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif aRetValue = UnitsAPI::AnyToSI( theValue, theUnits ); } catch( Standard_Failure ) { @@ -232,12 +485,19 @@ Standard_Real DDS_Dictionary::ToSI( const Standard_Real theValue, const Standard return aRetValue; } +/*! + Convert numeric value \atheValue to specified unit of measure \atheUnits from SI unit of measure + (mm for Length, radians for Angles, etc). Converted value returned. +*/ Standard_Real DDS_Dictionary::FromSI( const Standard_Real theValue, const Standard_CString theUnits ) { Standard_Real aRetValue = theValue; if ( theUnits && *theUnits && strcmp( theUnits, "%" ) ) { try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif aRetValue = UnitsAPI::AnyFromSI( theValue, theUnits ); } catch( Standard_Failure ) { diff --git a/src/DDS/DDS_Dictionary.h b/src/DDS/DDS_Dictionary.h index 427e08e1e..9a5d5a886 100644 --- a/src/DDS/DDS_Dictionary.h +++ b/src/DDS/DDS_Dictionary.h @@ -30,8 +30,6 @@ class TCollection_AsciiString; DEFINE_STANDARD_HANDLE(DDS_Dictionary, MMgt_TShared) -// Class to provide information about used parameters, -// reading them from 'xml' file class DDS_Dictionary : public MMgt_TShared { public: @@ -69,7 +67,6 @@ private: void operator=( const DDS_Dictionary& ); - // prepares formants for each unit systems void FillDataMap( const LDOM_Element&, const LDOM_Element& ); private: diff --git a/src/DDS/DDS_KeyWords.cxx b/src/DDS/DDS_KeyWords.cxx index 8ea7f6a97..626bd0fd0 100644 --- a/src/DDS/DDS_KeyWords.cxx +++ b/src/DDS/DDS_KeyWords.cxx @@ -21,6 +21,62 @@ IMPLEMENT_STANDARD_HANDLE(DDS_KeyWords, MMgt_TShared) IMPLEMENT_STANDARD_RTTIEXT(DDS_KeyWords, MMgt_TShared) +/*! + \class DDS_KeyWords + + This object contains the pairs of internal keys and XML tag or attribute names. This class allow to user + define set of XML keywords used in datums definition file. + + Default keywords table: + \li D_URI - dictionary + \li COMPONENT - component + \li COMPONENT_NAME - name + \li UNIT_SYSTEMS - unitSystems + \li UNIT_SYSTEM - system + \li UNIT_SYSTEM_NAME - name + \li UNIT_SYSTEM_LABEL - label + \li DATUM - datum + \li DATUM_ID - id + \li DATUM_LABEL - label + \li DATUM_UNITS - units + \li DATUM_FORMAT - format + \li DATUM_FILTER - filter + \li DATUM_REQUIRED - required + \li VALUE_LIST - valueList + \li VALUE_LIST_ID - listid + \li VALUE_LIST_NAME - name + \li VALUE_LIST_TYPE - type + \li VALUE_LIST_VALUE - value + \li VALUE_LIST_VALUEID - id + \li VALUE_LIST_VALUEICON - icon + \li DY_DOMAIN - domain + \li WARNING_LEVEL - warningLevel + \li WRONG_VALUE - wrongValue + \li VALUE_DESCR - valueDescr + \li VALUE_LIST_REF - listRef + \li DESCR - description + \li LONG_D - longDescr + \li SHORT_D - shortDescr + \li VD_TYPE - type + \li VD_DEFV - default + \li VD_MAXV - max + \li VD_MINV - min + \li VD_SPEC - specVal + \li VLR_LIST - list + \li PRS - presentation + \li LATERAL_ZOOM - lateralZoom + \li LZ_MINV - min + \li LZ_MAXV - max + \li LZ_ORDER - order + \li OPTIONS - options + \li OPTION - option + \li OPTION_NAME - name +*/ + +/*! + Constructor +*/ + DDS_KeyWords::DDS_KeyWords() : MMgt_TShared() { @@ -71,8 +127,16 @@ DDS_KeyWords::DDS_KeyWords() SetKeyWord( "LZ_MINV", "min" ); SetKeyWord( "LZ_MAXV", "max" ); SetKeyWord( "LZ_ORDER", "order" ); + + SetKeyWord( "OPTIONS", "options" ); + SetKeyWord( "OPTION", "option" ); + SetKeyWord( "OPTION_NAME", "name" ); } +/*! + Returns the static instance of the class DDS_KeyWords +*/ + Handle(DDS_KeyWords) DDS_KeyWords::Get() { static Handle(DDS_KeyWords) keyWords; @@ -83,6 +147,11 @@ Handle(DDS_KeyWords) DDS_KeyWords::Get() return keyWords; } +/*! + Returns the XML keyword by specified internal key \a key. If the internal key isn't registered + then empty string will be returned. +*/ + TCollection_AsciiString DDS_KeyWords::GetKeyWord( const TCollection_AsciiString& key ) const { TCollection_AsciiString keyWord; @@ -91,6 +160,10 @@ TCollection_AsciiString DDS_KeyWords::GetKeyWord( const TCollection_AsciiString& return keyWord; } +/*! + Register the pair of the internal key \a key and XML keyword \a keyWord. +*/ + void DDS_KeyWords::SetKeyWord( const TCollection_AsciiString& key, const TCollection_AsciiString& keyWord ) { diff --git a/src/DDS/DDS_KeyWords.h b/src/DDS/DDS_KeyWords.h index daee727ba..2161f71f3 100644 --- a/src/DDS/DDS_KeyWords.h +++ b/src/DDS/DDS_KeyWords.h @@ -29,7 +29,7 @@ DEFINE_STANDARD_HANDLE(DDS_KeyWords, MMgt_TShared) class TCollection_AsciiString; -class DDS_KeyWords: public MMgt_TShared +class DDS_KeyWords : public MMgt_TShared { public: Standard_EXPORT static Handle(DDS_KeyWords) Get(); diff --git a/src/DDS/Makefile.in b/src/DDS/Makefile.am similarity index 80% rename from src/DDS/Makefile.in rename to src/DDS/Makefile.am index 1d42a6c75..508e544e9 100755 --- a/src/DDS/Makefile.in +++ b/src/DDS/Makefile.am @@ -21,32 +21,24 @@ # Module : DDS # $Header: /home/server/cvs/GUI/GUI_SRC/src/DDS/Makefile.in -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am -@COMMENCE@ +lib_LTLIBRARIES = libDDS.la -# header files -EXPORT_HEADERS= DDS.h \ +salomeinclude_HEADERS = DDS.h \ DDS_DicGroup.h \ DDS_DicItem.h \ DDS_Dictionary.h \ DDS_KeyWords.h - -# Libraries targets -LIB = libDDS.la -LIB_SRC= DDS_DicGroup.cxx \ +dist_libDDS_la_SOURCES = DDS_DicGroup.cxx \ DDS_DicItem.cxx \ DDS_Dictionary.cxx \ DDS_KeyWords.cxx -CPPFLAGS+= $(OCC_INCLUDES) +libDDS_la_CPPFLAGS=$(CAS_CPPFLAGS) -LDFLAGS+= $(CAS_KERNEL) $(CAS_OCAF) +libDDS_la_LDFLAGS= $(CAS_KERNEL) $(CAS_OCAF) -@CONCLUDE@ diff --git a/src/Event/Makefile.in b/src/Event/Makefile.am similarity index 77% rename from src/Event/Makefile.in rename to src/Event/Makefile.am index 02aaa2bca..c9948969b 100755 --- a/src/Event/Makefile.in +++ b/src/Event/Makefile.am @@ -26,28 +26,17 @@ # Module : SALOME # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES = libEvent.la -@COMMENCE@ - -# header files -EXPORT_HEADERS= \ - Event.h \ +salomeinclude_HEADERS= \ + Event.h \ SALOME_Event.hxx -EXPORT_PYSCRIPTS = -# Libraries targets - -LIB = libEvent.la -LIB_SRC = SALOME_Event.cxx - -CPPFLAGS+=$(QT_INCLUDES) $(KERNEL_CXXFLAGS) -LDFLAGS+=$(QT_MT_LIBS) +dist_libEvent_la_SOURCES = SALOME_Event.cxx -@CONCLUDE@ +libEvent_la_CPPFLAGS=$(QT_INCLUDES) @KERNEL_CXXFLAGS@ +libEvent_la_LDFLAGS=$(QT_MT_LIBS) diff --git a/src/Event/SALOME_Event.hxx b/src/Event/SALOME_Event.hxx index 78982c4c9..91f53d6bc 100755 --- a/src/Event/SALOME_Event.hxx +++ b/src/Event/SALOME_Event.hxx @@ -95,7 +95,7 @@ private: \class TMemFunEvent \brief Template class for member function */ -template class EVENT_EXPORT TMemFunEvent: public SALOME_Event{ +template class /*EVENT_EXPORT */TMemFunEvent: public SALOME_Event{ public: typedef TRes TResult; TResult myResult; @@ -119,7 +119,7 @@ private: \class TVoidMemFunEvent \brief Template class for member function */ -template class EVENT_EXPORT TVoidMemFunEvent: public SALOME_Event{ +template class /*EVENT_EXPORT */TVoidMemFunEvent: public SALOME_Event{ public: typedef void (TObject::* TAction)(); TVoidMemFunEvent(TObject* theObject, TAction theAction): @@ -139,7 +139,7 @@ private: \class TMemFun1ArgEvent \brief Template for member function with one argument */ -template class EVENT_EXPORT TMemFun1ArgEvent: +template class/* EVENT_EXPORT */TMemFun1ArgEvent: public SALOME_Event{ public: typedef TRes TResult; @@ -166,7 +166,7 @@ private: \class TVoidMemFun1ArgEvent \brief Template for member function with one argument */ -template class EVENT_EXPORT TVoidMemFun1ArgEvent: public SALOME_Event{ +template class /*EVENT_EXPORT */TVoidMemFun1ArgEvent: public SALOME_Event{ public: typedef void (TObject::* TAction)(TArg); TVoidMemFun1ArgEvent(TObject* theObject, TAction theAction, TArg theArg): @@ -189,7 +189,7 @@ private: \brief Template for member function with two arguments */ template class -EVENT_EXPORT TMemFun2ArgEvent: public SALOME_Event{ +/*EVENT_EXPORT */TMemFun2ArgEvent: public SALOME_Event{ public: typedef TRes TResult; TResult myResult; @@ -219,7 +219,7 @@ private: \brief Template for member function with two arguments */ template class -EVENT_EXPORT TVoidMemFun2ArgEvent: public SALOME_Event{ +/*EVENT_EXPORT*/ TVoidMemFun2ArgEvent: public SALOME_Event{ public: typedef void (TObject::* TAction)(TArg,TArg1); TVoidMemFun2ArgEvent(TObject* theObject, TAction theAction, TArg theArg, TArg1 theArg1): diff --git a/src/GLViewer/GLViewer_BaseObjects.cxx b/src/GLViewer/GLViewer_BaseObjects.cxx index bac910416..338543ee3 100644 --- a/src/GLViewer/GLViewer_BaseObjects.cxx +++ b/src/GLViewer/GLViewer_BaseObjects.cxx @@ -746,7 +746,7 @@ QByteArray GLViewer_MarkerSet::getByteCopy() aResult[i] = *aPointer; - for( ; i < aResult.size(); i++ ) + for ( ; i < (int)aResult.size(); i++ ) aResult[i] = aObject[i - anISize - 2*aFSize*myNumber - aFSize]; return aResult; @@ -1284,7 +1284,7 @@ QByteArray GLViewer_Polyline::getByteCopy() for( ; i < anISize + 2*aFSize*myNumber + 2*aBSize; i++, aPointer++ ) aResult[i] = *aPointer; - for( ; i < aResult.size(); i++ ) + for ( ; i < (int)aResult.size(); i++ ) aResult[i] = aObject[i - anISize - 2*aFSize*myNumber - 2*aBSize]; return aResult; diff --git a/src/GLViewer/GLViewer_Drawer.cxx b/src/GLViewer/GLViewer_Drawer.cxx index 399a69444..d0001a49c 100644 --- a/src/GLViewer/GLViewer_Drawer.cxx +++ b/src/GLViewer/GLViewer_Drawer.cxx @@ -306,7 +306,7 @@ void GLViewer_TexFont::drawString( QString theStr, GLdouble theX , GLdouble theY float aDY = ( aRowPixelHeight - 1 ) / aYScale, aDX; char aLetter; int aLettIndex, row; - for( int i = 0; i < theStr.length(); i++ ) + for ( int i = 0; i < (int)theStr.length(); i++ ) { aLetter = theStr.data()[i]; aLettIndex = (int)aLetter - FirstSymbolNumber; @@ -338,7 +338,7 @@ void GLViewer_TexFont::drawString( QString theStr, GLdouble theX , GLdouble theY int GLViewer_TexFont::getStringWidth( QString theStr ) { int aWidth = 0; - for( int i = 0; i < theStr.length(); i ++ ) + for ( int i = 0; i < (int)theStr.length(); i ++ ) { char aLetter = theStr.data()[i]; int aLettIndex = (int)aLetter - FirstSymbolNumber; diff --git a/src/GLViewer/GLViewer_Object.cxx b/src/GLViewer/GLViewer_Object.cxx index e5e3baa05..7de98ed37 100644 --- a/src/GLViewer/GLViewer_Object.cxx +++ b/src/GLViewer/GLViewer_Object.cxx @@ -187,17 +187,17 @@ QByteArray GLViewer_Object::getByteCopy() int aCurPos = 2*anISize + sizeOf8Float + aTypeLength + aToolTipLength; // adds aspect byte array - for( i = aCurPos; i < aCurPos + aAspect.size(); i++ ) + for ( i = aCurPos; i < (int)( aCurPos + aAspect.size() ); i++ ) aResult[i] = aAspect[i - aCurPos]; aCurPos = aCurPos + aAspect.size(); // adds GL text byte array - for( i = aCurPos; i < aCurPos + aGLText.size(); i++ ) + for ( i = aCurPos; i < (int)( aCurPos + aGLText.size() ); i++ ) aResult[i] = aGLText[i - aCurPos]; aCurPos += aGLText.size(); aPointer = (char*)&myOwner; - for( i = 0; i < sizeof( GLViewer_Owner* ); i++, aPointer++ ) + for( i = 0; i < sizeof( SUIT_DataOwner* ); i++, aPointer++ ) aResult[ aCurPos + i ] = *aPointer; return aResult; diff --git a/src/GLViewer/GLViewer_Object.h b/src/GLViewer/GLViewer_Object.h index 49373a8cc..2384bb440 100644 --- a/src/GLViewer/GLViewer_Object.h +++ b/src/GLViewer/GLViewer_Object.h @@ -50,7 +50,7 @@ class GLViewer_AspectLine; class GLViewer_Group; class GLViewer_CoordSystem; class GLViewer_Text; -class GLViewer_Owner; +//class GLViewer_Owner; /*! * Class GLViewer_Object @@ -233,9 +233,9 @@ public: virtual bool translateToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS ) = 0; #endif //!\warning It is for ouv - GLViewer_Owner* owner() const { return myOwner; } + SUIT_DataOwner* owner() const { return myOwner; } //!\warning It is for ouv - void setOwner( GLViewer_Owner* owner ) { myOwner = owner; } + void setOwner( SUIT_DataOwner* owner ) { myOwner = owner; } //! Adds object to group theGroup void setGroup( GLViewer_Group* theGroup ); @@ -297,26 +297,12 @@ protected: bool myIsVisible; //!\warning It is for ouv - GLViewer_Owner* myOwner; + SUIT_DataOwner* myOwner; //! Object Group GLViewer_Group* myGroup; }; - -//!\warning It is for ouv -class GLVIEWER_API GLViewer_Owner : public SUIT_DataOwner -{ -public: - //!\warning It is for ouv - GLViewer_Owner() : SUIT_DataOwner() {} - //!\warning It is for ouv - ~GLViewer_Owner() {} - -protected: - -}; - #ifdef WNT #pragma warning ( default:4251 ) #endif diff --git a/src/GLViewer/GLViewer_Tools.cxx b/src/GLViewer/GLViewer_Tools.cxx index 517aff514..1f270a253 100644 --- a/src/GLViewer/GLViewer_Tools.cxx +++ b/src/GLViewer/GLViewer_Tools.cxx @@ -22,12 +22,11 @@ // File: GLViewer_Tools.cxx // Created: April, 2005 -//#include "GLViewerAfx.h" #include "GLViewer_Tools.h" #include -#include +#include /*! Constructor @@ -43,7 +42,7 @@ GLViewer_LineList::GLViewer_LineList( int size ) if( !myArray ) { - cout << "Can't allocate memory: " << size << endl; + std::cout << "Can't allocate memory: " << size << std::endl; myRealSize = 0; } else @@ -386,11 +385,11 @@ void GLViewer_LineList::clear() */ void GLViewer_LineList::print() { - cout << "MainCoord: " << myMainCoord <<" SIZE: " << myRealSize << " ENum: " << mySegmentNumber << " :::"; + std::cout << "MainCoord: " << myMainCoord <<" SIZE: " << myRealSize << " ENum: " << mySegmentNumber << " :::"; for( int i = 0; i < mySegmentNumber; i++ ) - cout << " " << myArray[2*i] << " " << myArray[2*i+1] << " | "; + std::cout << " " << myArray[2*i] << " " << myArray[2*i+1] << " | "; - cout << endl; + std::cout << std::endl; } /*! @@ -694,11 +693,11 @@ void GLViewer_LineField::addRectangle( double top, double right, double bottom, */ void GLViewer_LineField::print() { - cout << "My X matrix Number: " << myXSize << endl; + std::cout << "My X matrix Number: " << myXSize << std::endl; for( int i = 0; i < myXSize; i++ ) myXLineArray[i]->print(); - cout << "My Y matrix Number: " << myYSize << endl; + std::cout << "My Y matrix Number: " << myYSize << std::endl; for( int j = 0; j < myYSize; j++ ) myYLineArray[j]->print(); } @@ -724,7 +723,7 @@ void GLViewer_LineField::show() } glEnd(); delete[] anArray; - cout << "Show function" << endl; + std::cout << "Show function" << std::endl; } /*! @@ -1005,7 +1004,7 @@ GLViewer_LineField::IterationStatus GLViewer_LineField::checkComplete() aCurArray[i].myLineIndex == myEndPoint.myXLineIndex && aCurArray[i].mySegmentindex == myEndPoint.myXSegmentIndex ) { - cout << "Algorithm complete X!!!!!!!" << endl; + std::cout << "Algorithm complete X!!!!!!!" << std::endl; myEndPoint.mySolveIndex = i; return IS_SOLVED; } @@ -1013,7 +1012,7 @@ GLViewer_LineField::IterationStatus GLViewer_LineField::checkComplete() aCurArray[i].myLineIndex == myEndPoint.myYLineIndex && aCurArray[i].mySegmentindex == myEndPoint.myYSegmentIndex ) { - cout << "Algorithm complete Y!!!!!!!" << endl; + std::cout << "Algorithm complete Y!!!!!!!" << std::endl; myEndPoint.mySolveIndex = i; return IS_SOLVED; } @@ -1031,7 +1030,7 @@ GLViewer_LineField::IterationStatus GLViewer_LineField::checkComplete() else myCurArrayIndex = 0; - cout << "Number of ways: " << count << endl; + std::cout << "Number of ways: " << count << std::endl; if( count == 0 ) return IS_LOOP; @@ -1099,7 +1098,7 @@ GLViewer_LineField::EndStatus GLViewer_LineField::startAlgorithm() while( true ) { - cout << "-----------Iteration #" << myCurCount << "-------------" << endl; + std::cout << "-----------Iteration #" << myCurCount << "-------------" << std::endl; iteration(); IterationStatus is = checkComplete(); diff --git a/src/GLViewer/GLViewer_ViewManager.cxx b/src/GLViewer/GLViewer_ViewManager.cxx index b9cbff5ae..8e1f1e860 100644 --- a/src/GLViewer/GLViewer_ViewManager.cxx +++ b/src/GLViewer/GLViewer_ViewManager.cxx @@ -28,14 +28,11 @@ #include "GLViewer_Viewer2d.h" #include "SUIT_Desktop.h" -int GLViewer_ViewManager::myMaxId = 0; - /*!Constructor.*/ GLViewer_ViewManager::GLViewer_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop ) -: SUIT_ViewManager( theStudy, theDesktop ) +: SUIT_ViewManager( theStudy, theDesktop, new GLViewer_Viewer2d( "GLViewer" ) ) { - myId = ++myMaxId; - setViewModel( new GLViewer_Viewer2d( "GLViewer" ) ); + setTitle( tr( "GL_VIEW_TITLE" ) ); } /*!Destructor.*/ @@ -43,13 +40,6 @@ GLViewer_ViewManager::~GLViewer_ViewManager() { } -/*!Sets view name for view window \a theView.*/ -void GLViewer_ViewManager::setViewName(SUIT_ViewWindow* theView) -{ - int aPos = myViews.find(theView); - theView->setCaption( QString( "GL scene:%1 - viewer:%2" ).arg(myId).arg(aPos+1)); -} - /*!Context menu popup for \a popup.*/ void GLViewer_ViewManager::contextMenuPopup( QPopupMenu* popup ) { diff --git a/src/GLViewer/GLViewer_ViewManager.h b/src/GLViewer/GLViewer_ViewManager.h index cfc25f1f9..3542d63f3 100644 --- a/src/GLViewer/GLViewer_ViewManager.h +++ b/src/GLViewer/GLViewer_ViewManager.h @@ -36,18 +36,11 @@ class GLVIEWER_API GLViewer_ViewManager : public SUIT_ViewManager Q_OBJECT public: GLViewer_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop ); - ~GLViewer_ViewManager(); + virtual ~GLViewer_ViewManager(); GLViewer_Viewer* getGLViewer() { return (GLViewer_Viewer*) myViewModel; } virtual void contextMenuPopup( QPopupMenu* ); - -protected: - void setViewName(SUIT_ViewWindow* theView); - -protected: - static int myMaxId; - int myId; }; #endif // GLVIEWER_VIEWMANAGER_H diff --git a/src/GLViewer/GLViewer_ViewPort2d.cxx b/src/GLViewer/GLViewer_ViewPort2d.cxx index 180ed113e..3055726ec 100644 --- a/src/GLViewer/GLViewer_ViewPort2d.cxx +++ b/src/GLViewer/GLViewer_ViewPort2d.cxx @@ -1367,7 +1367,7 @@ void GLViewer_ViewPort2d::onMaybeTip( QPoint thePoint, QString& theText, QFont& int str_size = aList.first().length(); for( int i = 1, size = aList.count(); i < size; i++ ) { - if( str_size < aList[i].length() ) + if ( str_size < (int)aList[i].length() ) { index = i; str_size = aList[i].length(); diff --git a/src/GLViewer/Makefile.am b/src/GLViewer/Makefile.am new file mode 100644 index 000000000..83fec2f0f --- /dev/null +++ b/src/GLViewer/Makefile.am @@ -0,0 +1,115 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : caf +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libGLViewer.la + +salomeinclude_HEADERS= \ + GLViewer.h \ + GLViewer_AspectLine.h \ + GLViewer_BaseDrawers.h \ + GLViewer_BaseObjects.h \ + GLViewer_Compass.h \ + GLViewer_Context.h \ + GLViewer_CoordSystem.h \ + GLViewer_Defs.h \ + GLViewer_Drawer.h \ + GLViewer_Geom.h \ + GLViewer_Grid.h \ + GLViewer_Group.h \ + GLViewer_MimeSource.h \ + GLViewer_Object.h \ + GLViewer_Selector.h \ + GLViewer_Selector2d.h \ + GLViewer_Text.h \ + GLViewer_Tools.h \ + GLViewer_ToolTip.h \ + GLViewer_ViewFrame.h \ + GLViewer_ViewManager.h \ + GLViewer_ViewPort.h \ + GLViewer_ViewPort2d.h \ + GLViewer_Viewer.h \ + GLViewer_Viewer2d.h \ + GLViewer_Widget.h + +dist_libGLViewer_la_SOURCES= \ + GLViewer_AspectLine.cxx \ + GLViewer_BaseDrawers.cxx \ + GLViewer_BaseObjects.cxx \ + GLViewer_Compass.cxx \ + GLViewer_Context.cxx \ + GLViewer_CoordSystem.cxx \ + GLViewer_Drawer.cxx \ + GLViewer_Geom.cxx \ + GLViewer_Grid.cxx \ + GLViewer_Group.cxx \ + GLViewer_MimeSource.cxx \ + GLViewer_Object.cxx \ + GLViewer_Selector.cxx \ + GLViewer_Selector2d.cxx \ + GLViewer_Text.cxx \ + GLViewer_Tools.cxx \ + GLViewer_ToolTip.cxx \ + GLViewer_ViewFrame.cxx \ + GLViewer_ViewManager.cxx \ + GLViewer_ViewPort.cxx \ + GLViewer_ViewPort2d.cxx \ + GLViewer_Viewer.cxx \ + GLViewer_Viewer2d.cxx \ + GLViewer_Widget.cxx + +MOC_FILES= \ + GLViewer_Selector_moc.cxx \ + GLViewer_Selector2d_moc.cxx \ + GLViewer_ToolTip_moc.cxx \ + GLViewer_ViewFrame_moc.cxx \ + GLViewer_ViewManager_moc.cxx \ + GLViewer_ViewPort_moc.cxx \ + GLViewer_ViewPort2d_moc.cxx \ + GLViewer_Viewer_moc.cxx \ + GLViewer_Viewer2d_moc.cxx \ + GLViewer_Widget_moc.cxx +nodist_libGLViewer_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA= \ + resources/cursor_rotate.png \ + resources/cursor_sketch.png \ + resources/cursor_zoom.png \ + resources/view_dump.png \ + resources/view_fitall.png \ + resources/view_fitarea.png \ + resources/view_fitselect.png \ + resources/view_glpan.png \ + resources/view_pan.png \ + resources/view_reset.png \ + resources/view_zoom.png + +nodist_salomeres_DATA= \ + GLViewer_images.qm \ + GLViewer_msg_en.qm + +libGLViewer_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx +libGLViewer_la_LDFLAGS=$(QT_MT_LIBS) $(CAS_KERNEL) + +libGLViewer_la_LIBADD= ../SUIT/libsuit.la diff --git a/src/GLViewer/Makefile.in b/src/GLViewer/Makefile.in deleted file mode 100644 index 76869431a..000000000 --- a/src/GLViewer/Makefile.in +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : caf -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= GLViewer.h \ - GLViewer_AspectLine.h \ - GLViewer_BaseDrawers.h \ - GLViewer_BaseObjects.h \ - GLViewer_Compass.h \ - GLViewer_Context.h \ - GLViewer_CoordSystem.h \ - GLViewer_Defs.h \ - GLViewer_Drawer.h \ - GLViewer_Geom.h \ - GLViewer_Grid.h \ - GLViewer_Group.h \ - GLViewer_MimeSource.h \ - GLViewer_Object.h \ - GLViewer_Selector.h \ - GLViewer_Selector2d.h \ - GLViewer_Text.h \ - GLViewer_Tools.h \ - GLViewer_ToolTip.h \ - GLViewer_ViewFrame.h \ - GLViewer_ViewManager.h \ - GLViewer_ViewPort.h \ - GLViewer_ViewPort2d.h \ - GLViewer_Viewer.h \ - GLViewer_Viewer2d.h \ - GLViewer_Widget.h - -# .po files to transform in .qm -PO_FILES = GLViewer_images.po \ - GLViewer_msg_en.po - -# Libraries targets -LIB = libGLViewer.la - -LIB_SRC= GLViewer_AspectLine.cxx \ - GLViewer_BaseDrawers.cxx \ - GLViewer_BaseObjects.cxx \ - GLViewer_Compass.cxx \ - GLViewer_Context.cxx \ - GLViewer_CoordSystem.cxx \ - GLViewer_Drawer.cxx \ - GLViewer_Geom.cxx \ - GLViewer_Grid.cxx \ - GLViewer_Group.cxx \ - GLViewer_MimeSource.cxx \ - GLViewer_Object.cxx \ - GLViewer_Selector.cxx \ - GLViewer_Selector2d.cxx \ - GLViewer_Text.cxx \ - GLViewer_Tools.cxx \ - GLViewer_ToolTip.cxx \ - GLViewer_ViewFrame.cxx \ - GLViewer_ViewManager.cxx \ - GLViewer_ViewPort.cxx \ - GLViewer_ViewPort2d.cxx \ - GLViewer_Viewer.cxx \ - GLViewer_Viewer2d.cxx \ - GLViewer_Widget.cxx - -LIB_MOC = GLViewer_Selector.h \ - GLViewer_Selector2d.h \ - GLViewer_ToolTip.h \ - GLViewer_ViewFrame.h \ - GLViewer_ViewManager.h \ - GLViewer_ViewPort.h \ - GLViewer_ViewPort2d.h \ - GLViewer_Viewer.h \ - GLViewer_Viewer2d.h \ - GLViewer_Widget.h - -RESOURCES_FILES = cursor_rotate.png \ - cursor_sketch.png \ - cursor_zoom.png \ - view_dump.png \ - view_fitall.png \ - view_fitarea.png \ - view_fitselect.png \ - view_glpan.png \ - view_pan.png \ - view_reset.png \ - view_zoom.png - -CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) - -LDFLAGS+=$(QT_MT_LIBS) $(CAS_KERNEL) - -LIBS+= -lsuit -L/usr/X11R6/lib@LIB_LOCATION_SUFFIX@ -lGLU - -@CONCLUDE@ diff --git a/src/GLViewer/resources/GLViewer_msg_en.po b/src/GLViewer/resources/GLViewer_msg_en.po index d51c7d3a3..d97840831 100644 --- a/src/GLViewer/resources/GLViewer_msg_en.po +++ b/src/GLViewer/resources/GLViewer_msg_en.po @@ -103,3 +103,6 @@ msgstr "Error" msgid "GLViewer_ViewFrame::DUMP_VIEW_ERROR_DLG_TEXT" msgstr "Can't save Dump View in file" + +msgid "GLViewer_ViewManager::GL_VIEW_TITLE" +msgstr "GL Scene:%M - viewer:%V" diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 0ccc31bb4..2e59728d0 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -38,8 +38,11 @@ #include "LightApp_OBFilter.h" +#include "LightApp_EventFilter.h" + #include "LightApp_OBSelector.h" #include "LightApp_SelectionMgr.h" +#include "LightApp_DataObject.h" #include #include @@ -56,10 +59,12 @@ #include #include #include +#include #include #include #include +#include #ifndef DISABLE_GLVIEWER #include @@ -105,6 +110,12 @@ // #include //#endif +#ifndef DISABLE_QXGRAPHVIEWER + #include + #include + #include +#endif + #include #include @@ -231,6 +242,15 @@ myPrefs( 0 ) myAccel->setActionKey( SUIT_Accel::RotateUp, ALT+Key_Up, VTKViewer_Viewer::Type() ); myAccel->setActionKey( SUIT_Accel::RotateDown, ALT+Key_Down, VTKViewer_Viewer::Type() ); #endif +#ifndef DISABLE_PLOT2DVIEWER + myAccel->setActionKey( SUIT_Accel::PanLeft, CTRL+Key_Left, Plot2d_Viewer::Type() ); + myAccel->setActionKey( SUIT_Accel::PanRight, CTRL+Key_Right, Plot2d_Viewer::Type() ); + myAccel->setActionKey( SUIT_Accel::PanUp, CTRL+Key_Up, Plot2d_Viewer::Type() ); + myAccel->setActionKey( SUIT_Accel::PanDown, CTRL+Key_Down, Plot2d_Viewer::Type() ); + myAccel->setActionKey( SUIT_Accel::ZoomIn, CTRL+Key_Plus, Plot2d_Viewer::Type() ); + myAccel->setActionKey( SUIT_Accel::ZoomOut, CTRL+Key_Minus, Plot2d_Viewer::Type() ); + myAccel->setActionKey( SUIT_Accel::ZoomFit, CTRL+Key_Asterisk, Plot2d_Viewer::Type() ); +#endif connect( mySelMgr, SIGNAL( selectionChanged() ), this, SLOT( onSelection() ) ); @@ -287,6 +307,8 @@ void LightApp_Application::start() putInfo( "" ); desktop()->statusBar()->message( "" ); + + LightApp_EventFilter::Init(); } /*!Gets application name.*/ @@ -439,12 +461,12 @@ void LightApp_Application::createActions() int id = LightApp_Application::UserID + FIRST_HELP_ID; // help for KERNEL and GUI QCString dir; - QString aFileName = "index.htm"; + QString aFileName = "index.html"; QString root; QAction* a; if (dir = getenv("GUI_ROOT_DIR")) { - root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("doc") + Qtx::addSlash("salome") + - Qtx::addSlash("gui") + Qtx::addSlash("GUI") ); + root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") + + Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash("GUI") ); if ( QFileInfo( root + aFileName ).exists() ) { a = createAction( id, tr( QString("GUI Help") ), QIconSet(), tr( QString("GUI Help") ), @@ -456,10 +478,9 @@ void LightApp_Application::createActions() } } if (dir = getenv("KERNEL_ROOT_DIR")) { - QString aFN = "index.html"; root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") + Qtx::addSlash("salome") ); - if ( QFileInfo( root + aFN ).exists() ) { + if ( QFileInfo( root + aFileName ).exists() ) { a = createAction( id, tr( QString("KERNEL Help") ), QIconSet(), tr( QString("KERNEL Help") ), tr( QString("KERNEL Help") ), @@ -479,8 +500,8 @@ void LightApp_Application::createActions() QString modName = moduleName( *it ); if (dir = getenv( modName + "_ROOT_DIR")) { - root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("doc") + Qtx::addSlash("salome") + - Qtx::addSlash("gui") + Qtx::addSlash(modName) ); + root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") + + Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash(modName) ); if ( QFileInfo( root + aFileName ).exists() ) { QAction* a = createAction( id, tr( moduleTitle(modName) + QString(" Help") ), QIconSet(), @@ -509,67 +530,73 @@ void LightApp_Application::createActions() if ( modIcon.isNull() ) modIcon = QPixmap( imageEmptyIcon ); - QToolBar* modTBar = new QtxToolBar( true, desk ); - modTBar->setLabel( tr( "INF_TOOLBAR_MODULES" ) ); + QStringList modList; + modules( modList, false ); + + if( modList.count()>1 ) + { + QToolBar* modTBar = new QtxToolBar( true, desk ); + modTBar->setLabel( tr( "INF_TOOLBAR_MODULES" ) ); - QActionGroup* modGroup = new QActionGroup( this ); - modGroup->setExclusive( true ); - modGroup->setUsesDropDown( true ); + QActionGroup* modGroup = new QActionGroup( this ); + modGroup->setExclusive( true ); + modGroup->setUsesDropDown( true ); - a = createAction( -1, tr( "APP_NAME" ), defIcon, tr( "APP_NAME" ), - tr( "PRP_APP_MODULE" ), 0, desk, true ); - modGroup->add( a ); - myActions.insert( QString(), a ); + a = createAction( -1, tr( "APP_NAME" ), defIcon, tr( "APP_NAME" ), + tr( "PRP_APP_MODULE" ), 0, desk, true ); + modGroup->add( a ); + myActions.insert( QString(), a ); - QMap iconMap; - moduleIconNames( iconMap ); + QMap iconMap; + moduleIconNames( iconMap ); - const int iconSize = 20; + const int iconSize = 20; - modGroup->addTo( modTBar ); - QObjectList *l = modTBar->queryList( "QComboBox" ); - QObjectListIt oit( *l ); - while ( QObject* obj = oit.current() ) { - QComboBox* cb = (QComboBox*)obj; - if ( cb ) cb->setFocusPolicy( QWidget::NoFocus ); + modGroup->addTo( modTBar ); + QObjectList *l = modTBar->queryList( "QComboBox" ); + QObjectListIt oit( *l ); + while ( QObject* obj = oit.current() ) { + QComboBox* cb = (QComboBox*)obj; + if ( cb ) cb->setFocusPolicy( QWidget::NoFocus ); ++oit; - } - delete l; + } + delete l; - modTBar->addSeparator(); + modTBar->addSeparator(); - QStringList modList; - modules( modList, false ); - - for ( it = modList.begin(); it != modList.end(); ++it ) - { - if ( !isLibExists( *it ) ) + for ( it = modList.begin(); it != modList.end(); ++it ) { - qDebug( QString( "Library '%1' cannot be found" ).arg( *it ) ); - continue; - } + if ( !isLibExists( *it ) ) + continue; + + QString iconName; + if ( iconMap.contains( *it ) ) + iconName = iconMap[*it]; - QString iconName; - if ( iconMap.contains( *it ) ) - iconName = iconMap[*it]; + QString modName = moduleName( *it ); - QString modName = moduleName( *it ); + QPixmap icon = resMgr->loadPixmap( modName, iconName, false ); + if ( icon.isNull() ) + { + icon = modIcon; + printf( "****************************************************************\n" ); + printf( "* Icon for %s not found. Using the default one.\n", (*it).latin1() ); + printf( "****************************************************************\n" ); + } - QPixmap icon = resMgr->loadPixmap( modName, iconName, false ); - if ( icon.isNull() ) - icon = modIcon; + icon.convertFromImage( icon.convertToImage().smoothScale( iconSize, iconSize, QImage::ScaleMin ) ); - icon.convertFromImage( icon.convertToImage().smoothScale( iconSize, iconSize, QImage::ScaleMin ) ); + QAction* a = createAction( -1, *it, icon, *it, tr( "PRP_MODULE" ).arg( *it ), 0, desk, true ); + a->addTo( modTBar ); + modGroup->add( a ); - QAction* a = createAction( -1, *it, icon, *it, tr( "PRP_MODULE" ).arg( *it ), 0, desk, true ); - a->addTo( modTBar ); - modGroup->add( a ); + myActions.insert( *it, a ); + } - myActions.insert( *it, a ); + SUIT_Tools::simplifySeparators( modTBar ); + connect( modGroup, SIGNAL( selected( QAction* ) ), this, SLOT( onModuleActivation( QAction* ) ) ); } - SUIT_Tools::simplifySeparators( modTBar ); - // New window int windowMenu = createMenu( tr( "MEN_DESK_WINDOW" ), -1, MenuWindowId, 100 ); int newWinMenu = createMenu( tr( "MEN_DESK_NEWWINDOW" ), windowMenu, -1, 0 ); @@ -588,14 +615,15 @@ void LightApp_Application::createActions() #ifndef DISABLE_VTKVIEWER createActionForViewer( NewVTKViewId, newWinMenu, QString::number( 3 ), ALT+Key_K ); #endif +#ifndef DISABLE_QXGRAPHVIEWER + createActionForViewer( NewQxGraphViewId, newWinMenu, QString::number( 4 ), ALT+Key_C ); +#endif createAction( RenameId, tr( "TOT_RENAME" ), QIconSet(), tr( "MEN_DESK_RENAME" ), tr( "PRP_RENAME" ), SHIFT+Key_R, desk, false, this, SLOT( onRenameWindow() ) ); createMenu( RenameId, windowMenu, -1 ); - connect( modGroup, SIGNAL( selected( QAction* ) ), this, SLOT( onModuleActivation( QAction* ) ) ); - int fileMenu = createMenu( tr( "MEN_DESK_FILE" ), -1 ); createMenu( PreferencesId, fileMenu, 15, -1 ); createMenu( separator(), fileMenu, -1, 15, -1 ); @@ -627,20 +655,16 @@ void LightApp_Application::onModuleActivation( QAction* a ) bool cancelled = false; while ( !modName.isEmpty() && !activeStudy() && !cancelled ){ LightApp_ModuleDlg aDlg( desktop(), modName, icon ); - int res = aDlg.exec(); + QMap opmap = activateModuleActions(); + for ( QMap::ConstIterator it = opmap.begin(); it != opmap.end(); ++it ) + aDlg.addButton( it.data(), it.key() ); - switch ( res ){ - case 1: - onNewDoc(); - break; - case 2: - onOpenDoc(); - break; - case 3: - //onLoadStudy(); - //break; - case 0: - default: + int res = aDlg.exec(); + if ( res != QDialog::Rejected ) { + // some operation is selected + moduleActionSelected( res ); + } + else { putInfo( tr("INF_CANCELLED") ); myActions[QString()]->setOn( true ); cancelled = true; @@ -691,6 +715,11 @@ void LightApp_Application::onNewWindow() case NewVTKViewId: type = VTKViewer_Viewer::Type(); break; +#endif +#ifndef DISABLE_QXGRAPHVIEWER + case NewQxGraphViewId: + type = QxGraph_Viewer::Type(); + break; #endif } @@ -889,17 +918,24 @@ void LightApp_Application::updateCommandsStatus() if( a ) a->setEnabled( activeStudy() ); #endif + +#ifndef DISABLE_QXGRAPHVIEWER + a = action( NewQxGraphViewId ); + if( a ) + a->setEnabled( activeStudy() ); +#endif } /*! \class RunBrowser Runs system command in separate thread */ -class RunBrowser: public QThread { +class RunBrowser: public QThread +{ public: - - RunBrowser( LightApp_Application* app, QString theApp, QString theParams, QString theHelpFile, QString theContext=NULL): - myApp(theApp), myParams(theParams), + RunBrowser (LightApp_Application* app, QString theApp, QString theParams, + QString theHelpFile, QString theContext=NULL) + : myApp(theApp), myParams(theParams), #ifdef WIN32 myHelpFile("file://" + theHelpFile + theContext), #else @@ -907,25 +943,35 @@ public: #endif myStatus(0), myLApp( app ) -{ -}; + { + }; virtual void run() { QString aCommand; - if ( !myApp.isEmpty()) + if (!myApp.isEmpty()) + { + //aCommand.sprintf("%s %s %s",myApp.latin1(),myParams.latin1(),myHelpFile.latin1()); + + //QProcess* proc = new QProcess(); + //proc->addArgument( aCommand ); + + QProcess* proc = new QProcess(); + proc->addArgument( myApp ); + if (!myParams.isEmpty()) proc->addArgument( myParams ); + proc->addArgument( myHelpFile ); + //myStatus = system(aCommand); + + //if(myStatus != 0) + if(!proc->start()) { - aCommand.sprintf("%s %s %s",myApp.latin1(),myParams.latin1(),myHelpFile.latin1()); - myStatus = system(aCommand); - if(myStatus != 0) - { - QCustomEvent* ce2000 = new QCustomEvent( 2000 ); - QString* msg = new QString( QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").arg(myApp).arg(myHelpFile) ); - ce2000->setData( msg ); - postEvent( myLApp, ce2000 ); - } + QCustomEvent* ce2000 = new QCustomEvent( 2000 ); + QString* msg = new QString( QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").arg(myApp).arg(myHelpFile) ); + ce2000->setData( msg ); + postEvent( myLApp, ce2000 ); } + } } private: @@ -944,17 +990,27 @@ void LightApp_Application::onHelpContentsModule() const QAction* obj = (QAction*) sender(); QString aComponentName = obj->name(); - QString aFileName = "index.htm"; - QString aFileNameKernel = "index.html"; + QString aFileName = "index.html"; QCString dir = getenv( aComponentName + "_ROOT_DIR"); QString homeDir = !aComponentName.compare(QString("KERNEL")) ? Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") + Qtx::addSlash("salome") ) : - Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("doc") + Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash(aComponentName) ); + Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") + Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash(aComponentName) ); - QString helpFile = QFileInfo( homeDir + (!aComponentName.compare(QString("KERNEL")) ? aFileNameKernel : aFileName) ).absFilePath(); + QString helpFile = QFileInfo( homeDir + aFileName ).absFilePath(); SUIT_ResourceMgr* resMgr = resourceMgr(); - QString anApp = resMgr->stringValue("ExternalBrowser", "application"); + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + QString anApp = resMgr->stringValue("ExternalBrowser", platform); +#ifdef WIN32 + QString quote("\""); + anApp.prepend( quote ); + anApp.append( quote ); +#endif QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); if (!anApp.isEmpty()) { @@ -975,11 +1031,22 @@ void LightApp_Application::onHelpContentsModule() void LightApp_Application::onHelpContextModule(const QString& theComponentName, const QString& theFileName) { QCString dir = getenv( theComponentName + "_ROOT_DIR"); - QString homeDir = Qtx::addSlash(Qtx::addSlash(dir)+Qtx::addSlash("doc")+Qtx::addSlash("salome")+Qtx::addSlash("gui")+Qtx::addSlash(theComponentName)); + QString homeDir = Qtx::addSlash(Qtx::addSlash(dir)+Qtx::addSlash("share")+Qtx::addSlash("doc")+Qtx::addSlash("salome")+Qtx::addSlash("gui")+Qtx::addSlash(theComponentName)); QString helpFile = QFileInfo( homeDir + theFileName ).absFilePath(); SUIT_ResourceMgr* resMgr = resourceMgr(); - QString anApp = resMgr->stringValue("ExternalBrowser", "application"); + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + QString anApp = resMgr->stringValue("ExternalBrowser", platform); +#ifdef WIN32 + QString quote("\""); + anApp.prepend( quote ); + anApp.append( quote ); +#endif QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); if (!anApp.isEmpty()) { @@ -1109,11 +1176,13 @@ void LightApp_Application::removeWindow( const int flag, const int studyId ) sId = activeStudy()->id(); } + bool anIsEmpty = !myWindows[flag]->isEmpty(); QWidget* wid = myWindows[flag]->widget( sId ); myWindows[flag]->remove( sId ); delete wid; - setWindowShown( flag, !myWindows[flag]->isEmpty() ); + //setWindowShown( flag, !myWindows[flag]->isEmpty() ); + setWindowShown( flag, anIsEmpty ); } /*! @@ -1314,6 +1383,12 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType // viewMgr = new SUPERVGraph_ViewManager( activeStudy(), desktop(), new SUPERVGraph_Viewer() ); // } //#endif +#ifndef DISABLE_QXGRAPHVIEWER + if( vmType == QxGraph_Viewer::Type() ) + { + viewMgr = new QxGraph_ViewManager( activeStudy(), desktop(), new QxGraph_Viewer() ); + } +#endif #ifndef DISABLE_OCCVIEWER if( vmType == OCCViewer_Viewer::Type() ) { @@ -1325,7 +1400,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType vm = new OCCViewer_Viewer(); #endif vm->setBackgroundColor( resMgr->colorValue( "OCCViewer", "background", vm->backgroundColor() ) ); - vm->setTrihedronSize( resMgr->integerValue( "OCCViewer", "trihedron_size", vm->trihedronSize() ) ); + vm->setTrihedronSize( resMgr->doubleValue( "OCCViewer", "trihedron_size", vm->trihedronSize() ) ); int u( 1 ), v( 1 ); vm->isos( u, v ); u = resMgr->integerValue( "OCCViewer", "iso_number_u", u ); @@ -1348,7 +1423,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType if( vm ) { vm->setBackgroundColor( resMgr->colorValue( "VTKViewer", "background", vm->backgroundColor() ) ); - vm->setTrihedronSize( resMgr->integerValue( "VTKViewer", "trihedron_size", vm->trihedronSize() ), + vm->setTrihedronSize( resMgr->doubleValue( "VTKViewer", "trihedron_size", vm->trihedronSize() ), resMgr->booleanValue( "VTKViewer", "relative_size", vm->trihedronRelative() ) ); new LightApp_VTKSelector( vm, mySelMgr ); } @@ -1399,6 +1474,9 @@ void LightApp_Application::onStudyCreated( SUIT_Study* theStudy ) activateModule( defaultModule() ); + if ( objectBrowser() ) + objectBrowser()->openLevels(); + activateWindows(); } @@ -1415,12 +1493,14 @@ void LightApp_Application::onStudyOpened( SUIT_Study* theStudy ) //aRoot->dump(); } getWindow( WT_ObjectBrowser ); - if ( objectBrowser() != 0 ) { + if ( objectBrowser() ) objectBrowser()->setRootObject( aRoot ); - } activateModule( defaultModule() ); + if ( objectBrowser() ) + objectBrowser()->openLevels(); + activateWindows(); emit studyOpened(); @@ -1433,16 +1513,18 @@ void LightApp_Application::onStudySaved( SUIT_Study* ) } /*!Protected SLOT. On study closed.*/ -void LightApp_Application::onStudyClosed( SUIT_Study* ) +void LightApp_Application::onStudyClosed( SUIT_Study* s ) { - emit studyClosed(); - // Bug 10396: clear selection mySelMgr->clearSelected(); + // Bug 12944: emit signal only after clear selection + emit studyClosed(); + activateModule( "" ); - saveWindowsGeometry(); + for ( WindowMap::ConstIterator itr = myWindows.begin(); s && itr != myWindows.end(); ++itr ) + removeWindow( itr.key(), s->id() ); } /*!Protected SLOT.On desktop activated.*/ @@ -1533,6 +1615,8 @@ void LightApp_Application::onPreferenceChanged( QString& modName, QString& secti sMod->preferencesChanged( section, param ); else preferencesChanged( section, param ); + // emit signal to allow additional preferences changing processing + emit preferenceChanged( modName, section, param ); } /*!Private SLOT. On open document with name \a aName.*/ @@ -1545,9 +1629,6 @@ void LightApp_Application::onMRUActivated( QString aName ) void LightApp_Application::beforeCloseDoc( SUIT_Study* s ) { CAM_Application::beforeCloseDoc( s ); - - for ( WindowMap::ConstIterator itr = myWindows.begin(); s && itr != myWindows.end(); ++itr ) - removeWindow( itr.key(), s->id() ); } /*!Update actions.*/ @@ -1584,6 +1665,7 @@ QWidget* LightApp_Application::createWindow( const int flag ) if ( flag == WT_ObjectBrowser ) { OB_Browser* ob = new OB_Browser( desktop() ); + ob->setSearch( new OB_ObjSearch( ob ) ); ob->setAutoUpdate( true ); //ob->setAutoOpenLevel( 1 ); // commented by ASV as a fix to bug IPAL10107 ob->setCaption( tr( "OBJECT_BROWSER" ) ); @@ -1739,7 +1821,13 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) int extgroup = pref->addPreference( tr( "PREF_GROUP_EXT_BROWSER" ), genTab ); pref->setItemProperty( extgroup, "columns", 1 ); - int apppref = pref->addPreference( tr( "PREF_APP" ), extgroup, LightApp_Preferences::File, "ExternalBrowser", "application" ); + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + int apppref = pref->addPreference( tr( "PREF_APP" ), extgroup, LightApp_Preferences::File, "ExternalBrowser", platform ); pref->setItemProperty( apppref, "existing", true ); pref->setItemProperty( apppref, "flags", QFileInfo::ExeUser ); pref->setItemProperty( apppref, "readOnly", false ); @@ -1765,11 +1853,11 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( plot2dGroup, "columns", 1 ); int occTS = pref->addPreference( tr( "PREF_TRIHEDRON_SIZE" ), occGroup, - LightApp_Preferences::IntSpin, "OCCViewer", "trihedron_size" ); + LightApp_Preferences::DblSpin, "OCCViewer", "trihedron_size" ); pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), occGroup, LightApp_Preferences::Color, "OCCViewer", "background" ); - pref->setItemProperty( occTS, "min", 1 ); + pref->setItemProperty( occTS, "min", 1.0E-06 ); pref->setItemProperty( occTS, "max", 1000 ); int isoU = pref->addPreference( tr( "PREF_ISOS_U" ), occGroup, @@ -1784,12 +1872,12 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( isoV, "max", 100000 ); int vtkTS = pref->addPreference( tr( "PREF_TRIHEDRON_SIZE" ), vtkGroup, - LightApp_Preferences::IntSpin, "VTKViewer", "trihedron_size" ); + LightApp_Preferences::DblSpin, "VTKViewer", "trihedron_size" ); pref->addPreference( tr( "PREF_RELATIVE_SIZE" ), vtkGroup, LightApp_Preferences::Bool, "VTKViewer", "relative_size" ); pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), vtkGroup, LightApp_Preferences::Color, "VTKViewer", "background" ); - pref->setItemProperty( vtkTS, "min", 1 ); + pref->setItemProperty( vtkTS, "min", 1.0E-06 ); pref->setItemProperty( vtkTS, "max", 150 ); pref->addPreference( tr( "PREF_SHOW_LEGEND" ), plot2dGroup, @@ -1891,7 +1979,7 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString #ifndef DISABLE_OCCVIEWER if ( sec == QString( "OCCViewer" ) && param == QString( "trihedron_size" ) ) { - int sz = resMgr->integerValue( sec, param, -1 ); + double sz = resMgr->doubleValue( sec, param, -1 ); QPtrList lst; viewManagers( OCCViewer_Viewer::Type(), lst ); for ( QPtrListIterator it( lst ); it.current() && sz >= 0; ++it ) @@ -1910,7 +1998,7 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString #ifndef DISABLE_VTKVIEWER if ( sec == QString( "VTKViewer" ) && (param == QString( "trihedron_size" ) || param == QString( "relative_size" )) ) { - int sz = resMgr->integerValue( "VTKViewer", "trihedron_size", -1 ); + double sz = resMgr->doubleValue( "VTKViewer", "trihedron_size", -1 ); bool isRelative = resMgr->booleanValue( "VTKViewer", "relative_size", true ); QPtrList lst; #ifndef DISABLE_SALOMEOBJECT @@ -2016,6 +2104,39 @@ void LightApp_Application::updateDesktopTitle() { desktop()->setCaption( aTitle ); } +/*! + \brief Get module activation actions + \return map where + - action_id is unique non-zero action identifier + - action_name is action title + \sa moduleActionSelected() +*/ +QMap LightApp_Application::activateModuleActions() const +{ + QMap opmap; + opmap.insert( NewStudyId, tr( "ACTIVATE_MODULE_OP_NEW" ) ); + opmap.insert( OpenStudyId, tr( "ACTIVATE_MODULE_OP_OPEN" ) ); + return opmap; +} + +/*! + \brief Process module activation action. + \param id action identifier + \sa activateModuleActions() +*/ +void LightApp_Application::moduleActionSelected( const int id ) +{ + switch ( id ) { + case NewStudyId: + onNewDoc(); + break; + case OpenStudyId: + onOpenDoc(); + break; + default: + break; + } +} /*! Updates windows after close document */ @@ -2080,8 +2201,15 @@ void LightApp_Application::updateWindows() currentWindows( winMap ); if ( activeStudy() ) { - for ( QMap::ConstIterator it = winMap.begin(); it != winMap.end(); ++it ) - getWindow( it.key() ); + for ( QMap::ConstIterator it = winMap.begin(); it != winMap.end(); ++it ) { + getWindow( it.key() ); + + Dock dock; int index, extraOffset; bool nl; + if ( desktop()->getLocation( myWindows[it.key()], dock, index, nl, extraOffset ) + && + dock != (Dock)it.data() ) + desktop()->moveDockWindow( myWindows[it.key()], (Dock)it.data() ); + } loadWindowsGeometry(); } @@ -2225,6 +2353,7 @@ void LightApp_Application::contextMenuPopup( const QString& type, QPopupMenu* th thePopup->insertSeparator(); thePopup->insertItem( tr( "MEN_REFRESH" ), this, SLOT( onRefresh() ) ); + thePopup->insertItem( tr( "MEN_FIND" ), this, SLOT( onFind() ) ); } /*! @@ -2323,6 +2452,10 @@ bool LightApp_Application::isLibExists( const QString& moduleTitle ) const return false; QString lib = moduleLibrary( moduleTitle ); + + //abd: changed libSalomePyQtGUI to SalomePyQtGUI for WIN32 + bool isPythonModule = lib.contains("SalomePyQtGUI"); + QStringList paths; #ifdef WIN32 paths = QStringList::split( ";", ::getenv( "PATH" ) ); @@ -2330,11 +2463,64 @@ bool LightApp_Application::isLibExists( const QString& moduleTitle ) const paths = QStringList::split( ":", ::getenv( "LD_LIBRARY_PATH" ) ); #endif + bool isLibFound = false; QStringList::const_iterator anIt = paths.begin(), aLast = paths.end(); for( ; anIt!=aLast; anIt++ ) { QFileInfo inf( Qtx::addSlash( *anIt ) + lib ); + if( inf.exists() ) + { + isLibFound = true; + break; + } + } + + if ( !isLibFound ) + { + printf( "****************************************************************\n" ); + printf( "* Warning: library %s cannot be found\n", lib.latin1() ); + printf( "* Module %s will not be available in GUI mode\n", moduleTitle.latin1() ); + printf( "****************************************************************\n" ); + } + else if ( !isPythonModule ) + return true; + + if ( isPythonModule ) + { + QString pylib = moduleName( moduleTitle ) + QString(".py"); + QString pylibgui = moduleName( moduleTitle ) + QString("GUI.py"); + + // Check the python library +#ifdef WIN32 + paths = QStringList::split( ";", ::getenv( "PATH" ) ); +#else + paths = QStringList::split( ":", ::getenv( "PYTHONPATH" ) ); +#endif + bool isPyLib = false, isPyGuiLib = false; + QStringList::const_iterator anIt = paths.begin(), aLast = paths.end(); + for( ; anIt!=aLast; anIt++ ) + { + QFileInfo inf( Qtx::addSlash( *anIt ) + pylib ); + QFileInfo infgui( Qtx::addSlash( *anIt ) + pylibgui ); + + if( !isPyLib && inf.exists() ) + isPyLib = true; + + if( !isPyGuiLib && infgui.exists() ) + isPyGuiLib = true; + + if ( isPyLib && isPyGuiLib && isLibFound) + return true; + } + + printf( "****************************************************************\n" ); + printf( "* Warning: python library for %s cannot be found:\n", moduleTitle.latin1() ); + if (!isPyLib) + printf( "* No module named %s\n", moduleName( moduleTitle ).latin1() ); + if (!isPyGuiLib) + printf( "* No module named %s\n", (moduleName( moduleTitle ) + QString("GUI")).latin1() ); + printf( "****************************************************************\n" ); return true; } return false; @@ -2389,3 +2575,22 @@ bool LightApp_Application::event( QEvent* e ) } return CAM_Application::event( e ); } + +/*! Check data object */ +bool LightApp_Application::checkDataObject(LightApp_DataObject* theObj) +{ + if (theObj) + { + bool isSuitable = !theObj->entry().isEmpty() && + !theObj->componentDataType().isEmpty() && + !theObj->name().isEmpty(); + return isSuitable; + } + + return false; +} + +void LightApp_Application::onFind() +{ + objectBrowser()->enableSearch( true ); +} diff --git a/src/LightApp/LightApp_Application.h b/src/LightApp/LightApp_Application.h index b7131da99..e83e3c2fd 100644 --- a/src/LightApp/LightApp_Application.h +++ b/src/LightApp/LightApp_Application.h @@ -40,6 +40,7 @@ class STD_Application; class LightApp_WidgetContainer; class LightApp_Preferences; class LightApp_SelectionMgr; +class LightApp_DataObject; class SUIT_Study; class SUIT_Accel; class CAM_Module; @@ -90,7 +91,15 @@ public: NewVTKViewId, #endif +#ifndef DISABLE_QXGRAPHVIEWER + NewQxGraphViewId, +#endif + PreferencesId, MRUId, UserID }; + +protected: + enum { NewStudyId = 1, OpenStudyId }; + public: LightApp_Application(); virtual ~LightApp_Application(); @@ -128,6 +137,8 @@ public: SUIT_ViewManager* getViewManager( const QString&, const bool ); virtual void addViewManager( SUIT_ViewManager* ); virtual void removeViewManager( SUIT_ViewManager* ); + virtual SUIT_ViewManager* createViewManager( const QString& vmType ); + QWidget* getWindow( const int, const int = -1 ); QWidget* window( const int, const int = -1 ) const; void addWindow( QWidget*, const int, const int = -1 ); @@ -149,11 +160,14 @@ public: static int studyId(); virtual bool event( QEvent* ); + + virtual bool checkDataObject( LightApp_DataObject* theObj ); signals: void studyOpened(); void studySaved(); void studyClosed(); + void preferenceChanged( const QString&, const QString&, const QString& ); public slots: virtual void onHelpContentsModule(); @@ -189,6 +203,9 @@ protected: virtual void preferencesChanged( const QString&, const QString& ); virtual void savePreferences(); virtual void updateDesktopTitle(); + + virtual QMap activateModuleActions() const; + virtual void moduleActionSelected( const int ); protected slots: virtual void onDesktopActivated(); @@ -207,6 +224,7 @@ protected slots: private slots: void onSelection(); void onRefresh(); + void onFind(); void onPreferences(); void onMRUActivated( QString ); void onPreferenceChanged( QString&, QString&, QString& ); @@ -226,7 +244,6 @@ protected: QString defaultModule() const; void currentWindows( QMap& ) const; void currentViewManagers( QStringList& ) const; - virtual SUIT_ViewManager* createViewManager( const QString& vmType ); void moduleIconNames( QMap& ) const; void activateWindows(); diff --git a/src/LightApp/LightApp_DataModel.cxx b/src/LightApp/LightApp_DataModel.cxx index 9fe3b086a..702ef7b33 100644 --- a/src/LightApp/LightApp_DataModel.cxx +++ b/src/LightApp/LightApp_DataModel.cxx @@ -110,16 +110,29 @@ void LightApp_DataModel::update( LightApp_DataObject*, LightApp_Study* ) { LightApp_ModuleObject* modelRoot = dynamic_cast( root() ); DataObjectList ch; + QMap aMap; if( modelRoot ) { ch = modelRoot->children(); for ( DataObjectListIterator it( ch ); it.current(); ++it ) it.current()->setParent( 0 ); } + build(); + + modelRoot = dynamic_cast( root() ); + if( modelRoot ) + { + DataObjectList new_ch = modelRoot->children(); + for ( DataObjectListIterator it1( new_ch ); it1.current(); ++it1 ) + aMap.insert( it1.current(), 0 ); + } + updateWidgets(); + for( DataObjectListIterator it( ch ); it.current(); ++it ) - delete it.current(); + if( !aMap.contains( it.current() ) ) + delete it.current(); } /*! diff --git a/src/LightApp/LightApp_DataOwner.cxx b/src/LightApp/LightApp_DataOwner.cxx index dea72f88c..dd3c22f16 100644 --- a/src/LightApp/LightApp_DataOwner.cxx +++ b/src/LightApp/LightApp_DataOwner.cxx @@ -16,31 +16,22 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + #include "LightApp_DataOwner.h" #include "LightApp_DataObject.h" -#ifndef WNT -#include -#define _typeinfo std::type_info -#else -#include -#define _typeinfo type_info -#endif - #include /*!Constructor. Initialize by \a theEntry.*/ -LightApp_DataOwner -::LightApp_DataOwner( const QString& theEntry ): - myEntry( theEntry ) +LightApp_DataOwner::LightApp_DataOwner( const QString& theEntry ) +: myEntry( theEntry ) { } #ifndef DISABLE_SALOMEOBJECT /*!Constructor. Initialize by \a SALOME_InteractiveObject.*/ -LightApp_DataOwner -::LightApp_DataOwner( const Handle(SALOME_InteractiveObject)& theIO ): +LightApp_DataOwner::LightApp_DataOwner( const Handle(SALOME_InteractiveObject)& theIO ): myEntry(!theIO.IsNull()? theIO->getEntry(): ""), myIO(theIO) { @@ -48,40 +39,25 @@ LightApp_DataOwner #endif /*!Destructor. Do nothing.*/ -LightApp_DataOwner -::~LightApp_DataOwner() -{ -} - -/*!Checks: Is current data owner equal \a obj.*/ -bool -LightApp_DataOwner -::isEqual( const SUIT_DataOwner& obj ) const +LightApp_DataOwner::~LightApp_DataOwner() { - const LightApp_DataOwner* other = dynamic_cast( &obj ); - - return other && entry() == other->entry(); } -bool LightApp_DataOwner::operator<( const SUIT_DataOwner& obj ) const +/*!Gets key string, used for data owners comparison.*/ +QString LightApp_DataOwner::keyString() const { - const LightApp_DataOwner* other = dynamic_cast( &obj ); - return entry() < other->entry(); + return myEntry; } /*!Gets entry.*/ -QString -LightApp_DataOwner -::entry() const +QString LightApp_DataOwner::entry() const { return myEntry; } #ifndef DISABLE_SALOMEOBJECT /*!Gets SALOME_InteractiveObject.*/ -const Handle(SALOME_InteractiveObject)& -LightApp_DataOwner -::IO() const +const Handle(SALOME_InteractiveObject)& LightApp_DataOwner::IO() const { return myIO; } diff --git a/src/LightApp/LightApp_DataOwner.h b/src/LightApp/LightApp_DataOwner.h index 7fd43eedc..e2df564ef 100644 --- a/src/LightApp/LightApp_DataOwner.h +++ b/src/LightApp/LightApp_DataOwner.h @@ -27,6 +27,7 @@ #include "SALOME_InteractiveObject.hxx" #endif + /*! This class provide data owner objects. */ @@ -39,8 +40,9 @@ public: LightApp_DataOwner( const QString& ); virtual ~LightApp_DataOwner(); - virtual bool isEqual( const SUIT_DataOwner& ) const; - virtual bool operator<( const SUIT_DataOwner& ) const; + // *** jfa: The below line has been put here 14.02.2007. + // *** It cancels modifications from branch BR_Dev_For_4_0 + virtual QString keyString() const; #ifndef DISABLE_SALOMEOBJECT const Handle(SALOME_InteractiveObject)& IO() const; diff --git a/src/LightApp/LightApp_DataSubOwner.cxx b/src/LightApp/LightApp_DataSubOwner.cxx index aaf1d3613..c64c739eb 100644 --- a/src/LightApp/LightApp_DataSubOwner.cxx +++ b/src/LightApp/LightApp_DataSubOwner.cxx @@ -20,10 +20,6 @@ #include "LightApp_DataObject.h" -#ifdef WNT -#include -#endif - /*!Constructor.Initialize by \a entry and \a index*/ LightApp_DataSubOwner::LightApp_DataSubOwner( const QString& entry, const int index ) : LightApp_DataOwner( entry ), @@ -36,14 +32,12 @@ LightApp_DataSubOwner::~LightApp_DataSubOwner() { } -/*!Checks: Is current data sub owner equal \a obj.*/ -bool LightApp_DataSubOwner::isEqual( const SUIT_DataOwner& obj ) const -{ - if (LightApp_DataOwner::isEqual(obj)) { - const LightApp_DataSubOwner* other = dynamic_cast( &obj ); - return other && index() == other->index(); - } - return false; +/*!Gets key string, used for data owners comparison.*/ +QString LightApp_DataSubOwner::keyString() const +{ + QString aKey = LightApp_DataOwner::keyString(); + aKey += QString("_%1").arg(index()); + return aKey; } /*!Gets index.*/ diff --git a/src/LightApp/LightApp_DataSubOwner.h b/src/LightApp/LightApp_DataSubOwner.h index 0bd219c42..7e8e7f3ea 100644 --- a/src/LightApp/LightApp_DataSubOwner.h +++ b/src/LightApp/LightApp_DataSubOwner.h @@ -32,8 +32,10 @@ public: LightApp_DataSubOwner( const QString&, const int ); virtual ~LightApp_DataSubOwner(); - virtual bool isEqual( const SUIT_DataOwner& ) const; - int index() const; + // *** jfa: The below line has been put here 14.02.2007. + // *** It cancels modifications from branch BR_Dev_For_4_0 + virtual QString keyString() const; + int index() const; private: int myIndex; diff --git a/src/LightApp/LightApp_Dialog.h b/src/LightApp/LightApp_Dialog.h index a862d6388..6e3b3b8a0 100644 --- a/src/LightApp/LightApp_Dialog.h +++ b/src/LightApp/LightApp_Dialog.h @@ -35,6 +35,10 @@ class QLabel; class SUIT_ResourceMgr; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \class LightApp_Dialog Base class for all LightApp dialogs. @@ -50,7 +54,7 @@ class LIGHTAPP_EXPORT LightApp_Dialog : public QtxDialog public: typedef QValueList TypesList; typedef QMap SelectedObjects; - + enum ObjectWg { Label = 0x00000001, @@ -149,7 +153,7 @@ public: //! Set all object selection buttons to inactive state void deactivateAll(); - + signals: //! selection in certain widget is changed void selectionChanged ( int ); @@ -281,9 +285,14 @@ private: private: ObjectMap myObjects; + QMap myTypeNames; bool myIsExclusive, myIsBusy; QPixmap myPixmap; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/LightApp/LightApp_Displayer.h b/src/LightApp/LightApp_Displayer.h index 3f65e7bca..5b4318965 100644 --- a/src/LightApp/LightApp_Displayer.h +++ b/src/LightApp/LightApp_Displayer.h @@ -20,6 +20,8 @@ #ifndef LIGHTAPP_DISPLAYER_HEADER #define LIGHTAPP_DISPLAYER_HEADER +#include "LightApp.h" + #include class QString; @@ -29,7 +31,7 @@ class QString; Uniform mechanism of display/erase of objects in different views. Objects are specified by string entry */ -class LightApp_Displayer : public SALOME_Displayer +class LIGHTAPP_EXPORT LightApp_Displayer : public SALOME_Displayer { public: LightApp_Displayer(); diff --git a/src/LightApp/LightApp_EventFilter.cxx b/src/LightApp/LightApp_EventFilter.cxx new file mode 100644 index 000000000..77ab42c9f --- /dev/null +++ b/src/LightApp/LightApp_EventFilter.cxx @@ -0,0 +1,81 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "LightApp_EventFilter.h" + +#include + +#include + +LightApp_EventFilter* LightApp_EventFilter::myFilter = NULL; + +/*!Constructor.*/ +LightApp_EventFilter::LightApp_EventFilter() +: QObject() +{ + qApp->installEventFilter( this ); +} + +/*!Destructor.*/ +LightApp_EventFilter::~LightApp_EventFilter() +{ + qApp->removeEventFilter( this ); +} + +/*! + Custom event filter +*/ +bool LightApp_EventFilter::eventFilter( QObject* o, QEvent* e ) +{ + if ( e->type() == QEvent::WindowActivate && o->inherits("QDialog") ) + { + QWidget* parent = ((QWidget*)o)->parentWidget(); + + SUIT_Desktop* aDesktop = 0; + + while( parent ) + { + if ( aDesktop = dynamic_cast(parent) ) + break; + parent = parent->parentWidget(); + } + + if ( aDesktop ) + aDesktop->emitActivated(); + } + + return QObject::eventFilter( o, e ); +} + +/*!Create new instance of LightApp_EventFilter*/ +void LightApp_EventFilter::Init() +{ + if( myFilter==NULL ) + myFilter = new LightApp_EventFilter(); +} + +/*!Destroy filter.*/ +void LightApp_EventFilter::Destroy() +{ + if( myFilter ) + { + delete myFilter; + myFilter = NULL; + } +} diff --git a/src/SalomeApp/SalomeApp_Displayer.h b/src/LightApp/LightApp_EventFilter.h similarity index 54% rename from src/SalomeApp/SalomeApp_Displayer.h rename to src/LightApp/LightApp_EventFilter.h index db5319392..836db4476 100644 --- a/src/SalomeApp/SalomeApp_Displayer.h +++ b/src/LightApp/LightApp_EventFilter.h @@ -17,30 +17,40 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef SALOMEAPP_DISPLAYER_HEADER -#define SALOMEAPP_DISPLAYER_HEADER +#ifndef LIGHTAPP_EVENTFILTER_H +#define LIGHTAPP_EVENTFILTER_H -#include +#include "LightApp.h" -class QString; +#include -class SalomeApp_Displayer : public SALOME_Displayer +#if defined WNT +#pragma warning( disable: 4251 ) +#endif + +/*! + Class provide event filter. +*/ +class LIGHTAPP_EXPORT LightApp_EventFilter: public QObject { public: - SalomeApp_Displayer(); - virtual ~SalomeApp_Displayer(); + static void Init(); + static void Destroy(); - void Display( const QString&, const bool = true, SALOME_View* = 0 ); - void Redisplay( const QString&, const bool = true ); - void Erase( const QString&, const bool forced = false, const bool updateViewer = true, SALOME_View* = 0 ); - void EraseAll( const bool forced = false, const bool updateViewer = true, SALOME_View* = 0 ) const; - bool IsDisplayed( const QString&, SALOME_View* = 0 ) const; - void UpdateViewer() const; +protected: + LightApp_EventFilter(); + virtual ~LightApp_EventFilter(); - static SALOME_View* GetActiveView(); +private: + /*! global event filter for qapplication */ + virtual bool eventFilter( QObject* o, QEvent* e ); -protected: - virtual SALOME_Prs* buildPresentation( const QString&, SALOME_View* = 0 ); +private: + static LightApp_EventFilter* myFilter; }; +#if defined WNT +#pragma warning( default: 4251 ) +#endif + #endif diff --git a/src/LightApp/LightApp_GLSelector.cxx b/src/LightApp/LightApp_GLSelector.cxx index ceebdeeb4..d7c14c59b 100644 --- a/src/LightApp/LightApp_GLSelector.cxx +++ b/src/LightApp/LightApp_GLSelector.cxx @@ -19,6 +19,7 @@ #include "LightApp_GLSelector.h" #include "LightApp_DataOwner.h" +#include "LightApp_DataObject.h" #include @@ -64,8 +65,8 @@ void LightApp_GLSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const GLViewer_Object* obj = cont->SelectedObject(); if ( obj ) { - LightApp_GLOwner* owner = dynamic_cast< LightApp_GLOwner* >( obj->owner() ); - if( owner ) + LightApp_DataOwner* owner = dynamic_cast( obj->owner() ); + if ( owner ) aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( owner->entry() ) ) ); } } @@ -81,70 +82,32 @@ void LightApp_GLSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) if ( !cont ) return; - QMap aDisplayed; - const ObjList& displayed = cont->getObjects(); - for ( ObjList::const_iterator it = displayed.begin(); it != displayed.end(); ++it ) - { - GLViewer_Object* obj = *it; - if ( obj && obj->getVisible() ) - { - LightApp_GLOwner* owner = dynamic_cast< LightApp_GLOwner* >( obj->owner() ); - if ( owner ) - aDisplayed.insert( owner->entry(), obj ); - } - } - - int Nb = 0; - cont->clearSelected( false ); + QMap aSelected; for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr ) { const LightApp_DataOwner* owner = dynamic_cast( (*itr).operator->() ); - if ( !owner ) - continue; + if ( owner ) + aSelected.insert( owner->entry(), 0 ); + } - if ( aDisplayed.contains( owner->entry() ) ) + bool changed = false; + const ObjList& displayed = cont->getObjects(); + for ( ObjList::const_iterator it = displayed.begin(); it != displayed.end(); ++it ) + { + GLViewer_Object* obj = *it; + if ( obj && obj->getVisible() ) { - cont->setSelected( aDisplayed[owner->entry()], false ); - Nb++; + LightApp_DataOwner* owner = dynamic_cast( obj->owner() ); + bool sel = owner && aSelected.contains( owner->entry() ); + changed = changed || sel != (bool)obj->isSelected(); + if ( sel && !obj->isSelected() ) + cont->setSelected( obj, false ); + else if ( !sel && obj->isSelected() ) + cont->remSelected( obj, false ); } } - if ( Nb > 0 ) + if ( changed ) myViewer->updateAll(); } - - -/*! - Constructor - \param entry - entry of object -*/ -LightApp_GLOwner::LightApp_GLOwner( const char* entry ) -: GLViewer_Owner() -{ - setEntry( entry ); -} - -/*! - Destructor -*/ -LightApp_GLOwner::~LightApp_GLOwner() -{ -} - -/*! - \return entry -*/ -const char* LightApp_GLOwner::entry() const -{ - return myEntry.c_str(); -} - -/*! - Sets new entry - \param entry - entry of object -*/ -void LightApp_GLOwner::setEntry( const char* entry ) -{ - myEntry = entry; -} diff --git a/src/LightApp/LightApp_GLSelector.h b/src/LightApp/LightApp_GLSelector.h index 13cb191be..b63601604 100644 --- a/src/LightApp/LightApp_GLSelector.h +++ b/src/LightApp/LightApp_GLSelector.h @@ -28,6 +28,8 @@ #include #include +class LightApp_DataObject; + /*! \class LightApp_GLSelector Custom selector to get/set selection from GL viewer @@ -56,20 +58,4 @@ private: }; -/*! - This class provide data owner objects for GLViewer. -*/ -class LIGHTAPP_EXPORT LightApp_GLOwner : public GLViewer_Owner -{ -public: - LightApp_GLOwner( const char* ); - ~LightApp_GLOwner(); - - const char* entry() const; - void setEntry( const char* ); - -private: - std::string myEntry; -}; - #endif diff --git a/src/LightApp/LightApp_Module.cxx b/src/LightApp/LightApp_Module.cxx index 9c1a71335..437a4724f 100644 --- a/src/LightApp/LightApp_Module.cxx +++ b/src/LightApp/LightApp_Module.cxx @@ -138,7 +138,6 @@ void LightApp_Module::updateObjBrowser( bool theIsUpdateDataModel, bool upd = getApp()->objectBrowser()->isAutoUpdate(); getApp()->objectBrowser()->setAutoUpdate( false ); - SUIT_DataObject* aDataObject = theDataObject; if( theIsUpdateDataModel ){ if( CAM_DataModel* aDataModel = dataModel() ){ if ( LightApp_DataModel* aModel = dynamic_cast( aDataModel ) ) { @@ -149,14 +148,11 @@ void LightApp_Module::updateObjBrowser( bool theIsUpdateDataModel, LightApp_DataObject* anObject = dynamic_cast(theDataObject); LightApp_Study* aStudy = dynamic_cast(getApp()->activeStudy()); aModel->update( anObject, aStudy ); - - if(aParent && aParent->childPos(anObject) < 0) - aDataObject = dynamic_cast(aParent); } } } getApp()->objectBrowser()->setAutoUpdate( upd ); - getApp()->objectBrowser()->updateTree( 0, false /*aDataObject*/ ); + getApp()->objectBrowser()->updateTree( 0, false ); } /*!NOT IMPLEMENTED*/ @@ -321,9 +317,9 @@ QtxPopupMgr* LightApp_Module::popupMgr() SUIT_Desktop* d = application()->desktop(); QAction - *disp = createAction( -1, tr( "TOP_DISPLAY" ), p, tr( "MEN_DISPLAY" ), tr( "STB_DISPLAY" ), + *disp = createAction( -1, tr( "TOP_SHOW" ), p, tr( "MEN_SHOW" ), tr( "STB_SHOW" ), 0, d, false, this, SLOT( onShowHide() ) ), - *erase = createAction( -1, tr( "TOP_ERASE" ), p, tr( "MEN_ERASE" ), tr( "STB_ERASE" ), + *erase = createAction( -1, tr( "TOP_HIDE" ), p, tr( "MEN_HIDE" ), tr( "STB_HIDE" ), 0, d, false, this, SLOT( onShowHide() ) ), *dispOnly = createAction( -1, tr( "TOP_DISPLAY_ONLY" ), p, tr( "MEN_DISPLAY_ONLY" ), tr( "STB_DISPLAY_ONLY" ), 0, d, false, this, SLOT( onShowHide() ) ), @@ -340,7 +336,7 @@ QtxPopupMgr* LightApp_Module::popupMgr() myPopupMgr->insert( eraseAll, -1, 0 ); myPopupMgr->insert( separator(), -1, 0 ); - QString oneAndNotActive = "( count( $component ) = 1 ) and ( component != activeModule )"; + QString oneAndNotActive = "( count( $component ) = 1 ) and ( not( activeModule in $component ) )"; QString uniform = "true in $canBeDisplayed and %1 and ( activeModule = '%2' )"; uniform = uniform.arg( oneAndNotActive ).arg( name() ); myPopupMgr->setRule( disp, /*QString( "( not isVisible ) and " ) + */ uniform, true ); diff --git a/src/LightApp/LightApp_Module.h b/src/LightApp/LightApp_Module.h index 17a95366f..dbfed0b70 100644 --- a/src/LightApp/LightApp_Module.h +++ b/src/LightApp/LightApp_Module.h @@ -46,6 +46,10 @@ class QtxPopupMgr; class QString; class QVariant; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \class LightApp_Module Base class for all light modules @@ -84,6 +88,7 @@ public: virtual void studyActivated() {}; virtual LightApp_Displayer* displayer(); + virtual LightApp_Selection* createSelection() const; public slots: virtual bool activateModule( SUIT_Study* ); @@ -107,7 +112,6 @@ protected: LightApp_Preferences* preferences() const; virtual CAM_DataModel* createDataModel(); - virtual LightApp_Selection* createSelection() const; int addPreference( const QString& label ); int addPreference( const QString& label, const int pId, const int = -1, @@ -140,4 +144,8 @@ protected: int myDisplay, myErase, myDisplayOnly, myEraseAll; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/LightApp/LightApp_ModuleDlg.cxx b/src/LightApp/LightApp_ModuleDlg.cxx index 0a45b8d35..3fcaf5112 100644 --- a/src/LightApp/LightApp_ModuleDlg.cxx +++ b/src/LightApp/LightApp_ModuleDlg.cxx @@ -16,201 +16,91 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : LightApp_ModuleDlg.cxx -// Author : Michael Zorin (mzn) -// Module : LightApp - -#include - -#include -#include -#include -#include -#include - -#ifndef WIN32 -using namespace std; -#endif - -/*!Default icon*/ -static const char* const default_icon[] = { -"48 48 17 1", -". c None", -"# c #161e4c", -"b c #1d3638", -"e c #2f585b", -"i c #345b5e", -"c c #386266", -"g c #3f7477", -"d c #4d8589", -"m c #519099", -"o c #6abbc1", -"a c #70c9d3", -"f c #79ddea", -"n c #7adff2", -"k c #7ce2f4", -"j c #993550", -"h c #d84b71", -"l c #ef537d", -"................................................", -"................................................", -"................................................", -"................................................", -"................................................", -"................########.########.########......", -"...............#aaaaaa###aaaaaa###aaaaaa##......", -"..............#aaaaaa#b#aaaaaa#b#aaaaaa#c#......", -".............########b########b########cc#......", -".............#dddddd#b#dddddd#b#dddddd#cc#......", -"...........########d########d########d#cc#......", -"..........#aaaaaa###aaaaaa###aaaaaa##d#cc#......", -".........#aaaaaa#b#aaaaaa#b#aaaaaa#c#d#cc#......", -"........########b########e########cc#d#c#.......", -"........#dddddd#b#dddddd#e#ffffff#cc#d####......", -"......########d########d########f#cc###g##......", -".....#aaaaaa###aaaaaa###hhhhhh##f#cc#gg#c#......", -"....#aaaaaa#b#aaaaaa#i#hhhhhh#j#f#cc###cc#......", -"...########b########i########jj#f#c#gg#cc#......", -"...#kkkkkk#b#kkkkkk#i#llllll#jj#f####g#cc#......", -"...#kkkkkk#b#kkkkkk#i#llllll#jj###m##g#cc#......", -"...#knnkkk#b#kkkkkk#i#llllll#jj#mm#c#g#cc#......", -"...#knnkkk#b#kkkkkk#i#llllll#jj###cc#g#c#.......", -"...#kkkkkk#b#kkkkkk#i#llllll#j#dd#cc#g####......", -"...#kkkkkk###kkkkkk###llllll####d#cc###g##......", -"...########g########g########o##d#cc#gg#c#......", -"....#gggggg#b#gggggg#b#oooooo#c#d#cc###cc#......", -"...########b########b########cc#d#c#gg#cc#......", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#d####g#cc#......", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###g##g#cc#......", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#gg#c#g#cc#......", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###cc#g#c#.......", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#gg#cc#g##........", -"...#kkkkkk###kkkkkk###kkkkkk####g#cc###.........", -"...########g########g########g##g#cc#...........", -"....#gggggg#b#gggggg#b#gggggg#c#g#cc#...........", -"...########b########b########cc#g#c#............", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#g##.............", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###..............", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................", -"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#.................", -"...#kkkkkk###kkkkkk###kkkkkk##..................", -"...########.########.########...................", -"................................................", -"................................................", -"................................................", -"................................................"}; - -//============================================================================================================================== -/*! - * LightApp_ModuleDlg::LightApp_ModuleDlg \n - * - * Constructor. - */ -//============================================================================================================================== -LightApp_ModuleDlg::LightApp_ModuleDlg ( QWidget * parent, const QString& component, const QPixmap icon ) - : QDialog ( parent, "ActivateModuleDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) -{ - QPixmap defaultIcon( ( const char** ) default_icon ); - setCaption( tr( "CAPTION" ) ); - setSizeGripEnabled( TRUE ); - - QGridLayout* ActivateModuleDlgLayout = new QGridLayout( this ); - ActivateModuleDlgLayout->setMargin( 11 ); ActivateModuleDlgLayout->setSpacing( 6 ); - - // Module's name and icon - myComponentFrame = new QFrame( this, "myComponentFrame" ); - myComponentFrame->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Expanding ) ); - myComponentFrame->setMinimumHeight( 100 ); - myComponentFrame->setFrameStyle( QFrame::Box | QFrame::Sunken ); - - QGridLayout* myComponentFrameLayout = new QGridLayout( myComponentFrame ); - myComponentFrameLayout->setMargin( 11 ); myComponentFrameLayout->setSpacing( 6 ); - - // --> icon - myComponentIcon = new QLabel( myComponentFrame, "myComponentIcon" ); - myComponentIcon->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); - myComponentIcon->setPixmap( !icon.isNull() ? icon : defaultIcon ); - myComponentIcon->setScaledContents( false ); - myComponentIcon->setAlignment( AlignCenter ); - // --> name - myComponentLab = new QLabel( component, myComponentFrame, "myComponentLab" ); - QFont fnt = myComponentLab->font(); fnt.setBold( TRUE ); myComponentLab->setFont( fnt ); - myComponentLab->setAlignment( AlignCenter ); - - myComponentFrameLayout->addWidget( myComponentIcon, 0, 0 ); - myComponentFrameLayout->addWidget( myComponentLab, 0, 1 ); - - // Info - QVBoxLayout* infoLayout = new QVBoxLayout(); - infoLayout->setMargin( 0 ); infoLayout->setSpacing( 6 ); - - // --> top line - QFrame* myLine1 = new QFrame( this, "myLine1" ); - myLine1->setFrameStyle( QFrame::HLine | QFrame::Plain ); - // --> info label - myInfoLabel = new QLabel( tr ("ActivateComponent_DESCRIPTION"), this, "myInfoLabel" ); - myInfoLabel->setAlignment( AlignCenter ); - // --> bottom line - QFrame* myLine2 = new QFrame( this, "myLine2" ); - myLine2->setFrameStyle( QFrame::HLine | QFrame::Plain ); - - infoLayout->addStretch(); - infoLayout->addWidget( myLine1 ); - infoLayout->addWidget( myInfoLabel ); - infoLayout->addWidget( myLine2 ); - infoLayout->addStretch(); - - // Buttons - QHBoxLayout* btnLayout = new QHBoxLayout(); - btnLayout->setMargin( 0 ); btnLayout->setSpacing( 6 ); - - // --> New - myNewBtn = new QPushButton( tr( "NEW" ), this, "myNewBtn" ); - myNewBtn->setDefault( true ); myNewBtn->setAutoDefault( true ); - // --> Open - myOpenBtn = new QPushButton( tr( "OPEN" ), this, "myOpenBtn" ); - myOpenBtn->setAutoDefault( true ); - // --> Load - myLoadBtn = new QPushButton( tr( "LOAD" ), this, "myLoadBtn" ); - myLoadBtn->setAutoDefault( true ); - // --> Cancel - myCancelBtn = new QPushButton( tr( "CANCEL" ), this, "myCancelBtn" ); - myCancelBtn->setAutoDefault( true ); - - btnLayout->addWidget( myNewBtn ); - btnLayout->addWidget( myOpenBtn ); - btnLayout->addWidget( myLoadBtn ); - btnLayout->addStretch(); - btnLayout->addSpacing( 70 ); - btnLayout->addStretch(); - btnLayout->addWidget( myCancelBtn ); - - ActivateModuleDlgLayout->addWidget( myComponentFrame, 0, 0 ); - ActivateModuleDlgLayout->addLayout( infoLayout, 0, 1 ); - ActivateModuleDlgLayout->addMultiCellLayout( btnLayout, 1, 1, 0, 1 ); - - // signals and slots connections - connect( myNewBtn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( myOpenBtn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( myLoadBtn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); -} - -//============================================================================================================================== -/*! - * LightApp_ModuleDlg::onButtonClicked - * - * Buttons slot - */ -//============================================================================================================================== -void LightApp_ModuleDlg::onButtonClicked() -{ - QPushButton* btn = ( QPushButton* )sender(); - if ( btn == myNewBtn ) - done( 1 ); - if ( btn == myOpenBtn ) - done( 2 ); - if ( btn == myLoadBtn ) - done( 3 ); -} +// File : LightApp_ModuleDlg.cxx +// Author : Michael Zorin (mzn) +// Module : LightApp + +#include + +#include + +static const char* default_icon[] = { +"48 48 17 1", +". c None", +"# c #161e4c", +"b c #1d3638", +"e c #2f585b", +"i c #345b5e", +"c c #386266", +"g c #3f7477", +"d c #4d8589", +"m c #519099", +"o c #6abbc1", +"a c #70c9d3", +"f c #79ddea", +"n c #7adff2", +"k c #7ce2f4", +"j c #993550", +"h c #d84b71", +"l c #ef537d", +"................................................", +"................................................", +"................................................", +"................................................", +"................................................", +"................########.########.########......", +"...............#aaaaaa###aaaaaa###aaaaaa##......", +"..............#aaaaaa#b#aaaaaa#b#aaaaaa#c#......", +".............########b########b########cc#......", +".............#dddddd#b#dddddd#b#dddddd#cc#......", +"...........########d########d########d#cc#......", +"..........#aaaaaa###aaaaaa###aaaaaa##d#cc#......", +".........#aaaaaa#b#aaaaaa#b#aaaaaa#c#d#cc#......", +"........########b########e########cc#d#c#.......", +"........#dddddd#b#dddddd#e#ffffff#cc#d####......", +"......########d########d########f#cc###g##......", +".....#aaaaaa###aaaaaa###hhhhhh##f#cc#gg#c#......", +"....#aaaaaa#b#aaaaaa#i#hhhhhh#j#f#cc###cc#......", +"...########b########i########jj#f#c#gg#cc#......", +"...#kkkkkk#b#kkkkkk#i#llllll#jj#f####g#cc#......", +"...#kkkkkk#b#kkkkkk#i#llllll#jj###m##g#cc#......", +"...#knnkkk#b#kkkkkk#i#llllll#jj#mm#c#g#cc#......", +"...#knnkkk#b#kkkkkk#i#llllll#jj###cc#g#c#.......", +"...#kkkkkk#b#kkkkkk#i#llllll#j#dd#cc#g####......", +"...#kkkkkk###kkkkkk###llllll####d#cc###g##......", +"...########g########g########o##d#cc#gg#c#......", +"....#gggggg#b#gggggg#b#oooooo#c#d#cc###cc#......", +"...########b########b########cc#d#c#gg#cc#......", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#d####g#cc#......", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###g##g#cc#......", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#gg#c#g#cc#......", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###cc#g#c#.......", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#gg#cc#g##........", +"...#kkkkkk###kkkkkk###kkkkkk####g#cc###.........", +"...########g########g########g##g#cc#...........", +"....#gggggg#b#gggggg#b#gggggg#c#g#cc#...........", +"...########b########b########cc#g#c#............", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#g##.............", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###..............", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................", +"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#.................", +"...#kkkkkk###kkkkkk###kkkkkk##..................", +"...########.########.########...................", +"................................................", +"................................................", +"................................................", +"................................................"}; + +LightApp_ModuleDlg::LightApp_ModuleDlg( QWidget* parent, + const QString& component, + const QPixmap& icon ) +: SUIT_MsgDlg( parent, tr( "CAPTION" ), tr ( "DESCRIPTION" ).arg( component ), !icon.isNull() ? icon : QPixmap( default_icon ) ) +{ + iconLabel()->setFrameStyle( QFrame::Box | QFrame::Sunken ); + iconLabel()->setMinimumSize( 70, 70 ); +} + +LightApp_ModuleDlg::~LightApp_ModuleDlg() +{ +} diff --git a/src/LightApp/LightApp_ModuleDlg.h b/src/LightApp/LightApp_ModuleDlg.h index 9b818344c..0f2dd79a9 100644 --- a/src/LightApp/LightApp_ModuleDlg.h +++ b/src/LightApp/LightApp_ModuleDlg.h @@ -16,49 +16,25 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SALOME SALOMEGUI : implementation of desktop and GUI kernel +// File : LightApp_ModuleDlg.h +// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) // -// File : LightApp_ModuleDlg.h -// Author : Michael ZORIN (mzn) -// Module : SALOME #ifndef LIGHTAPP_MODULEDLG_H #define LIGHTAPP_MODULEDLG_H #include "LightApp.h" -#include -#include -class QFrame; -class QLabel; -class QPushButton; +#include -/*! - \class LightApp_ModuleDlg - Dialog allows to choose action on module activation when there is no document. - It is possible to create new document, to open existing or to cancel module activation -*/ -class LIGHTAPP_EXPORT LightApp_ModuleDlg : public QDialog +class LIGHTAPP_EXPORT LightApp_ModuleDlg : public SUIT_MsgDlg { Q_OBJECT public: - LightApp_ModuleDlg ( QWidget* parent, const QString& component, const QPixmap icon = QPixmap() ) ; - ~LightApp_ModuleDlg ( ) { }; - -private slots: - void onButtonClicked(); - -private: - QFrame* myComponentFrame; - QLabel* myComponentLab; - QLabel* myComponentIcon; - QLabel* myInfoLabel; - QPushButton* myNewBtn; - QPushButton* myOpenBtn; - QPushButton* myLoadBtn; - QPushButton* myCancelBtn; + LightApp_ModuleDlg( QWidget*, const QString&, const QPixmap& = QPixmap() ); + ~LightApp_ModuleDlg(); }; -#endif +#endif // LIGHTAPP_MODULEDLG_H diff --git a/src/LightApp/LightApp_OBSelector.cxx b/src/LightApp/LightApp_OBSelector.cxx index 3db252685..175356d91 100644 --- a/src/LightApp/LightApp_OBSelector.cxx +++ b/src/LightApp/LightApp_OBSelector.cxx @@ -20,12 +20,17 @@ #include "LightApp_DataOwner.h" #include "LightApp_DataObject.h" +#include "LightApp_Application.h" #include +#include #include + #include +#include + /*! Constructor */ @@ -61,6 +66,12 @@ OB_Browser* LightApp_OBSelector::browser() const void LightApp_OBSelector::getSelection( SUIT_DataOwnerPtrList& theList ) const { if (mySelectedList.count() == 0 ) { + SUIT_Session* session = SUIT_Session::session(); + SUIT_Application* sapp = session ? session->activeApplication() : 0; + LightApp_Application* app = dynamic_cast( sapp ); + if( !app ) + return; + if ( !myBrowser ) return; DataObjectList objlist; @@ -69,7 +80,7 @@ void LightApp_OBSelector::getSelection( SUIT_DataOwnerPtrList& theList ) const for ( DataObjectListIterator it( objlist ); it.current(); ++it ) { LightApp_DataObject* obj = dynamic_cast( it.current() ); - if ( obj ) + if ( obj && app->checkDataObject(obj) ) { #ifndef DISABLE_SALOMEOBJECT Handle(SALOME_InteractiveObject) aSObj = new SALOME_InteractiveObject diff --git a/src/LightApp/LightApp_OCCSelector.cxx b/src/LightApp/LightApp_OCCSelector.cxx index 446ae593b..534cad26e 100644 --- a/src/LightApp/LightApp_OCCSelector.cxx +++ b/src/LightApp/LightApp_OCCSelector.cxx @@ -33,8 +33,10 @@ LightApp_OCCSelector::LightApp_OCCSelector( OCCViewer_Viewer* viewer, SUIT_Selec : SUIT_Selector( mgr, viewer ), myViewer( viewer ) { - if ( myViewer ) + if ( myViewer ) { connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) ); + connect( myViewer, SIGNAL( deselection() ), this, SLOT( onDeselection() ) ); + } } /*! @@ -52,12 +54,19 @@ OCCViewer_Viewer* LightApp_OCCSelector::viewer() const return myViewer; } + /*!On selection changed.*/ void LightApp_OCCSelector::onSelectionChanged() { selectionChanged(); } +/*!On selection cleared.*/ +void LightApp_OCCSelector::onDeselection() +{ + mySelectedExternals.clear(); +} + /*!Gets selection list.*/ void LightApp_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const { @@ -77,6 +86,11 @@ void LightApp_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( entry( anIt.Value() ) ) ) ); #endif } + // add externally selected objects + SUIT_DataOwnerPtrList::const_iterator anExtIter; + for(anExtIter = mySelectedExternals.begin(); anExtIter != mySelectedExternals.end(); anExtIter++) { + aList.append(*anExtIter); + } } /*!Sets selection list.*/ @@ -99,12 +113,16 @@ void LightApp_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) if ( !entryStr.isEmpty() ) aDisplayed.insert( entryStr, it.Value() ); } + + mySelectedExternals.clear(); for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr ) { const LightApp_DataOwner* owner = dynamic_cast( (*itr).operator->() ); if ( owner && aDisplayed.contains( owner->entry() ) ) aSelList.Append( aDisplayed[owner->entry()] ); + else + mySelectedExternals.append(*itr); } myViewer->unHighlightAll( false ); diff --git a/src/LightApp/LightApp_OCCSelector.h b/src/LightApp/LightApp_OCCSelector.h index c358efe8a..905267435 100644 --- a/src/LightApp/LightApp_OCCSelector.h +++ b/src/LightApp/LightApp_OCCSelector.h @@ -22,6 +22,7 @@ #include "LightApp.h" #include +#include #include @@ -45,6 +46,7 @@ public: private slots: virtual void onSelectionChanged(); + virtual void onDeselection(); protected: virtual void getSelection( SUIT_DataOwnerPtrList& ) const; @@ -52,8 +54,10 @@ protected: QString entry( const Handle_AIS_InteractiveObject& ) const; + SUIT_DataOwnerPtrList mySelectedExternals; + private: - OCCViewer_Viewer* myViewer; + OCCViewer_Viewer* myViewer; }; #endif diff --git a/src/LightApp/LightApp_PreferencesDlg.cxx b/src/LightApp/LightApp_PreferencesDlg.cxx index e15c16832..b691eb459 100644 --- a/src/LightApp/LightApp_PreferencesDlg.cxx +++ b/src/LightApp/LightApp_PreferencesDlg.cxx @@ -143,7 +143,8 @@ void LightApp_PreferencesDlg::onImportPref() if( !mgr ) return; - QFileDialog dlg( ".", "*", this, "", tr( "IMPORT_PREFERENCES" ) ); + QFileDialog dlg( ".", "*", this, "" ); + dlg.setCaption( tr("IMPORT_PREFERENCES") ); dlg.setShowHiddenFiles( true ); dlg.exec(); QString fname = dlg.selectedFile(); diff --git a/src/LightApp/LightApp_Selection.cxx b/src/LightApp/LightApp_Selection.cxx index 5620c41d3..4b7e58ae5 100644 --- a/src/LightApp/LightApp_Selection.cxx +++ b/src/LightApp/LightApp_Selection.cxx @@ -67,9 +67,10 @@ void LightApp_Selection::init( const QString& client, LightApp_SelectionMgr* mgr for( SUIT_Selector* selector = aSelectors.first(); selector; selector = aSelectors.next() ) { qDebug( selector->type() ); - if( selector->type()!=client ) + if( selector->type() != client && selector->isEnabled() ) { - mgr->selected( cur_sel, selector->type() ); + //mgr->selected( cur_sel, selector->type() ); + selector->selected( cur_sel ); SUIT_DataOwnerPtrList::const_iterator aLIt = cur_sel.begin(), aLLast = cur_sel.end(); for( ; aLIt!=aLLast; aLIt++ ) sel.append( *aLIt ); //check entry and don't append if such entry is in list already @@ -86,7 +87,7 @@ void LightApp_Selection::init( const QString& client, LightApp_SelectionMgr* mgr LightApp_DataOwner* sowner = dynamic_cast( (*anIt ).get() ); if( sowner ) { - entry = myStudy->referencedToEntry( sowner->entry() ); + entry = referencedToEntry( sowner->entry() ); if( entries.contains( entry ) ) continue; @@ -100,6 +101,11 @@ void LightApp_Selection::init( const QString& client, LightApp_SelectionMgr* mgr } } +QString LightApp_Selection::referencedToEntry( const QString& entry ) const +{ + return myStudy->referencedToEntry( entry ); +} + /*! Gets count of entries. */ @@ -147,6 +153,9 @@ QtxValue LightApp_Selection::param( const int ind, const QString& p ) const else if( p=="isReference" ) return QtxValue( isReference( ind ), false ); + else if( p=="displayer" ) + return param( ind, "component" ); + else if( p=="canBeDisplayed" ) { QString mod_name = app->moduleTitle( param( ind, "component" ).toString() ); diff --git a/src/LightApp/LightApp_Selection.h b/src/LightApp/LightApp_Selection.h index 846699f3b..7756a767d 100644 --- a/src/LightApp/LightApp_Selection.h +++ b/src/LightApp/LightApp_Selection.h @@ -65,6 +65,7 @@ protected: LightApp_Study* study() const { return myStudy; } QString activeViewType() const; SUIT_ViewWindow* activeVW() const; + virtual QString referencedToEntry( const QString& ) const; private: QString myPopupClient; diff --git a/src/LightApp/LightApp_SelectionMgr.cxx b/src/LightApp/LightApp_SelectionMgr.cxx index 6d8fb6d44..1c9e38b86 100644 --- a/src/LightApp/LightApp_SelectionMgr.cxx +++ b/src/LightApp/LightApp_SelectionMgr.cxx @@ -73,7 +73,7 @@ void LightApp_SelectionMgr::selectedObjects( SALOME_ListIO& theList, const QStri QMap entryMap; - QString entry; + QString entry, checkEntry; for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr ) { const LightApp_DataOwner* owner = dynamic_cast( (*itr).operator->() ); @@ -85,9 +85,14 @@ void LightApp_SelectionMgr::selectedObjects( SALOME_ListIO& theList, const QStri return; entry = owner->entry(); + // Entry to check object uniqueness. + // It is selected owner entry in the case, when we do not convert references, + // and entry of a real object, when we convert references. + checkEntry = entry; if ( convertReferences ) { QString refEntry = study->referencedToEntry( entry ); - if( !entryMap.contains( entry ) ) { + checkEntry = refEntry; + if ( !entryMap.contains( checkEntry ) ) { if ( refEntry != entry ) { QString component = study->componentDataType( refEntry ); theList.Append( new SALOME_InteractiveObject( refEntry, component, ""/*refobj->Name().c_str()*/ ) ); @@ -101,7 +106,7 @@ void LightApp_SelectionMgr::selectedObjects( SALOME_ListIO& theList, const QStri theList.Append( owner->IO() ); } - entryMap.insert(owner->entry(), 1); + entryMap.insert(checkEntry, 1); } } @@ -207,23 +212,26 @@ void LightApp_SelectionMgr::GetIndexes( const QString& theEntry, TColStd_Indexed /*! Add or remove interactive objects from selection manager. */ -bool LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject, - const TColStd_MapOfInteger& theIndexes, - bool modeShift) +//bool LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject, +void LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject, + const TColStd_MapOfInteger& theIndexes, + 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 ) { const LightApp_DataOwner* owner = dynamic_cast( (*itr).operator->() ); - if ( owner ) + if ( owner ) { - if ( owner->entry() != QString(IObject->getEntry()) ) - { + if ( owner->entry() != ioEntry ) + { const LightApp_DataSubOwner* subOwner = dynamic_cast( owner ); if ( subOwner ) remainsOwners.append( new LightApp_DataSubOwner( subOwner->entry(), subOwner->index() ) ); @@ -239,17 +247,17 @@ bool LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObj TColStd_MapIteratorOfMapOfInteger It; It.Initialize(theIndexes); for(;It.More();It.Next()) - remainsOwners.append( new LightApp_DataSubOwner( QString(IObject->getEntry()), It.Key() ) ); - + remainsOwners.append( new LightApp_DataSubOwner( ioEntry, It.Key() ) ); + bool append = false; setSelected( remainsOwners, append ); emit currentSelectionChanged(); - TColStd_IndexedMapOfInteger anIndexes; - GetIndexes( IObject, anIndexes ); - return !anIndexes.IsEmpty(); - + // Bug 17269: To avoid calling of selected(aList) + //TColStd_IndexedMapOfInteger anIndexes; + //GetIndexes( IObject, anIndexes ); + //return !anIndexes.IsEmpty(); } /*! @@ -311,14 +319,25 @@ void LightApp_SelectionMgr::selectedSubOwners( MapEntryOfMapOfInteger& theMap ) for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr ) { - const LightApp_DataSubOwner* subOwner = dynamic_cast( (*itr).operator->() ); + const LightApp_DataSubOwner* subOwner = + dynamic_cast( (*itr).operator->() ); if ( subOwner ) { if ( !theMap.contains( subOwner->entry() ) ) { anIndexes.Clear(); - GetIndexes( subOwner->entry(), anIndexes ); - theMap.insert( subOwner->entry(), anIndexes ); + //Bug 17269: GetIndexes( subOwner->entry(), anIndexes ); + //Bug 17269: To avoid multiple calling of selected(aList) + for ( SUIT_DataOwnerPtrList::const_iterator itr2 = itr; itr2 != aList.end(); ++itr2 ) + { + const LightApp_DataSubOwner* subOwner2 = + dynamic_cast( (*itr2).operator->() ); + if ( subOwner2 ) + if ( subOwner2->entry() == subOwner->entry() ) + anIndexes.Add( subOwner2->index() ); + } + // + theMap.insert( subOwner->entry(), anIndexes ); } } } diff --git a/src/LightApp/LightApp_SelectionMgr.h b/src/LightApp/LightApp_SelectionMgr.h index be758e079..d865cac15 100644 --- a/src/LightApp/LightApp_SelectionMgr.h +++ b/src/LightApp/LightApp_SelectionMgr.h @@ -62,7 +62,8 @@ public: void GetIndexes( const QString& theEntry, TColStd_IndexedMapOfInteger& theIndex ); - bool AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject, + //bool AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject, + void AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject, const TColStd_MapOfInteger& theIndices, bool modeShift ); diff --git a/src/LightApp/LightApp_ShowHideOp.cxx b/src/LightApp/LightApp_ShowHideOp.cxx index a329cf889..657e30d9d 100644 --- a/src/LightApp/LightApp_ShowHideOp.cxx +++ b/src/LightApp/LightApp_ShowHideOp.cxx @@ -63,17 +63,25 @@ void LightApp_ShowHideOp::startOperation() } LightApp_SelectionMgr* mgr = app->selectionMgr(); - LightApp_Selection sel; sel.init( "", mgr ); - if( sel.count()==0 && myActionType!=ERASE_ALL ) + LightApp_Module* mod = dynamic_cast( app->activeModule() ); + if( !mod ) + return; + + LightApp_Selection* sel = mod->createSelection(); + if( !sel ) + return; + + sel->init( "", mgr ); + if( sel->count()==0 && myActionType!=ERASE_ALL ) { abort(); return; } QString mod_name; - if( sel.count()>0 ) + if( sel->count()>0 ) { - QString aStr = sel.param( 0, "component" ).toString(); + QString aStr = sel->param( 0, "displayer" ).toString(); mod_name = app->moduleTitle( aStr ); } else if( app->activeModule() ) @@ -144,4 +152,6 @@ void LightApp_ShowHideOp::startOperation() } d->UpdateViewer(); commit(); + + delete sel; } diff --git a/src/LightApp/LightApp_VTKSelector.cxx b/src/LightApp/LightApp_VTKSelector.cxx index d28da9fae..99214fb9f 100644 --- a/src/LightApp/LightApp_VTKSelector.cxx +++ b/src/LightApp/LightApp_VTKSelector.cxx @@ -41,21 +41,18 @@ /*! Constructor. */ -LightApp_SVTKDataOwner -::LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO, - SUIT_Desktop* theDesktop ): - LightApp_DataOwner( theIO ), - myDesktop( theDesktop ) -{} -#endif - -/*! - Destuctor. -*/ -LightApp_SVTKDataOwner -::~LightApp_SVTKDataOwner() +LightApp_SVTKDataOwner::LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO, + SUIT_Desktop* theDesktop ) +: LightApp_DataOwner( theIO ), +myDesktop( theDesktop ) +{ +} +#else +LightApp_SVTKDataOwner::LightApp_SVTKDataOwner( const QString& theEntry ) +: LightApp_DataOwner( theEntry ) { } +#endif /*! \return active SVTK view window @@ -119,6 +116,14 @@ LightApp_SVTKDataOwner #endif +/*! + Destuctor. +*/ +/* +LightApp_SVTKDataOwner::~LightApp_SVTKDataOwner() +{ +} +*/ #ifndef DISABLE_VTKVIEWER /*! @@ -134,14 +139,6 @@ LightApp_VTKSelector connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) ); } -/*! - Destructor. -*/ -LightApp_VTKSelector -::~LightApp_VTKSelector() -{ -} - /*! Gets viewer. */ diff --git a/src/LightApp/LightApp_VTKSelector.h b/src/LightApp/LightApp_VTKSelector.h index aebf5f54a..0f185cc53 100644 --- a/src/LightApp/LightApp_VTKSelector.h +++ b/src/LightApp/LightApp_VTKSelector.h @@ -43,12 +43,13 @@ class SUIT_Desktop; class LIGHTAPP_EXPORT LightApp_SVTKDataOwner : public LightApp_DataOwner { public: + virtual ~LightApp_SVTKDataOwner() {}; #ifndef DISABLE_VTKVIEWER #ifndef DISABLE_SALOMEOBJECT - LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO, - SUIT_Desktop* theDesktop ); + LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)&, SUIT_Desktop* ); + #else + LightApp_SVTKDataOwner( const QString& ); #endif - virtual ~LightApp_SVTKDataOwner(); /*!Gets dataowners ids list.*/ const TColStd_IndexedMapOfInteger& GetIds() const; @@ -64,9 +65,6 @@ class LIGHTAPP_EXPORT LightApp_SVTKDataOwner : public LightApp_DataOwner SVTK_ViewWindow* GetActiveViewWindow() const; SUIT_Desktop* myDesktop; - -#else - LightApp_SVTKDataOwner( const QString& ); #endif }; @@ -80,9 +78,9 @@ class LIGHTAPP_EXPORT LightApp_VTKSelector : public SUIT_Selector Q_OBJECT; public: + virtual ~LightApp_VTKSelector() {}; #ifndef DISABLE_VTKVIEWER LightApp_VTKSelector( SVTK_ViewModelBase*, SUIT_SelectionMgr* ); - virtual ~LightApp_VTKSelector(); SVTK_ViewModelBase* viewer() const; diff --git a/src/LightApp/Makefile.am b/src/LightApp/Makefile.am new file mode 100755 index 000000000..f59c4bd09 --- /dev/null +++ b/src/LightApp/Makefile.am @@ -0,0 +1,250 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : OCC team (OCN) +# Module : LightApp +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libLightApp.la + +salomeinclude_HEADERS= \ + LightApp.h \ + LightApp_AboutDlg.h \ + LightApp_Application.h \ + LightApp_DataModel.h \ + LightApp_DataObject.h \ + LightApp_DataOwner.h \ + LightApp_DataSubOwner.h \ + LightApp_Dialog.h \ + LightApp_Displayer.h \ + LightApp_Driver.h \ + LightApp_EventFilter.h \ + LightApp_HDFDriver.h \ + LightApp_Module.h \ + LightApp_ModuleDlg.h \ + LightApp_NameDlg.h \ + LightApp_OBFilter.h \ + LightApp_OBSelector.h \ + LightApp_Operation.h \ + LightApp_Selection.h \ + LightApp_SelectionMgr.h \ + LightApp_ShowHideOp.h \ + LightApp_Study.h \ + LightApp_SwitchOp.h \ + LightApp_Preferences.h \ + LightApp_PreferencesDlg.h \ + LightApp_RootObject.h \ + LightApp_UpdateFlags.h \ + LightApp_WidgetContainer.h + +if ENABLE_VTKVIEWER +if ENABLE_SALOMEOBJECT + salomeinclude_HEADERS+= LightApp_VTKSelector.h +endif +endif +if ENABLE_OCCVIEWER + salomeinclude_HEADERS+= LightApp_OCCSelector.h +endif +if ENABLE_GLVIEWER + salomeinclude_HEADERS+= LightApp_GLSelector.h +endif + +dist_libLightApp_la_SOURCES= \ + LightApp_AboutDlg.cxx \ + LightApp_Application.cxx \ + LightApp_DataModel.cxx \ + LightApp_DataObject.cxx \ + LightApp_DataOwner.cxx \ + LightApp_DataSubOwner.cxx \ + LightApp_Dialog.cxx \ + LightApp_Displayer.cxx \ + LightApp_Driver.cxx \ + LightApp_EventFilter.cxx \ + LightApp_HDFDriver.cxx \ + LightApp_Module.cxx \ + LightApp_ModuleDlg.cxx \ + LightApp_NameDlg.cxx \ + LightApp_OBFilter.cxx \ + LightApp_OBSelector.cxx \ + LightApp_Operation.cxx \ + LightApp_Selection.cxx \ + LightApp_SelectionMgr.cxx \ + LightApp_ShowHideOp.cxx \ + LightApp_Study.cxx \ + LightApp_SwitchOp.cxx \ + LightApp_Preferences.cxx \ + LightApp_PreferencesDlg.cxx \ + LightApp_WidgetContainer.cxx + +if ENABLE_VTKVIEWER +if ENABLE_SALOMEOBJECT + dist_libLightApp_la_SOURCES+= LightApp_VTKSelector.cxx +endif +endif +if ENABLE_OCCVIEWER + dist_libLightApp_la_SOURCES+= LightApp_OCCSelector.cxx +endif +if ENABLE_GLVIEWER + dist_libLightApp_la_SOURCES+= LightApp_GLSelector.cxx +endif + +MOC_FILES= \ + LightApp_AboutDlg_moc.cxx \ + LightApp_Application_moc.cxx \ + LightApp_DataModel_moc.cxx \ + LightApp_Dialog_moc.cxx \ + LightApp_OBSelector_moc.cxx \ + LightApp_Operation_moc.cxx \ + LightApp_Module_moc.cxx \ + LightApp_ModuleDlg_moc.cxx \ + LightApp_NameDlg_moc.cxx \ + LightApp_SelectionMgr_moc.cxx \ + LightApp_ShowHideOp_moc.cxx \ + LightApp_Study_moc.cxx \ + LightApp_SwitchOp_moc.cxx \ + LightApp_Preferences_moc.cxx \ + LightApp_PreferencesDlg_moc.cxx \ + LightApp_WidgetContainer_moc.cxx + +if ENABLE_VTKVIEWER +if ENABLE_SALOMEOBJECT + MOC_FILES+= LightApp_VTKSelector_moc.cxx +endif +endif +if ENABLE_OCCVIEWER + MOC_FILES+= LightApp_OCCSelector_moc.cxx +endif +if ENABLE_GLVIEWER + MOC_FILES+= LightApp_GLSelector_moc.cxx +endif +nodist_libLightApp_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA= \ + resources/icon_about.png \ + resources/icon_applogo.png \ + resources/icon_default.png \ + resources/icon_module.png \ + resources/icon_module_big.png \ + resources/icon_select.png \ + resources/LightApp.ini \ + resources/LightApp.xml + +nodist_salomeres_DATA= \ + LightApp_images.qm \ + LightApp_msg_en.qm + +libLightApp_la_CPPFLAGS=$(PYTHON_INCLUDES) $(QT_INCLUDES) $(CAS_CPPFLAGS) \ + $(HDF5_INCLUDES) @KERNEL_CXXFLAGS@ -I$(srcdir)/../SUIT -I$(srcdir)/../STD \ + -I$(srcdir)/../CAM -I$(srcdir)/../ObjBrowser -I$(srcdir)/../LogWindow \ + -I$(srcdir)/../Prs -I$(srcdir)/../Qtx +libLightApp_la_LDFLAGS=$(QT_MT_LIBS) + +if ENABLE_VTKVIEWER + libLightApp_la_CPPFLAGS+= $(VTK_INCLUDES) -I$(srcdir)/../VTKViewer +else + libLightApp_la_CPPFLAGS+= -DDISABLE_VTKVIEWER +endif +if ENABLE_PLOT2DVIEWER + libLightApp_la_CPPFLAGS+= $(QWT_INCLUDES) -I$(srcdir)/../Plot2d +else + libLightApp_la_CPPFLAGS+= -DDISABLE_PLOT2DVIEWER +endif +if ENABLE_OCCVIEWER + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../OCCViewer +else !ENABLE_OCCVIEWER + libLightApp_la_CPPFLAGS+= -DDISABLE_OCCVIEWER +endif +if ENABLE_PYCONSOLE + libLightApp_la_CPPFLAGS+= $(PYTHON_INCLUDES) -I$(srcdir)/../PythonConsole -I$(srcdir)/../PyInterp + libLightApp_la_LDFLAGS+= $(PYTHON_LIBS) +else !ENABLE_PYCONSOLE + libLightApp_la_CPPFLAGS+= -DDISABLE_PYCONSOLE +endif +if ENABLE_GLVIEWER + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../GLViewer +else !ENABLE_GLVIEWER + libLightApp_la_CPPFLAGS+= -DDISABLE_GLVIEWER +endif +if ENABLE_SUPERVGRAPHVIEWER + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SUPERVGraph +else !ENABLE_SUPERVGRAPHVIEWER + libLightApp_la_CPPFLAGS+= -DDISABLE_SUPERVGRAPHVIEWER +endif +if ENABLE_QXGRAPHVIEWER + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../QxGraph +else !ENABLE_QXGRAPHVIEWER + libLightApp_la_CPPFLAGS+= -DDISABLE_QXGRAPHVIEWER +endif + +if ENABLE_SALOMEOBJECT + + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../OBJECT +if ENABLE_PLOT2DVIEWER + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SPlot2d +endif +if ENABLE_OCCVIEWER + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SOCC +endif +if ENABLE_VTKVIEWER + libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SVTK +endif +else !ENABLE_SALOMEOBJECT + libLightApp_la_CPPFLAGS+= -DDISABLE_SALOMEOBJECT + +endif + +libLightApp_la_LIBADD= ../SUIT/libsuit.la ../STD/libstd.la ../CAM/libCAM.la \ + ../ObjBrowser/libObjBrowser.la ../LogWindow/libLogWindow.la $(CAS_KERNEL) \ + ../Prs/libSalomePrs.la $(HDF5_LIBS) $(KERNEL_LDFLAGS) -lSalomeHDFPersist + +if ENABLE_SALOMEOBJECT + libLightApp_la_LIBADD+= ../OBJECT/libSalomeObject.la +endif +if ENABLE_VTKVIEWER + libLightApp_la_LIBADD+= ../VTKViewer/libVTKViewer.la +if ENABLE_SALOMEOBJECT + libLightApp_la_LIBADD+= ../SVTK/libSVTK.la +endif +endif +if ENABLE_OCCVIEWER + libLightApp_la_LIBADD+= ../OCCViewer/libOCCViewer.la +if ENABLE_SALOMEOBJECT + libLightApp_la_LIBADD+= ../SOCC/libSOCC.la +endif +endif +if ENABLE_GLVIEWER + libLightApp_la_LIBADD+= ../GLViewer/libGLViewer.la +endif +if ENABLE_PLOT2DVIEWER + libLightApp_la_LIBADD+= ../Plot2d/libPlot2d.la +if ENABLE_SALOMEOBJECT + libLightApp_la_LIBADD+= ../SPlot2d/libSPlot2d.la +endif +endif +if ENABLE_PYCONSOLE + libLightApp_la_LIBADD+= ../PyInterp/libPyInterp.la ../PythonConsole/libPythonConsole.la +endif +if ENABLE_SUPERVGRAPHVIEWER + libLightApp_la_LIBADD+= ../SUPERVGraph/libSUPERVGraph.la +endif +if ENABLE_QXGRAPHVIEWER + libLightApp_la_LIBADD+= ../QxGraph/libQxGraph.la +endif diff --git a/src/LightApp/Makefile.in b/src/LightApp/Makefile.in deleted file mode 100755 index 2fd596ee3..000000000 --- a/src/LightApp/Makefile.in +++ /dev/null @@ -1,225 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : OCC team (OCN) -# Module : LightApp -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= LightApp.h \ - LightApp_AboutDlg.h \ - LightApp_Application.h \ - LightApp_DataModel.h \ - LightApp_DataObject.h \ - LightApp_DataOwner.h \ - LightApp_DataSubOwner.h \ - LightApp_Dialog.h \ - LightApp_Displayer.h \ - LightApp_Driver.h \ - LightApp_HDFDriver.h \ - LightApp_Module.h \ - LightApp_ModuleDlg.h \ - LightApp_NameDlg.h \ - LightApp_OBFilter.h \ - LightApp_OBSelector.h \ - LightApp_Operation.h \ - LightApp_Selection.h \ - LightApp_SelectionMgr.h \ - LightApp_ShowHideOp.h \ - LightApp_Study.h \ - LightApp_SwitchOp.h \ - LightApp_Preferences.h \ - LightApp_PreferencesDlg.h \ - LightApp_RootObject.h \ - LightApp_UpdateFlags.h \ - LightApp_WidgetContainer.h - -ifneq ($(DISABLE_VTKVIEWER),yes) -ifneq ($(DISABLE_SALOMEOBJECT),yes) - EXPORT_HEADERS+= LightApp_VTKSelector.h -endif -endif -ifneq ($(DISABLE_OCCVIEWER),yes) - EXPORT_HEADERS+= LightApp_OCCSelector.h -endif -ifneq ($(DISABLE_GLVIEWER),yes) - EXPORT_HEADERS+= LightApp_GLSelector.h -endif - -# .po files to transform in .qm -PO_FILES = LightApp_images.po \ - LightApp_msg_en.po - -# Libraries targets -LIB = libLightApp.la - -LIB_SRC= LightApp_AboutDlg.cxx \ - LightApp_Application.cxx \ - LightApp_DataModel.cxx \ - LightApp_DataObject.cxx \ - LightApp_DataOwner.cxx \ - LightApp_DataSubOwner.cxx \ - LightApp_Dialog.cxx \ - LightApp_Displayer.cxx \ - LightApp_Driver.cxx \ - LightApp_HDFDriver.cxx \ - LightApp_Module.cxx \ - LightApp_ModuleDlg.cxx \ - LightApp_NameDlg.cxx \ - LightApp_OBFilter.cxx \ - LightApp_OBSelector.cxx \ - LightApp_Operation.cxx \ - LightApp_Selection.cxx \ - LightApp_SelectionMgr.cxx \ - LightApp_ShowHideOp.cxx \ - LightApp_Study.cxx \ - LightApp_SwitchOp.cxx \ - LightApp_Preferences.cxx \ - LightApp_PreferencesDlg.cxx \ - LightApp_WidgetContainer.cxx - -ifneq ($(DISABLE_VTKVIEWER),yes) -ifneq ($(DISABLE_SALOMEOBJECT),yes) - LIB_SRC+= LightApp_VTKSelector.cxx -endif -endif -ifneq ($(DISABLE_OCCVIEWER),yes) - LIB_SRC+= LightApp_OCCSelector.cxx -endif -ifneq ($(DISABLE_GLVIEWER),yes) - LIB_SRC+= LightApp_GLSelector.cxx -endif - -LIB_MOC = LightApp_AboutDlg.h \ - LightApp_Application.h \ - LightApp_DataModel.h \ - LightApp_Dialog.h \ - LightApp_OBSelector.h \ - LightApp_Operation.h \ - LightApp_Module.h \ - LightApp_ModuleDlg.h \ - LightApp_NameDlg.h \ - LightApp_SelectionMgr.h \ - LightApp_ShowHideOp.h \ - LightApp_Study.h \ - LightApp_SwitchOp.h \ - LightApp_Preferences.h \ - LightApp_PreferencesDlg.h \ - LightApp_WidgetContainer.h - -ifneq ($(DISABLE_VTKVIEWER),yes) -ifneq ($(DISABLE_SALOMEOBJECT),yes) - LIB_MOC+= LightApp_VTKSelector.h -endif -endif -ifneq ($(DISABLE_OCCVIEWER),yes) - LIB_MOC+= LightApp_OCCSelector.h -endif -ifneq ($(DISABLE_GLVIEWER),yes) - LIB_MOC+= LightApp_GLSelector.h -endif - -RESOURCES_FILES = icon_about.png \ - icon_applogo.png \ - icon_default.png \ - icon_module.png \ - icon_module_big.png \ - icon_select.png \ - LightApp.ini \ - LightApp.xml - -CPPFLAGS+=$(PYTHON_INCLUDES) $(QT_INCLUDES) $(OCC_INCLUDES) \ - $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS) - -ifneq ($(DISABLE_VTKVIEWER),yes) - CPPFLAGS+= $(VTK_INCLUDES) -else - CPPFLAGS+= -DDISABLE_VTKVIEWER -endif -ifneq ($(DISABLE_PLOT2DVIEWER),yes) - CPPFLAGS+= $(QWT_INCLUDES) -else - CPPFLAGS+= -DDISABLE_PLOT2DVIEWER -endif -ifeq ($(DISABLE_OCCVIEWER),yes) - CPPFLAGS+= -DDISABLE_OCCVIEWER -endif -ifneq ($(DISABLE_PYCONSOLE),yes) - CPPFLAGS+= $(PYTHON_INCLUDES) -else - CPPFLAGS+= -DDISABLE_PYCONSOLE -endif -ifeq ($(DISABLE_GLVIEWER),yes) - CPPFLAGS+= -DDISABLE_GLVIEWER -endif -ifeq ($(DISABLE_SUPERVGRAPHVIEWER),yes) - CPPFLAGS+= -DDISABLE_SUPERVGRAPHVIEWER -endif -ifeq ($(DISABLE_SALOMEOBJECT),yes) - CPPFLAGS+= -DDISABLE_SALOMEOBJECT -endif - -LDFLAGS+=$(QT_MT_LIBS) -ifneq ($(DISABLE_PYCONSOLE),yes) - LDFLAGS+= $(PYTHON_LIBS) -endif - -LIBS+= -lsuit -lstd -lCAM -lObjBrowser -lLogWindow $(CAS_KERNEL) -lSalomePrs \ - $(HDF5_LIBS) $(KERNEL_LDFLAGS) -lSalomeHDFPersist - -ifneq ($(DISABLE_SALOMEOBJECT),yes) - LIBS+= -lSalomeObject -endif -ifneq ($(DISABLE_VTKVIEWER),yes) - LIBS+= -lVTKViewer -ifneq ($(DISABLE_SALOMEOBJECT),yes) - LIBS+= -lSVTK -endif -endif -ifneq ($(DISABLE_OCCVIEWER),yes) - LIBS+= -lOCCViewer -ifneq ($(DISABLE_SALOMEOBJECT),yes) - LIBS+= -lSOCC -endif -endif -ifneq ($(DISABLE_GLVIEWER),yes) - LIBS+= -lGLViewer -endif -ifneq ($(DISABLE_PLOT2DVIEWER),yes) - LIBS+= -lPlot2d -ifneq ($(DISABLE_SALOMEOBJECT),yes) - LIBS+= -lSPlot2d -endif -endif -ifneq ($(DISABLE_PYCONSOLE),yes) - LIBS+= -lPyInterp -lPythonConsole -endif -ifneq ($(DISABLE_SUPERVGRAPHVIEWER),yes) - LIBS+= -lSUPERVGraph -endif - -@CONCLUDE@ diff --git a/src/LightApp/resources/LightApp.ini b/src/LightApp/resources/LightApp.ini index 814a5ec84..fb5a7018a 100755 --- a/src/LightApp/resources/LightApp.ini +++ b/src/LightApp/resources/LightApp.ini @@ -7,14 +7,14 @@ language = en modules = LIGHT [resources] -SUIT = $(SUITRoot)/resources -STD = $(SUITRoot)/resources -LightApp = $(SUITRoot)/resources -Plot2d = $(SUITRoot)/resources -GLViewer = $(SUITRoot)/resources -OCCViewer = $(SUITRoot)/resources -VTKViewer = $(SUITRoot)/resources -LIGHT = $(LIGHT_ROOT_DIR)/share/salome/resources +SUIT = $(GUI_ROOT_DIR)/share/salome/resources/gui +STD = $(GUI_ROOT_DIR)/share/salome/resources/gui +LightApp = $(GUI_ROOT_DIR)/share/salome/resources/gui +Plot2d = $(GUI_ROOT_DIR)/share/salome/resources/gui +GLViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui +OCCViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui +VTKViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui +LIGHT = $(LIGHT_ROOT_DIR)/share/salome/resources/light [LIGHT] name = Light diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index 7cb56db7b..0c2f9ee0c 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -15,26 +15,27 @@
- + - + +
- - - - - - - - - - - - - - + + + + + + + + + + + + + +
diff --git a/src/LightApp/resources/LightApp_msg_en.po b/src/LightApp/resources/LightApp_msg_en.po index f06c47efc..c138bb49f 100644 --- a/src/LightApp/resources/LightApp_msg_en.po +++ b/src/LightApp/resources/LightApp_msg_en.po @@ -40,7 +40,7 @@ msgid "ABOUT_VERSION" msgstr "Version %1" msgid "ABOUT_COPYRIGHT" -msgstr "Copyright (C) 2003-2006 OPEN CASCADE, EADS/CCR, LIP6,\nCEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS" +msgstr "Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6,\nCEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS" msgid "ABOUT_LICENSE" msgstr "GNU LGPL" @@ -95,6 +95,9 @@ msgstr "&OCC view" msgid "LightApp_Application::NEW_WINDOW_3" msgstr "VT&K view" +msgid "LightApp_Application::NEW_WINDOW_4" +msgstr "&QxGraph view" + msgid "LightApp_Application::INF_CANCELLED" msgstr "Module activation cancelled" @@ -251,6 +254,9 @@ msgstr "Quick directory list" msgid "LightApp_Application::MEN_REFRESH" msgstr "Refresh" +msgid "LightApp_Application::MEN_FIND" +msgstr "Find" + msgid "LightApp_Application::PREF_GROUP_SUPERV" msgstr "Graph Supervisor" @@ -288,61 +294,49 @@ msgstr "Import" //======================================================================================= -msgid "LightApp_Module::TOP_DISPLAY" -msgstr "Display" +msgid "LightApp_Module::TOP_SHOW" +msgstr "Show" -msgid "LightApp_Module::MEN_DISPLAY" -msgstr "Display" +msgid "LightApp_Module::MEN_SHOW" +msgstr "Show" -msgid "LightApp_Module::STB_DISPLAY" -msgstr "Display" +msgid "LightApp_Module::STB_SHOW" +msgstr "Show" -msgid "LightApp_Module::TOP_ERASE" -msgstr "Erase" +msgid "LightApp_Module::TOP_HIDE" +msgstr "Hide" -msgid "LightApp_Module::MEN_ERASE" -msgstr "Erase" +msgid "LightApp_Module::MEN_HIDE" +msgstr "Hide" -msgid "LightApp_Module::STB_ERASE" -msgstr "Erase" +msgid "LightApp_Module::STB_HIDE" +msgstr "Hide" msgid "LightApp_Module::TOP_DISPLAY_ONLY" -msgstr "Display only" +msgstr "Show only" msgid "LightApp_Module::MEN_DISPLAY_ONLY" -msgstr "Display only" +msgstr "Show only" msgid "LightApp_Module::STB_DISPLAY_ONLY" -msgstr "Display only" +msgstr "Show only" msgid "LightApp_Module::TOP_ERASE_ALL" -msgstr "Erase all" +msgstr "Hide all" msgid "LightApp_Module::MEN_ERASE_ALL" -msgstr "Erase all" +msgstr "Hide all" msgid "LightApp_Module::STB_ERASE_ALL" -msgstr "Erase all" +msgstr "Hide all" //======================================================================================= msgid "LightApp_ModuleDlg::CAPTION" msgstr "Activate module" -msgid "LightApp_ModuleDlg::NEW" -msgstr "&New" - -msgid "LightApp_ModuleDlg::OPEN" -msgstr "&Open" - -msgid "LightApp_ModuleDlg::LOAD" -msgstr "&Load" - -msgid "LightApp_ModuleDlg::CANCEL" -msgstr "&Cancel" - -msgid "LightApp_ModuleDlg::ActivateComponent_DESCRIPTION" -msgstr "Create, open or load study." +msgid "LightApp_ModuleDlg::DESCRIPTION" +msgstr "You're activating module %1.
Please, select required action by pressing the corresponding button below." msgid "LightApp_NameDlg::TLT_RENAME" msgstr "Rename" @@ -350,3 +344,9 @@ msgstr "Rename" msgid "LightApp_NameDlg::NAME_LBL" msgstr "Name: " +msgid "LightApp_Application::ACTIVATE_MODULE_OP_OPEN" +msgstr "&Open..." + +msgid "LightApp_Application::ACTIVATE_MODULE_OP_NEW" +msgstr "&New" + diff --git a/src/LightApp/resources/icon_about.png b/src/LightApp/resources/icon_about.png index 6817eb4073d11a0fe69b69d01bc06f5a8895f208..0cfa37ae050a1c9a07e31e61a0c072c9fe048e8b 100755 GIT binary patch literal 148435 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 KXsxh8;Qs=cx3J#; literal 79549 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

=99`oTMIniEX(Ka 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

pRy+VCUxMW)5^{eKYF%!!`Y&>!SJ6 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%0DS#9ZQXCT|^fQ~y@q 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

UuoQUw4417IO=PY6_dtkoV20JST@ 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 11 ); // Controls - const double min = -1e+06; - const double max = 1e+06; + const double min = -1e+16; + const double max = 1e+16; const double step = 5; + const int precision = -6; // PAL12789. Minus is for using 'g' double->string conversion specifier, + // see QtxDblSpinBox::mapValueToText( double v ) TextLabelX = new QLabel( GroupPoint, "TextLabelX" ); TextLabelX->setText( tr("X:") ); GroupPointLayout->addWidget( TextLabelX, 0, 0 ); SpinBox_X = new QtxDblSpinBox( min, max, step, GroupPoint, "SpinBox_X" ); + SpinBox_X->setPrecision( precision ); GroupPointLayout->addWidget( SpinBox_X, 0, 1 ); TextLabelY = new QLabel( GroupPoint, "TextLabelY" ); @@ -92,6 +95,7 @@ OCCViewer_ClippingDlg::OCCViewer_ClippingDlg( OCCViewer_ViewWindow* view, QWidge GroupPointLayout->addWidget( TextLabelY, 0, 2 ); SpinBox_Y = new QtxDblSpinBox( min, max, step, GroupPoint, "SpinBox_Y" ); + SpinBox_Y->setPrecision( precision ); GroupPointLayout->addWidget( SpinBox_Y, 0, 3 ); TextLabelZ = new QLabel( GroupPoint, "TextLabelZ" ); @@ -99,6 +103,7 @@ OCCViewer_ClippingDlg::OCCViewer_ClippingDlg( OCCViewer_ViewWindow* view, QWidge GroupPointLayout->addWidget( TextLabelZ, 0, 4 ); SpinBox_Z = new QtxDblSpinBox( min, max, step, GroupPoint, "SpinBox_Z" ); + SpinBox_Z->setPrecision( precision ); GroupPointLayout->addWidget( SpinBox_Z, 0, 5 ); resetButton = new QPushButton( GroupPoint, "resetButton" ); @@ -122,6 +127,7 @@ OCCViewer_ClippingDlg::OCCViewer_ClippingDlg( OCCViewer_ViewWindow* view, QWidge GroupDirectionLayout->addWidget( TextLabelDx, 0, 0 ); SpinBox_Dx = new QtxDblSpinBox( min, max, step, GroupDirection, "SpinBox_Dx" ); + SpinBox_Dx->setPrecision( precision ); GroupDirectionLayout->addWidget( SpinBox_Dx, 0, 1 ); TextLabelDy = new QLabel( GroupDirection, "TextLabelDy" ); @@ -129,6 +135,7 @@ OCCViewer_ClippingDlg::OCCViewer_ClippingDlg( OCCViewer_ViewWindow* view, QWidge GroupDirectionLayout->addWidget( TextLabelDy, 0, 2 ); SpinBox_Dy = new QtxDblSpinBox( min, max, step, GroupDirection, "SpinBox_Dy" ); + SpinBox_Dy->setPrecision( precision ); GroupDirectionLayout->addWidget( SpinBox_Dy, 0, 3 ); TextLabelDz = new QLabel( GroupDirection, "TextLabelDz" ); @@ -136,6 +143,7 @@ OCCViewer_ClippingDlg::OCCViewer_ClippingDlg( OCCViewer_ViewWindow* view, QWidge GroupDirectionLayout->addWidget( TextLabelDz, 0, 4 ); SpinBox_Dz = new QtxDblSpinBox( min, max, step, GroupDirection, "SpinBox_Dz" ); + SpinBox_Dz->setPrecision( precision ); GroupDirectionLayout->addWidget( SpinBox_Dz, 0, 5 ); invertButton = new QPushButton( GroupDirection, "invertButton" ); @@ -212,6 +220,9 @@ OCCViewer_ClippingDlg::OCCViewer_ClippingDlg( OCCViewer_ViewWindow* view, QWidge connect( buttonApply, SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); myBusy = false; + + connect(view, SIGNAL(Show( QShowEvent * )), this, SLOT(onViewShow())); + connect(view, SIGNAL(Hide( QHideEvent * )), this, SLOT(onViewHide())); } /*! @@ -551,3 +562,17 @@ void OCCViewer_ClippingDlg::ReserveClippingPlane() myClippingPlane = aView3d->ActivePlane(); } } + +void OCCViewer_ClippingDlg::onViewShow() +{ + if(myAction->isOn()) + show(); + else + hide(); +} + +void OCCViewer_ClippingDlg::onViewHide() +{ + hide(); +} + diff --git a/src/OCCViewer/OCCViewer_ClippingDlg.h b/src/OCCViewer/OCCViewer_ClippingDlg.h index 27efa2e90..bed795811 100644 --- a/src/OCCViewer/OCCViewer_ClippingDlg.h +++ b/src/OCCViewer/OCCViewer_ClippingDlg.h @@ -105,6 +105,9 @@ private slots: void onModeChanged( int mode ); void onValueChanged(); void onPreview( bool on ); + + void onViewShow(); + void onViewHide(); }; #endif // OCCVIEWER_CLIPPINGDLG_H diff --git a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx b/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx index 747ee1d39..e97cde8b9 100755 --- a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx +++ b/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx @@ -118,7 +118,7 @@ void OCCViewer_CreateRestoreViewDlg::changeImage( QListBoxItem* curItem ) int index = curItem->listBox()->index( curItem ); if( myKeyFlag == 2 ) { - for( int i = 0; i < myListBox->count(); i++ ) + for( int i = 0; i < (int)myListBox->count(); i++ ) { if( myListBox->isSelected( i ) && i != index ) { @@ -172,11 +172,11 @@ void OCCViewer_CreateRestoreViewDlg::deleteSelectedItems() if( myListBox->count() && myListBox->isEditEnabled() ) { int curIndex = -1; - for( int i = 0; i < myListBox->count(); i++ ) + for( int i = 0; i < (int)myListBox->count(); i++ ) if( myListBox->isSelected( i ) ) { myListBox->removeItem( i ); - for( int j = i; j < myParametersMap.count(); j++ ) + for( int j = i; j < (int)myParametersMap.count(); j++ ) if( j != myParametersMap.count() - 1 ) myParametersMap[ j ] = myParametersMap[ j + 1 ]; else diff --git a/src/OCCViewer/OCCViewer_SetRotationPointDlg.cxx b/src/OCCViewer/OCCViewer_SetRotationPointDlg.cxx new file mode 100644 index 000000000..0aed2c230 --- /dev/null +++ b/src/OCCViewer/OCCViewer_SetRotationPointDlg.cxx @@ -0,0 +1,278 @@ +// Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "OCCViewer_SetRotationPointDlg.h" + +#include + +#include "OCCViewer_ViewWindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*! + Constructor + \param view - view window + \param parent - parent widget + \param name - dialog name + \param modal - is this dialog modal + \param fl - flags +*/ +OCCViewer_SetRotationPointDlg::OCCViewer_SetRotationPointDlg( OCCViewer_ViewWindow* view, QWidget* parent, const char* name, bool modal, WFlags fl ) +: QDialog( parent, "OCCViewer_SetRotationPointDlg", modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), + myView( view ) +{ + setCaption(tr("CAPTION")); + setSizeGripEnabled(TRUE); + + // Create layout for this dialog + QGridLayout* layoutDlg = new QGridLayout (this); + layoutDlg->setSpacing(6); + layoutDlg->setMargin(11); + + // Create check box "Use Bounding Box Center" + QHBox* aCheckBox = new QHBox(this); + + myIsBBCenter = new QCheckBox(tr("USE_BBCENTER"), aCheckBox); + myIsBBCenter->setChecked(true); + connect(myIsBBCenter, SIGNAL(stateChanged(int)), SLOT(onBBCenterChecked())); + + // Create croup button with radio buttons + myGroupSelButton = new QButtonGroup(2,Qt::Vertical,"",this); + myGroupSelButton->setMargin(11); + + // Create "Set to Origin" button + myToOrigin = new QPushButton(myGroupSelButton); + myToOrigin->setText(tr("LBL_TOORIGIN")); + connect(myToOrigin, SIGNAL(clicked()), this, SLOT(onToOrigin())); + + // Create "Select Point from View" button + mySelectPoint = new QPushButton(myGroupSelButton); + mySelectPoint->setText(tr("LBL_SELECTPOINT")); + mySelectPoint->setToggleButton(true); + connect(mySelectPoint, SIGNAL(clicked()), this, SLOT(onSelectPoint())); + + // Create croup box with grid layout + myGroupBoxCoord = new QGroupBox(this, "GroupBox"); + QHBoxLayout* aHBoxLayout = new QHBoxLayout(myGroupBoxCoord); + aHBoxLayout->setMargin(11); + aHBoxLayout->setSpacing(6); + + // "X" coordinate + QLabel* TextLabelX = new QLabel (tr("LBL_X"), myGroupBoxCoord, "TextLabelX"); + TextLabelX->setFixedWidth(15); + myX = new QLineEdit(myGroupBoxCoord); + myX->setValidator(new QDoubleValidator(myX)); + myX->setText(QString::number(0.0)); + connect(myX, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged())); + + // "Y" coordinate + QLabel* TextLabelY = new QLabel (tr("LBL_Y"), myGroupBoxCoord, "TextLabelY"); + TextLabelY->setFixedWidth(15); + myY = new QLineEdit(myGroupBoxCoord); + myY->setValidator(new QDoubleValidator(myY)); + myY->setText(QString::number(0.0)); + connect(myY, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged())); + + // "Z" coordinate + QLabel* TextLabelZ = new QLabel (tr("LBL_Z"), myGroupBoxCoord, "TextLabelZ"); + TextLabelZ->setFixedWidth(15); + myZ = new QLineEdit(myGroupBoxCoord); + myZ->setValidator(new QDoubleValidator(myZ)); + myZ->setText(QString::number(0.0)); + connect(myZ, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged())); + + // Layout widgets in the horizontal group box + aHBoxLayout->addWidget(TextLabelX); + aHBoxLayout->addWidget(myX); + aHBoxLayout->addWidget(TextLabelY); + aHBoxLayout->addWidget(myY); + aHBoxLayout->addWidget(TextLabelZ); + aHBoxLayout->addWidget(myZ); + + // "Close" button + QGroupBox* aGroupBox = new QGroupBox(this); + QHBoxLayout* aHBoxLayout2 = new QHBoxLayout(aGroupBox); + aHBoxLayout2->setMargin(11); + aHBoxLayout2->setSpacing(6); + + QPushButton* m_bClose = new QPushButton(tr("&Close"), aGroupBox, "m_bClose"); + m_bClose->setAutoDefault(TRUE); + m_bClose->setFixedSize(m_bClose->sizeHint()); + connect(m_bClose, SIGNAL(clicked()), this, SLOT(onClickClose())); + + // Layout buttons + aHBoxLayout2->addWidget(m_bClose); + + // Layout top level widgets + layoutDlg->addWidget(aCheckBox,0,0); + layoutDlg->addWidget(myGroupSelButton,1,0); + layoutDlg->addWidget(myGroupBoxCoord,2,0); + layoutDlg->addWidget(aGroupBox,3,0); + + setEnabled(myGroupSelButton,!myIsBBCenter->isChecked()); + setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked()); + + this->resize(400, this->sizeHint().height()); + + connect(view, SIGNAL(Show( QShowEvent * )), this, SLOT(onViewShow())); + connect(view, SIGNAL(Hide( QHideEvent * )), this, SLOT(onViewHide())); +} + +/* + * Destroys the object and frees any allocated resources + */ +OCCViewer_SetRotationPointDlg +::~OCCViewer_SetRotationPointDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +/*! + Return true if it is the first show for this dialog +*/ +bool +OCCViewer_SetRotationPointDlg +::IsFirstShown() +{ + return myIsBBCenter->isChecked() && myX->text().toDouble() == 0. + && myY->text().toDouble() == 0. && myZ->text().toDouble() == 0.; +} + +void +OCCViewer_SetRotationPointDlg +::setEnabled(QGroupBox* theGrp, const bool theState) +{ + QObjectList aChildren(*theGrp->children()); + QObject* anObj; + for(anObj = aChildren.first(); anObj !=0; anObj = aChildren.next()) + { + if (anObj !=0 && anObj->inherits("QLineEdit")) + ((QLineEdit*)anObj)->setReadOnly(!theState); + if (anObj !=0 && anObj->inherits("QPushButton")) + ((QLineEdit*)anObj)->setEnabled(theState); + } + +} + +void +OCCViewer_SetRotationPointDlg +::onBBCenterChecked() +{ + setEnabled(myGroupSelButton,!myIsBBCenter->isChecked()); + setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked()); + + if ( myIsBBCenter->isChecked() ) + { + if ( mySelectPoint->state() == QButton::On ) + mySelectPoint->toggle(); + myView->activateSetRotationGravity(); + } + else + myView->activateSetRotationSelected(myX->text().toDouble(), + myY->text().toDouble(), + myZ->text().toDouble()); +} + +void +OCCViewer_SetRotationPointDlg +::onToOrigin() +{ + if ( mySelectPoint->state() == QButton::On ) + mySelectPoint->toggle(); + setCoords(); + myView->activateSetRotationSelected(myX->text().toDouble(), + myY->text().toDouble(), + myZ->text().toDouble()); +} + +void +OCCViewer_SetRotationPointDlg +::onSelectPoint() +{ + if ( mySelectPoint->state() == QButton::On ) + myView->activateStartPointSelection(); + else + mySelectPoint->toggle(); +} + +void +OCCViewer_SetRotationPointDlg +::onCoordChanged() +{ + if ( !myIsBBCenter->isChecked() ) + { + if ( mySelectPoint->state() == QButton::On + && + ( myX->hasFocus() || myY->hasFocus() || myZ->hasFocus() ) ) + mySelectPoint->toggle(); + myView->activateSetRotationSelected(myX->text().toDouble(), + myY->text().toDouble(), + myZ->text().toDouble()); + } +} + +void +OCCViewer_SetRotationPointDlg +::setCoords(double theX, double theY, double theZ) +{ + myX->setText(QString::number(theX)); + myY->setText(QString::number(theY)); + myZ->setText(QString::number(theZ)); +} + +void +OCCViewer_SetRotationPointDlg +::toggleChange() +{ + if ( !myIsBBCenter->isChecked() ) + mySelectPoint->toggle(); +} + +void +OCCViewer_SetRotationPointDlg +::onClickClose() +{ + myAction->setOn( false ); + reject(); +} + +void +OCCViewer_SetRotationPointDlg +::onViewShow() +{ + if(myAction->isOn()) + show(); + else + hide(); +} + +void +OCCViewer_SetRotationPointDlg +::onViewHide() +{ + hide(); +} diff --git a/src/OCCViewer/OCCViewer_SetRotationPointDlg.h b/src/OCCViewer/OCCViewer_SetRotationPointDlg.h new file mode 100644 index 000000000..18c1f654e --- /dev/null +++ b/src/OCCViewer/OCCViewer_SetRotationPointDlg.h @@ -0,0 +1,82 @@ +// Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef OCCVIEWER_SETROTATIONPOINTDLG_H +#define OCCVIEWER_SETROTATIONPOINTDLG_H + +#include "OCCViewer.h" + +#include + +class QtxAction; + +class QLineEdit; +class QPushButton; +class QGroupBox; +class QButtonGroup; +class QCheckBox; + +class OCCViewer_ViewWindow; + +class OCCVIEWER_EXPORT OCCViewer_SetRotationPointDlg : public QDialog +{ + Q_OBJECT + +public: + OCCViewer_SetRotationPointDlg(OCCViewer_ViewWindow* , QWidget* parent = 0, + const char* name = 0, bool modal = FALSE, WFlags fl = 0); + ~OCCViewer_SetRotationPointDlg(); + + void SetAction( QtxAction* theAction ) { myAction = theAction; } + bool IsFirstShown(); + + void setCoords(double theX=0., double theY=0., double theZ=0.); + void toggleChange(); + +protected: + OCCViewer_ViewWindow* myView; + QtxAction* myAction; + + QCheckBox* myIsBBCenter; + + QButtonGroup* myGroupSelButton; + QPushButton* myToOrigin; + QPushButton* mySelectPoint; + + QGroupBox* myGroupBoxCoord; + QLineEdit* myX; + QLineEdit* myY; + QLineEdit* myZ; + + void setEnabled(QGroupBox* theGrp, const bool theState); + +protected slots: + void onBBCenterChecked(); + + void onToOrigin(); + void onSelectPoint(); + + void onCoordChanged(); + + void onClickClose(); + + void onViewShow(); + void onViewHide(); +}; + +#endif // OCCVIEWER_SETROTATIONPOINTDLG_H diff --git a/src/OCCViewer/OCCViewer_ViewManager.cxx b/src/OCCViewer/OCCViewer_ViewManager.cxx index 6436c81de..3d799109f 100755 --- a/src/OCCViewer/OCCViewer_ViewManager.cxx +++ b/src/OCCViewer/OCCViewer_ViewManager.cxx @@ -20,16 +20,13 @@ #include "OCCViewer_ViewWindow.h" #include "SUIT_Desktop.h" -int OCCViewer_ViewManager::myMaxId = 0; - /*! Constructor */ OCCViewer_ViewManager::OCCViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop, bool DisplayTrihedron ) -: SUIT_ViewManager( study, theDesktop ) +: SUIT_ViewManager( study, theDesktop, new OCCViewer_Viewer( DisplayTrihedron ) ) { - myId = ++myMaxId; - setViewModel( new OCCViewer_Viewer( DisplayTrihedron ) ); + setTitle( tr( "OCC_VIEW_TITLE" ) ); } /*! @@ -39,16 +36,6 @@ OCCViewer_ViewManager::~OCCViewer_ViewManager() { } -/*! - Sets view name - \param theView - view to assign name -*/ -void OCCViewer_ViewManager::setViewName(SUIT_ViewWindow* theView) -{ - int aPos = myViews.find(theView); - theView->setCaption( tr( "OCC_VIEW_TITLE" ).arg( myId ).arg( aPos + 1 ) ); -} - /*! Fills popup menu with custom actions \param popup - popup menu to be filled with diff --git a/src/OCCViewer/OCCViewer_ViewManager.h b/src/OCCViewer/OCCViewer_ViewManager.h index 352e873c5..ea88d3577 100755 --- a/src/OCCViewer/OCCViewer_ViewManager.h +++ b/src/OCCViewer/OCCViewer_ViewManager.h @@ -36,13 +36,6 @@ public: OCCViewer_Viewer* getOCCViewer() { return (OCCViewer_Viewer*) myViewModel; } virtual void contextMenuPopup( QPopupMenu* ); - -protected: - void setViewName(SUIT_ViewWindow* theView); - -protected: - static int myMaxId; - int myId; }; #endif diff --git a/src/OCCViewer/OCCViewer_ViewModel.cxx b/src/OCCViewer/OCCViewer_ViewModel.cxx index b3577414d..5e64aafb3 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.cxx +++ b/src/OCCViewer/OCCViewer_ViewModel.cxx @@ -129,6 +129,7 @@ void OCCViewer_Viewer::initView( OCCViewer_ViewWindow* view ) { if ( view ) { view->initLayout(); + view->initSketchers(); OCCViewer_ViewPort3d* vp3d = view->getViewPort(); if ( vp3d ) @@ -201,6 +202,8 @@ void OCCViewer_Viewer::onMouseRelease(SUIT_ViewWindow* theWindow, QMouseEvent* t myEndPnt.setX(theEvent->x()); myEndPnt.setY(theEvent->y()); OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*) theWindow; bool aHasShift = (theEvent->state() & Qt::ShiftButton); + + if (!aHasShift) emit deselection(); if (myStartPnt == myEndPnt) { @@ -250,7 +253,7 @@ void OCCViewer_Viewer::enableSelection(bool isEnabled) return; QPtrVector wins = myViewManager->getViews(); - for ( int i = 0; i < wins.count(); i++ ) + for ( int i = 0; i < (int)wins.count(); i++ ) { OCCViewer_ViewWindow* win = ::qt_cast( wins.at( i ) ); if ( win ) @@ -270,7 +273,7 @@ void OCCViewer_Viewer::enableMultiselection(bool isEnable) return; QPtrVector wins = myViewManager->getViews(); - for ( int i = 0; i < wins.count(); i++ ) + for ( int i = 0; i < (int)wins.count(); i++ ) { OCCViewer_ViewWindow* win = ::qt_cast( wins.at( i ) ); if ( win ) @@ -337,6 +340,10 @@ void OCCViewer_Viewer::update() { if (!myV3dViewer.IsNull()) myV3dViewer->Update(); + + OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView()); + if ( aView ) + aView->updateGravityCoords(); } /*! @@ -358,7 +365,7 @@ void OCCViewer_Viewer::setObjectsSelected(const AIS_ListOfInteractive& theList) { AIS_ListIteratorOfListOfInteractive aIt; for (aIt.Initialize(theList); aIt.More(); aIt.Next()) - myAISContext->SetSelected(aIt.Value(), false); + myAISContext->AddOrRemoveSelected(aIt.Value(), false); myAISContext->UpdateCurrentViewer(); } @@ -517,7 +524,7 @@ void OCCViewer_Viewer::setColor( const Handle(AIS_InteractiveObject)& obj, void OCCViewer_Viewer::switchRepresentation( const Handle(AIS_InteractiveObject)& obj, int mode, bool update ) { - myAISContext->SetDisplayMode( obj, (Standard_Integer)mode, true ); + myAISContext->SetDisplayMode( obj, (Standard_Integer)mode, update ); if( update ) myV3dViewer->Update(); } @@ -572,11 +579,11 @@ void OCCViewer_Viewer::setTrihedronShown( const bool on ) /*! \return trihedron size */ -int OCCViewer_Viewer::trihedronSize() const +double OCCViewer_Viewer::trihedronSize() const { - int sz = 0; + double sz = 0; if ( !myTrihedron.IsNull() ) - sz = (int)myTrihedron->Size(); + sz = myTrihedron->Size(); return sz; } @@ -584,7 +591,7 @@ int OCCViewer_Viewer::trihedronSize() const Changes trihedron size \param sz - new size */ -void OCCViewer_Viewer::setTrihedronSize( const int sz ) +void OCCViewer_Viewer::setTrihedronSize( const double sz ) { if ( !myTrihedron.IsNull() ) myTrihedron->SetSize( sz ); diff --git a/src/OCCViewer/OCCViewer_ViewModel.h b/src/OCCViewer/OCCViewer_ViewModel.h index ebdc47049..654dec238 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.h +++ b/src/OCCViewer/OCCViewer_ViewModel.h @@ -102,8 +102,8 @@ public: bool isTrihedronVisible() const; virtual void setTrihedronShown( const bool ); - int trihedronSize() const; - virtual void setTrihedronSize( const int ); + double trihedronSize() const; + virtual void setTrihedronSize( const double ); public slots: void onClearViewAspects(); @@ -139,6 +139,7 @@ public: signals: void selectionChanged(); + void deselection(); protected: void initView( OCCViewer_ViewWindow* view ); diff --git a/src/OCCViewer/OCCViewer_ViewPort.cxx b/src/OCCViewer/OCCViewer_ViewPort.cxx index bd5ace4c6..b0c6e617e 100755 --- a/src/OCCViewer/OCCViewer_ViewPort.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort.cxx @@ -104,9 +104,9 @@ static Colormap choose_cmap( Display *dpy, XVisualInfo *vi ) XStandardColormap *c; int n, i; -#ifdef DEBUG - cout << "Choosing cmap for vID = " << vi->visualid << endl; -#endif + //#ifdef DEBUG + //cout << "Choosing cmap for vID = " << vi->visualid << endl; + //#endif if ( vi->visualid == XVisualIDFromVisual( (Visual*)QPaintDevice::x11AppVisual() ) ) { @@ -196,7 +196,7 @@ void OCCViewer_ViewPort::initialize() { myPopupActions.setAutoDelete( true ); myPaintersRedrawing = false; - myEnableSketching = false; + myEnableSketching = true; myEnableTransform = true; setMouseTracking( true ); diff --git a/src/OCCViewer/OCCViewer_ViewPort.h b/src/OCCViewer/OCCViewer_ViewPort.h index 357dd8d0c..b4742b293 100755 --- a/src/OCCViewer/OCCViewer_ViewPort.h +++ b/src/OCCViewer/OCCViewer_ViewPort.h @@ -35,6 +35,10 @@ class QPainter; class OCCViewer_ViewSketcher; class OCCViewer_ViewTransformer; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \class OCCViewer_ViewPort Visualisation canvas of SUIT-based application @@ -111,4 +115,8 @@ private: static int nCounter; /* objects counter */ }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.cxx b/src/OCCViewer/OCCViewer_ViewPort3d.cxx index 50930efbc..cbeb3ce9c 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort3d.cxx @@ -20,6 +20,7 @@ #include "OCCViewer_ViewPort3d.h" #include "OCCViewer_VService.h" +#include "OCCViewer_ViewWindow.h" #include #include @@ -35,6 +36,12 @@ #include #endif +static double rx = 0.; +static double ry = 0.; +static int sx = 0; +static int sy = 0; +static Standard_Boolean zRotation = Standard_False; + /*! Constructor */ @@ -289,8 +296,12 @@ void OCCViewer_ViewPort3d::fitRect( const QRect& rect ) */ void OCCViewer_ViewPort3d::zoom( int x0, int y0, int x, int y ) { - if ( !activeView().IsNull() ) - activeView()->Zoom( x0, y0, x, y ); + if ( !activeView().IsNull() ) { + // 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 ); + } } /*! @@ -314,25 +325,86 @@ void OCCViewer_ViewPort3d::pan( int dx, int dy ) /*! Inits 'rotation' transformation. [ protected ] */ -void OCCViewer_ViewPort3d::startRotation( int x, int y ) +void OCCViewer_ViewPort3d::startRotation( int x, int y, + int theRotationPointType, + const gp_Pnt& theSelectedPoint ) { - if ( !activeView().IsNull() ) - { - myDegenerated = activeView()->DegenerateModeIsOn(); - activeView()->SetDegenerateModeOn(); - if (myAnimate) activeView()->SetAnimationModeOn(); - activeView()->StartRotation( x, y, 0.45 ); + if ( !activeView().IsNull() ) + { + myDegenerated = activeView()->DegenerateModeIsOn(); + activeView()->SetDegenerateModeOn(); + if (myAnimate) activeView()->SetAnimationModeOn(); + + //double gx, gy, gz; + //double gx = activeView()->gx; + //activeView()->Gravity(gx,gy,gz); + + switch ( theRotationPointType ) { + case OCCViewer_ViewWindow::GRAVITY: + activeView()->StartRotation( x, y, 0.45 ); + break; + case OCCViewer_ViewWindow::SELECTED: + sx = x; sy = y; + + double X,Y; + activeView()->Size(X,Y); + rx = Standard_Real(activeView()->Convert(X)); + ry = Standard_Real(activeView()->Convert(Y)); + + activeView()->Rotate( 0., 0., 0., + theSelectedPoint.X(),theSelectedPoint.Y(), theSelectedPoint.Z(), + Standard_True ); + + Quantity_Ratio zRotationThreshold; + zRotation = Standard_False; + zRotationThreshold = 0.45; + if( zRotationThreshold > 0. ) { + Standard_Real dx = Abs(sx - rx/2.); + Standard_Real dy = Abs(sy - ry/2.); + Standard_Real dd = zRotationThreshold * (rx + ry)/2.; + if( dx > dd || dy > dd ) zRotation = Standard_True; } + break; + default: + break; + } + } } /*! Rotates the viewport. [ protected ] */ -void OCCViewer_ViewPort3d::rotate( int x, int y ) +void OCCViewer_ViewPort3d::rotate( int x, int y, + int theRotationPointType, + const gp_Pnt& theSelectedPoint ) { - if ( !activeView().IsNull() ) - activeView()->Rotation( x, y ); -// setZSize( getZSize() ); + if ( !activeView().IsNull() ) { + switch ( theRotationPointType ) { + case OCCViewer_ViewWindow::GRAVITY: + activeView()->Rotation( x, y ); + break; + case OCCViewer_ViewWindow::SELECTED: + double dx, dy, dz; + if( zRotation ) { + dz = atan2(Standard_Real(x)-rx/2., ry/2.-Standard_Real(y)) - + atan2(sx-rx/2.,ry/2.-sy); + dx = dy = 0.; + } + else { + dx = (Standard_Real(x) - sx) * Standard_PI/rx; + dy = (sy - Standard_Real(y)) * Standard_PI/ry; + dz = 0.; + } + + activeView()->Rotate( dx, dy, dz, + theSelectedPoint.X(),theSelectedPoint.Y(), theSelectedPoint.Z(), + Standard_False ); + break; + default: + break; + } + } + // setZSize( getZSize() ); } /*! @@ -340,15 +412,15 @@ void OCCViewer_ViewPort3d::rotate( int x, int y ) */ void OCCViewer_ViewPort3d::endRotation() { - if ( !activeView().IsNull() ) - { - if (myAnimate) activeView()->SetAnimationModeOff(); - if ( !myDegenerated ) - activeView()->SetDegenerateModeOff(); - activeView()->ZFitAll(1.); - activeView()->SetZSize(0.); - activeView()->Update(); - } + if ( !activeView().IsNull() ) + { + if (myAnimate) activeView()->SetAnimationModeOff(); + if ( !myDegenerated ) + activeView()->SetDegenerateModeOff(); + activeView()->ZFitAll(1.); + activeView()->SetZSize(0.); + activeView()->Update(); + } } /*! diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.h b/src/OCCViewer/OCCViewer_ViewPort3d.h index 204b8eb99..4f840bd02 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.h +++ b/src/OCCViewer/OCCViewer_ViewPort3d.h @@ -28,6 +28,10 @@ class QRect; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + class OCCVIEWER_EXPORT OCCViewer_ViewPort3d: public OCCViewer_ViewPort { Q_OBJECT @@ -64,8 +68,8 @@ public: virtual void zoom( int, int, int, int ); virtual void fitAll( bool keepScale = false, bool withZ = true, bool upd = true ); - void startRotation( int, int ); - void rotate( int, int ); + void startRotation( int, int, int, const gp_Pnt& ); + void rotate( int, int, int, const gp_Pnt& ); void endRotation(); protected: @@ -89,4 +93,8 @@ private: double myScale; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/OCCViewer/OCCViewer_ViewSketcher.cxx b/src/OCCViewer/OCCViewer_ViewSketcher.cxx new file mode 100755 index 000000000..a6e8d8e30 --- /dev/null +++ b/src/OCCViewer/OCCViewer_ViewSketcher.cxx @@ -0,0 +1,536 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "OCCViewer_ViewSketcher.h" +#include "OCCViewer_ViewWindow.h" +#include "OCCViewer_ViewPort3d.h" + +#include +#include +#include + +/**************************************************************** +** Class: OCCViewer_ViewSketcher +** Level: Public +*****************************************************************/ + +OCCViewer_ViewSketcher::OCCViewer_ViewSketcher( OCCViewer_ViewWindow* vw, int type ) +: QObject( vw ), +mySketchButton( Qt::LeftButton ), +mypViewWindow( vw ), +myType( type ), +mypData( 0 ), +myResult( Neutral ), +myButtonState( 0 ) +{ +} + +OCCViewer_ViewSketcher::~OCCViewer_ViewSketcher() +{ +} + +void OCCViewer_ViewSketcher::activate() +{ + OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort(); + + mySavedCursor = avp->cursor(); + avp->setCursor( Qt::PointingHandCursor ); + avp->installEventFilter( this ); + qApp->installEventFilter( this ); + + connect( avp, SIGNAL( vpDrawExternal( QPainter* ) ), this, SLOT( onDrawViewPort() ) ); + + myStart = QPoint(); + myResult = Neutral; + + onActivate(); +} + +void OCCViewer_ViewSketcher::deactivate() +{ + OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort(); + + disconnect( avp, SIGNAL( vpDrawExternal( QPainter* ) ), this, SLOT( onDrawViewPort() ) ); + + qApp->removeEventFilter( this ); + avp->removeEventFilter( this ); + avp->setCursor( mySavedCursor ); + + onDeactivate(); +} + +int OCCViewer_ViewSketcher::type() const +{ + return myType; +} + +void* OCCViewer_ViewSketcher::data() const +{ + return mypData; +} + +int OCCViewer_ViewSketcher::result() const +{ + return myResult; +} + +int OCCViewer_ViewSketcher::buttonState() const +{ + return myButtonState; +} + +void OCCViewer_ViewSketcher::onActivate() +{ +} + +void OCCViewer_ViewSketcher::onDeactivate() +{ +} + +bool OCCViewer_ViewSketcher::isDefault() const +{ + return true; +} + +bool OCCViewer_ViewSketcher::eventFilter( QObject* o, QEvent* e ) +{ + OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort(); + + SketchState state = EnTrain; + bool ignore = false; + if ( o == avp ) + { + switch ( e->type() ) + { + case QEvent::MouseMove: + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + { + QMouseEvent* me = (QMouseEvent*)e; + + myButtonState = me->state(); + if ( e->type() == QEvent::MouseButtonPress ) + myButtonState |= me->button(); + + if ( myStart.isNull() && ( myButtonState & sketchButton() ) ) + { + state = Debut; + myStart = me->pos(); + } + + myCurr = me->pos(); + + onMouse( me ); + + if ( myResult != Neutral ) + state = Fin; + + ignore = true; + break; + } + case QEvent::Hide: + case QEvent::HideToParent: + myResult = Reject; + onSketch( Fin ); + break; + default: + break; + } + } + if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) + { + ignore = onKey( (QKeyEvent*)e ); + if ( myResult != Neutral ) + state = Fin; + } + + if ( ignore ) + { + onSketch( state ); + return true; + } + return QObject::eventFilter( o, e ); +} + +void OCCViewer_ViewSketcher::onDrawViewPort() +{ + onSketch( Debut ); +} + +bool OCCViewer_ViewSketcher::onKey( QKeyEvent* ) +{ + return false; +} + +void OCCViewer_ViewSketcher::onMouse( QMouseEvent* ) +{ +} + +int OCCViewer_ViewSketcher::sketchButton() +{ + return mySketchButton; +} + +void OCCViewer_ViewSketcher::setSketchButton( int b ) +{ + mySketchButton = b; +} + +/**************************************************************** +** Class: OCCViewer_RectSketcher +** Level: Public +*****************************************************************/ + +OCCViewer_RectSketcher::OCCViewer_RectSketcher( OCCViewer_ViewWindow* vw, int typ ) +: OCCViewer_ViewSketcher( vw, typ ) +{ +} + +OCCViewer_RectSketcher::~OCCViewer_RectSketcher() +{ + delete mypData; +} + +void OCCViewer_RectSketcher::onActivate() +{ + mypData = new QRect(); +} + +void OCCViewer_RectSketcher::onDeactivate() +{ + delete mypData; + mypData = 0; +} + +bool OCCViewer_RectSketcher::onKey( QKeyEvent* e ) +{ + if ( e->key() == Qt::Key_Escape ) + myResult = Reject; + else if ( e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return ) + myResult = Accept; + + return true; +} + +void OCCViewer_RectSketcher::onMouse( QMouseEvent* e ) +{ + OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort(); + + if ( avp->rect().contains( myCurr ) ) + avp->setCursor( Qt::PointingHandCursor ); + else + avp->setCursor( Qt::ForbiddenCursor ); + + if ( e->type() == QEvent::MouseButtonRelease && e->button() == sketchButton() ) + { + myResult = Accept; + QApplication::postEvent( avp, new QMouseEvent( e->type(), e->pos(), + e->globalPos(), e->state(), e->button() ) ); + } +} + +void OCCViewer_RectSketcher::onSketch( SketchState state ) +{ + OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort(); + + QRect* sketchRect = (QRect*)data(); + if ( myButtonState & sketchButton() ) + { + QRect rect( QMIN( myStart.x(), myCurr.x() ), QMIN( myStart.y(), myCurr.y() ), + QABS( myStart.x() - myCurr.x() ), QABS( myStart.y() - myCurr.y() ) ); + QPainter p( avp ); + p.setPen( Qt::white ); + p.setRasterOp( Qt::XorROP ); + if ( state != Debut && !sketchRect->isEmpty() ) + p.drawRect( *sketchRect ); + *sketchRect = rect; + if ( !rect.isEmpty() && state != Fin ) + p.drawRect( *sketchRect ); + } + + if ( state == Fin ) + { + QApplication::syncX(); /* force rectangle redrawing */ + mypViewWindow->activateSketching( OCCViewer_ViewWindow::NoSketching ); + } +} + +/**************************************************************** +** Class: OCCViewer_PolygonSketcher +** Level: Public +*****************************************************************/ + +OCCViewer_PolygonSketcher::OCCViewer_PolygonSketcher( OCCViewer_ViewWindow* vw, int typ ) +: OCCViewer_ViewSketcher( vw, typ ), + myDbl ( false ), + myToler ( 5, 5 ), + mypPoints ( 0L ), + myAddButton ( 0 ), + myDelButton ( 0 ) +{ + mySketchButton = Qt::RightButton; +} + +OCCViewer_PolygonSketcher::~OCCViewer_PolygonSketcher() +{ + delete mypPoints; + delete mypData; +} + +void OCCViewer_PolygonSketcher::onActivate() +{ + myDbl = false; + mypData = new QPointArray( 0 ); + mypPoints = new QPointArray( 0 ); + + switch ( sketchButton() ) + { + case Qt::LeftButton: + myAddButton = Qt::RightButton; + myDelButton = Qt::MidButton; + break; + case Qt::MidButton: + myAddButton = Qt::LeftButton; + myDelButton = Qt::RightButton; + break; + case Qt::RightButton: + default: + myAddButton = Qt::LeftButton; + myDelButton = Qt::MidButton; + break; + }; +} + +void OCCViewer_PolygonSketcher::onDeactivate() +{ + delete mypPoints; + mypPoints = 0; + delete mypData; + mypData = 0; +} + +bool OCCViewer_PolygonSketcher::onKey( QKeyEvent* e ) +{ + if ( e->key() == Qt::Key_Escape ) + { + myResult = Reject; + return true; + } + else if ( e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return ) + { + QPointArray* points = (QPointArray*)data(); + if ( points->count() ) + { + QPoint last = points->point( points->count() - 1 ); + if ( last != myCurr ) + { + points->resize( points->count() + 1 ); + points->setPoint( points->count() - 1, myCurr ); + } + } + myResult = Accept; + return true; + } + else if ( e->key() == Qt::Key_Backspace && e->type() == QEvent::KeyRelease ) + { + QPointArray* points = (QPointArray*)data(); + if ( points->count() > 1 ) + points->resize( points->count() - 1 ); + onMouse( 0 ); + return true; + } + + return true; +} + +void OCCViewer_PolygonSketcher::onMouse( QMouseEvent* e ) +{ + OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort(); + + QPointArray* points = (QPointArray*)data(); + if ( !points->count() && !myStart.isNull() ) + { + points->resize( points->count() + 1 ); + points->setPoint( points->count() - 1, myStart ); + } + + bool closed = false; + bool valid = avp->rect().contains( myCurr ); + if ( !myStart.isNull() ) + { + QRect aRect( myStart.x() - myToler.width(), myStart.y() - myToler.height(), + 2 * myToler.width(), 2 * myToler.height() ); + closed = aRect.contains( myCurr ); + } + valid = valid && isValid( points, myCurr ); + if ( closed && !valid ) + closed = false; + + if ( closed ) + avp->setCursor( Qt::CrossCursor ); + else if ( valid ) + avp->setCursor( Qt::PointingHandCursor ); + else + avp->setCursor( Qt::ForbiddenCursor ); + + if ( !e ) + return; + + if ( e->type() == QEvent::MouseButtonRelease && ( e->button() & sketchButton() ) ) + { + myResult = Reject; + QApplication::postEvent( avp, new QMouseEvent( e->type(), e->pos(), + e->globalPos(), e->state(), e->button() ) ); + } + else if ( e->type() == QEvent::MouseButtonRelease && ( e->button() & myAddButton ) ) + { + if ( closed ) + myResult = Accept; + else + { + if ( myStart.isNull() ) + myStart = myCurr; + else + { + QPoint last = points->point( points->count() - 1 ); + if ( last != myCurr && valid ) + { + points->resize( points->count() + 1 ); + points->setPoint( points->count() - 1, myCurr ); + } + if ( valid && myDbl ) + myResult = Accept; + } + } + } + else if ( ( e->type() == QEvent::MouseButtonRelease && ( e->button() & myDelButton ) ) || + ( e->type() == QEvent::MouseButtonDblClick && ( e->button() & myDelButton ) ) ) + { + if ( points->count() > 1 ) + points->resize( points->count() - 1 ); + onMouse( 0 ); + } + myDbl = e->type() == QEvent::MouseButtonDblClick && ( e->button() & myAddButton ); +} + +void OCCViewer_PolygonSketcher::onSketch( SketchState state ) +{ + OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort(); + + QPointArray* points = (QPointArray*)data(); + QPainter p( avp ); + p.setPen( Qt::white ); + p.setRasterOp( Qt::XorROP ); + if ( state != Debut ) + p.drawPolyline( *mypPoints ); + + if ( points->count() ) + { + mypPoints->resize( points->count() + 1 ); + for ( uint i = 0; i < points->count(); i++ ) + mypPoints->setPoint( i, points->point( i ) ); + mypPoints->setPoint( points->count(), myCurr ); + if ( state != Fin ) + p.drawPolyline( *mypPoints ); + } + + if ( state == Fin ) + { + QApplication::syncX(); + mypViewWindow->activateSketching( OCCViewer_ViewWindow::NoSketching ); + } +} + +bool OCCViewer_PolygonSketcher::isValid( const QPointArray* aPoints, const QPoint& aCur ) const +{ + if ( !aPoints->count() ) + return true; + + if ( aPoints->count() == 1 && aPoints->point( 0 ) == aCur ) + return false; + + const QPoint& aLast = aPoints->point( aPoints->count() - 1 ); + + if ( aLast == aCur ) + return true; + + bool res = true; + for ( uint i = 0; i < aPoints->count() - 1 && res; i++ ) + { + const QPoint& aStart = aPoints->point( i ); + const QPoint& anEnd = aPoints->point( i + 1 ); + res = !isIntersect( aStart, anEnd, aCur, aLast ); + } + + return res; +} + +bool OCCViewer_PolygonSketcher::isIntersect( const QPoint& aStart1, const QPoint& anEnd1, + const QPoint& aStart2, const QPoint& anEnd2 ) const +{ + if ( ( aStart1 == aStart2 && anEnd1 == anEnd2 ) || + ( aStart1 == anEnd2 && anEnd1 == aStart2 ) ) + return true; + + if ( aStart1 == aStart2 || aStart2 == anEnd1 || + aStart1 == anEnd2 || anEnd1 == anEnd2 ) + return false; + + double x11 = aStart1.x() * 1.0; + double x12 = anEnd1.x() * 1.0; + double y11 = aStart1.y() * 1.0; + double y12 = anEnd1.y() * 1.0; + + double x21 = aStart2.x() * 1.0; + double x22 = anEnd2.x() * 1.0; + double y21 = aStart2.y() * 1.0; + double y22 = anEnd2.y() * 1.0; + + double k1 = x12 == x11 ? 0 : ( y12 - y11 ) / ( x12 - x11 ); + double k2 = x22 == x21 ? 0 : ( y22 - y21 ) / ( x22 - x21 ); + + double b1 = y11 - k1 * x11; + double b2 = y21 - k2 * x21; + + if ( k1 == k2 ) + { + if ( b1 != b2 ) + return false; + else + return !( ( QMAX( x11, x12 ) <= QMIN( x21, x22 ) || + QMIN( x11, x12 ) >= QMAX( x21, x22 ) ) && + ( QMAX( y11, y12 ) <= QMIN( y21, y22 ) || + QMIN( y11, y12 ) >= QMAX( y21, y22 ) ) ); + } + else + { + double x0 = ( b2 - b1 ) / ( k1 - k2 ); + double y0 = ( k1 * b2 - k2 * b1 ) / ( k1 - k2 ); + + if ( QMIN( x11, x12 ) < x0 && x0 < QMAX( x11, x12 ) && + QMIN( y11, y12 ) < y0 && y0 < QMAX( y11, y12 ) && + QMIN( x21, x22 ) < x0 && x0 < QMAX( x21, x22 ) && + QMIN( y21, y22 ) < y0 && y0 < QMAX( y21, y22 ) ) + return true; + } + return false; +} + + diff --git a/src/OCCViewer/OCCViewer_ViewSketcher.h b/src/OCCViewer/OCCViewer_ViewSketcher.h new file mode 100755 index 000000000..367ece104 --- /dev/null +++ b/src/OCCViewer/OCCViewer_ViewSketcher.h @@ -0,0 +1,137 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef OCCVIEWER_VIEWSKETCHER_H +#define OCCVIEWER_VIEWSKETCHER_H + +#include "OCCViewer.h" + +#include +#include + +class OCCViewer_ViewWindow; + +#ifdef WNT +#pragma warning ( disable:4251 ) +#endif + +/*! + \class OCCViewer_ViewSketcher +*/ + +class OCCVIEWER_EXPORT OCCViewer_ViewSketcher : public QObject +{ + Q_OBJECT + +public: + enum { Neutral, Accept, Reject }; + +public: + OCCViewer_ViewSketcher( OCCViewer_ViewWindow*, int ); + virtual ~OCCViewer_ViewSketcher(); + +public: + int type() const; + int result() const; + int buttonState() const; + void* data() const; + + void activate(); + void deactivate(); + + int sketchButton(); + void setSketchButton( int ); + + virtual bool isDefault() const; + virtual bool eventFilter( QObject*, QEvent* ); + +private slots: + void onDrawViewPort(); + +protected: + enum SketchState { Debut, EnTrain, Fin }; + virtual bool onKey( QKeyEvent* ); + virtual void onMouse( QMouseEvent* ); + virtual void onSketch( SketchState ) = 0; + virtual void onActivate(); + virtual void onDeactivate(); + +protected: + int mySketchButton; + OCCViewer_ViewWindow* mypViewWindow; + int myType; + void* mypData; + int myResult; + QCursor mySavedCursor; + QPoint myStart, myCurr; + int myButtonState; +}; + +/*! + \class OCCViewer_RectSketcher +*/ + +class OCCVIEWER_EXPORT OCCViewer_RectSketcher : public OCCViewer_ViewSketcher +{ +public: + OCCViewer_RectSketcher( OCCViewer_ViewWindow*, int ); + virtual ~OCCViewer_RectSketcher(); + +protected: + virtual bool onKey( QKeyEvent* ); + virtual void onMouse( QMouseEvent* ); + virtual void onSketch( SketchState ); + virtual void onActivate(); + virtual void onDeactivate(); +}; + +/*! + \class OCCViewer_PolygonSketcher +*/ + +class OCCVIEWER_EXPORT OCCViewer_PolygonSketcher : public OCCViewer_ViewSketcher +{ +public: + OCCViewer_PolygonSketcher( OCCViewer_ViewWindow*, int ); + virtual ~OCCViewer_PolygonSketcher(); + +protected: + virtual bool onKey( QKeyEvent* ); + virtual void onMouse( QMouseEvent* ); + virtual void onSketch( SketchState ); + virtual void onActivate(); + virtual void onDeactivate(); + +private: + bool isValid( const QPointArray*, const QPoint& ) const; + bool isIntersect( const QPoint&, const QPoint&, + const QPoint&, const QPoint& ) const; + +private: + bool myDbl; + QSize myToler; + QPointArray* mypPoints; + int myAddButton; + int myDelButton; +}; + +#ifdef WNT +#pragma warning( default:4251 ) +#endif + +#endif diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx index cef3b10d8..78bd7147e 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ b/src/OCCViewer/OCCViewer_ViewWindow.cxx @@ -22,8 +22,11 @@ #include "OCCViewer_ViewWindow.h" #include "OCCViewer_ViewModel.h" #include "OCCViewer_ViewPort3d.h" +#include "OCCViewer_ViewManager.h" +#include "OCCViewer_ViewSketcher.h" #include "OCCViewer_CreateRestoreViewDlg.h" #include "OCCViewer_ClippingDlg.h" +#include "OCCViewer_SetRotationPointDlg.h" #include "SUIT_Desktop.h" #include "SUIT_Session.h" @@ -45,6 +48,21 @@ #include #include #include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +static QEvent* l_mbPressEvent = 0; const char* imageZoomCursor[] = { "32 32 3 1", @@ -174,6 +192,10 @@ OCCViewer_ViewWindow::OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_V myEnableDrawMode = false; updateEnabledDrawMode(); myClippingDlg = 0; + mySetRotationPointDlg = 0; + + mypSketcher = 0; + myCurSketch = -1; } /*! @@ -184,9 +206,14 @@ void OCCViewer_ViewWindow::initLayout() myViewPort = new OCCViewer_ViewPort3d( this, myModel->getViewer3d(), V3d_ORTHOGRAPHIC ); myViewPort->setBackgroundColor(black); myViewPort->installEventFilter(this); - setCentralWidget(myViewPort); + setCentralWidget(myViewPort); myOperation = NOTHING; + myCurrPointType = GRAVITY; + myPrevPointType = GRAVITY; + mySelectedPoint = gp_Pnt(0.,0.,0.); + myRotationPointSelection = false; + setTransformRequested ( NOTHING ); setTransformInProcess ( false ); @@ -305,7 +332,7 @@ void OCCViewer_ViewWindow::vpMousePressEvent(QMouseEvent* theEvent) case ROTATE: if ( theEvent->button() == Qt::LeftButton ) { - myViewPort->startRotation(myStartX, myStartY); + myViewPort->startRotation(myStartX, myStartY, myCurrPointType, mySelectedPoint); emit vpTransformationStarted ( ROTATE ); } break; @@ -321,10 +348,44 @@ void OCCViewer_ViewWindow::vpMousePressEvent(QMouseEvent* theEvent) break; case ROTATE: activateRotation(); - myViewPort->startRotation(myStartX, myStartY); + myViewPort->startRotation(myStartX, myStartY, myCurrPointType, mySelectedPoint); break; default: - emit mousePressed(this, theEvent); + if ( myRotationPointSelection ) + { + if ( theEvent->button() == Qt::LeftButton ) + { + Handle(AIS_InteractiveContext) ic = myModel->getAISContext(); + ic->Select(); + for ( ic->InitSelected(); ic->MoreSelected(); ic->NextSelected() ) + { + TopoDS_Shape aShape = ic->SelectedShape(); + if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) + { + gp_Pnt aPnt = BRep_Tool::Pnt( TopoDS::Vertex( ic->SelectedShape() ) ); + if ( mySetRotationPointDlg ) + { + myRotationPointSelection = false; + mySetRotationPointDlg->setCoords(aPnt.X(), aPnt.Y(), aPnt.Z()); + } + } + else + { + myCurrPointType = myPrevPointType; + break; + } + } + if ( ic->NbSelected() == 0 ) myCurrPointType = myPrevPointType; + if ( mySetRotationPointDlg ) mySetRotationPointDlg->toggleChange(); + ic->CloseAllContexts(); + myOperation = NOTHING; + setCursor( myCursor ); + myCursorIsHand = false; + myRotationPointSelection = false; + } + } + else + emit mousePressed(this, theEvent); break; } /* notify that we start a transformation */ @@ -333,6 +394,11 @@ void OCCViewer_ViewWindow::vpMousePressEvent(QMouseEvent* theEvent) } if ( transformRequested() ) setTransformInProcess( true ); + + /* we may need it for sketching... */ + if ( l_mbPressEvent ) + delete l_mbPressEvent; + l_mbPressEvent = new QMouseEvent( *theEvent ); } @@ -384,6 +450,167 @@ void OCCViewer_ViewWindow::activateRotation() } } +/*! + Compute the gravity center +*/ +bool OCCViewer_ViewWindow::computeGravityCenter( double& theX, double& theY, double& theZ ) +{ + Handle(Visual3d_View) aView = myViewPort->getView()->View(); + + Standard_Real Xmin,Ymin,Zmin,Xmax,Ymax,Zmax,U,V,W ; + Standard_Real Umin,Vmin,Umax,Vmax ; + Standard_Integer Nstruct,Npoint ; + Graphic3d_MapOfStructure MySetOfStructures; + + aView->DisplayedStructures (MySetOfStructures); + Nstruct = MySetOfStructures.Extent() ; + + Graphic3d_MapIteratorOfMapOfStructure MyIterator(MySetOfStructures) ; + aView->ViewMapping().WindowLimit(Umin,Vmin,Umax,Vmax) ; + Npoint = 0 ; theX = theY = theZ = 0. ; + for( ; MyIterator.More(); MyIterator.Next()) { + if (!(MyIterator.Key())->IsEmpty()) { + (MyIterator.Key())->MinMaxValues(Xmin,Ymin,Zmin, + Xmax,Ymax,Zmax) ; + + Standard_Real LIM = ShortRealLast() -1.; + if (! (fabs(Xmin) > LIM || fabs(Ymin) > LIM || fabs(Zmin) > LIM + || fabs(Xmax) > LIM || fabs(Ymax) > LIM || fabs(Zmax) > LIM )) { + + aView->Projects(Xmin,Ymin,Zmin,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmin ; theY += Ymin ; theZ += Zmin ; + } + aView->Projects(Xmax,Ymin,Zmin,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmax ; theY += Ymin ; theZ += Zmin ; + } + aView->Projects(Xmin,Ymax,Zmin,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmin ; theY += Ymax ; theZ += Zmin ; + } + aView->Projects(Xmax,Ymax,Zmin,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmax ; theY += Ymax ; theZ += Zmin ; + } + aView->Projects(Xmin,Ymin,Zmax,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmin ; theY += Ymin ; theZ += Zmax ; + } + aView->Projects(Xmax,Ymin,Zmax,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmax ; theY += Ymin ; theZ += Zmax ; + } + aView->Projects(Xmin,Ymax,Zmax,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmin ; theY += Ymax ; theZ += Zmax ; + } + aView->Projects(Xmax,Ymax,Zmax,U,V,W) ; + if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) { + Npoint++ ; theX += Xmax ; theY += Ymax ; theZ += Zmax ; + } + } + } + } + if( Npoint > 0 ) { + theX /= Npoint ; theY /= Npoint ; theZ /= Npoint ; + } + return true; +} + +/*! + Set the gravity center as a rotation point +*/ +void OCCViewer_ViewWindow::activateSetRotationGravity() +{ + if ( myRotationPointSelection ) + { + Handle(AIS_InteractiveContext) ic = myModel->getAISContext(); + ic->CloseAllContexts(); + myOperation = NOTHING; + setCursor( myCursor ); + myCursorIsHand = false; + myRotationPointSelection = false; + } + + myPrevPointType = myCurrPointType; + myCurrPointType = GRAVITY; + + Standard_Real Xcenter, Ycenter, Zcenter; + if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) ) + mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter ); +} + +/*! + Update gravity center in the SetRotationPointDlg +*/ +void OCCViewer_ViewWindow::updateGravityCoords() +{ + if ( mySetRotationPointDlg && mySetRotationPointDlg->isShown() && myCurrPointType == GRAVITY ) + { + Standard_Real Xcenter, Ycenter, Zcenter; + if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) ) + mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter ); + } +} + +/*! + Set the point selected by user as a rotation point +*/ +void OCCViewer_ViewWindow::activateSetRotationSelected(double theX, double theY, double theZ) +{ + if ( myRotationPointSelection ) + { + Handle(AIS_InteractiveContext) ic = myModel->getAISContext(); + ic->CloseAllContexts(); + myOperation = NOTHING; + setCursor( myCursor ); + myCursorIsHand = false; + myRotationPointSelection = false; + } + + myPrevPointType = myCurrPointType; + myCurrPointType = SELECTED; + mySelectedPoint.SetCoord(theX,theY,theZ); +} + +/*! + Start the point selection process +*/ +void OCCViewer_ViewWindow::activateStartPointSelection() +{ + myPrevPointType = myCurrPointType; + myCurrPointType = SELECTED; + + // activate selection ------> + Handle(AIS_InteractiveContext) ic = myModel->getAISContext(); + + ic->OpenLocalContext(); + + AIS_ListOfInteractive aList; + ic->DisplayedObjects( aList ); + for ( AIS_ListIteratorOfListOfInteractive it( aList ); it.More(); it.Next() ) + { + Handle(AIS_InteractiveObject) anObj = it.Value(); + if ( !anObj.IsNull() && anObj->HasPresentation() && + anObj->IsKind( STANDARD_TYPE(AIS_Shape) ) ) + { + ic->Load(anObj,-1); + ic->Activate(anObj,AIS_Shape::SelectionMode(TopAbs_VERTEX)); + } + } + // activate selection <------ + + if ( !myCursorIsHand ) + { + QCursor handCursor (Qt::PointingHandCursor); + myCursorIsHand = true; + myCursor = cursor(); + setCursor( handCursor ); + } + myRotationPointSelection = true; +} + /*! Starts global panning operation, sets corresponding cursor */ @@ -424,7 +651,7 @@ void OCCViewer_ViewWindow::activateWindowFit() void OCCViewer_ViewWindow::setTransformRequested ( OperationType op ) { myOperation = op; - myViewPort->setMouseTracking( myOperation == NOTHING ); + myViewPort->setMouseTracking( myOperation == NOTHING ); } @@ -437,7 +664,7 @@ void OCCViewer_ViewWindow::vpMouseMoveEvent(QMouseEvent* theEvent) myCurrY = theEvent->y(); switch (myOperation) { case ROTATE: - myViewPort->rotate(myCurrX, myCurrY); + myViewPort->rotate(myCurrX, myCurrY, myCurrPointType, mySelectedPoint); break; case ZOOMVIEW: @@ -461,24 +688,54 @@ void OCCViewer_ViewWindow::vpMouseMoveEvent(QMouseEvent* theEvent) break; default: - int aState = theEvent->state(); - //int aButton = theEvent->button(); - if ( aState == Qt::LeftButton || - aState == ( Qt::LeftButton | Qt::ShiftButton) ) { - myDrawRect = myEnableDrawMode; - if ( myDrawRect ) { - drawRect(); - if ( !myCursorIsHand ) { // we are going to sketch a rectangle - QCursor handCursor (Qt::PointingHandCursor); - myCursorIsHand = true; - myCursor = cursor(); - setCursor( handCursor ); + if ( myRotationPointSelection ) + emit mouseMoving( this, theEvent ); + else + { + int aState = theEvent->state(); + if ( aState == Qt::LeftButton || + aState == ( Qt::LeftButton | Qt::ShiftButton) ) { + myDrawRect = myEnableDrawMode; + if ( myDrawRect ) { + drawRect(); + if ( !myCursorIsHand ) { // we are going to sketch a rectangle + QCursor handCursor (Qt::PointingHandCursor); + myCursorIsHand = true; + myCursor = cursor(); + setCursor( handCursor ); + } + } + } + else if ( aState == Qt::RightButton || + aState == ( Qt::RightButton | Qt::ShiftButton ) ) { + OCCViewer_ViewSketcher* sketcher = 0; + for ( OCCViewer_ViewSketcher* sk = mySketchers.first(); + sk && !sketcher; sk = mySketchers.next() ) + { + if( sk->isDefault() && sk->sketchButton() & ( aState & Qt::MouseButtonMask ) ) + sketcher = sk; + } + if ( sketcher && myCurSketch == -1 ) + { + activateSketching( sketcher->type() ); + if ( mypSketcher ) + { + myCurSketch = mypSketcher->sketchButton(); + + if ( l_mbPressEvent ) + { + QApplication::sendEvent( getViewPort(), l_mbPressEvent ); + delete l_mbPressEvent; + l_mbPressEvent = 0; + } + QApplication::sendEvent( getViewPort(), theEvent ); + } } } - } - else { - emit mouseMoving( this, theEvent ); - } + else { + emit mouseMoving( this, theEvent ); + } + } } } @@ -490,13 +747,24 @@ void OCCViewer_ViewWindow::vpMouseReleaseEvent(QMouseEvent* theEvent) switch ( myOperation ) { case NOTHING: { + int prevState = myCurSketch; + if(theEvent->state() == RightButton) + { + for ( OCCViewer_ViewSketcher* sk = mySketchers.first(); + sk && myCurSketch != -1; sk = mySketchers.next() ) + { + if( ( sk->sketchButton() & theEvent->state() ) && sk->sketchButton() == myCurSketch ) + myCurSketch = -1; + } + } + emit mouseReleased(this, theEvent); - if(theEvent->button() == RightButton) + if(theEvent->button() == RightButton && prevState == -1) { - QContextMenuEvent aEvent( QContextMenuEvent::Mouse, - theEvent->pos(), theEvent->globalPos(), - theEvent->state() ); - emit contextMenuRequested( &aEvent ); + QContextMenuEvent aEvent( QContextMenuEvent::Mouse, + theEvent->pos(), theEvent->globalPos(), + theEvent->state() ); + emit contextMenuRequested( &aEvent ); } } break; @@ -538,6 +806,12 @@ void OCCViewer_ViewWindow::vpMouseReleaseEvent(QMouseEvent* theEvent) resetState(); myViewPort->update(); } + + if ( l_mbPressEvent ) + { + delete l_mbPressEvent; + l_mbPressEvent = 0; + } } /*! @@ -552,9 +826,17 @@ void OCCViewer_ViewWindow::resetState() myRect.setLeft(2); myRect.setRight(0); - if ( transformRequested() || myCursorIsHand ) - setCursor( myCursor ); - myCursorIsHand = false; + if ( myRotationPointSelection ) + { + QCursor handCursor (Qt::PointingHandCursor); + setCursor( handCursor ); + } + else + { + if ( transformRequested() || myCursorIsHand ) + setCursor( myCursor ); + myCursorIsHand = false; + } if ( transformRequested() ) emit vpTransformationFinished (myOperation); @@ -630,7 +912,15 @@ void OCCViewer_ViewWindow::createActions() tr( "MNU_GLOBALPAN_VIEW" ), 0, this); aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW")); connect(aAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning())); - myActionsMap[ GlobalPanId ] = aAction; + myActionsMap[ GlobalPanId ] = aAction; + + // Rotation Point + mySetRotationPointAction = new QtxAction(tr("MNU_CHANGINGROTATIONPOINT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_ROTATION_POINT" ) ), + tr( "MNU_CHANGINGROTATIONPOINT_VIEW" ), 0, this); + mySetRotationPointAction->setStatusTip(tr("DSC_CHANGINGROTATIONPOINT_VIEW")); + mySetRotationPointAction->setToggleAction( true ); + connect(mySetRotationPointAction, SIGNAL(toggled( bool )), this, SLOT(onSetRotationPoint( bool ))); + myActionsMap[ ChangeRotationPointId ] = mySetRotationPointAction; // Rotation aAction = new QtxAction(tr("MNU_ROTATE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_ROTATE" ) ), @@ -695,7 +985,7 @@ void OCCViewer_ViewWindow::createActions() myClippingAction->setStatusTip(tr("DSC_CLIPPING")); myClippingAction->setToggleAction( true ); connect(myClippingAction, SIGNAL(toggled( bool )), this, SLOT(onClipping( bool ))); - myActionsMap[ ClippingId ] = myClippingAction; + myActionsMap[ ClippingId ] = myClippingAction; aAction = new QtxAction(tr("MNU_SHOOT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_SHOOT_VIEW" ) ), tr( "MNU_SHOOT_VIEW" ), 0, this); @@ -736,6 +1026,8 @@ void OCCViewer_ViewWindow::createToolBar() aPanningBtn->AddAction(myActionsMap[PanId]); aPanningBtn->AddAction(myActionsMap[GlobalPanId]); + myActionsMap[ChangeRotationPointId]->addTo(myToolBar); + myActionsMap[RotationId]->addTo(myToolBar); SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar, "projection"); @@ -855,6 +1147,37 @@ void OCCViewer_ViewWindow::onFitAll() myViewPort->fitAll(); } +/*! + SLOT: called if change rotation point operation is activated +*/ +void OCCViewer_ViewWindow::onSetRotationPoint( bool on ) +{ + if ( on ) + { + if ( !mySetRotationPointDlg ) + { + mySetRotationPointDlg = new OCCViewer_SetRotationPointDlg( this, myDesktop ); + mySetRotationPointDlg->SetAction( mySetRotationPointAction ); + } + + if ( !mySetRotationPointDlg->isShown() ) + { + if ( mySetRotationPointDlg->IsFirstShown() ) + { + Standard_Real Xcenter, Ycenter, Zcenter; + if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) ) + mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter ); + } + mySetRotationPointDlg->show(); + } + } + else + { + if ( mySetRotationPointDlg->isShown() ) + mySetRotationPointDlg->hide(); + } +} + /*! Creates one more window with same content */ @@ -1088,3 +1411,155 @@ void OCCViewer_ViewWindow::setVisualParameters( const QString& parameters ) performRestoring( params ); } } + +/*! + Custom show event handler +*/ +void OCCViewer_ViewWindow::showEvent( QShowEvent * theEvent ) +{ + emit Show( theEvent ); +} + +/*! + Custom hide event handler +*/ +void OCCViewer_ViewWindow::hideEvent( QHideEvent * theEvent ) +{ + emit Hide( theEvent ); +} + + +/*! + Creates default sketcher. [ virtual protected ] +*/ +OCCViewer_ViewSketcher* OCCViewer_ViewWindow::createSketcher( int type ) +{ + if ( type == Rect ) + return new OCCViewer_RectSketcher( this, type ); + if ( type == Polygon ) + return new OCCViewer_PolygonSketcher( this, type ); + return 0; +} + +void OCCViewer_ViewWindow::initSketchers() +{ + if ( mySketchers.isEmpty() ) + { + mySketchers.append( createSketcher( Rect ) ); + mySketchers.append( createSketcher( Polygon ) ); + } +} + +OCCViewer_ViewSketcher* OCCViewer_ViewWindow::getSketcher( const int typ ) +{ + OCCViewer_ViewSketcher* sketcher = 0; + for ( OCCViewer_ViewSketcher* sk = mySketchers.first(); + sk && !sketcher; sk = mySketchers.next() ) + { + if ( sk->type() == typ ) + sketcher = sk; + } + return sketcher; +} + +/*! + Handles requests for sketching in the active view. [ virtual public ] +*/ +void OCCViewer_ViewWindow::activateSketching( int type ) +{ + OCCViewer_ViewPort3d* vp = getViewPort(); + if ( !vp ) + return; + + if ( !vp->isSketchingEnabled() ) + return; + + /* Finish current sketching */ + if ( type == NoSketching ) + { + if ( mypSketcher ) + { + onSketchingFinished(); + mypSketcher->deactivate(); + mypSketcher = 0; + } + } + /* Activate new sketching */ + else + { + activateSketching( NoSketching ); /* concurrency not suported */ + mypSketcher = getSketcher( type ); + if ( mypSketcher ) + { + mypSketcher->activate(); + onSketchingStarted(); + } + } +} + +/*! + Unhilights detected entities. [ virtual protected ] +*/ +void OCCViewer_ViewWindow::onSketchingStarted() +{ +} + +/*! + Selection by rectangle or polygon. [ virtual protected ] +*/ +void OCCViewer_ViewWindow::onSketchingFinished() +{ + if ( mypSketcher && mypSketcher->result() == OCCViewer_ViewSketcher::Accept ) + { + Handle(AIS_InteractiveContext) ic = myModel->getAISContext(); + bool append = bool( mypSketcher->buttonState() & Qt::ShiftButton ); + switch( mypSketcher->type() ) + { + case Rect: + { + QRect* aRect = (QRect*)mypSketcher->data(); + if( aRect ) + { + int aLeft = aRect->left(); + int aRight = aRect->right(); + int aTop = aRect->top(); + int aBottom = aRect->bottom(); + + if( append ) + ic->ShiftSelect( aLeft, aBottom, aRight, aTop, getViewPort()->getView(), Standard_False ); + else + ic->Select( aLeft, aBottom, aRight, aTop, getViewPort()->getView(), Standard_False ); + } + } + break; + case Polygon: + { + QPointArray* aPolygon = (QPointArray*)mypSketcher->data(); + if( aPolygon ) + { + int size = aPolygon->size(); + TColgp_Array1OfPnt2d anArray( 1, size ); + + QPointArray::Iterator it = aPolygon->begin(); + QPointArray::Iterator itEnd = aPolygon->end(); + for( int index = 1; it != itEnd; ++it, index++ ) + { + QPoint aPoint = *it; + anArray.SetValue( index, gp_Pnt2d( aPoint.x(), aPoint.y() ) ); + } + + if( append ) + ic->ShiftSelect( anArray, getViewPort()->getView(), Standard_False ); + else + ic->Select( anArray, getViewPort()->getView(), Standard_False ); + } + } + break; + default: + break; + } + + OCCViewer_ViewManager* aViewMgr = ( OCCViewer_ViewManager* )getViewManager(); + aViewMgr->getOCCViewer()->performSelectionChanged(); + } +} diff --git a/src/OCCViewer/OCCViewer_ViewWindow.h b/src/OCCViewer/OCCViewer_ViewWindow.h index d9dafcffe..c3e7ca9f4 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.h +++ b/src/OCCViewer/OCCViewer_ViewWindow.h @@ -20,6 +20,7 @@ #define OCCVIEWER_VIEWWINDOW_H #include "OCCViewer_ViewModel.h" +#include "OCCViewer_ViewSketcher.h" #include "SUIT_ViewWindow.h" @@ -32,6 +33,7 @@ class SUIT_Desktop; class OCCViewer_ViewPort3d; class OCCViewer_ClippingDlg; +class OCCViewer_SetRotationPointDlg; #ifdef WIN32 #pragma warning( disable:4251 ) @@ -42,9 +44,14 @@ class OCCVIEWER_EXPORT OCCViewer_ViewWindow : public SUIT_ViewWindow Q_OBJECT public: - enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW, + enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, + PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW, FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW }; + enum RotationPointType{ GRAVITY, SELECTED }; + + enum SketchingType { NoSketching, Rect, Polygon }; + OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel); virtual ~OCCViewer_ViewWindow() {}; @@ -67,6 +74,11 @@ public: virtual QString getVisualParameters(); virtual void setVisualParameters( const QString& parameters ); + + virtual void initSketchers(); + OCCViewer_ViewSketcher* getSketcher( const int ); + + void activateSketching( int ); public slots: void onFrontView(); @@ -83,20 +95,33 @@ public slots: void activateRotation(); void activatePanning(); void activateGlobalPanning(); + void onSetRotationPoint( bool on ); void onCloneView(); void onClipping( bool on ); void onMemorizeView(); void onRestoreView(); void onTrihedronShow(); void setRestoreFlag(); - + + void activateSetRotationGravity(); + void activateSetRotationSelected( double theX, double theY, double theZ ); + void activateStartPointSelection(); + void updateGravityCoords(); + + virtual void showEvent( QShowEvent * ); + virtual void hideEvent( QHideEvent * ); + signals: void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type); void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type); void cloneView(); + void Show( QShowEvent * ); + void Hide( QHideEvent * ); + protected: - enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, RotationId, + enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, + ChangeRotationPointId, RotationId, FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, CloneId, ClippingId, MemId, RestoreId, TrihedronShowId }; @@ -126,10 +151,27 @@ protected: viewAspect getViewParams() const; + bool computeGravityCenter( double& theX, double& theY, double& theZ ); + + virtual void onSketchingStarted(); + virtual void onSketchingFinished(); + + virtual OCCViewer_ViewSketcher* createSketcher( int ); + + OCCViewer_ViewSketcher* mypSketcher; + QList mySketchers; + + int myCurSketch; + OperationType myOperation; OCCViewer_Viewer* myModel; OCCViewer_ViewPort3d* myViewPort; + RotationPointType myCurrPointType; + RotationPointType myPrevPointType; + gp_Pnt mySelectedPoint; + bool myRotationPointSelection; + int myRestoreFlag; int myStartX; @@ -154,6 +196,9 @@ protected: private: OCCViewer_ClippingDlg* myClippingDlg; QtxAction* myClippingAction; + + OCCViewer_SetRotationPointDlg* mySetRotationPointDlg; + QtxAction* mySetRotationPointAction; }; diff --git a/src/OCCViewer/resources/OCCViewer_images.po b/src/OCCViewer/resources/OCCViewer_images.po index b75530310..4ab78a38d 100755 --- a/src/OCCViewer/resources/OCCViewer_images.po +++ b/src/OCCViewer/resources/OCCViewer_images.po @@ -62,6 +62,9 @@ msgstr "view_reset.png" msgid "ICON_OCCVIEWER_VIEW_RIGHT" msgstr "view_right.png" +msgid "ICON_OCCVIEWER_VIEW_ROTATION_POINT" +msgstr "view_rotation_point.png" + msgid "ICON_OCCVIEWER_VIEW_ROTATE" msgstr "view_rotate.png" diff --git a/src/OCCViewer/resources/OCCViewer_msg_en.po b/src/OCCViewer/resources/OCCViewer_msg_en.po index 08af365ae..71689709e 100755 --- a/src/OCCViewer/resources/OCCViewer_msg_en.po +++ b/src/OCCViewer/resources/OCCViewer_msg_en.po @@ -107,9 +107,45 @@ msgstr "Selection of a new center of the view" msgid "MNU_GLOBALPAN_VIEW" msgstr "Global Panning" +msgid "DSC_CHANGINGROTATIONPOINT_VIEW" +msgstr "Change the point, around which the rotation is performed" + msgid "DSC_ROTATE_VIEW" msgstr "Rotation of the point of view around the scene center" +msgid "OCCViewer_SetRotationPointDlg::CAPTION" +msgstr "Set Rotation Point" + +msgid "OCCViewer_SetRotationPointDlg::USE_BBCENTER" +msgstr "Use Bounding Box Center" + +msgid "OCCViewer_SetRotationPointDlg::LBL_TOORIGIN" +msgstr "Set to Origin" + +msgid "OCCViewer_SetRotationPointDlg::LBL_SELECTPOINT" +msgstr "Select Point from View" + +msgid "OCCViewer_SetRotationPointDlg::LBL_X" +msgstr "X :" + +msgid "OCCViewer_SetRotationPointDlg::LBL_Y" +msgstr "Y :" + +msgid "OCCViewer_SetRotationPointDlg::LBL_Z" +msgstr "Z :" + +msgid "MNU_CHANGINGROTATIONPOINT_VIEW" +msgstr "Change Rotation Point" + +msgid "MNU_ROTATIONPOINTGRAVITY_VIEW" +msgstr "Rotation Point : the gravity center" + +msgid "MNU_ROTATIONPOINT000_VIEW" +msgstr "Rotation Point : (0,0,0)" + +msgid "MNU_ROTATIONPOINTSELECTED_VIEW" +msgstr "Rotation Point : the point selected by the user" + msgid "MNU_ROTATE_VIEW" msgstr "Rotation" @@ -171,7 +207,7 @@ msgid "OCCViewer_Viewer::MEN_CHANGE_BACKGROUD" msgstr "Change background..." msgid "OCCViewer_ViewManager::OCC_VIEW_TITLE" -msgstr "OCC scene:%1 - viewer:%2" +msgstr "OCC scene:%M - viewer:%V" msgid "OCCViewer_CreateRestoreViewDlg::CAPTION" diff --git a/src/OCCViewer/resources/view_rotation_point.png b/src/OCCViewer/resources/view_rotation_point.png new file mode 100755 index 0000000000000000000000000000000000000000..59f59311bc5105d7ba1246598d169259af3bf8c7 GIT binary patch literal 988 zcmbVKZAep57=F(--Q6wI&SXetxo|ZRBqeFhA35F3k<+2(Y*-m&SgGiowxAzl4az@d z31U$pG(tk82#lm)B#D%TP=@%YT^g2w5qS4uAKc!1r=wr}=x{#X^Soc@dEe7-uQ`;) zZesx;&01xy!!uJ{j2!n#$I3xGR9#g^djK}6#YN!O?JNK}*sB{Xs1yY7dc8wKLxLc9 z&J6&hBM3m&(r4&uH6euZS@E4m;yOJVP+spCWH1hnEU3bXmN;GI2JmkFrgRFzFS^Q$ zUeSxq+IB~tSMnNhZFh>s3gXH%(dgI;+eRaSicwiYu%xciNEi{kf-GMO50qb^{4>k` z+~pDjrr;dUX+(o6#1X8#yGxRTpYF|JUW^=BE24Y|$f<<8+6go|!x=1n8iI~iB|Jsrn}fiwdk zol(xF@9Ou2#jC%}!_e6K;S@c{=tg`3gd#{Ip*H@-fD-aZjqCiKVf9T=z8ov%k_MzKZmW|1GBItRTxL^w>liGxU5ZNybM(LQ0bevSBqo z8V8rQNV30z4aK5y4^RMP0bo#1%q5D0?Lfimx6v4uLV*SnUol~FEHZ;;yrj76YU=T$ z3h;AcOFaVJR #include @@ -113,7 +114,7 @@ public: ObjPtr nullSrc() const; ItemPtr nullTrg() const; ItemPtr createItem( const ObjPtr&, const ItemPtr&, const ItemPtr&, const bool ) const; - void updateItem( const ItemPtr& ) const; + void updateItem( const ObjPtr& , const ItemPtr& ) const; void deleteItemWithChildren( const ItemPtr& ) const; void children( const ObjPtr&, QValueList& ) const; void children( const ItemPtr&, QValueList& ) const; @@ -171,13 +172,17 @@ bool OB_BrowserSync::needUpdate( const ItemPtr& item ) const Updates item \param p - item */ -void OB_BrowserSync::updateItem( const ItemPtr& p ) const +void OB_BrowserSync::updateItem( const ObjPtr& o, const ItemPtr& p ) const { if ( p && needUpdate( p ) ) { // printf( "--- needUpdate for %s = true ---\n", p->text( 0 ).latin1() ); myBrowser->updateText( p ); p->update(); } + if( o && myBrowser->getUpdater() ) + { + myBrowser->getUpdater()->update( o, p ); + } } /*! @@ -288,6 +293,7 @@ OB_Browser::OB_Browser( QWidget* parent, SUIT_DataObject* root ) myRoot( 0 ), myTooltip( 0 ), +myUpdater( 0 ), myAutoOpenLevel( 0 ), myAutoUpdate( false ), myAutoDelObjs( false ), @@ -301,8 +307,12 @@ myRootDecorated( true ) myView->installEventFilter( this ); myView->viewport()->installEventFilter( this ); + myFindDlg = new OB_FindDlg( this ); + myFindDlg->hide(); + QVBoxLayout* main = new QVBoxLayout( this ); - main->addWidget( myView ); + main->addWidget( myView, 1 ); + main->addWidget( myFindDlg, 0 ); myShowToolTips = true; myTooltip = new ToolTip( this, myView->viewport() ); @@ -325,6 +335,7 @@ OB_Browser::~OB_Browser() { myItems.clear(); delete myTooltip; + setUpdater( 0 ); } /*! @@ -366,8 +377,25 @@ void OB_Browser::setAutoOpenLevel( const int level ) return; myAutoOpenLevel = level; +} - autoOpenBranches(); +/*! + Opens branches from 1 to \alevels. If parameter value negative then autoOpenLevel() value will be used. + \sa autoOpenLevel() +*/ +void OB_Browser::openLevels( const int levels ) +{ + int level = levels < 0 ? autoOpenLevel() : levels; + QListView* lv = listView(); + if ( !lv || level < 1 ) + return; + + QListViewItem* item = lv->firstChild(); + while ( item ) + { + openBranch( item, level ); + item = item->nextSibling(); + } } /*! @@ -421,6 +449,24 @@ void OB_Browser::setAutoDeleteObjects( const bool on ) myAutoDelObjs = on; } +/*! + \return updater of browser +*/ +OB_Updater* OB_Browser::getUpdater() const +{ + return myUpdater; +} + +/*! + \sets new updater of browser +*/ +void OB_Browser::setUpdater( OB_Updater* theUpdate ) +{ + if( myUpdater ) + delete myUpdater; + myUpdater = theUpdate; +} + /*! \return root SUIT object of browser */ @@ -892,7 +938,7 @@ void OB_Browser::updateTree( SUIT_DataObject* obj, const bool autoOpen ) restoreState( selObjs, openObjs, curObj, selKeys, openKeys, curKey ); - if( autoOpen ) + if ( autoOpen ) autoOpenBranches(); setModified(); @@ -939,8 +985,6 @@ void OB_Browser::replaceTree( SUIT_DataObject* src, SUIT_DataObject* trg ) restoreState( selObjs, openObjs, curObj, selKeys, openKeys, curKey ); - autoOpenBranches(); - setModified(); if ( selNum != numberOfSelected() ) @@ -1574,17 +1618,7 @@ void OB_Browser::removeObject( SUIT_DataObject* obj, const bool autoUpd ) */ void OB_Browser::autoOpenBranches() { - int level = autoOpenLevel(); - QListView* lv = listView(); - if ( !lv || level < 1 ) - return; - - QListViewItem* item = lv->firstChild(); - while ( item ) - { - openBranch( item, level ); - item = item->nextSibling(); - } + openLevels(); } /*! @@ -1622,3 +1656,17 @@ void OB_Browser::setModified() myModifiedTime = clock(); } +OB_ObjSearch* OB_Browser::getSearch() const +{ + return myFindDlg->getSearch(); +} + +void OB_Browser::setSearch( OB_ObjSearch* s ) +{ + myFindDlg->setSearch( s ); +} + +void OB_Browser::enableSearch( const bool on ) +{ + myFindDlg->setShown( on ); +} diff --git a/src/ObjBrowser/OB_Browser.h b/src/ObjBrowser/OB_Browser.h index 6299afd2d..e7524fb68 100755 --- a/src/ObjBrowser/OB_Browser.h +++ b/src/ObjBrowser/OB_Browser.h @@ -38,6 +38,16 @@ class QToolTip; class OB_Filter; class OB_ListView; class OB_ListItem; +class OB_ObjSearch; +class OB_FindDlg; + +class OB_Updater +{ +public: + OB_Updater(){}; + virtual ~OB_Updater(){}; + virtual void update( SUIT_DataObject* theObj, OB_ListItem* theLI ) = 0; +}; /*! \class OB_Browser @@ -77,7 +87,7 @@ public: bool isAutoDeleteObjects() const; virtual void setAutoDeleteObjects( const bool ); - virtual void updateTree( SUIT_DataObject* = 0, const bool autoOpen = true ); + virtual void updateTree( SUIT_DataObject* = 0, const bool = false ); virtual void replaceTree( SUIT_DataObject*, SUIT_DataObject* ); bool isShowToolTips(); @@ -95,6 +105,7 @@ public: int autoOpenLevel() const; void setAutoOpenLevel( const int ); + void openLevels( const int = -1 ); virtual int addColumn( const QString&, const int id = -1, const int width = -1 ); virtual int addColumn( const QIconSet&, const QString&, const int id = -1, const int width = -1 ); @@ -126,6 +137,13 @@ public: void setModified(); unsigned long getModifiedTime() { return myModifiedTime; } + + OB_Updater* getUpdater() const; + virtual void setUpdater( OB_Updater* theUpdate = 0 ); + + OB_ObjSearch* getSearch() const; + void setSearch( OB_ObjSearch* ); + void enableSearch( const bool ); signals: void selectionChanged(); @@ -188,12 +206,14 @@ private: SUIT_DataObject* myRoot; ItemMap myItems; QToolTip* myTooltip; + OB_Updater* myUpdater; QMap myColumnIds; bool myAutoUpdate; bool myAutoDelObjs; bool myShowToolTips; bool myRootDecorated; int myAutoOpenLevel; + OB_FindDlg *myFindDlg; friend class OB_Browser::ToolTip; diff --git a/src/ObjBrowser/OB_FindDlg.cxx b/src/ObjBrowser/OB_FindDlg.cxx new file mode 100644 index 000000000..07ed30dd5 --- /dev/null +++ b/src/ObjBrowser/OB_FindDlg.cxx @@ -0,0 +1,92 @@ + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +OB_FindDlg::OB_FindDlg( QWidget* parent ) +: QGroupBox( 1, Qt::Horizontal, tr( "FIND" ), parent ), + mySearch( 0 ) +{ + QFrame *btns = new QFrame( this ), *checks = new QFrame( this ); + + myData = new QLineEdit( btns ); + myToFirst = new QPushButton( "|<<", btns ); + myToLast = new QPushButton( ">>|", btns ); + myNext = new QPushButton( ">>", btns ); + myPrev = new QPushButton( "<<", btns ); + myClose = new QPushButton( tr( "CLOSE" ), checks ); + myIsCaseSens = new QCheckBox( tr( "CASE_SENSITIVE" ), checks ); + myIsRegExp = new QCheckBox( tr( "IS_REG_EXP" ), checks ); + int w = 30, h = myToFirst->height(); + myToFirst->setMaximumSize( w, h ); + myToLast->setMaximumSize( w, h ); + myNext->setMaximumSize( w, h ); + myPrev->setMaximumSize( w, h ); + + QHBoxLayout* l = new QHBoxLayout( btns, 5, 5 ); + l->addWidget( myToFirst, 0 ); + l->addWidget( myPrev, 0 ); + l->addWidget( myData, 1 ); + l->addWidget( myNext, 0 ); + l->addWidget( myToLast, 0 ); + + QHBoxLayout* c = new QHBoxLayout( checks, 5, 5 ); + c->addWidget( myIsCaseSens, 0 ); + c->addWidget( myIsRegExp, 0 ); + c->addWidget( myClose, 0 ); + + connect( myToFirst, SIGNAL( clicked() ), this, SLOT( onFind() ) ); + connect( myToLast, SIGNAL( clicked() ), this, SLOT( onFind() ) ); + connect( myNext, SIGNAL( clicked() ), this, SLOT( onFind() ) ); + connect( myPrev, SIGNAL( clicked() ), this, SLOT( onFind() ) ); + connect( myClose, SIGNAL( clicked() ), this, SLOT( onClose() ) ); +} + +OB_FindDlg::~OB_FindDlg() +{ +} + +void OB_FindDlg::onClose() +{ + hide(); +} + +void OB_FindDlg::onFind() +{ + OB_ListItem* it = 0; + mySearch->setPattern( myData->text(), myIsRegExp->isChecked(), myIsCaseSens->isChecked() ); + if( sender()==myToFirst ) + it = mySearch->findFirst(); + else if( sender()==myNext ) + it = mySearch->findNext(); + else if( sender()==myPrev ) + it = mySearch->findPrev(); + else if( sender()==myToLast ) + it = mySearch->findLast(); + if( it ) + { + mySearch->browser()->setSelected( it->dataObject(), false ); + mySearch->browser()->listView()->ensureItemVisible( it ); + } + else + SUIT_MessageBox::info1( this, tr( "FIND" ), tr( "NOT_FOUND" ), tr( "OK" ) ); +} + +OB_ObjSearch* OB_FindDlg::getSearch() const +{ + return mySearch; +} + +void OB_FindDlg::setSearch( OB_ObjSearch* s ) +{ + mySearch = s; +} diff --git a/src/ObjBrowser/OB_FindDlg.h b/src/ObjBrowser/OB_FindDlg.h new file mode 100644 index 000000000..4c8230d81 --- /dev/null +++ b/src/ObjBrowser/OB_FindDlg.h @@ -0,0 +1,34 @@ + +#ifndef OBJECT_BROWSER_FIND_DIALOG_HEADER +#define OBJECT_BROWSER_FIND_DIALOG_HEADER + +#include + +class OB_ObjSearch; +class QLineEdit; +class QPushButton; +class QCheckBox; + +class OB_FindDlg : public QGroupBox +{ + Q_OBJECT + +public: + OB_FindDlg( QWidget* = 0 ); + virtual ~OB_FindDlg(); + + OB_ObjSearch* getSearch() const; + void setSearch( OB_ObjSearch* ); + +private slots: + void onFind(); + void onClose(); + +private: + QLineEdit* myData; + QPushButton *myToFirst, *myToLast, *myNext, *myPrev, *myClose; + QCheckBox *myIsCaseSens, *myIsRegExp; + OB_ObjSearch* mySearch; +}; + +#endif diff --git a/src/ObjBrowser/OB_ListItem.cxx b/src/ObjBrowser/OB_ListItem.cxx index b91b92e2d..f5fb6cb11 100755 --- a/src/ObjBrowser/OB_ListItem.cxx +++ b/src/ObjBrowser/OB_ListItem.cxx @@ -28,6 +28,10 @@ #include using namespace std; +#ifdef WNT +#define min(a, b) (((a) < (b)) ? (a) : (b)) +#endif + /*! Constructor */ @@ -124,6 +128,8 @@ void ListItemF::update() else myT->setPixmap( 0, p ); } + else if ( p.isNull() ) + myT->setPixmap( 0, p ); myT->setDragEnabled( obj->isDragable() ); myT->setDropEnabled( true ); diff --git a/src/ObjBrowser/OB_ListView.cxx b/src/ObjBrowser/OB_ListView.cxx index ebcd5c879..728e12c27 100755 --- a/src/ObjBrowser/OB_ListView.cxx +++ b/src/ObjBrowser/OB_ListView.cxx @@ -222,9 +222,10 @@ bool OB_ListView::isDropAccepted( QListViewItem* drag, QListViewItem* drop ) con void OB_ListView::setColumnWidth( int col, int width ) { int max = columnMaxWidth( col ); - if( max>0 && width>max ) + if ( max>0 && width>max ) width = max; - QListView::setColumnWidth( col, width ); + + QtxListView::setColumnWidth( col, width ); } /*! diff --git a/src/ObjBrowser/OB_ObjSearch.cxx b/src/ObjBrowser/OB_ObjSearch.cxx new file mode 100644 index 000000000..84d9c2c61 --- /dev/null +++ b/src/ObjBrowser/OB_ObjSearch.cxx @@ -0,0 +1,107 @@ + +#include +#include +#include + +#include + +OB_ObjSearch::OB_ObjSearch( OB_Browser* b ) +: myBrowser( b ) +{ +} + +OB_ObjSearch::~OB_ObjSearch() +{ +} + +OB_ListItem* OB_ObjSearch::tail( const bool first ) const +{ + QListView* lv = myBrowser->listView(); + return dynamic_cast( first ? lv->firstChild() : lv->lastItem() ); +} + +OB_ListItem* OB_ObjSearch::next( OB_ListItem* i, const bool forward ) const +{ + QListViewItemIterator it( i ); + if( forward ) + it++; + else + it--; + return dynamic_cast( *it ); +} + +SUIT_DataObject* OB_ObjSearch::data( OB_ListItem* i ) const +{ + return i ? i->dataObject() : 0; +} + +void OB_ObjSearch::setPattern( const QString& data, const bool is_reg_exp, const bool is_case_sens ) +{ + myData = data; + myIsRegExp = is_reg_exp; + myIsCaseSens = is_case_sens; +} + +bool OB_ObjSearch::matches( SUIT_DataObject* obj ) const +{ + if( !obj ) + return false; + + QString txt = obj->name(); + if( myIsRegExp ) + { + QRegExp re( myData ); + re.setCaseSensitive( myIsCaseSens ); + return txt.contains( re ); + } + else + return txt.contains( myData, myIsCaseSens ); +} + +OB_Browser* OB_ObjSearch::browser() const +{ + return myBrowser; +} + +OB_ListItem* OB_ObjSearch::findFirst() const +{ + return find( tail( true ), true, false, false ); +} + +OB_ListItem* OB_ObjSearch::findLast() const +{ + return find( tail( false ), false, false, false ); +} + +OB_ListItem* OB_ObjSearch::findNext() const +{ + return find( current(), true, true, true ); +} + +OB_ListItem* OB_ObjSearch::findPrev() const +{ + return find( current(), false, true, true ); +} + +OB_ListItem* OB_ObjSearch::find( OB_ListItem* i, const bool forward, + const bool ignore_first, const bool cyclic ) const +{ + if( !i ) + i = tail( forward ); + + if( ignore_first ) + i = next( i, forward ); + + while( i && !matches( data( i ) ) ) + i = next( i, forward ); + + if( !i && cyclic ) + return find( tail( forward ), forward, false, false ); + + return i; +} + +OB_ListItem* OB_ObjSearch::current() const +{ + return dynamic_cast( myBrowser->listView()->currentItem() ); +} diff --git a/src/ObjBrowser/OB_ObjSearch.h b/src/ObjBrowser/OB_ObjSearch.h new file mode 100644 index 000000000..6106d9fef --- /dev/null +++ b/src/ObjBrowser/OB_ObjSearch.h @@ -0,0 +1,39 @@ + +#ifndef OBJECT_BROWSER_OBJECT_SEARCH_HEADER +#define OBJECT_BROWSER_OBJECT_SEARCH_HEADER + +#include + +class OB_ListItem; +class OB_Browser; +class SUIT_DataObject; + +class OB_ObjSearch +{ +public: + OB_ObjSearch( OB_Browser* ); + virtual ~OB_ObjSearch(); + + void setPattern( const QString&, const bool, const bool ); + OB_Browser* browser() const; + + OB_ListItem* findFirst() const; + OB_ListItem* findLast() const; + OB_ListItem* findNext() const; + OB_ListItem* findPrev() const; + +protected: + virtual OB_ListItem* current() const; + virtual OB_ListItem* tail( const bool ) const; + virtual OB_ListItem* next( OB_ListItem*, const bool ) const; + virtual SUIT_DataObject* data( OB_ListItem* ) const; + virtual bool matches( SUIT_DataObject* ) const; + OB_ListItem* find( OB_ListItem*, const bool, const bool, const bool ) const; + +private: + OB_Browser* myBrowser; + QString myData; + bool myIsRegExp, myIsCaseSens; +}; + +#endif diff --git a/src/ObjBrowser/resources/OB_msg_en.po b/src/ObjBrowser/resources/OB_msg_en.po index 4b18212e9..2209af5a6 100755 --- a/src/ObjBrowser/resources/OB_msg_en.po +++ b/src/ObjBrowser/resources/OB_msg_en.po @@ -30,3 +30,17 @@ msgstr "" msgid "MEN_EXPAND_ALL" msgstr "Expand All" +msgid "OB_FindDlg::FIND" +msgstr "Find" + +msgid "OB_FindDlg::CLOSE" +msgstr "Close" + +msgid "OB_FindDlg::CASE_SENSITIVE" +msgstr "Case sensitive" + +msgid "OB_FindDlg::IS_REG_EXP" +msgstr "Regular expression" + +msgid "OB_FindDlg::NOT_FOUND" +msgstr "There is no object is found" diff --git a/src/Plot2d/Makefile.am b/src/Plot2d/Makefile.am new file mode 100755 index 000000000..b2fd5cfbf --- /dev/null +++ b/src/Plot2d/Makefile.am @@ -0,0 +1,92 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : Plot2d +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES= libPlot2d.la + +# header files +salomeinclude_HEADERS= \ + Plot2d.h \ + Plot2d_Curve.h \ + Plot2d_FitDataDlg.h \ + Plot2d_Prs.h \ + Plot2d_SetupViewDlg.h \ + Plot2d_ViewFrame.h \ + Plot2d_ViewManager.h \ + Plot2d_ViewModel.h \ + Plot2d_ViewWindow.h \ + Plot2d_SetupCurveDlg.h \ + Plot2d_ToolTip.h + +dist_libPlot2d_la_SOURCES= \ + Plot2d_Curve.cxx \ + Plot2d_FitDataDlg.cxx \ + Plot2d_Prs.cxx \ + Plot2d_SetupViewDlg.cxx \ + Plot2d_ViewFrame.cxx \ + Plot2d_ViewManager.cxx \ + Plot2d_ViewModel.cxx \ + Plot2d_ViewWindow.cxx \ + Plot2d_SetupCurveDlg.cxx \ + Plot2d_ToolTip.cxx + +MOC_FILES = \ + Plot2d_FitDataDlg_moc.cxx \ + Plot2d_SetupViewDlg_moc.cxx \ + Plot2d_ViewFrame_moc.cxx \ + Plot2d_ViewManager_moc.cxx \ + Plot2d_ViewModel_moc.cxx \ + Plot2d_ViewWindow_moc.cxx \ + Plot2d_SetupCurveDlg_moc.cxx \ + Plot2d_ToolTip_moc.cxx +nodist_libPlot2d_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA = \ + resources/plot2d_clone.png \ + resources/plot2d_camera_dump.png \ + resources/plot2d_fitall.png \ + resources/plot2d_fitarea.png \ + resources/plot2d_glpan.png \ + resources/plot2d_legend.png \ + resources/plot2d_linear.png \ + resources/plot2d_linear_y.png \ + resources/plot2d_lines.png \ + resources/plot2d_log.png \ + resources/plot2d_log_y.png \ + resources/plot2d_pan.png \ + resources/plot2d_points.png \ + resources/plot2d_settings.png \ + resources/plot2d_splines.png \ + resources/plot2d_zoom.png + +nodist_salomeres_DATA= \ + Plot2d_images.qm \ + Plot2d_msg_en.qm + +libPlot2d_la_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(QWT_INCLUDES) \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT + +libPlot2d_la_LDFLAGS=$(QWT_LIBS) $(QT_MT_LIBS) ../SUIT/libsuit.la + + diff --git a/src/Plot2d/Makefile.in b/src/Plot2d/Makefile.in deleted file mode 100755 index 647c1b84d..000000000 --- a/src/Plot2d/Makefile.in +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : Plot2d -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= Plot2d.h \ - Plot2d_Curve.h \ - Plot2d_FitDataDlg.h \ - Plot2d_Prs.h \ - Plot2d_SetupViewDlg.h \ - Plot2d_ViewFrame.h \ - Plot2d_ViewManager.h \ - Plot2d_ViewModel.h \ - Plot2d_ViewWindow.h \ - Plot2d_SetupCurveDlg.h - -# .po files to transform in .qm -PO_FILES = Plot2d_images.po \ - Plot2d_msg_en.po - -# Libraries targets -LIB = libPlot2d.la -LIB_SRC= Plot2d_Curve.cxx \ - Plot2d_FitDataDlg.cxx \ - Plot2d_Prs.cxx \ - Plot2d_SetupViewDlg.cxx \ - Plot2d_ViewFrame.cxx \ - Plot2d_ViewManager.cxx \ - Plot2d_ViewModel.cxx \ - Plot2d_ViewWindow.cxx \ - Plot2d_SetupCurveDlg.cxx - -LIB_MOC = \ - Plot2d_FitDataDlg.h \ - Plot2d_SetupViewDlg.h \ - Plot2d_ViewFrame.h \ - Plot2d_ViewManager.h \ - Plot2d_ViewModel.h \ - Plot2d_ViewWindow.h \ - Plot2d_SetupCurveDlg.h - -RESOURCES_FILES = \ -plot2d_clone.png \ -plot2d_camera_dump.png \ -plot2d_fitall.png \ -plot2d_fitarea.png \ -plot2d_glpan.png \ -plot2d_legend.png \ -plot2d_linear.png \ -plot2d_linear_y.png \ -plot2d_lines.png \ -plot2d_log.png \ -plot2d_log_y.png \ -plot2d_pan.png \ -plot2d_points.png \ -plot2d_settings.png \ -plot2d_splines.png \ -plot2d_zoom.png - -CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(QWT_INCLUDES) - -LDFLAGS+=$(QWT_LIBS) $(QT_MT_LIBS) -lsuit - -@CONCLUDE@ - - diff --git a/src/Plot2d/Plot2d_Curve.cxx b/src/Plot2d/Plot2d_Curve.cxx index c86db8f32..bec633fdc 100755 --- a/src/Plot2d/Plot2d_Curve.cxx +++ b/src/Plot2d/Plot2d_Curve.cxx @@ -147,22 +147,24 @@ QString Plot2d_Curve::getVerUnits() const /*! Adds one point for curve. */ -void Plot2d_Curve::addPoint(double theX, double theY) +void Plot2d_Curve::addPoint(double theX, double theY, const QString& txt ) { Plot2d_Point aPoint; aPoint.x = theX; aPoint.y = theY; + aPoint.text = txt; myPoints.append(aPoint); } /*! Insert one point for curve on some position. */ -void Plot2d_Curve::insertPoint(int thePos, double theX, double theY) +void Plot2d_Curve::insertPoint(int thePos, double theX, double theY, const QString& txt) { Plot2d_Point aPoint; aPoint.x = theX; aPoint.y = theY; + aPoint.text = txt; QValueList::iterator aIt; int aCurrent = 0; @@ -211,10 +213,12 @@ pointList Plot2d_Curve::getPointList() const /*! Sets curve's data. */ -void Plot2d_Curve::setData( const double* hData, const double* vData, long size ) +void Plot2d_Curve::setData( const double* hData, const double* vData, long size, const QStringList& lst ) { clearAllPoints(); - for(long i = 0; i < size; i++) addPoint(hData[i], vData[i]); + QStringList::const_iterator anIt = lst.begin(), aLast = lst.end(); + for( long i = 0; i < size; i++, anIt++ ) + addPoint( hData[i], vData[i], anIt==aLast ? QString::null : *anIt ); } /*! @@ -364,7 +368,7 @@ double Plot2d_Curve::getMinX() const { QValueList::const_iterator aIt; double aMinX = 1e150; - int aCurrent = 0; + //int aCurrent = 0; for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) { if ( (*aIt).x < aMinX ) aMinX = (*aIt).x; @@ -379,10 +383,35 @@ double Plot2d_Curve::getMinY() const { QValueList::const_iterator aIt; double aMinY = 1e150; - int aCurrent = 0; + //int aCurrent = 0; for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) { if ( (*aIt).y < aMinY ) aMinY = (*aIt).y; } return aMinY; } + +/*! + Changes text assigned to point of curve + \param ind -- index of point + \param txt -- new text +*/ +void Plot2d_Curve::setText( const int ind, const QString& txt ) +{ + if( ind<0 || ind>=myPoints.count() ) + return; + + myPoints[ind].text = txt; +} + +/*! + \return text assigned to point + \param ind -- index of point +*/ +QString Plot2d_Curve::text( const int ind ) const +{ + if( ind<0 || ind>=myPoints.count() ) + return QString::null; + else + return myPoints[ind].text; +} diff --git a/src/Plot2d/Plot2d_Curve.h b/src/Plot2d/Plot2d_Curve.h index 1fa244aa4..bd3be97bd 100755 --- a/src/Plot2d/Plot2d_Curve.h +++ b/src/Plot2d/Plot2d_Curve.h @@ -30,6 +30,7 @@ typedef struct { double x; double y; + QString text; } Plot2d_Point; typedef QValueList pointList; @@ -57,16 +58,19 @@ public: QString getHorUnits() const; void setVerUnits( const QString& units ); QString getVerUnits() const; - void addPoint(double theX, double theY); - void insertPoint(int thePos, double theX, double theY); + void addPoint(double theX, double theY, const QString& = QString::null ); + void insertPoint(int thePos, double theX, double theY, const QString& = QString::null ); void deletePoint(int thePos); void clearAllPoints(); pointList getPointList() const; - void setData( const double* hData, const double* vData, long size ); + void setData( const double* hData, const double* vData, long size, const QStringList& = QStringList() ); double* horData() const; double* verData() const; + void setText( const int, const QString& ); + QString text( const int ) const; + int nbPoints() const; bool isEmpty() const; diff --git a/src/Plot2d/Plot2d_SetupCurveDlg.h b/src/Plot2d/Plot2d_SetupCurveDlg.h index b36d11c5f..84d530aa6 100644 --- a/src/Plot2d/Plot2d_SetupCurveDlg.h +++ b/src/Plot2d/Plot2d_SetupCurveDlg.h @@ -25,6 +25,8 @@ #ifndef Plot2d_SetupCurveDlg_H #define Plot2d_SetupCurveDlg_H +#include "Plot2d.h" + #include /*! @@ -37,7 +39,7 @@ class QComboBox; class QSpinBox; class QToolButton; -class Plot2d_SetupCurveDlg : public QDialog +class PLOT2D_EXPORT Plot2d_SetupCurveDlg : public QDialog { Q_OBJECT diff --git a/src/Plot2d/Plot2d_SetupViewDlg.cxx b/src/Plot2d/Plot2d_SetupViewDlg.cxx index 9f1b2f03a..e8c8b54c1 100755 --- a/src/Plot2d/Plot2d_SetupViewDlg.cxx +++ b/src/Plot2d/Plot2d_SetupViewDlg.cxx @@ -23,6 +23,9 @@ #include "Plot2d_SetupViewDlg.h" +#include "SUIT_Session.h" +#include "SUIT_Application.h" + #include #include #include @@ -247,16 +250,20 @@ Plot2d_SetupViewDlg::Plot2d_SetupViewDlg( QWidget* parent, bool showDefCheck, bo aTabWidget->setCurrentPage( 0 ); /* "Set as default" check box */ myDefCheck = new QCheckBox( tr( "PLOT2D_SET_AS_DEFAULT_CHECK" ), this ); - /* OK/Cancel buttons */ + + /* OK/Cancel/Help buttons */ myOkBtn = new QPushButton( tr( "BUT_OK" ), this ); myOkBtn->setAutoDefault( TRUE ); myOkBtn->setDefault( TRUE ); myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this ); myCancelBtn->setAutoDefault( TRUE ); + myHelpBtn = new QPushButton( tr( "BUT_HELP" ), this ); + myHelpBtn->setAutoDefault( TRUE ); QHBoxLayout* btnLayout = new QHBoxLayout; btnLayout->addWidget( myOkBtn ); btnLayout->addStretch(); btnLayout->addWidget( myCancelBtn ); + btnLayout->addWidget( myHelpBtn ); // layout widgets topLayout->addWidget( myTitleCheck, 0, 0 ); @@ -293,6 +300,7 @@ Plot2d_SetupViewDlg::Plot2d_SetupViewDlg( QWidget* parent, bool showDefCheck, bo connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) ); connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); + connect( myHelpBtn, SIGNAL( clicked() ), this, SLOT( onHelp() ) ); if (mySecondAxisY) { connect( myTitleY2Check, SIGNAL( clicked() ), this, SLOT( onY2TitleChecked() ) ); @@ -681,3 +689,13 @@ bool Plot2d_SetupViewDlg::isSetAsDefault() { return myDefCheck->isChecked(); } + +/*! + Slot, called when user clicks "Help" button +*/ +void Plot2d_SetupViewDlg::onHelp() +{ + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if (app) + app->onHelpContextModule("GUI", "plot2d_viewer_page.html#settings"); +} diff --git a/src/Plot2d/Plot2d_SetupViewDlg.h b/src/Plot2d/Plot2d_SetupViewDlg.h index 37db3d641..d04623a8b 100755 --- a/src/Plot2d/Plot2d_SetupViewDlg.h +++ b/src/Plot2d/Plot2d_SetupViewDlg.h @@ -84,6 +84,7 @@ protected slots: void onXGridMinorChecked(); void onYGridMinorChecked(); void onY2GridMinorChecked(); + void onHelp(); private: QCheckBox* myTitleCheck; @@ -118,6 +119,7 @@ private: QPushButton* myOkBtn; QPushButton* myCancelBtn; + QPushButton* myHelpBtn; bool mySecondAxisY; }; diff --git a/src/Plot2d/Plot2d_ToolTip.cxx b/src/Plot2d/Plot2d_ToolTip.cxx new file mode 100644 index 000000000..3cdb1ba8a --- /dev/null +++ b/src/Plot2d/Plot2d_ToolTip.cxx @@ -0,0 +1,93 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File: Plot2d_ToolTip.cxx +// Author: Alexandre SOLOVYOV + +#include +#include +#include + +#include + +#include +#include + +const int maxDist = 3, tip_margin = 10; + + +Plot2d_ToolTip::Plot2d_ToolTip( Plot2d_ViewFrame* frame, Plot2d_Plot2d* plot ) +: QtxToolTip( plot->canvas() ), + myFrame( frame ), + myPlot( plot ) +{ + connect( this, SIGNAL( maybeTip( QPoint, QString&, QFont&, QRect&, QRect& ) ), + this, SLOT( onToolTip( QPoint, QString&, QFont&, QRect&, QRect& ) ) ); +} + +Plot2d_ToolTip::~Plot2d_ToolTip() +{ +} + +void Plot2d_ToolTip::onToolTip( QPoint p, QString& str, QFont& f, QRect& txtRect, QRect& rect ) +{ + int curInd, pInd, dist; + double x, y; + curInd = myPlot->closestCurve( p.x(), p.y(), dist, x, y, pInd ); + + if( dist>maxDist ) + return; + + Plot2d_Curve* c = myFrame->getCurves().find( curInd ); + if( !c ) + return; + + str = c->text( pInd ); + if( !str ) + return; + + QFontMetrics m( f ); + QStringList lst = QStringList::split( "\n", str ); + QStringList::const_iterator anIt = lst.begin(), aLast = lst.end(); + int w = 0, h = 0; + for( ; anIt!=aLast; anIt++ ) + { + if( h>0 ) + h+= m.lineSpacing(); + + QRect r = m.boundingRect( *anIt ); + if( r.width()>w ) + w = r.width(); + h+=r.height(); + } + + txtRect = QRect( p.x(), p.y(), w, h ); + rect = txtRect; +} + +bool Plot2d_ToolTip::eventFilter( QObject* o, QEvent* e ) +{ + bool res = QtxToolTip::eventFilter( o, e ); + if( e && e->type() == QEvent::MouseMove ) + { + QMouseEvent* me = ( QMouseEvent* )e; + if( me->state()==0 ) + return true; + } + return res; +} diff --git a/src/Plot2d/Plot2d_ToolTip.h b/src/Plot2d/Plot2d_ToolTip.h new file mode 100644 index 000000000..a26c46a83 --- /dev/null +++ b/src/Plot2d/Plot2d_ToolTip.h @@ -0,0 +1,50 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File: Plot2d_ToolTip.h +// Author: Alexandre SOLOVYOV + +#ifndef PLOT2D_TOOLTIP_H +#define PLOT2D_TOOLTIP_H + +#include +#include + +class Plot2d_ViewFrame; +class Plot2d_Plot2d; + +class PLOT2D_EXPORT Plot2d_ToolTip : public QtxToolTip +{ + Q_OBJECT + +public: + Plot2d_ToolTip( Plot2d_ViewFrame*, Plot2d_Plot2d* ); + virtual ~Plot2d_ToolTip(); + +public slots: + void onToolTip( QPoint, QString&, QFont&, QRect&, QRect& ); + +protected: + virtual bool eventFilter( QObject*, QEvent* ); + +private: + Plot2d_ViewFrame* myFrame; + Plot2d_Plot2d* myPlot; +}; + +#endif diff --git a/src/Plot2d/Plot2d_ViewFrame.cxx b/src/Plot2d/Plot2d_ViewFrame.cxx index f7b862f7b..55b805bfc 100755 --- a/src/Plot2d/Plot2d_ViewFrame.cxx +++ b/src/Plot2d/Plot2d_ViewFrame.cxx @@ -23,6 +23,7 @@ #include "Plot2d_FitDataDlg.h" #include "Plot2d_ViewWindow.h" #include "Plot2d_SetupViewDlg.h" +#include "Plot2d_ToolTip.h" #include "SUIT_Tools.h" #include "SUIT_Session.h" @@ -40,6 +41,7 @@ #include #include #include +#include #include #include @@ -53,6 +55,8 @@ #define DEFAULT_MARKER_SIZE 9 // default marker size #define MIN_RECT_SIZE 11 // min sensibility area size +#define FITALL_EVENT ( QEvent::User + 9999 ) + const char* imageZoomCursor[] = { "32 32 3 1", ". c None", @@ -152,6 +156,8 @@ Plot2d_ViewFrame::Plot2d_ViewFrame( QWidget* parent, const QString& title ) /* Plot 2d View */ QVBoxLayout* aLayout = new QVBoxLayout( this ); myPlot = new Plot2d_Plot2d( this ); + new Plot2d_ToolTip( this, myPlot ); + aLayout->addWidget( myPlot ); // createActions(); @@ -784,6 +790,13 @@ void Plot2d_ViewFrame::updateLegend( const Plot2d_Prs* prs ) */ void Plot2d_ViewFrame::fitAll() { + // Postpone fitAll operation until QwtPlot geometry + // has been fully defined + if ( !myPlot->polished() ){ + QApplication::postEvent( this, new QCustomEvent( FITALL_EVENT ) ); + return; + } + QwtDiMap xMap1 = myPlot->canvasMap( QwtPlot::xBottom ); myPlot->setAxisAutoScale( QwtPlot::yLeft ); @@ -1414,6 +1427,7 @@ void Plot2d_ViewFrame::plotMousePressed(const QMouseEvent& me ) parent()->eventFilter(this, aEvent); } } + setFocus(); } /*! Slot, called when user moves mouse @@ -1425,41 +1439,11 @@ void Plot2d_ViewFrame::plotMouseMoved( const QMouseEvent& me ) if ( myOperation != NoOpId) { if ( myOperation == ZoomId ) { - QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom ); - QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft ); - - myPlot->setAxisScale( QwtPlot::yLeft, - myPlot->invTransform( QwtPlot::yLeft, yMap.i1() ), - myPlot->invTransform( QwtPlot::yLeft, yMap.i2() + dy ) ); - myPlot->setAxisScale( QwtPlot::xBottom, - myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ), - myPlot->invTransform( QwtPlot::xBottom, xMap.i2() - dx ) ); - if (mySecondY) { - QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight ); - myPlot->setAxisScale( QwtPlot::yRight, - myPlot->invTransform( QwtPlot::yRight, y2Map.i1() ), - myPlot->invTransform( QwtPlot::yRight, y2Map.i2() + dy ) ); - } - myPlot->replot(); + this->incrementalZoom( dx, dy ); myPnt = me.pos(); } else if ( myOperation == PanId ) { - QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom ); - QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft ); - - myPlot->setAxisScale( QwtPlot::yLeft, - myPlot->invTransform( QwtPlot::yLeft, yMap.i1()-dy ), - myPlot->invTransform( QwtPlot::yLeft, yMap.i2()-dy ) ); - myPlot->setAxisScale( QwtPlot::xBottom, - myPlot->invTransform( QwtPlot::xBottom, xMap.i1()-dx ), - myPlot->invTransform( QwtPlot::xBottom, xMap.i2()-dx ) ); - if (mySecondY) { - QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight ); - myPlot->setAxisScale( QwtPlot::yRight, - myPlot->invTransform( QwtPlot::yRight, y2Map.i1()-dy ), - myPlot->invTransform( QwtPlot::yRight, y2Map.i2()-dy ) ); - } - myPlot->replot(); + this->incrementalPan( dx, dy ); myPnt = me.pos(); } } @@ -1614,7 +1598,8 @@ bool Plot2d_ViewFrame::isYLogEnabled() const Constructor */ Plot2d_Plot2d::Plot2d_Plot2d( QWidget* parent ) - : QwtPlot( parent ) + : QwtPlot( parent ), + myIsPolished( false ) { // outline enableOutline( true ); @@ -1794,6 +1779,16 @@ bool Plot2d_Plot2d::existMarker( const QwtSymbol::Style typeMarker, const QColor return false; } +/*! + Sets the flag saying that QwtPlot geometry has been fully defined. +*/ +void Plot2d_Plot2d::polish() +{ + QwtPlot::polish(); + myIsPolished = true; +} + + /*! Creates presentation of object Default implementation is empty @@ -1980,3 +1975,108 @@ void Plot2d_ViewFrame::setVisualParameters( const QString& parameters ) fitData( 0, xmin, xmax, ymin, ymax, y2min, y2max ); } } + +/*! + Incremental zooming operation +*/ +void Plot2d_ViewFrame::incrementalPan( const int incrX, const int incrY ) { + QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom ); + QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft ); + + myPlot->setAxisScale( QwtPlot::yLeft, + myPlot->invTransform( QwtPlot::yLeft, yMap.i1()-incrY ), + myPlot->invTransform( QwtPlot::yLeft, yMap.i2()-incrY ) ); + myPlot->setAxisScale( QwtPlot::xBottom, + myPlot->invTransform( QwtPlot::xBottom, xMap.i1()-incrX ), + myPlot->invTransform( QwtPlot::xBottom, xMap.i2()-incrX ) ); + if (mySecondY) { + QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight ); + myPlot->setAxisScale( QwtPlot::yRight, + myPlot->invTransform( QwtPlot::yRight, y2Map.i1()-incrY ), + myPlot->invTransform( QwtPlot::yRight, y2Map.i2()-incrY ) ); + } + myPlot->replot(); +} + +/*! + Incremental panning operation +*/ +void Plot2d_ViewFrame::incrementalZoom( const int incrX, const int incrY ) { + QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom ); + QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft ); + + myPlot->setAxisScale( QwtPlot::yLeft, + myPlot->invTransform( QwtPlot::yLeft, yMap.i1() ), + myPlot->invTransform( QwtPlot::yLeft, yMap.i2() + incrY ) ); + myPlot->setAxisScale( QwtPlot::xBottom, + myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ), + myPlot->invTransform( QwtPlot::xBottom, xMap.i2() - incrX ) ); + if (mySecondY) { + QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight ); + myPlot->setAxisScale( QwtPlot::yRight, + myPlot->invTransform( QwtPlot::yRight, y2Map.i1() ), + myPlot->invTransform( QwtPlot::yRight, y2Map.i2() + incrY ) ); + } + myPlot->replot(); +} + +#define INCREMENT_FOR_OP 10 + +/*! + Performs incremental panning to the left +*/ +void Plot2d_ViewFrame::onPanLeft() +{ + this->incrementalPan( -INCREMENT_FOR_OP, 0 ); +} + +/*! + Performs incremental panning to the right +*/ +void Plot2d_ViewFrame::onPanRight() +{ + this->incrementalPan( INCREMENT_FOR_OP, 0 ); +} + +/*! + Performs incremental panning to the top +*/ +void Plot2d_ViewFrame::onPanUp() +{ + this->incrementalPan( 0, -INCREMENT_FOR_OP ); +} + +/*! + Performs incremental panning to the bottom +*/ +void Plot2d_ViewFrame::onPanDown() +{ + this->incrementalPan( 0, INCREMENT_FOR_OP ); +} + +/*! + Performs incremental zooming in +*/ +void Plot2d_ViewFrame::onZoomIn() +{ + this->incrementalZoom( INCREMENT_FOR_OP, INCREMENT_FOR_OP ); +} + +/*! + Performs incremental zooming out +*/ +void Plot2d_ViewFrame::onZoomOut() +{ + this->incrementalZoom( -INCREMENT_FOR_OP, -INCREMENT_FOR_OP ); +} + +/*! + Schedules a FitAll operation by putting it to the application's + event queue. This ensures that other important events (show, resize, etc.) + are processed first. +*/ +void Plot2d_ViewFrame::customEvent( QCustomEvent* ce ) +{ + if ( ce->type() == FITALL_EVENT ) + fitAll(); +} diff --git a/src/Plot2d/Plot2d_ViewFrame.h b/src/Plot2d/Plot2d_ViewFrame.h index 2c38caf1d..108cbd957 100755 --- a/src/Plot2d/Plot2d_ViewFrame.h +++ b/src/Plot2d/Plot2d_ViewFrame.h @@ -25,6 +25,7 @@ class Plot2d_Plot2d; class Plot2d_Prs; +class QCustomEvent; typedef QIntDict CurveDict; @@ -121,6 +122,9 @@ public: QString getVisualParameters(); void setVisualParameters( const QString& parameters ); + void incrementalPan ( const int incrX, const int incrY ); + void incrementalZoom( const int incrX, const int incrY ); + protected: int testOperation( const QMouseEvent& ); void readPreferences(); @@ -138,6 +142,16 @@ public slots: void onFitData(); void onChangeBackground(); + void onPanLeft(); + void onPanRight(); + void onPanUp(); + void onPanDown(); + void onZoomIn(); + void onZoomOut(); + +protected: + virtual void customEvent( QCustomEvent* ); + protected slots: void plotMousePressed( const QMouseEvent& ); void plotMouseMoved( const QMouseEvent& ); @@ -173,6 +187,7 @@ protected: class Plot2d_Plot2d : public QwtPlot { + Q_OBJECT public: Plot2d_Plot2d( QWidget* parent ); @@ -189,11 +204,17 @@ public: virtual QSizePolicy sizePolicy() const; virtual QSize minimumSizeHint() const; + bool polished() const { return myIsPolished; } + +public slots: + virtual void polish(); + protected: bool existMarker( const QwtSymbol::Style typeMarker, const QColor& color, const Qt::PenStyle typeLine ); protected: QValueList myColors; + bool myIsPolished; }; #endif diff --git a/src/Plot2d/Plot2d_ViewManager.cxx b/src/Plot2d/Plot2d_ViewManager.cxx index 405e90243..7681bd3f2 100755 --- a/src/Plot2d/Plot2d_ViewManager.cxx +++ b/src/Plot2d/Plot2d_ViewManager.cxx @@ -20,17 +20,13 @@ #include "Plot2d_ViewModel.h" #include "Plot2d_ViewWindow.h" -int Plot2d_ViewManager::myMaxId = 0; - /*! Constructor */ Plot2d_ViewManager::Plot2d_ViewManager( SUIT_Study* study, SUIT_Desktop* desk ) -: SUIT_ViewManager( study, desk ) +: SUIT_ViewManager( study, desk, new Plot2d_Viewer() ) { - myId = ++myMaxId; - Plot2d_Viewer* v = new Plot2d_Viewer(); - setViewModel( v ); + setTitle( tr( "PLOT2D_VIEW_TITLE" ) ); } /*! @@ -48,16 +44,6 @@ Plot2d_Viewer* Plot2d_ViewManager::getPlot2dModel() const return (Plot2d_Viewer*)myViewModel; } -/*! - Sets default name of view - \param the View - view to be renamed -*/ -void Plot2d_ViewManager::setViewName( SUIT_ViewWindow* theView ) -{ - int aPos = myViews.find(theView); - theView->setCaption( QString( "Plot2d scene:%1 - viewer:%2" ).arg(myId).arg(aPos+1)); -} - /*! Adds new view \param theView - view to be added diff --git a/src/Plot2d/Plot2d_ViewManager.h b/src/Plot2d/Plot2d_ViewManager.h index 051b26f19..a26b01cb6 100755 --- a/src/Plot2d/Plot2d_ViewManager.h +++ b/src/Plot2d/Plot2d_ViewManager.h @@ -37,7 +37,6 @@ public: Plot2d_Viewer* getPlot2dModel() const; protected: - void setViewName(SUIT_ViewWindow* theView); bool insertView(SUIT_ViewWindow* theView); public slots: @@ -48,10 +47,6 @@ protected slots: signals: void cloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* ); - -protected: - static int myMaxId; - int myId; }; #endif diff --git a/src/Plot2d/Plot2d_ViewModel.cxx b/src/Plot2d/Plot2d_ViewModel.cxx index 3d268e1c4..e689f6ef5 100755 --- a/src/Plot2d/Plot2d_ViewModel.cxx +++ b/src/Plot2d/Plot2d_ViewModel.cxx @@ -76,6 +76,7 @@ void Plot2d_Viewer::contextMenuPopup(QPopupMenu* thePopup) if (thePopup->count() > 0) thePopup->insertSeparator(); thePopup->insertItem("Show toolbar", this, SLOT(onShowToolbar())); } + aView->RefreshDumpImage(); } } diff --git a/src/Plot2d/Plot2d_ViewWindow.cxx b/src/Plot2d/Plot2d_ViewWindow.cxx index e562e30dc..1fdf78431 100755 --- a/src/Plot2d/Plot2d_ViewWindow.cxx +++ b/src/Plot2d/Plot2d_ViewWindow.cxx @@ -33,7 +33,6 @@ #include #include #include -#include /*! Constructor @@ -43,6 +42,8 @@ Plot2d_ViewWindow::Plot2d_ViewWindow(SUIT_Desktop* theDesktop, Plot2d_Viewer* th { myModel = theModel; + myDumpImage = QImage(); + myViewFrame = new Plot2d_ViewFrame(this, "plotView"); setCentralWidget(myViewFrame); @@ -491,8 +492,13 @@ void Plot2d_ViewWindow::onDumpView() */ QImage Plot2d_ViewWindow::dumpView() { - QPixmap px = QPixmap::grabWindow( myViewFrame->winId() ); - return px.convertToImage(); + if ( getToolBar()->hasMouse() || myDumpImage.isNull() ) + { + QPixmap px = QPixmap::grabWindow( myViewFrame->winId() ); + return px.convertToImage(); + } + + return myDumpImage; } /*! @@ -532,3 +538,12 @@ void Plot2d_ViewWindow::setVisualParameters( const QString& parameters ) { myViewFrame->setVisualParameters( parameters ); } + +/*! + \refresh QImage, containing all scene rendering in window +*/ +void Plot2d_ViewWindow::RefreshDumpImage() +{ + QPixmap px = QPixmap::grabWindow( myViewFrame->winId() ); + myDumpImage = px.convertToImage(); +} diff --git a/src/Plot2d/Plot2d_ViewWindow.h b/src/Plot2d/Plot2d_ViewWindow.h index b8c3718d3..aa1d4dd62 100755 --- a/src/Plot2d/Plot2d_ViewWindow.h +++ b/src/Plot2d/Plot2d_ViewWindow.h @@ -22,6 +22,8 @@ #include "Plot2d.h" #include +#include + #ifdef WIN32 #pragma warning( disable:4251 ) #endif @@ -48,6 +50,8 @@ public: virtual QString getVisualParameters(); virtual void setVisualParameters( const QString& parameters ); + + virtual void RefreshDumpImage(); protected: virtual QImage dumpView(); @@ -94,6 +98,8 @@ private: QToolBar* myToolBar; SUIT_ToolButton* myCurveBtn; + + QImage myDumpImage; }; #ifdef WIN32 diff --git a/src/Plot2d/resources/Plot2d_msg_en.po b/src/Plot2d/resources/Plot2d_msg_en.po index 0e7aa10ab..e0d764da7 100755 --- a/src/Plot2d/resources/Plot2d_msg_en.po +++ b/src/Plot2d/resources/Plot2d_msg_en.po @@ -406,3 +406,6 @@ msgstr "Diagonal cross" msgid "POSTSCRIPT_FILES" msgstr "PostScript files (*.ps)" + +msgid "Plot2d_ViewManager::PLOT2D_VIEW_TITLE" +msgstr "Plot2d scene:%M - viewer:%V" diff --git a/src/Plot2d/resources/plot2d_rotate.png b/src/Plot2d/resources/plot2d_rotate.png deleted file mode 100755 index 80926c5451f9a45ebd27cdf18888f483d797e739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmVDGCWSsE#LQ@Z^Sznh8;9{<=)kqb9)3T>pEu_l_bNgM zF1*b$b*#=-tj<*$Gl>z1@}prmCi@hC%zQs#e?;)}PVk z>C+jm(`Pu{t7YrV>0a&r*F8SY`EtxbD60s0Qrxc<$~yff#A_=*44mV zj}qYK+YJDR>VUimaH3KSEEqoevu<=26A@-ILlPMh#)`4p^YNV4yAgP6;;3!Eg z*Q7XNcoAXl=lImevP?#V04VMX9-kiBx@|}36y3zSP2}HmEB}-{KRt8#;SzwWk5`dy zxme=8=i=Q(1RB{5Gd7OAgfmfcc`kcOeG0 z2?x}^BQczaAgM4*XOm*1DLZfj!mtI2#5AWa+rP`@-yqS`CtUyl002ovPDHLkV1oV= B^929^ diff --git a/src/Prs/Makefile.in b/src/Prs/Makefile.am similarity index 73% rename from src/Prs/Makefile.in rename to src/Prs/Makefile.am index 56c07d0b9..7f5d31a29 100755 --- a/src/Prs/Makefile.in +++ b/src/Prs/Makefile.am @@ -16,30 +16,11 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# source path -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl +include $(top_srcdir)/adm_local/unix/make_common_starter.am -@COMMENCE@ +lib_LTLIBRARIES = libSalomePrs.la -EXPORT_HEADERS = SALOME_Prs.h +salomeinclude_HEADERS = SALOME_Prs.h -# Libraries targets - -LIB = libSalomePrs.la -LIB_SRC = SALOME_Prs.cxx - -LIB_CLIENT_IDL = - -# Executables targets -BIN = -BIN_SRC = - -CPPFLAGS+= -LDFLAGS+= - - -@CONCLUDE@ +dist_libSalomePrs_la_SOURCES = SALOME_Prs.cxx diff --git a/src/PyInterp/Makefile.in b/src/PyInterp/Makefile.am similarity index 68% rename from src/PyInterp/Makefile.in rename to src/PyInterp/Makefile.am index d9af0dc9c..9a783f209 100755 --- a/src/PyInterp/Makefile.in +++ b/src/PyInterp/Makefile.am @@ -23,29 +23,21 @@ # File : Makefile.in # Module : SALOME -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES = libPyInterp.la -@COMMENCE@ +salomeinclude_HEADERS= \ + PyInterp.h \ + PyInterp_base.h \ + PyInterp_Dispatcher.h -# header files -EXPORT_HEADERS= PyInterp.h \ - PyInterp_base.h \ - PyInterp_Dispatcher.h - -# Libraries targets -LIB = libPyInterp.la +dist_libPyInterp_la_SOURCES= \ + PyInterp_base.cxx \ + PyInterp_Dispatcher.cxx -LIB_SRC= PyInterp_base.cxx \ - PyInterp_Dispatcher.cxx +MOC_FILES= PyInterp_Watcher_moc.cxx +nodist_libPyInterp_la_SOURCES= $(MOC_FILES) -LIB_MOC = PyInterp_Watcher.h - -CPPFLAGS+= $(PYTHON_INCLUDES) $(QT_INCLUDES) - -LDFLAGS+= $(PYTHON_LIBS) $(QT_MT_LIBS) - -@CONCLUDE@ +libPyInterp_la_CPPFLAGS= $(PYTHON_INCLUDES) $(QT_INCLUDES) +libPyInterp_la_LDFLAGS= $(PYTHON_LIBS) $(QT_MT_LIBS) diff --git a/src/PyInterp/PyInterp.h b/src/PyInterp/PyInterp.h index 1c0bd7f80..af9536fd8 100755 --- a/src/PyInterp/PyInterp.h +++ b/src/PyInterp/PyInterp.h @@ -36,18 +36,20 @@ #endif // WNT // ======================================================== -// little trick - we do not have debug python libraries +// little trick - if we do not have debug python libraries #ifdef _DEBUG - -#undef _DEBUG -#include -#define _DEBUG - -#else // _DEBUG + #ifndef HAVE_DEBUG_PYTHON + #undef _DEBUG + #endif +#endif #include -#endif // _DEBUG +#ifdef _DEBUG + #ifndef HAVE_DEBUG_PYTHON + #define _DEBUG + #endif +#endif // ======================================================== // avoid warning messages diff --git a/src/PyInterp/PyInterp_base.cxx b/src/PyInterp/PyInterp_base.cxx index 7225855fe..d2a855767 100644 --- a/src/PyInterp/PyInterp_base.cxx +++ b/src/PyInterp/PyInterp_base.cxx @@ -29,6 +29,7 @@ #include "PyInterp_base.h" // this include must be first (see PyInterp_base.h)! #include +#include using namespace std; @@ -72,6 +73,108 @@ PyLockWrapper PyInterp_base::GetLockWrapper(){ return _tstate; } +static void +PyStdOut_dealloc(PyStdOut *self) +{ + PyObject_Del(self); +} + +static PyObject * +PyStdOut_write(PyStdOut *self, PyObject *args) +{ + char *c; + int l; + if (!PyArg_ParseTuple(args, "t#:write",&c, &l)) + return NULL; + if(self->_cb==NULL) { + if ( self->_iscerr ) + std::cerr << c ; + else + std::cout << c ; + } + else { + self->_cb(self->_data,c); + } + Py_INCREF(Py_None); + return Py_None; +} + +static PyMethodDef PyStdOut_methods[] = { + {"write", (PyCFunction)PyStdOut_write, METH_VARARGS, + PyDoc_STR("write(string) -> None")}, + {NULL, NULL} /* sentinel */ +}; + +static PyMemberDef PyStdOut_memberlist[] = { + {"softspace", T_INT, offsetof(PyStdOut, softspace), 0, + "flag indicating that a space needs to be printed; used by print"}, + {NULL} /* Sentinel */ +}; + + + +static PyTypeObject PyStdOut_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "PyOut", /*tp_name*/ + sizeof(PyStdOut), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + (destructor)PyStdOut_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + PyObject_GenericGetAttr, /*tp_getattro*/ + /* softspace is writable: we must supply tp_setattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + PyStdOut_methods, /*tp_methods*/ + PyStdOut_memberlist, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + +#define PyStdOut_Check(v) ((v)->ob_type == &PyStdOut_Type) + +static PyStdOut * newPyStdOut( bool iscerr ) +{ + PyStdOut *self; + self = PyObject_New(PyStdOut, &PyStdOut_Type); + if (self == NULL) + return NULL; + self->softspace = 0; + self->_cb = NULL; + self->_iscerr = iscerr; + return self; +} // main python interpreter (static attributes) @@ -124,12 +227,9 @@ void PyInterp_base::initialize() return; } - // Create cStringIO to capture stdout and stderr - PycString_IMPORT; - if (PycStringIO) { // CTH11627 : additional check - _vout = PycStringIO->NewOutput(128); - _verr = PycStringIO->NewOutput(128); - } + // Create python objects to capture stdout and stderr + _vout=(PyObject*)newPyStdOut( false ); // stdout + _verr=(PyObject*)newPyStdOut( true ); // stderr // All the initRun outputs are redirected to the standard output (console) initRun(); @@ -147,6 +247,10 @@ void PyInterp_base::init_python() PySys_SetArgv(_argc, _argv); PyEval_InitThreads(); // Create (and acquire) the interpreter lock _interp = PyThreadState_Get()->interp; + if (PyType_Ready(&PyStdOut_Type) < 0) + { + PyErr_Print(); + } _gtstate = PyEval_SaveThread(); // Release global thread state } @@ -164,17 +268,18 @@ string PyInterp_base::getbanner() int PyInterp_base::initRun() { + // + // probably all below code isn't required + // + /* PySys_SetObject("stderr",_verr); PySys_SetObject("stdout",_vout); - PyObjWrapper verr(PyObject_CallMethod(_verr,"reset","")); - PyObjWrapper vout(PyObject_CallMethod(_vout,"reset","")); - //PyObject *m = PyImport_GetModuleDict(); PySys_SetObject("stdout",PySys_GetObject("__stdout__")); PySys_SetObject("stderr",PySys_GetObject("__stderr__")); - + */ return 0; } @@ -264,9 +369,6 @@ int PyInterp_base::simpleRun(const char *command) PySys_SetObject("stderr",_verr); PySys_SetObject("stdout",_vout); - PyObjWrapper verr(PyObject_CallMethod(_verr,"reset","")); - PyObjWrapper vout(PyObject_CallMethod(_vout,"reset","")); - int ier = compile_command(command,_g); // Outputs are redirected on standards outputs (console) @@ -300,17 +402,15 @@ const char * PyInterp_base::getNext() } -string PyInterp_base::getverr(){ - //PyLockWrapper aLock(_tstate); - PyObjWrapper v(PycStringIO->cgetvalue(_verr)); - string aRet(PyString_AsString(v)); - return aRet; +void PyInterp_base::setvoutcb(PyOutChanged* cb, void* data) +{ + ((PyStdOut*)_vout)->_cb=cb; + ((PyStdOut*)_vout)->_data=data; } -string PyInterp_base::getvout(){ - //PyLockWrapper aLock(_tstate); - PyObjWrapper v(PycStringIO->cgetvalue(_vout)); - string aRet(PyString_AsString(v)); - return aRet; +void PyInterp_base::setverrcb(PyOutChanged* cb, void* data) +{ + ((PyStdOut*)_verr)->_cb=cb; + ((PyStdOut*)_verr)->_data=data; } diff --git a/src/PyInterp/PyInterp_base.h b/src/PyInterp/PyInterp_base.h index 71931655c..298b1c508 100644 --- a/src/PyInterp/PyInterp_base.h +++ b/src/PyInterp/PyInterp_base.h @@ -63,6 +63,8 @@ class PYINTERP_EXPORT PyLockWrapper ~PyLockWrapper(); }; +typedef void PyOutChanged(void* data,char * c); + class PYINTERP_EXPORT PyInterp_base{ public: static int _argc; @@ -85,8 +87,8 @@ class PYINTERP_EXPORT PyInterp_base{ PyLockWrapper GetLockWrapper(); std::string getbanner(); - std::string getverr(); - std::string getvout(); + void setverrcb(PyOutChanged*,void*); + void setvoutcb(PyOutChanged*,void*); const char * getPrevious(); const char * getNext(); @@ -142,4 +144,13 @@ public: } }; + +typedef struct { + PyObject_HEAD + int softspace; + PyOutChanged* _cb; + void* _data; + bool _iscerr; +} PyStdOut; + #endif diff --git a/src/PythonConsole/Makefile.in b/src/PythonConsole/Makefile.am similarity index 60% rename from src/PythonConsole/Makefile.in rename to src/PythonConsole/Makefile.am index 692b54b3b..8884cfa45 100755 --- a/src/PythonConsole/Makefile.in +++ b/src/PythonConsole/Makefile.am @@ -21,35 +21,30 @@ # Module : PythonConsole # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES = libPythonConsole.la -@COMMENCE@ - -# header files -EXPORT_HEADERS= PythonConsole.h \ - PythonConsole_PyConsole.h \ - PythonConsole_PyEditor.h \ - PythonConsole_PyInterp.h - -# Libraries targets -LIB = libPythonConsole.la +salomeinclude_HEADERS= \ + PythonConsole.h \ + PythonConsole_PyConsole.h \ + PythonConsole_PyEditor.h \ + PythonConsole_PyInterp.h -LIB_SRC= PythonConsole_PyConsole.cxx \ - PythonConsole_PyEditor.cxx \ - PythonConsole_PyInterp.cxx +dist_libPythonConsole_la_SOURCES= \ + PythonConsole_PyConsole.cxx \ + PythonConsole_PyEditor.cxx \ + PythonConsole_PyInterp.cxx -LIB_MOC = \ - PythonConsole_PyEditor.h \ - PythonConsole_PyConsole.h +MOC_FILES= \ + PythonConsole_PyEditor_moc.cxx \ + PythonConsole_PyConsole_moc.cxx +nodist_libPythonConsole_la_SOURCES= $(MOC_FILES) -CPPFLAGS+= $(PYTHON_INCLUDES) $(QT_INCLUDES) -LDFLAGS+= $(PYTHON_LIBS) $(QT_MT_LIBS) +libPythonConsole_la_CPPFLAGS= $(PYTHON_INCLUDES) $(QT_INCLUDES) \ + -I$(srcdir)/../PyInterp -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx -@CONCLUDE@ +libPythonConsole_la_LDFLAGS= $(PYTHON_LIBS) $(QT_MT_LIBS) diff --git a/src/PythonConsole/PythonConsole.h b/src/PythonConsole/PythonConsole.h index 98fa563c4..8e1db3946 100755 --- a/src/PythonConsole/PythonConsole.h +++ b/src/PythonConsole/PythonConsole.h @@ -36,18 +36,20 @@ #endif // WNT // ======================================================== -// little trick - we do not have debug python libraries +// little trick - if we do not have debug python libraries #ifdef _DEBUG - +#ifndef HAVE_DEBUG_PYTHON #undef _DEBUG -#include -#define _DEBUG - -#else // _DEBUG +#endif +#endif -#include +//#include -#endif // _DEBUG +#ifdef _DEBUG +#ifndef HAVE_DEBUG_PYTHON +#define _DEBUG +#endif +#endif // ======================================================== // avoid warning messages diff --git a/src/PythonConsole/PythonConsole_PyConsole.cxx b/src/PythonConsole/PythonConsole_PyConsole.cxx index 9eecd0f15..9c8f85237 100755 --- a/src/PythonConsole/PythonConsole_PyConsole.cxx +++ b/src/PythonConsole/PythonConsole_PyConsole.cxx @@ -16,6 +16,8 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + +#include #include "PythonConsole_PyConsole.h" #include "PythonConsole_PyEditor.h" #include "PyInterp_base.h" @@ -63,6 +65,16 @@ void PythonConsole::exec( const QString& command ) myEditor->exec( command ); } +/*! + Blocks execution of main application until command is executed + \param command - string with command and arguments +*/ +void PythonConsole::execAndWait( const QString& command ) +{ + if ( myEditor ) + myEditor->execAndWait( command ); +} + /*! Changes font of python console \param f - new font diff --git a/src/PythonConsole/PythonConsole_PyConsole.h b/src/PythonConsole/PythonConsole_PyConsole.h index 4978214fb..b3364e597 100755 --- a/src/PythonConsole/PythonConsole_PyConsole.h +++ b/src/PythonConsole/PythonConsole_PyConsole.h @@ -39,7 +39,7 @@ public: virtual void setFont( const QFont& ); void exec( const QString& command ); - + void execAndWait( const QString& command ); protected: PyInterp_base* myInterp; PythonConsole_PyEditor* myEditor; diff --git a/src/PythonConsole/PythonConsole_PyEditor.cxx b/src/PythonConsole/PythonConsole_PyEditor.cxx index 3093b89de..deecd648f 100755 --- a/src/PythonConsole/PythonConsole_PyEditor.cxx +++ b/src/PythonConsole/PythonConsole_PyEditor.cxx @@ -30,12 +30,15 @@ #include #include +#include #include #include #include #include #include +#include +#include using namespace std; @@ -51,12 +54,13 @@ enum { IdCopy, IdPaste, IdClear, IdSelectAll }; static QString READY_PROMPT = ">>> "; static QString DOTS_PROMPT = "... "; -#define PROMPT_SIZE _currentPrompt.length() + +#define PROMPT_SIZE (int)_currentPrompt.length() class ExecCommand : public PyInterp_LockRequest { public: - ExecCommand(PyInterp_base* theInterp, const char* theCommand, + ExecCommand(PyInterp_base* theInterp, const QString& theCommand, PythonConsole_PyEditor* theListener, bool sync = false) : PyInterp_LockRequest( theInterp, theListener, sync ), myCommand( theCommand ), myState( PyInterp_Event::OK ) @@ -64,20 +68,17 @@ public: protected: virtual void execute(){ - if(myCommand != ""){ + if( !myCommand.stripWhiteSpace().isEmpty() ) { // if(MYDEBUG) MESSAGE("*** ExecCommand::execute() started"); + SUIT_Session::SetPythonExecuted(true); // disable GUI user actions int ret = getInterp()->run( myCommand.latin1() ); + SUIT_Session::SetPythonExecuted(false); // enable GUI user actions // if(MYDEBUG) MESSAGE("ExecCommand::execute() - myInterp = "< 0) + else if( ret > 0 ) myState = PyInterp_Event::INCOMPLETE; - myError = getInterp()->getverr().c_str(); - myOutput = getInterp()->getvout().c_str(); // if(MYDEBUG) MESSAGE("*** ExecCommand::execute() finished"); - }else{ - myError = ""; - myOutput = ""; } } @@ -86,22 +87,34 @@ protected: return new PyInterp_Event( myState, (PyInterp_Request*)this ); } -public: - QString myError; - QString myOutput; - private: QString myCommand; int myState; }; +#define PRINT_EVENT 65432 + +class PrintEvent : public QCustomEvent +{ +public: + PrintEvent( const char* c ) : QCustomEvent( PRINT_EVENT ), myText( c ) {} + QString text() const { return myText; } +private: + QString myText; +}; + +void staticCallback( void* data, char* c ) +{ + QApplication::postEvent( (PythonConsole_PyEditor*)data, new PrintEvent( c ) ); +} /*! Constructor */ PythonConsole_PyEditor::PythonConsole_PyEditor(PyInterp_base* theInterp, QWidget *theParent, const char* theName): QTextEdit(theParent,theName), - myInterp( 0 ) + myInterp( 0 ), + myIsInLoop( false ) { QString fntSet( "" ); QFont aFont = SUIT_Tools::stringToFont( fntSet ); @@ -110,7 +123,11 @@ PythonConsole_PyEditor::PythonConsole_PyEditor(PyInterp_base* theInterp, QWidget setUndoRedoEnabled( false ); _currentPrompt = READY_PROMPT; - setWordWrap(NoWrap); + setWordWrap( WidgetWidth ); + setWrapPolicy( Anywhere ); + + theInterp->setvoutcb( staticCallback, this ); + theInterp->setverrcb( staticCallback, this ); connect(this,SIGNAL(returnPressed()),this,SLOT(handleReturn()) ); @@ -133,7 +150,43 @@ void PythonConsole_PyEditor::setText(QString s) { int para=paragraphs()-1; int col=paragraphLength(para); - insertAt(s,para,col); + + // Limit length of the string because exception may occur if string too long (NPAL16033) + // Exception occurs if one of paragraphs of the input string "s" is too long. Now long + // paragraph is limited with threshold numbers of characters and finished by " ..." string. + // Note that first paragraph of the string is checked only because it is enough for bug fixing. + // If it will be insufficient for other cases then more complicated check should be implemented. + // At present it is not done because of possible performance problem. + + static int threshold = 50000; + long strLength = s.length(); + if ( col + strLength <= threshold || s.find( '\n' ) < threshold ) + insertAt(s,para,col); + else + { + if ( col >= threshold ) + { + if ( text( para ).right( 5 ) != QString( " ...\n" ) ) + insertAt(" ...\n",para,col); + } + else + { + long n = threshold - col; + s.truncate( n ); + if ( n >= 5 ) + { + s.at( n - 5 ) = QChar( ' ' ); + s.at( n - 4 ) = QChar( '.' ); + s.at( n - 3 ) = QChar( '.' ); + s.at( n - 2 ) = QChar( '.' ); + s.at( n - 1 ) = QChar( '\n' ); + } + else + s = " ...\n"; + insertAt(s,para,col); + } + } + int n = paragraphs()-1; setCursorPosition( n, paragraphLength(n)); } @@ -145,16 +198,32 @@ void PythonConsole_PyEditor::setText(QString s) void PythonConsole_PyEditor::exec( const QString& command ) { // Some interactive command is being executed in this editor -> do nothing - if ( isReadOnly() ) + if ( isReadOnly() ) { + myQueue.push_back( command ); return; + } int para=paragraphs()-1; removeParagraph( para ); _currentPrompt = READY_PROMPT; _buf.truncate(0); _isInHistory = false; - setText( "\n" + _currentPrompt); - setText( command + "\n" ); - handleReturn(); + setText( "\n" + _currentPrompt); + // PAL15963 (Problem with option -u (--execute) of runSalome). + // Let events creating a study end before script execution starts + setText( command /*+ "\n"*/ ); + //handleReturn(); + qApp->postEvent( this, new QKeyEvent(QEvent::KeyPress,Key_Return,13,Qt::NoButton )); +} + +void PythonConsole_PyEditor::execAndWait( const QString& command ) +{ + if( myIsInLoop ) + return; + + myIsInLoop = true; + exec( command ); + qApp->enter_loop(); + myIsInLoop = false; } /*! @@ -170,7 +239,7 @@ void PythonConsole_PyEditor::handleReturn() // Post a request to execute Python command // Editor will be informed via a custom event that execution has been completed - PyInterp_Dispatcher::Get()->Exec( new ExecCommand( myInterp, _buf.latin1(), this ) ); + PyInterp_Dispatcher::Get()->Exec( new ExecCommand( myInterp, _buf, this ) ); } /*! @@ -212,13 +281,15 @@ void PythonConsole_PyEditor::contentsMouseReleaseEvent( QMouseEvent* event ) int endLine = paragraphs() -1; col = charAt( event->pos(), &par ); if ( col >= 0 && par >= 0 ) { - if ( par != endLine || col < PROMPT_SIZE ) - setCursorPosition( endLine, paragraphLength( endLine ) ); + // PAL12896 --> + if ( par != endLine || col < PROMPT_SIZE ) { + QPoint aPos = paragraphRect(endLine).bottomRight(); + QMouseEvent* e = new QMouseEvent(event->type(),aPos,event->button(),event->state()); + QTextEdit::contentsMouseReleaseEvent(e); + } else - setCursorPosition( par, col ); - QApplication::clipboard()->setSelectionMode(TRUE); - paste(); - QApplication::clipboard()->setSelectionMode(FALSE); + QTextEdit::contentsMouseReleaseEvent(event); + // PAL12896 <-- } } } @@ -357,21 +428,22 @@ void PythonConsole_PyEditor::keyPressEvent( QKeyEvent* e ) else if ( ctrlPressed ) { moveCursor( QTextEdit::MoveUp, false ); } - else { - QString histLine = _currentPrompt; - if ( ! _isInHistory ) { - _isInHistory = true; - _currentCommand = text( endLine ).remove( 0, PROMPT_SIZE ); - _currentCommand.truncate( _currentCommand.length() - 1 ); - } - QString previousCommand = myInterp->getPrevious(); - if ( previousCommand.compare( BEGIN_HISTORY_PY ) != 0 ) - { - removeParagraph( endLine ); - histLine.append( previousCommand ); - append( histLine ); - } - moveCursor( QTextEdit::MoveEnd, false ); + else { + QString histLine = _currentPrompt; + if ( ! _isInHistory ) { + _isInHistory = true; + _currentCommand = text( endLine ).remove( 0, PROMPT_SIZE ); + _currentCommand.truncate( _currentCommand.length() - 1 ); + } + QString previousCommand = myInterp->getPrevious(); + if ( previousCommand.compare( BEGIN_HISTORY_PY ) != 0 ) + { + removeParagraph( endLine ); + histLine.append( previousCommand ); + append( histLine ); + } + moveCursor( QTextEdit::MoveEnd, false ); + scrollViewAfterHistoryUsing( previousCommand ); // NPAL16035 } break; } @@ -409,6 +481,7 @@ void PythonConsole_PyEditor::keyPressEvent( QKeyEvent* e ) } } moveCursor( QTextEdit::MoveEnd, false ); + scrollViewAfterHistoryUsing( nextCommand ); // NPAL16035 } break; } @@ -598,9 +671,9 @@ void PythonConsole_PyEditor::keyPressEvent( QKeyEvent* e ) if ( ctrlPressed && !hasSelectedText() ) { QString txt = text( curLine ); int ind = curCol; - while ( ind < txt.length()-1 && txt[ ind ] == ' ' ) ind++; + while ( ind < (int)( txt.length() - 1 ) && txt[ind] == ' ' ) ind++; ind = txt.find( ' ', ind ); - while ( ind < txt.length()-1 && txt[ ind ] == ' ' ) ind++; + while ( ind < (int)( txt.length() - 1 ) && txt[ ind ] == ' ' ) ind++; if ( ind > PROMPT_SIZE-1 ) { setSelection( curLine, curCol, curLine, ind ); removeSelectedText(); @@ -641,32 +714,39 @@ void PythonConsole_PyEditor::keyPressEvent( QKeyEvent* e ) void PythonConsole_PyEditor::customEvent(QCustomEvent* e) { switch( e->type() ) { + case PRINT_EVENT: + { + PrintEvent* pe=(PrintEvent*)e; + setText( pe->text() ); + return; + } case PyInterp_Event::OK: case PyInterp_Event::ERROR: { - PyInterp_Event* pe = dynamic_cast( e ); - if ( pe ){ - ExecCommand* ec = dynamic_cast( pe->GetRequest() ); - if ( ec ){ - // The next line has appeared dangerous in case if - // Python command execution has produced very large output. - // A more clever approach is needed... - setText(ec->myOutput); - setText(ec->myError); - } - } _buf.truncate(0); _currentPrompt = READY_PROMPT; + QString txt = text( paragraphs()-1 ); + txt.truncate( txt.length()-1 ); + if ( !txt.isEmpty() ) + setText("\n"); setText(_currentPrompt); viewport()->unsetCursor(); + if( myIsInLoop ) + qApp->exit_loop(); break; } case PyInterp_Event::INCOMPLETE: { _buf.append("\n"); _currentPrompt = DOTS_PROMPT; + QString txt = text( paragraphs()-1 ); + txt.truncate( txt.length()-1 ); + if ( !txt.isEmpty() ) + setText("\n"); setText(_currentPrompt); viewport()->unsetCursor(); + if( myIsInLoop ) + qApp->exit_loop(); break; } default: @@ -675,6 +755,12 @@ void PythonConsole_PyEditor::customEvent(QCustomEvent* e) setReadOnly( false ); _isInHistory = false; + + if ( e->type() == PyInterp_Event::OK && myQueue.count() > 0 ) { + QString nextcmd = myQueue[0]; + myQueue.pop_front(); + exec( nextcmd ); + } } /*! @@ -694,6 +780,8 @@ void PythonConsole_PyEditor::onPyInterpChanged( PyInterp_base* interp ) _isInHistory = false; setText(_currentPrompt); viewport()->unsetCursor(); + if( myIsInLoop ) + qApp->exit_loop(); } else { clear(); @@ -711,7 +799,7 @@ QPopupMenu* PythonConsole_PyEditor::createPopupMenu( const QPoint& pos ) QPopupMenu* popup = QTextEdit::createPopupMenu( pos ); QValueList ids; - for ( int i = 0; popup && i < popup->count(); i++ ) + for ( int i = 0; popup && i < (int)popup->count(); i++ ) { if ( !popup->isItemEnabled( popup->idAt( i ) ) ) ids.append( popup->idAt( i ) ); @@ -730,3 +818,36 @@ QPopupMenu* PythonConsole_PyEditor::createPopupMenu( const QPoint& pos ) return popup; } + +/*! + Scrolls view after use of history (Up/Down keys)to the left position if length + of command less than visible width of the view +*/ +void PythonConsole_PyEditor::scrollViewAfterHistoryUsing( const QString& command ) +{ + if ( !command.isEmpty() ) + { + if ( command == QString( BEGIN_HISTORY_PY ) ) + { + ensureCursorVisible(); + return; + } + + QFontMetrics aFM( currentFont() ); + int aCommandLength = aFM.width( command ) + aFM.width( READY_PROMPT ) + 5; + int aVisibleWidth = visibleWidth(); + QScrollBar* aBar = horizontalScrollBar(); + if ( aBar ) + { + if ( aCommandLength <= aVisibleWidth ) + aBar->setValue( aBar->minValue() ); + else if ( aVisibleWidth > 0 ) + { + double aRatio = aCommandLength / contentsWidth(); + double aPos = ( aBar->maxValue() - aBar->minValue() ) * aRatio; + aBar->setValue( (int)aPos ); + ensureCursorVisible(); + } + } + } +} diff --git a/src/PythonConsole/PythonConsole_PyEditor.h b/src/PythonConsole/PythonConsole_PyEditor.h index 004b40021..d8a2acb30 100755 --- a/src/PythonConsole/PythonConsole_PyEditor.h +++ b/src/PythonConsole/PythonConsole_PyEditor.h @@ -47,6 +47,7 @@ public: bool isCommand(const QString& str) const; virtual void exec( const QString& command ); + void execAndWait( const QString& command ); protected: virtual void contentsDropEvent( QDropEvent* event ); @@ -54,24 +55,29 @@ protected: virtual void keyPressEvent (QKeyEvent* event); virtual void mousePressEvent (QMouseEvent* event); virtual void customEvent (QCustomEvent* event); - + public slots: void handleReturn(); void onPyInterpChanged( PyInterp_base* ); virtual QPopupMenu* createPopupMenu( const QPoint& ); - + +private: + + void scrollViewAfterHistoryUsing( const QString& command ); + private: QString _buf; QString _currentCommand; QString _currentPrompt; - bool _isInHistory; + bool _isInHistory, myIsInLoop; PyInterp_base* myInterp; - QString myBanner; - QString myOutput; - QString myError; + QString myBanner; + QString myOutput; + QString myError; + QStringList myQueue; }; #endif diff --git a/src/PythonConsole/PythonConsole_PyInterp.cxx b/src/PythonConsole/PythonConsole_PyInterp.cxx index 09ceadb27..e54023779 100755 --- a/src/PythonConsole/PythonConsole_PyInterp.cxx +++ b/src/PythonConsole/PythonConsole_PyInterp.cxx @@ -75,26 +75,57 @@ PythonConsole_PyInterp::~PythonConsole_PyInterp() bool PythonConsole_PyInterp::initState() { + /* + * The GIL is acquired on input and released on output + */ + /*PyEval_AcquireLock(); +#ifdef WNT + _tstate = PyGILState_GetThisThreadState(); + // if no thread state defined + if ( _tstate ) + PyThreadState_Swap(_tstate); + else +#endif + { + _tstate = Py_NewInterpreter(); // create an interpreter and save current state + PySys_SetArgv(PyInterp_base::_argc,PyInterp_base::_argv); // initialize sys.argv + //if(MYDEBUG) MESSAGE("PythonConsole_PyInterp::initState - this = "<ob_refcnt); // builtinmodule reference counter _tstate->interp->builtins = PyModule_GetDict(builtinmodule); Py_INCREF(_tstate->interp->builtins); - } + } PyEval_ReleaseThread(_tstate); return true; } diff --git a/src/QDS/Makefile.in b/src/QDS/Makefile.am similarity index 64% rename from src/QDS/Makefile.in rename to src/QDS/Makefile.am index 290054d45..03513ac3c 100755 --- a/src/QDS/Makefile.in +++ b/src/QDS/Makefile.am @@ -21,15 +21,12 @@ # Module : QDS # $Header: /home/server/cvs/GUI/GUI_SRC/src/QDS/Makefile.in -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am -@COMMENCE@ +lib_LTLIBRARIES = libQDS.la # header files -EXPORT_HEADERS= QDS.h \ +salomeinclude_HEADERS= QDS.h \ QDS_CheckBox.h \ QDS_ComboBox.h \ QDS_Datum.h \ @@ -38,11 +35,9 @@ EXPORT_HEADERS= QDS.h \ QDS_SpinBoxDbl.h \ QDS_TextEdit.h \ QDS_Validator.h - -# Libraries targets -LIB = libQDS.la -LIB_SRC= QDS.cxx \ +dist_libQDS_la_SOURCES= \ + QDS.cxx \ QDS_CheckBox.cxx \ QDS_ComboBox.cxx \ QDS_Datum.cxx \ @@ -52,18 +47,22 @@ LIB_SRC= QDS.cxx \ QDS_TextEdit.cxx \ QDS_Validator.cxx -LIB_MOC = QDS_CheckBox.h \ - QDS_ComboBox.h \ - QDS_Datum.h \ - QDS_LineEdit.h \ - QDS_SpinBox.h \ - QDS_SpinBoxDbl.h \ - QDS_TextEdit.h - -CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) +MOC_FILES= \ + QDS_CheckBox_moc.cxx \ + QDS_ComboBox_moc.cxx \ + QDS_Datum_moc.cxx \ + QDS_LineEdit_moc.cxx \ + QDS_SpinBox_moc.cxx \ + QDS_SpinBoxDbl_moc.cxx \ + QDS_TextEdit_moc.cxx +nodist_libQDS_la_SOURCES= $(MOC_FILES) -LDFLAGS+=$(QT_MT_LIBS) $(CAS_KERNEL) -lDDS -lqtx +# may be neccessary for the external projects or future improvements +EXTRA_DIST+= QDS_RadioBox.cxx QDS_RadioBox.h resources/QDS_msg_en.po -@CONCLUDE@ +libQDS_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) \ + -I$(srcdir)/../Qtx -I$(srcdir)/../DDS +libQDS_la_LDFLAGS=$(QT_MT_LIBS) $(CAS_KERNEL) +libQDS_la_LIBADD=../DDS/libDDS.la ../Qtx/libqtx.la diff --git a/src/QDS/QDS.cxx b/src/QDS/QDS.cxx index 7b3f984b2..fb1cdae24 100644 --- a/src/QDS/QDS.cxx +++ b/src/QDS/QDS.cxx @@ -30,6 +30,9 @@ QValueList QDS::_datumList; +/*! + Convert the OpenCascade ascii string to Qt string. +*/ QString QDS::toQString( const TCollection_AsciiString& src ) { QTextCodec* codec = QTextCodec::codecForLocale(); @@ -40,6 +43,9 @@ QString QDS::toQString( const TCollection_AsciiString& src ) return res; } +/*! + Convert the OpenCascade unicode string to Qt string. +*/ QString QDS::toQString( const TCollection_ExtendedString& src ) { if ( src.IsAscii() ) @@ -48,6 +54,9 @@ QString QDS::toQString( const TCollection_ExtendedString& src ) return QString( (QChar*)src.ToExtString(), src.Length() ); } +/*! + Convert the OpenCascade ascii string to Qt string. +*/ QString QDS::toQString( const Handle(TCollection_HAsciiString)& src ) { if ( src.IsNull() ) @@ -56,6 +65,9 @@ QString QDS::toQString( const Handle(TCollection_HAsciiString)& src ) return toQString( src->String() ); } +/*! + Convert the OpenCascade unicode string to Qt string. +*/ QString QDS::toQString( const Handle(TCollection_HExtendedString)& src ) { if ( src.IsNull() ) @@ -64,6 +76,9 @@ QString QDS::toQString( const Handle(TCollection_HExtendedString)& src ) return toQString( src->String() ); } +/*! + Convert the Qt string to OpenCascade ascii string. +*/ TCollection_AsciiString QDS::toAsciiString( const QString& src ) { TCollection_AsciiString res; @@ -82,11 +97,17 @@ TCollection_AsciiString QDS::toAsciiString( const QString& src ) return res; } +/*! + Convert the OpenCascade unicode string to OpenCascade ascii string. +*/ TCollection_AsciiString QDS::toAsciiString( const TCollection_ExtendedString& src ) { return TCollection_AsciiString( src ); } +/*! + Convert the OpenCascade unicode string to OpenCascade ascii string. +*/ TCollection_AsciiString QDS::toAsciiString( const Handle(TCollection_HExtendedString)& src ) { TCollection_AsciiString res; @@ -95,6 +116,9 @@ TCollection_AsciiString QDS::toAsciiString( const Handle(TCollection_HExtendedSt return res; } +/*! + Convert the Qt string to OpenCascade unicode string. +*/ TCollection_ExtendedString QDS::toExtString( const QString& src ) { if ( src.isEmpty() ) @@ -112,11 +136,18 @@ TCollection_ExtendedString QDS::toExtString( const QString& src ) return trg; } +/*! + Convert the OpenCascade ascii string to OpenCascade unicode string. +*/ TCollection_ExtendedString QDS::toExtString( const TCollection_AsciiString& src ) { return TCollection_ExtendedString( src ); } +/*! + Load datum definitions in the dictionary from XML file \adictPath. + Returns true if load successed or false otherwise. +*/ bool QDS::load( const QString& dictPath ) { if ( dictPath.isEmpty() ) @@ -125,6 +156,11 @@ bool QDS::load( const QString& dictPath ) return DDS_Dictionary::Load( toAsciiString( dictPath ) ); } +/*! + Returns the label of unit system \asys. If component \acomp specified and not empty then + function find the given unit system in the given component otherwise all components will be searched. + If unit system not found then empty string returned. +*/ QString QDS::unitSystemLabel( const QString& sys, const QString& comp ) { QString lab; @@ -136,6 +172,11 @@ QString QDS::unitSystemLabel( const QString& sys, const QString& comp ) return lab; } +/*! + Gets the name of active unit system from the specified component \acomp. + If component not specified or component is empty string then first got component will be used. + If component exist then active unit system name returned or empty string otherwise. +*/ QString QDS::activeUnitSystem( const QString& comp ) { QString sys; @@ -146,6 +187,13 @@ QString QDS::activeUnitSystem( const QString& comp ) return sys; } +/*! + Sets the active unit system named \asys. If not empty component name \acomp specified then + unit system will be activated in the given component otherwise all components will be processed. + + After the changing of active unit system function notify about it to all registered datums + from processed components using method QDS_Datum::unitSystemChanged(); +*/ void QDS::setActiveUnitSystem( const QString& sys, const QString& comp ) { Handle(DDS_Dictionary) dic = DDS_Dictionary::Get(); @@ -179,6 +227,10 @@ void QDS::setActiveUnitSystem( const QString& sys, const QString& comp ) } } +/*! + Register given datum \adatum in the static list. + This function invoked by QDS_Datum constructor. +*/ void QDS::insertDatum( QDS_Datum* datum ) { if ( !datum ) @@ -187,6 +239,10 @@ void QDS::insertDatum( QDS_Datum* datum ) _datumList.append( datum ); } +/*! + Remove given datum \adatum from the static list. + This function invoked by QDS_Datum destructor. +*/ void QDS::removeDatum( QDS_Datum* datum ) { if ( !datum ) diff --git a/src/QDS/QDS.h b/src/QDS/QDS.h index 257dcb292..6f3fecd85 100644 --- a/src/QDS/QDS.h +++ b/src/QDS/QDS.h @@ -48,9 +48,18 @@ class Handle(TCollection_HExtendedString); class QDS_EXPORT QDS { public: - typedef enum { None = 0x00, Label = 0x01, Control = 0x02, Units = 0x04, - NotFormat = 0x08, NotAccel = 0x10, UnitsWithLabel = 0x20, - All = Label | Control | Units } DatumFlags; + /*! Enum describes bit flags of the Qt datum view and behaviour */ + typedef enum + { + None = 0x00, //!< Non specified any flags (Default behaviour) + Label = 0x01, //!< Create subwidget for datum label + Control = 0x02, //!< Create subwidget for datum input control + Units = 0x04, //!< Create subwidget for datum units of measure + NotFormat = 0x08, //!< Don't format initial value + NotAccel = 0x10, //!< Not support accelerators in datum label + UnitsWithLabel = 0x20, //!< Display units of measure in label like " () instead separate text" + All = Label | Control | Units //!< Create all subwidgets + } DatumFlags; public: static bool load( const QString& ); diff --git a/src/QDS/QDS_CheckBox.cxx b/src/QDS/QDS_CheckBox.cxx index dc73cda95..9713ca5e4 100644 --- a/src/QDS/QDS_CheckBox.cxx +++ b/src/QDS/QDS_CheckBox.cxx @@ -20,9 +20,27 @@ #include +/* + \class QDS_CheckBox + + Datum with control corresponding to check box. This control can have only two states: + 1 (on/true) or 0 (off/false). QDS_CheckBox don't take into account standard parameter + properties (minimum, maximum, filter, etc). + + QDS_CheckBox can set and get following values for access methods (setStringValue(), + setIntegerValue(), setDoubleValue(), stringValue(), integerValue(), doubleValue()): + \li "1" - check box state is setted as on. + \li "0" - check box state is setted as off. + \li "-1" - check box state is setted as "NoChage" (undefined). + + User can set and check a state "NoChange" using methods clear() and isEmpty() accordingly. +*/ + /*! - Constructor. This method is protected. Object can't be directly constructed. - Use static method QDS_CheckBox::Create instead. + Constructor. Create check box datum object with datum identifier \aid under widget \aparent. + Parameter \aflags define behaviour of datum and set of created subwidgets. Default value of + this parameter is QDS::All. Parameter \acomp specify the component name which will be used + during search of dictionary item. */ QDS_CheckBox::QDS_CheckBox( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QDS_Datum( id, parent, flags, comp ) @@ -45,7 +63,7 @@ void QDS_CheckBox::clear() } /*! - Returns string from QCheckBox widget. + Returns string from QCheckBox widget. If the check box state is on then 1 returned otherwise 0. */ QString QDS_CheckBox::getString() const { @@ -56,7 +74,9 @@ QString QDS_CheckBox::getString() const } /*! - Sets the string into QCheckBox widget. + Sets the string into QCheckBox widget. If argument \atxt is string with number "1" then check box + state is setted as on. If argument \atxt is string with number "0" then state is setted as off. + If argument \atxt is string with number "-1" then state is setted as "NoChage" (undefined). */ void QDS_CheckBox::setString( const QString& txt ) { @@ -95,25 +115,35 @@ QWidget* QDS_CheckBox::createControl( QWidget* parent ) } /*! - Notify about shanging of control state + Notify about ñhanging of control state */ void QDS_CheckBox::onParamChanged() { emit paramChanged(); } +/*! + Notify about ñhanging of control state. Switch off check box property "tristate" when + state changed by user. +*/ void QDS_CheckBox::onStateChanged( int state ) { if ( state != QButton::NoChange && checkBox() ) checkBox()->setTristate( false ); } +/*! + Sets the check box state \atheState. +*/ void QDS_CheckBox::setChecked( const bool theState ) { if ( checkBox() ) checkBox()->setChecked( theState ); } +/*! + Returns current check box state. +*/ bool QDS_CheckBox::isChecked() const { return checkBox() ? checkBox()->isChecked() : false; diff --git a/src/QDS/QDS_ComboBox.cxx b/src/QDS/QDS_ComboBox.cxx index ab97bade6..ac068735e 100644 --- a/src/QDS/QDS_ComboBox.cxx +++ b/src/QDS/QDS_ComboBox.cxx @@ -26,8 +26,18 @@ #include +/* + \class QDS_ComboBox + + Datum with control corresponding to combo box. This control used for datum with enumerable values. + It can be used for datum which has type of value 'List'. Each item of combobox defined two properties: + integer identifier and string name. All operations on items performed via identifier. +*/ + /*! - Constructor. + Constructor. Create combobox datum object with datum identifier \aid under widget \aparent. Parameter \aflags + define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All. + Parameter \acomp specify the component name which will be used during search of dictionary item. */ QDS_ComboBox::QDS_ComboBox( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QDS_Datum( id, parent, flags, comp ) @@ -42,7 +52,7 @@ QDS_ComboBox::~QDS_ComboBox() } /*! - Returns true if ComboBox allow to edit current Text. + Returns true if ComboBox allow to edit current text. */ bool QDS_ComboBox::editable() const { @@ -70,7 +80,7 @@ void QDS_ComboBox::setEditable( const bool on ) } /*! - Returns number of items in ComboBox. If total is 'false' then only + Returns number of items in ComboBox. If \atotal is 'false' then only visible items are taken into account otherwise all items. */ int QDS_ComboBox::count( bool total ) const @@ -84,7 +94,7 @@ int QDS_ComboBox::count( bool total ) const } /*! - Returns list of ids. If total is 'false' then only visible items + Returns list of list item identifiers \aids. If \atotal is 'false' then only visible items are taken into account otherwise all items. */ void QDS_ComboBox::values( QValueList& ids, bool total ) const @@ -96,7 +106,7 @@ void QDS_ComboBox::values( QValueList& ids, bool total ) const } /*! - Returns the current id as integer. + Returns the current id as integer. Reimplemented. */ int QDS_ComboBox::integerValue() const { @@ -112,7 +122,7 @@ int QDS_ComboBox::integerValue() const } /*! - Returns the current id as double. + Returns the current id as double. Reimplemented. */ double QDS_ComboBox::doubleValue() const { @@ -130,7 +140,7 @@ double QDS_ComboBox::doubleValue() const } /*! - Set the current item acording to specified id. + Set the current item acording to specified id. Reimplemented. */ void QDS_ComboBox::setIntegerValue( const int id ) { @@ -143,7 +153,7 @@ void QDS_ComboBox::setIntegerValue( const int id ) } /*! - Get the integer part of specified value and use it as new current identifier. + Get the integer part of specified value and use it as new current identifier. Reimplemented. */ void QDS_ComboBox::setDoubleValue( const double val ) { @@ -157,7 +167,7 @@ void QDS_ComboBox::setDoubleValue( const double val ) } /*! - Returns visible state of identificator. + Returns visible state of item specified by \aid. */ bool QDS_ComboBox::state( const int id ) const { @@ -168,8 +178,9 @@ bool QDS_ComboBox::state( const int id ) const } /*! - Sets the visible state of identificator. If 'id' is -1 then specified - state will be set to all ids. + Sets the visible state of item specified by \aid. If \aid is -1 then specified + state will be set to all items. If \aappend is set then keep status for other items + otherwise status of other items will be cleared. */ void QDS_ComboBox::setState( const bool on, const int id, const bool append ) { @@ -186,7 +197,9 @@ void QDS_ComboBox::setState( const bool on, const int id, const bool append ) } /*! - Sets the visible state of identificator from the specified list. + Sets the visible state of items specified by list of identifiers \aids. + If \aappend is set then keep status for other items otherwise status of other + items will be cleared. */ void QDS_ComboBox::setState( const bool on, const QValueList& ids, const bool append ) { @@ -222,7 +235,9 @@ void QDS_ComboBox::setState( const bool on, const QValueList& ids, const bo } /*! - Sets the user items into the combo box. + Sets the custom user items into the combo box. User items like standard dictionary + list items will be added into the combobox. This functionality allow to user override + items. */ void QDS_ComboBox::setValues( const QValueList& ids, const QStringList& names ) { @@ -238,7 +253,7 @@ void QDS_ComboBox::setValues( const QValueList& ids, const QStringList& nam /*! This is an overloaded member function, provided for convenience. It behaves essentially like the above function. It creates - QValueList (0, 1, 2 ... ) and call previous method + QValueList (0, 1, 2 ... ) and call previous method. */ void QDS_ComboBox::setValues( const QStringList& names ) { @@ -287,7 +302,7 @@ QString QDS_ComboBox::valueToString( const int val ) const } /*! - Returns string from QLineEdit widget. + Returns string from QComboBox widget. Reimplemented. */ QString QDS_ComboBox::getString() const { @@ -307,7 +322,7 @@ QString QDS_ComboBox::getString() const } /*! - Sets the string into QLineEdit widget. + Sets the string into QComboBox widget. Reimplemented. */ void QDS_ComboBox::setString( const QString& txt ) { @@ -352,7 +367,7 @@ QtxComboBox* QDS_ComboBox::comboBox() const } /*! - Create QComboBox widget as control subwidget. + Create QComboBox widget as control subwidget. Reimplemented. */ QWidget* QDS_ComboBox::createControl( QWidget* parent ) { @@ -364,6 +379,10 @@ QWidget* QDS_ComboBox::createControl( QWidget* parent ) return cb; } +/*! + Notification about active unit system changing. Reimplemented from QDS_Datum. + Update combobox content. +*/ void QDS_ComboBox::unitSystemChanged( const QString& system ) { QDS_Datum::unitSystemChanged( system ); @@ -454,7 +473,7 @@ void QDS_ComboBox::onTextChanged( const QString& ) } /*! - Notify about activation new item. + Notify about activation combobox item. */ void QDS_ComboBox::onActivated( int idx ) { @@ -474,7 +493,7 @@ void QDS_ComboBox::onActivated( int idx ) } /*! - Updates ComboBox after have change of visible state or items have been inserted / removed. + Updates ComboBox after have change of visible state or items have been inserted/removed. */ void QDS_ComboBox::updateComboBox() { diff --git a/src/QDS/QDS_Datum.cxx b/src/QDS/QDS_Datum.cxx index 87dc0c202..a542a19b4 100644 --- a/src/QDS/QDS_Datum.cxx +++ b/src/QDS/QDS_Datum.cxx @@ -31,9 +31,11 @@ #include #include +#include + /*! - Class: QDS_Datum::Wrapper - Descr: Wrapper widget for sub widgets. [internal] + class: QDS_Datum::Wrapper + descr: Wrapper widget for sub widgets. [internal] */ class QDS_Datum::Wrapper : public QWidget @@ -45,16 +47,13 @@ public: QWidget* widget() const; void setWidget( QWidget* ); - virtual bool eventFilter( QObject*, QEvent* ); - -protected: - virtual void resizeEvent( QResizeEvent* ); + virtual void setGeometry( int x, int y, int w, int h ); + virtual void setSizePolicy( QSizePolicy ); private: QWidget* myWid; }; - QDS_Datum::Wrapper::Wrapper( QWidget* parent ) : QWidget( parent ), myWid( 0 ) @@ -78,9 +77,6 @@ void QDS_Datum::Wrapper::setWidget( QWidget* wid ) if ( myWid == wid ) return; - if ( myWid ) - myWid->removeEventFilter( this ); - myWid = wid; if ( !myWid ) @@ -94,34 +90,67 @@ void QDS_Datum::Wrapper::setWidget( QWidget* wid ) myWid->updateGeometry(); updateGeometry(); - - myWid->installEventFilter( this ); } -bool QDS_Datum::Wrapper::eventFilter( QObject* o, QEvent* e ) +void QDS_Datum::Wrapper::setSizePolicy( QSizePolicy sp ) { - if ( e->type() == QEvent::Resize && o == widget() ) - { - QResizeEvent* re = (QResizeEvent*)e; - if ( re->size() != size() ) - resize( re->size() ); - } - return QWidget::eventFilter( o, e ); + QWidget::setSizePolicy( sp ); + + if ( widget() ) + widget()->setSizePolicy( sp ); } -void QDS_Datum::Wrapper::resizeEvent( QResizeEvent* e ) +void QDS_Datum::Wrapper::setGeometry( int x, int y, int w, int h ) { - QWidget::resizeEvent( e ); + QWidget::setGeometry( x, y, w, h ); if ( widget() && widget()->size() != size() ) - widget()->resize( size() ); + widget()->setGeometry( 0, 0, width(), height() ); } /*! - Class: QDS_Datum - Descr: Base class for control used data dictionary. [public] + \class QDS_Datum + + This is a base class for control using the data dictionary. Datum is successor of QObject (not QWidget). + This object can have three sub widgets named as Label, Control and Units. User can skip creation of + some of them manipulate by parameter \aflags. Label widget display label of datum, Control widget allow + to input value, Units widget display units of measure in the active system. + + These widgets constructs under parent of datum. If this parent has layout which can automaticaly add child + widgets (see QLayout::setAutoAdd()) then these subwidgets will be placed in following order: first widget + is Label, second - Control, third - Unints. User can add these widgets to layout manually using methods + QDS_Datum::addTo() or QDS_Datum::widget(). In last case User can retrieve desired widget and place it into + layout. + + If use QGroupBox as parent widget for datum object then all subwidgets will be arranged automatically by + group box according to column and orientation properties of QGroupBox. + + For example: + QGroupBox* box = new QGroupBox( 3, Qt::Horizontal, "datum box" ); + QDS_Datum* d1 = new QDS_Datum( "datum_1", box, All ); + QDS_Datum* d2 = new QDS_Datum( "datum_2", box, All ); + QDS_Datum* d3 = new QDS_Datum( "datum_3", box, All ); + + In this example we create the QGroupBox with 3 horizontal columns. All created datum widgets will be + placed automatically three widgets in a row. Each datum will be placed from up to bottom one by one. + + Datum value is stored as string. User can get/set this value in different kinds: + \liAs string - methods stringValue()/setStringValue(). + \liAs integer - methods integerValue()/setIntegerValue(). Given value converted to/from SI. + \liAs double - methods doubleValue()/setDoubleValue(). Given value converted to/from SI. + \liAs variant - methods value()/setValue(). + + User can perform some actions on datum subwidgets using following methods: isEnabled(), + setEnabled(), show(), hide(), setShown(), setFocus(), setAlignment(). */ +/*! + Constructor. Create datum object with datum identifier \aid under widget \aparent. Parameter \aflags + define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All. + Parameter \acomp specify the component name which will be used during search of dictionary item. + + Datum register self in the static list by QDS::insertDatum(). +*/ QDS_Datum::QDS_Datum( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QObject( parent ), myId( id ), @@ -161,6 +190,10 @@ myInitialised( false ) insertDatum( this ); } +/*! + Destructor. Destroy all subwidget. + Datum unregister self from the static list by QDS::removeDatum(). +*/ QDS_Datum::~QDS_Datum() { removeDatum( this ); @@ -174,11 +207,17 @@ QDS_Datum::~QDS_Datum() */ } +/*! + Overloaded operator allow to retrieve main subwidget named Control. +*/ QDS_Datum::operator QWidget*() const { return widget( Control ); } +/*! + Returns the datum id. +*/ QString QDS_Datum::id() const { initDatum(); @@ -186,6 +225,9 @@ QString QDS_Datum::id() const return myId; } +/*! + Returns the datum type of value. +*/ int QDS_Datum::type() const { initDatum(); @@ -196,6 +238,9 @@ int QDS_Datum::type() const return res; } +/*! + Returns the datum label string. +*/ QString QDS_Datum::label() const { initDatum(); @@ -210,6 +255,9 @@ QString QDS_Datum::label() const return labStr; } +/*! + Returns the datum units string. +*/ QString QDS_Datum::units() const { initDatum(); @@ -220,6 +268,9 @@ QString QDS_Datum::units() const return unitStr; } +/*! + Returns the datum value filter string. +*/ QString QDS_Datum::filter() const { initDatum(); @@ -230,6 +281,9 @@ QString QDS_Datum::filter() const return fltr; } +/*! + Returns the datum value format string. +*/ QString QDS_Datum::format() const { initDatum(); @@ -240,6 +294,9 @@ QString QDS_Datum::format() const return fmtStr; } +/*! + Returns the datum default value string. +*/ QString QDS_Datum::defaultValue() const { initDatum(); @@ -261,6 +318,9 @@ QString QDS_Datum::defaultValue() const return aDef; } +/*! + Returns the datum minimum value string. +*/ QString QDS_Datum::minimumValue() const { initDatum(); @@ -271,6 +331,9 @@ QString QDS_Datum::minimumValue() const return min; } +/*! + Returns the datum maximum value string. +*/ QString QDS_Datum::maximumValue() const { initDatum(); @@ -281,6 +344,9 @@ QString QDS_Datum::maximumValue() const return max; } +/*! + Returns the datum long description. +*/ QString QDS_Datum::longDescription() const { initDatum(); @@ -291,6 +357,9 @@ QString QDS_Datum::longDescription() const return ldStr; } +/*! + Returns the datum short description. +*/ QString QDS_Datum::shortDescription() const { initDatum(); @@ -301,6 +370,75 @@ QString QDS_Datum::shortDescription() const return sdStr; } +/*! + Returns the list of option names. +*/ +QStringList QDS_Datum::options() const +{ + QStringList res; + if ( !dicItem().IsNull() ) + { + TColStd_SequenceOfAsciiString lst; + dicItem()->GetOptionNames( lst ); + for ( int i = 1; i <= lst.Length(); i++ ) + res.append( toQString( lst.Value( i ) ) ); + } + return res; +} + +/*! + Returns the option specified by \aname as QVariant. + If option not exist then not valid QVariant returned. +*/ +QVariant QDS_Datum::option( const QString& name ) const +{ + QVariant res; + if ( !dicItem().IsNull() ) + res = QVariant( toQString( dicItem()->GetOption( toAsciiString( name ) ) ) ); + return res; +} + +/*! + Returns the option specified by \aname as QString. + If option not exist then empty string returned. +*/ +QString QDS_Datum::optionString( const QString& name ) const +{ + QString res; + if ( !dicItem().IsNull() ) + res = toQString( dicItem()->GetOption( toAsciiString( name ) ) ); + return res; +} + +/*! + Returns the option specified by \aname as double. + If option not exist then 0 returned. +*/ +double QDS_Datum::optionDouble( const QString& name ) const +{ + double res = 0; + QVariant opt = option( name ); + if ( opt.isValid() && opt.canCast( QVariant::Double ) ) + res = opt.toDouble(); + return res; +} + +/*! + Returns the option specified by \aname as integer. + If option not exist then 0 returned. +*/ +int QDS_Datum::optionInteger( const QString& name ) const +{ + int res = 0; + QVariant opt = option( name ); + if ( opt.isValid() && opt.canCast( QVariant::Int ) ) + res = opt.toInt(); + return res; +} + +/*! + Returns the datum value as variant (QVariant object). +*/ QVariant QDS_Datum::value() const { QVariant val; @@ -309,6 +447,9 @@ QVariant QDS_Datum::value() const return val; } +/*! + Returns the datum value as string (QString object). +*/ QString QDS_Datum::stringValue() const { initDatum(); @@ -319,6 +460,10 @@ QString QDS_Datum::stringValue() const return getString(); } +/*! + Returns the datum value as double. This value converted from units of measure in active unit system + to units of measure in unit system "SI". +*/ double QDS_Datum::doubleValue() const { initDatum(); @@ -336,6 +481,10 @@ double QDS_Datum::doubleValue() const return res; } +/*! + Returns the datum value as integer. This value converted from units of measure in active unit system + to units of measure in unit system "SI". +*/ int QDS_Datum::integerValue() const { initDatum(); @@ -353,6 +502,9 @@ int QDS_Datum::integerValue() const return res; } +/*! + Returns the text from datum. Text consist of label, string value and units. +*/ QString QDS_Datum::text() const { initDatum(); @@ -372,11 +524,17 @@ QString QDS_Datum::text() const return res; } +/*! + Returns false if datum control has inputted value. +*/ bool QDS_Datum::isEmpty() const { return stringValue().isEmpty(); } +/*! + Reset datum state and set default value as current. +*/ void QDS_Datum::reset() { initDatum(); @@ -391,6 +549,9 @@ void QDS_Datum::reset() emit paramChanged( str ); } +/*! + Clear the control. +*/ void QDS_Datum::clear() { initDatum(); @@ -408,6 +569,9 @@ void QDS_Datum::clear() } } +/*! + Set varian value (QVariant object) into datum. +*/ void QDS_Datum::setValue( const QVariant& val ) { if ( val.isValid() && val.canCast( QVariant::String ) ) @@ -416,6 +580,9 @@ void QDS_Datum::setValue( const QVariant& val ) clear(); } +/*! + Set string value (QString object) into datum. +*/ void QDS_Datum::setStringValue( const QString& txt ) { initDatum(); @@ -431,6 +598,10 @@ void QDS_Datum::setStringValue( const QString& txt ) emit paramChanged( str ); } +/*! + Set double value into datum. This value converted from units of measure in unit system "SI" + to units of measure in active unit system. Format the value using datum format if it required. +*/ void QDS_Datum::setDoubleValue( const double num ) { initDatum(); @@ -450,6 +621,10 @@ void QDS_Datum::setDoubleValue( const double num ) emit paramChanged( str ); } +/*! + Set integer value into datum. This value converted from units of measure in unit system "SI" + to units of measure in active unit system. Format the value using datum format if it required. +*/ void QDS_Datum::setIntegerValue( const int num ) { initDatum(); @@ -470,7 +645,7 @@ void QDS_Datum::setIntegerValue( const int num ) } /*! - Returns true if all subwidgets specified by 'element' enabled. + Returns true if all subwidgets specified by \aelement enabled. */ bool QDS_Datum::isEnabled( const int element ) const { @@ -487,8 +662,8 @@ bool QDS_Datum::isEnabled( const int element ) const } /*! - Enable/Disable subwidgets specified by 'element'. - Values: Label, Control, Units or their combinations. + Enable/Disable subwidgets specified by \aelement. + Possible values of \aelement: Label, Control, Units or their combinations. */ void QDS_Datum::setEnabled( const bool on, const int element ) { @@ -510,49 +685,44 @@ void QDS_Datum::setEnabled( bool on ) setEnabled( on, Control ); } +/*! + Show/hide subwidgets specified by \aelement. + Possible values of \aelement: Label, Control, Units or their combinations. +*/ void QDS_Datum::setShown( const bool visible, const int flags ) { - if ( visible ) - show( flags ); - else - hide( flags ); + initDatum(); + + uint flag = Units; + while ( flag ) + { + if ( flags & flag && widget( flag ) ) + widget( flag )->setShown( visible ); + flag = flag >> 1; + } } /*! - Show subwidgets specified by 'element'. - Values: Label, Control, Units or their combinations. + Show subwidgets specified by \aelement. + Possible values of \aelement: Label, Control, Units or their combinations. */ void QDS_Datum::show( const int element ) { - initDatum(); - - if ( ( element & Label ) && labelWidget() ) - labelWidget()->show(); - if ( ( element & Units ) && unitsWidget() ) - unitsWidget()->show(); - if ( ( element & Control ) && controlWidget() ) - controlWidget()->show(); + setShown( true, element ); } /*! - Hide subwidgets specified by 'element'. - Values: Label, Control, Units or their combinations. + Hide subwidgets specified by \aelement. + Possible values of \aelement: Label, Control, Units or their combinations. */ void QDS_Datum::hide( const int element ) { - initDatum(); - - if ( ( element & Label ) && labelWidget() ) - labelWidget()->hide(); - if ( ( element & Units ) && unitsWidget() ) - unitsWidget()->hide(); - if ( ( element & Control ) && controlWidget() ) - controlWidget()->hide(); + setShown( false, element ); } /*! - Returns subwidget specified by 'element'. - Possible values: Label, Control, Units. + Returns subwidget specified by \aelement. + Possible values of \aelement: Label, Control, Units. */ QWidget* QDS_Datum::widget( const int element ) const { @@ -573,7 +743,7 @@ void QDS_Datum::setFocus() /*! Returns true if control contains valid value otherwise returns false - and display warning message box if parameter msgBox is set. + and display warning message box if parameter \amsgBox is set. */ bool QDS_Datum::isValid( const bool msgBox, const QString& extMsg, const QString& extLabel ) const { @@ -658,7 +828,7 @@ bool QDS_Datum::isValid( const bool msgBox, const QString& extMsg, const QString } /*! - Add widgets to the vertical layout. + Add widgets to the vertical box layout. */ void QDS_Datum::addTo( QVBoxLayout* l ) { @@ -676,7 +846,7 @@ void QDS_Datum::addTo( QVBoxLayout* l ) } /*! - Add widgets to the horizaontal layout. + Add widgets to the horizaontal box layout. */ void QDS_Datum::addTo( QHBoxLayout* l ) { @@ -732,6 +902,9 @@ void QDS_Datum::setAlignment( const int align, const int type ) unitsWidget()->setAlignment( align ); } +/*! + Perform delayed initialisation. Reimplemented for internal reasons. +*/ bool QDS_Datum::eventFilter( QObject* o, QEvent* e ) { if ( o == parent() ) @@ -744,14 +917,14 @@ bool QDS_Datum::eventFilter( QObject* o, QEvent* e ) } /*! - Notify about parameter changing. + Notify about parameter value changing. */ void QDS_Datum::onParamChanged() { } /*! - Delayed initialization. + Perform delayed initialization. */ void QDS_Datum::onInitDatum() { @@ -767,7 +940,7 @@ void QDS_Datum::onDestroyed( QObject* obj ) } /*! - Returns QLabel instance which contains data dictionary label. + Returns QLabel widget which contains dictionary item label. */ QLabel* QDS_Datum::labelWidget() const { @@ -776,7 +949,7 @@ QLabel* QDS_Datum::labelWidget() const } /*! - Returns QLabel instance which contains data dictionary units. + Returns QLabel widget which contains dictionary item units. */ QLabel* QDS_Datum::unitsWidget() const { @@ -810,7 +983,7 @@ void QDS_Datum::setDicItem( const Handle(DDS_DicItem)& item ) } /*! - Creates QLabel widget for data label. + Creates QLabel widget for dictionary item label. */ QLabel* QDS_Datum::createLabel( QWidget* parent ) { @@ -818,7 +991,7 @@ QLabel* QDS_Datum::createLabel( QWidget* parent ) } /*! - Creates QLabel widget for data units. + Creates QLabel widget for dictionary item units. */ QLabel* QDS_Datum::createUnits( QWidget* parent ) { @@ -826,7 +999,7 @@ QLabel* QDS_Datum::createUnits( QWidget* parent ) } /*! - Returns validator accordance to data type. + Creates and returns validator accordance to datum type of value. */ QValidator* QDS_Datum::validator( const bool limits ) const { @@ -913,7 +1086,7 @@ bool QDS_Datum::validate( const QString& txt ) const } /*! - Retrieves information from data dictionary and create subwidgets using virtual mechanism. + Retrieves information from dictionary and create subwidgets using virtual mechanism. Virtual mechanism doesn't work in constructor and destructor, therefore this method should be called outside the constructor. */ @@ -954,6 +1127,9 @@ void QDS_Datum::initialize() labelWidget()->setBuddy( ctrl ); } +/*! + Notification about active unit system changing. Update label and units texts. +*/ void QDS_Datum::unitSystemChanged( const QString& unitSystem ) { QString labText = label(); @@ -1011,7 +1187,7 @@ QString QDS_Datum::textToUnits( const QString& txt ) } /*! - Format the specified integer as data dictionary value. + Format the specified integer as dictionary item value. */ QString QDS_Datum::format( const int num, const QString& id, const bool convert ) { @@ -1038,7 +1214,7 @@ QString QDS_Datum::format( const int num, const QString& id, const bool convert } /*! - Format the specified double as data dictionary value. + Format the specified double as dictionary item value. */ QString QDS_Datum::format( const double num, const QString& id, const bool convert ) { @@ -1065,7 +1241,7 @@ QString QDS_Datum::format( const double num, const QString& id, const bool conve } /*! - Format the specified string as data dictionary value. + Format the specified string as dictionary item value. */ QString QDS_Datum::format( const QString& str, const QString& id, const bool convert ) { @@ -1092,7 +1268,7 @@ QString QDS_Datum::format( const QString& str, const QString& id, const bool con } /*! - Format the given string accordance to data format. + Format the given string accordance to dictionary item format. */ QString QDS_Datum::format( const QString& aFormat, const int aType, const int aValue ) { @@ -1123,7 +1299,7 @@ QString QDS_Datum::format( const QString& aFormat, const int aType, const int aV } /*! - Format the given string accordance to data format. + Format the given string accordance to dictionary item format. */ QString QDS_Datum::format( const QString& aFormat, const int aType, const double aValue ) { @@ -1154,7 +1330,7 @@ QString QDS_Datum::format( const QString& aFormat, const int aType, const double } /*! - Format the given string accordance to data format. + Format the given string accordance to dictionary item format. */ QString QDS_Datum::format( const QString& aFormat, const int aType, const QString& aValue ) { @@ -1271,7 +1447,7 @@ QString QDS_Datum::canonicalFormat( const QString& fmt, QString& flags ) } /*! - Returns displayable units string for given DD ID + Returns displayable units string for given dictionary item id */ QString QDS_Datum::units( const QString& id ) { @@ -1350,6 +1526,9 @@ void QDS_Datum::invalidateCache() myTargetValue = QString::null; } +/*! + Remove the acceleartor tags '&' from specified label string \asrc. +*/ QString QDS_Datum::removeAccel( const QString& src ) { QString trg = src; @@ -1366,6 +1545,9 @@ QString QDS_Datum::removeAccel( const QString& src ) return trg; } +/*! + Returns true if given format string \atheFormat has specificator for double values. +*/ bool QDS_Datum::isDoubleFormat( const QString& theFormat ) { if ( theFormat.length() > 0 ) @@ -1377,11 +1559,17 @@ bool QDS_Datum::isDoubleFormat( const QString& theFormat ) return false; } +/*! + Returns datum flags. +*/ int QDS_Datum::flags() const { return myFlags; } +/*! + Perform intialization if it needed. [internal] +*/ void QDS_Datum::initDatum() const { if ( myInitialised ) @@ -1395,6 +1583,9 @@ void QDS_Datum::initDatum() const parent()->removeEventFilter( this ); } +/*! + Return wrapper for specified subwidget. [internal] +*/ QDS_Datum::Wrapper* QDS_Datum::wrapper( QWidget* wid ) const { if ( !wid ) @@ -1409,6 +1600,9 @@ QDS_Datum::Wrapper* QDS_Datum::wrapper( QWidget* wid ) const return wrap; } +/*! + Return wrapper for specified subwidget name. [internal] +*/ QDS_Datum::Wrapper* QDS_Datum::wrapper( const int id ) const { Wrapper* wrap = 0; @@ -1417,6 +1611,9 @@ QDS_Datum::Wrapper* QDS_Datum::wrapper( const int id ) const return wrap; } +/*! + Return subwidget name for specified wrapper. [internal] +*/ int QDS_Datum::wrapperType( QDS_Datum::Wrapper* wrap ) const { int id = -1; diff --git a/src/QDS/QDS_Datum.h b/src/QDS/QDS_Datum.h index 5e65fe424..9ff431f66 100644 --- a/src/QDS/QDS_Datum.h +++ b/src/QDS/QDS_Datum.h @@ -21,7 +21,7 @@ #include "QDS.h" -#include +#include #include #include #include @@ -60,6 +60,12 @@ public: QString minimumValue() const; QString maximumValue() const; + QStringList options() const; + QVariant option( const QString& ) const; + QString optionString( const QString& ) const; + double optionDouble( const QString& ) const; + int optionInteger( const QString& ) const; + virtual QVariant value() const; virtual QString stringValue() const; @@ -82,9 +88,9 @@ public: virtual bool isEnabled( const int = Control ) const; virtual void setEnabled( const bool, const int ); - void show( const int = -1 ); - void hide( const int = -1 ); - void setShown( const bool, const int = -1 ); + void show( const int = All ); + void hide( const int = All ); + virtual void setShown( const bool, const int = All ); QWidget* widget( const int ) const; void setFocus(); diff --git a/src/QDS/QDS_LineEdit.cxx b/src/QDS/QDS_LineEdit.cxx index a4b879cd3..cb5ddf148 100644 --- a/src/QDS/QDS_LineEdit.cxx +++ b/src/QDS/QDS_LineEdit.cxx @@ -22,8 +22,8 @@ #include /* - Class: QDS_LineEdit::Editor - Descr: Internal class inherited from line edit + class: QDS_LineEdit::Editor + descr: Internal class inherited from line edit */ class QDS_LineEdit::Editor : public QLineEdit @@ -50,12 +50,18 @@ private: }; /* - Class: QDS_LineEdit - Descr: Data control corresponding to line edit + \class QDS_LineEdit + + Datum with control corresponding to line edit. User can enter parameter value in single line editor. + User inputted values will be checked by validator according to type if value and parameter properties + (minimum, maximum, filter, precision, etc). If user input not valid value then this value will be + displayed in red color. */ /*! - Constructor. + Constructor. Create line edit datum object with datum identifier \aid under widget \aparent. Parameter \aflags + define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All. + Parameter \acomp specify the component name which will be used during search of dictionary item. */ QDS_LineEdit::QDS_LineEdit( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QDS_Datum( id, parent, flags, comp ) @@ -69,6 +75,10 @@ QDS_LineEdit::~QDS_LineEdit() { } +/*! + Notification about active unit system changing. Reimplemented from QDS_Datum. + Update validator settings for line edit. +*/ void QDS_LineEdit::unitSystemChanged( const QString& system ) { QDS_Datum::unitSystemChanged( system ); @@ -107,7 +117,44 @@ void QDS_LineEdit::unitSystemChanged( const QString& system ) } /*! - Set the aligment of line edit. + Select all text in the editor. +*/ +void QDS_LineEdit::selectAll() +{ + if ( lineEdit() ) + lineEdit()->selectAll(); +} + +/*! + Deselect all text in the editor. +*/ +void QDS_LineEdit::deselect() +{ + if ( lineEdit() ) + lineEdit()->deselect(); +} + +/*! + Select or deselect all text in the editor. +*/ +void QDS_LineEdit::setSelection( const bool on ) +{ + if ( on ) + selectAll(); + else + deselect(); +} + +/*! + Returns true if the editor has selected text. +*/ +bool QDS_LineEdit::hasSelection() const +{ + return lineEdit() ? lineEdit()->hasSelectedText() : false; +} + +/*! + Set the aligment of line edit. Reimplemented from QDS_Datum. */ void QDS_LineEdit::setAlignment( const int align, const int type ) { @@ -118,7 +165,7 @@ void QDS_LineEdit::setAlignment( const int align, const int type ) } /*! - Returns string from QLineEdit widget. + Returns string value from QLineEdit widget. Reimplemented from QDS_Datum. */ QString QDS_LineEdit::getString() const { @@ -129,7 +176,7 @@ QString QDS_LineEdit::getString() const } /*! - Sets the string into QLineEdit widget. + Sets the string value into QLineEdit widget. Reimplemented from QDS_Datum. */ void QDS_LineEdit::setString( const QString& txt ) { @@ -146,7 +193,7 @@ QLineEdit* QDS_LineEdit::lineEdit() const } /*! - Create QLineEdit widget as control subwidget. + Create QLineEdit widget as control subwidget. Reimplemented from QDS_Datum. */ QWidget* QDS_LineEdit::createControl( QWidget* parent ) { @@ -170,7 +217,7 @@ void QDS_LineEdit::onTextChanged( const QString& ) } /*! - Checks the current parameter value on validity. + Checks the current parameter value on validity. If value is not valid then set text color as red. */ void QDS_LineEdit::onParamChanged() { diff --git a/src/QDS/QDS_LineEdit.h b/src/QDS/QDS_LineEdit.h index 3362e7437..293e57eed 100644 --- a/src/QDS/QDS_LineEdit.h +++ b/src/QDS/QDS_LineEdit.h @@ -27,6 +27,8 @@ class QDS_EXPORT QDS_LineEdit : public QDS_Datum { Q_OBJECT + Q_PROPERTY( bool Selection READ hasSelection WRITE setSelection ) + protected: class Editor; @@ -34,8 +36,13 @@ public: QDS_LineEdit( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); virtual ~QDS_LineEdit(); + virtual void deselect(); + virtual void selectAll(); virtual void setAlignment( const int, const int = Label ); + bool hasSelection() const; + void setSelection( const bool ); + signals: void returnPressed(); diff --git a/src/QDS/QDS_RadioBox.cxx b/src/QDS/QDS_RadioBox.cxx index f07b190bd..44771f0fc 100644 --- a/src/QDS/QDS_RadioBox.cxx +++ b/src/QDS/QDS_RadioBox.cxx @@ -28,8 +28,22 @@ #include #include +/* + \class QDS_RadioBox + + Datum with control corresponding to button group with set of exclusive radio buttons. + This control used for datum with enumerable values. It can be used for datum which has + type of value 'List'. Each radio button of combobox defined two properties: + integer identifier and string name. All operations on radio buttons performed via identifier. + + If datum label text is specified then it displayed in group box title. +*/ + /*! - Constructor. + Constructor. Create radio button box datum object with datum identifier \aid under widget \aparent. + Parameter \aflags define behaviour of datum and set of created subwidgets. Default value of this + parameter is QDS::Control. Parameter \acomp specify the component name which will be used during + search of dictionary item. */ QDS_RadioBox::QDS_RadioBox( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QDS_Datum( id, parent, flags & ~( Label | Units ), comp ) @@ -44,8 +58,8 @@ QDS_RadioBox::~QDS_RadioBox() } /*! - Returns number of items in ComboBox. If total is 'false' then only - visible items are taken into account otherwise all items. + Returns number of buttons in radio box. If total is 'false' then only + visible buttons are taken into account otherwise all buttons. */ int QDS_RadioBox::count( bool total ) const { @@ -60,8 +74,8 @@ int QDS_RadioBox::count( bool total ) const } /*! - Returns list of ids. If total is 'false' then only visible items - are taken into account otherwise all items. + Returns list of button identifiers \aids. If \atotal is 'false' then only visible + buttons are taken into account otherwise all buttons. */ void QDS_RadioBox::values( QValueList& ids, bool total ) const { @@ -72,7 +86,7 @@ void QDS_RadioBox::values( QValueList& ids, bool total ) const } /*! - Returns visible state of identificator. + Returns visible state of button specified by \aid. */ bool QDS_RadioBox::state( const int id ) const { @@ -83,8 +97,9 @@ bool QDS_RadioBox::state( const int id ) const } /*! - Sets the visible state of identificator. If 'id' is -1 then specified - state will be set to all ids. + Sets the visible state of button specified by \aid. If \aid is -1 then specified + state will be set to all buttons. If \aappend is set then keep status for other + buttons otherwise status of other buttons will be cleared. */ void QDS_RadioBox::setState( const bool on, const int id, const bool append ) { @@ -101,7 +116,9 @@ void QDS_RadioBox::setState( const bool on, const int id, const bool append ) } /*! - Sets the visible state of identificator from the specified list. + Sets the visible state of buttons specified by list of identifiers \aids. + If \aappend is set then keep status for other buttons otherwise status of other + buttons will be cleared. */ void QDS_RadioBox::setState( const bool on, const QValueList& ids, const bool append ) { @@ -135,7 +152,9 @@ void QDS_RadioBox::setState( const bool on, const QValueList& ids, const bo } /*! - Sets the user items into the combo box. + Sets the custom user buttons into the radio box. User buttons like standard dictionary + button from list will be added into the radio box. This functionality allow to user override + buttons. */ void QDS_RadioBox::setValues( const QValueList& ids, const QStringList& names ) { @@ -160,7 +179,8 @@ void QDS_RadioBox::setValues( const QStringList& names ) } /*! - Returns string from control. + Returns string from radio box. Reimplemented. String which contains identifier of + currently selected button returned. */ QString QDS_RadioBox::getString() const { @@ -176,7 +196,8 @@ QString QDS_RadioBox::getString() const } /*! - Sets the string into control. + Sets the string into radio box. Reimplemented. Button with identifier from specified + string \atxt became selected in radio box. */ void QDS_RadioBox::setString( const QString& txt ) { @@ -227,7 +248,7 @@ QButtonGroup* QDS_RadioBox::buttonGroup() const } /*! - Create QComboBox widget as control subwidget. + Create QButtonGroup widget as control subwidget. */ QWidget* QDS_RadioBox::createControl( QWidget* parent ) { @@ -237,6 +258,10 @@ QWidget* QDS_RadioBox::createControl( QWidget* parent ) return bg; } +/*! + Notification about active unit system changing. Reimplemented from QDS_Datum. + Update radio box content. +*/ void QDS_RadioBox::unitSystemChanged( const QString& system ) { QDS_Datum::unitSystemChanged( system ); @@ -308,7 +333,7 @@ void QDS_RadioBox::unitSystemChanged( const QString& system ) } /*! - Notify about state changed in line edit of RadioBox. + Notify about activation radio button. */ void QDS_RadioBox::onToggled( bool on ) { @@ -322,7 +347,7 @@ void QDS_RadioBox::onToggled( bool on ) } /*! - Updates RadioBox after have change of visible state or items have been inserted / removed. + Updates RadioBox after have change of visible state or buttons have been inserted/removed. */ void QDS_RadioBox::updateRadioBox() { @@ -374,6 +399,9 @@ void QDS_RadioBox::updateRadioBox() } } +/*! + Returns the list of the radio buttons from the button group. +*/ void QDS_RadioBox::buttons( QPtrList& lst ) const { lst.setAutoDelete( false ); diff --git a/src/QDS/QDS_RadioBox.h b/src/QDS/QDS_RadioBox.h index e7cf86618..862b6ab4f 100644 --- a/src/QDS/QDS_RadioBox.h +++ b/src/QDS/QDS_RadioBox.h @@ -39,7 +39,7 @@ class QDS_EXPORT QDS_RadioBox : public QDS_Datum Q_OBJECT public: - QDS_RadioBox( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); + QDS_RadioBox( const QString&, QWidget* = 0, const int = Control, const QString& = QString::null ); virtual ~QDS_RadioBox(); int count( bool = false ) const; diff --git a/src/QDS/QDS_SpinBox.cxx b/src/QDS/QDS_SpinBox.cxx index 430d7fd5a..71864cb51 100644 --- a/src/QDS/QDS_SpinBox.cxx +++ b/src/QDS/QDS_SpinBox.cxx @@ -22,8 +22,18 @@ #include +/* + \class QDS_SpinBox + + Datum with control corresponding to spin box. This control used for integer numbers. + User can input data directly in spin box or can modify current value with given + increment. +*/ + /*! - Constructor. + Constructor. Create spin box datum object with datum identifier \aid under widget \aparent. Parameter \aflags + define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All. + Parameter \acomp specify the component name which will be used during search of dictionary item. */ QDS_SpinBox::QDS_SpinBox( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QDS_Datum( id, parent, flags, comp ) @@ -38,7 +48,7 @@ QDS_SpinBox::~QDS_SpinBox() } /*! - Returns string from QSpinBox widget. + Returns string from QSpinBox widget. Reimplemented. */ QString QDS_SpinBox::getString() const { @@ -56,7 +66,7 @@ QString QDS_SpinBox::getString() const } /*! - Sets the string into QSpinBox widget. + Sets the string into QSpinBox widget. Reimplemented. */ void QDS_SpinBox::setString( const QString& txt ) { @@ -77,7 +87,7 @@ QtxIntSpinBox* QDS_SpinBox::spinBox() const } /*! - Create QSpinBox widget as control subwidget. + Create QSpinBox widget as control subwidget. Reimplemented. */ QWidget* QDS_SpinBox::createControl( QWidget* parent ) { @@ -88,7 +98,7 @@ QWidget* QDS_SpinBox::createControl( QWidget* parent ) } /*! - Notify about text changing in spin box. + Notify about value changing in spin box. */ void QDS_SpinBox::onValueChanged( int val ) { @@ -119,7 +129,8 @@ int QDS_SpinBox::step() const } /*! - This method is redefined from ancestor class to perform own initialization ( suffix, prefix, etc ). + Notification about active unit system changing. Reimplemented from QDS_Datum. + Update validator and spin box parameters: suffix, prefix, minimum, maximum. */ void QDS_SpinBox::unitSystemChanged( const QString& system ) { diff --git a/src/QDS/QDS_SpinBoxDbl.cxx b/src/QDS/QDS_SpinBoxDbl.cxx index ac99303e8..0bd7bcf26 100644 --- a/src/QDS/QDS_SpinBoxDbl.cxx +++ b/src/QDS/QDS_SpinBoxDbl.cxx @@ -24,8 +24,18 @@ #include +/* + \class QDS_SpinBoxDbl + + Datum with control corresponding to spin box. This control used for double numbers. + User can input data directly in spin box or can modify current value with given + increment. +*/ + /*! - Constructor. + Constructor. Create spin box datum object with datum identifier \aid under widget \aparent. Parameter \aflags + define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All. + Parameter \acomp specify the component name which will be used during search of dictionary item. */ QDS_SpinBoxDbl::QDS_SpinBoxDbl( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QDS_Datum( id, parent, flags, comp ) @@ -40,7 +50,7 @@ QDS_SpinBoxDbl::~QDS_SpinBoxDbl() } /*! - Returns string from QSpinBox widget. + Returns string from QSpinBox widget. Reimplemented. */ QString QDS_SpinBoxDbl::getString() const { @@ -66,7 +76,7 @@ QString QDS_SpinBoxDbl::getString() const } /*! - Sets the string into QSpinBox widget. + Sets the string into QSpinBox widget. Reimplemented. */ void QDS_SpinBoxDbl::setString( const QString& txt ) { @@ -87,7 +97,7 @@ QtxDblSpinBox* QDS_SpinBoxDbl::spinBox() const } /*! - Create QSpinBox widget as control subwidget. + Create QSpinBox widget as control subwidget. Reimplemented. */ QWidget* QDS_SpinBoxDbl::createControl( QWidget* parent ) { @@ -98,7 +108,7 @@ QWidget* QDS_SpinBoxDbl::createControl( QWidget* parent ) } /*! - Notify about text changing in spin box. + Notify about value changing in spin box. */ void QDS_SpinBoxDbl::onValueChanged( double ) { @@ -129,6 +139,10 @@ void QDS_SpinBoxDbl::setStep( const double step ) spinBox()->setLineStep( step ); } +/*! + Notification about active unit system changing. Reimplemented from QDS_Datum. + Update validator and spin box parameters: suffix, prefix, minimum, maximum. +*/ void QDS_SpinBoxDbl::unitSystemChanged( const QString& system ) { QDS_Datum::unitSystemChanged( system ); diff --git a/src/QDS/QDS_Table.cxx b/src/QDS/QDS_Table.cxx new file mode 100644 index 000000000..b14e80c8f --- /dev/null +++ b/src/QDS/QDS_Table.cxx @@ -0,0 +1,348 @@ +// Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "QDS_Table.h" + +#include "QDS_LineEdit.h" + +class QDS_Table::DeleteFilter : public QObject +{ +public: + DeleteFilter( QObject* = 0 ); + virtual ~DeleteFilter(); + + virtual bool eventFilter( QObject*, QEvent* ); +}; + +QDS_Table::DeleteFilter::DeleteFilter( QObject* parent ) +: QObject( parent ) +{ +} + +QDS_Table::DeleteFilter::~DeleteFilter() +{ +} + +bool QDS_Table::DeleteFilter::eventFilter( QObject* o, QEvent* e ) +{ + if ( e->type() == QEvent::DeferredDelete ) + return true; + else + return false; +} + +QDS_Table::QDS_Table( QWidget* parent, const char* name ) +: QtxTable( parent, name ), +myHorEdit( 0 ), +myVerEdit( 0 ), +myTableEdit( 0 ), +myKeepEdits( false ) +{ +} + +QDS_Table::QDS_Table( int r, int c, QWidget* parent, const char* name ) +: QtxTable( r, c, parent, name ), +myHorEdit( 0 ), +myVerEdit( 0 ), +myTableEdit( 0 ), +myKeepEdits( false ) +{ + myRowEdit.resize( r ); + myColEdit.resize( c ); +} + +QDS_Table::~QDS_Table() +{ +} + +QDS_Datum* QDS_Table::horizontalHeaderEditor() const +{ + return myHorEdit; +} + +QDS_Datum* QDS_Table::verticalHeaderEditor() const +{ + return myVerEdit; +} + +QDS_Datum* QDS_Table::headerEditor( const Orientation o ) const +{ + return o == Horizontal ? myHorEdit : myVerEdit; +} + +void QDS_Table::setVerticalHeaderEditor( QDS_Datum* dat ) +{ + setHeaderEditor( Vertical, dat ); +} + +void QDS_Table::setHorizontalHeaderEditor( QDS_Datum* dat ) +{ + setHeaderEditor( Horizontal, dat ); +} + +void QDS_Table::setHeaderEditor( QDS_Datum* dat ) +{ + setHeaderEditor( Vertical, dat ); + setHeaderEditor( Horizontal, dat ); +} + +void QDS_Table::setHeaderEditor( const Orientation o, QDS_Datum* dat ) +{ + if ( headerEditor( o ) == dat ) + return; + + if ( isHeaderEditing() ) + endEditHeader(); + + if ( o == Horizontal ) + myHorEdit = dat; + else + myVerEdit = dat; + + initEditor( dat ); +} + +QDS_Datum* QDS_Table::tableEditor() const +{ + return myTableEdit; +} + +QDS_Datum* QDS_Table::rowEditor( const int row ) const +{ + if ( row < 0 || row >= (int)myRowEdit.size() ) + return 0; + + return myRowEdit.at( row ); +} + +QDS_Datum* QDS_Table::columnEditor( const int col ) const +{ + if ( col < 0 || col >= (int)myColEdit.size() ) + return 0; + + return myColEdit.at( col ); +} + +QDS_Datum* QDS_Table::cellEditor( const int row, const int col ) const +{ + if ( !myCellEdit.contains( row ) ) + return 0; + + const DatumMap& map = myCellEdit[row]; + return map.contains( col ) ? map[col] : 0; +} + +void QDS_Table::setTableEditor( QDS_Datum* dat ) +{ + if ( tableEditor() == dat ) + return; + + if ( isEditing() && !cellEditor( currEditRow(), currEditCol() ) && + !columnEditor( currEditCol() ) && !rowEditor( currEditRow() ) ) + endEdit( currEditRow(), currEditCol(), false, false ); + + myTableEdit = dat; + initEditor( dat ); +} + +void QDS_Table::setRowEditor( const int row, QDS_Datum* dat ) +{ + if ( row < 0 || row >= (int)myRowEdit.size() || rowEditor( row ) == dat ) + return; + + if ( isEditing() && row == currEditRow()&& + !cellEditor( currEditRow(), currEditCol() ) ) + endEdit( currEditRow(), currEditCol(), false, false ); + + myRowEdit.insert( row, dat ); + initEditor( dat ); +} + +void QDS_Table::setColumnEditor( const int col, QDS_Datum* dat ) +{ + if ( col < 0 || col >= (int)myColEdit.size() || columnEditor( col ) == dat ) + return; + + if ( isEditing() && col == currEditCol()&& + !cellEditor( currEditRow(), currEditCol() ) ) + endEdit( currEditRow(), currEditCol(), false, false ); + + myColEdit.insert( col, dat ); + initEditor( dat ); +} + +void QDS_Table::setCellEditor( const int row, const int col, QDS_Datum* dat ) +{ + if ( row < 0 || row >= numRows() || col < 0 || col >= numCols() || cellEditor( row, col ) == dat ) + return; + + if ( isEditing() && currEditRow() == row && currEditCol() == col && actualCellEditor( row, col ) != dat ) + endEdit( currEditRow(), currEditCol(), false, false ); + + if ( !myCellEdit.contains( row ) ) + myCellEdit.insert( row, DatumMap() ); + + myCellEdit[row].insert( col, dat ); + initEditor( dat ); +} + +QDS_Datum* QDS_Table::actualCellEditor( const int row, const int col ) const +{ + QDS_Datum* dat = cellEditor( row, col ); + if ( !dat ) + dat = columnEditor( col ); + if ( !dat ) + dat = rowEditor( row ); + if ( !dat ) + dat = tableEditor(); + return dat; +} + +void QDS_Table::setNumRows( int r ) +{ + int old = numRows(); + QtxTable::setNumRows( r ); + + if ( isKeepEditors() ) + myRowEdit.resize( QMAX( (int)myRowEdit.size(), r ) ); + else + { + myRowEdit.resize( r ); + for ( int i = r + 1; i <= old; i++ ) + myCellEdit.remove( i ); + } +} + +void QDS_Table::setNumCols( int c ) +{ + int old = numCols(); + QtxTable::setNumCols( c ); + + if ( isKeepEditors() ) + myColEdit.resize( QMAX( (int)myColEdit.size(), c ) ); + else + { + myColEdit.resize( c ); + for ( CellMap::Iterator it = myCellEdit.begin(); it != myCellEdit.end(); ++it ) + { + DatumMap& map = it.data(); + for ( int i = c + 1; i <= old; i++ ) + map.remove( i ); + } + } +} + +void QDS_Table::clearCellWidget( int row, int col ) +{ + QDS_Datum* dat = actualCellEditor( row, col ); + if ( dat ) + dat->hide(); + + QtxTable::clearCellWidget( row, col ); +} + +bool QDS_Table::isKeepEditors() const +{ + return myKeepEdits; +} + +void QDS_Table::setKeepEditors( const bool on ) +{ + myKeepEdits = on; +} + +QWidget* QDS_Table::createHeaderEditor( QHeader* header, const int sect, const bool init ) +{ + if ( !header ) + return 0; + + QDS_Datum* dat = headerEditor( header->orientation() ); + QWidget* wid = dat ? dat->widget( QDS::Control ) : 0; + if ( wid ) + { + if ( init ) + dat->setStringValue( header->label( sect ) ); + else + dat->clear(); + dat->setProperty( "Selection", true ); + } + else + wid = QtxTable::createHeaderEditor( header, sect, init ); + + return wid; +} + +QWidget* QDS_Table::createEditor( int row, int col, bool init ) const +{ + QDS_Datum* dat = actualCellEditor( row, col ); + QWidget* wid = dat ? dat->widget( QDS::Control ) : 0; + if ( wid ) + { + if ( init ) + dat->setStringValue( text( row, col ) ); + else + dat->clear(); + dat->setProperty( "Selection", true ); + } + else + wid = QtxTable::createEditor( row, col, init ); + + return wid; +} + +void QDS_Table::endEdit( int row, int col, bool accept, bool ) +{ + QtxTable::endEdit( row, col, accept, true ); +} + +void QDS_Table::setCellContentFromEditor( int row, int col ) +{ + QDS_Datum* dat = actualCellEditor( row, col ); + if ( dat ) + setText( row, col, dat->stringValue() ); + else + QtxTable::setCellContentFromEditor( row, col ); +} + +void QDS_Table::setHeaderContentFromEditor( QHeader* header, const int sect, QWidget* editor ) +{ + if ( !header ) + return; + + QDS_Datum* dat = headerEditor( header->orientation() ); + if ( dat ) + header->setLabel( sect, dat->stringValue() ); + else + QtxTable::setHeaderContentFromEditor( header, sect, editor ); +} + +void QDS_Table::initEditor( QDS_Datum* dat ) +{ + if ( !dat ) + return; + + dat->hide(); + + static QGuardedPtr _filter = 0; + if ( !_filter ) + _filter = new DeleteFilter( 0 ); + + if ( dat->widget( QDS::Control ) ) + dat->widget( QDS::Control )->installEventFilter( _filter ); +} diff --git a/src/QDS/QDS_Table.h b/src/QDS/QDS_Table.h new file mode 100644 index 000000000..c7d33abf9 --- /dev/null +++ b/src/QDS/QDS_Table.h @@ -0,0 +1,99 @@ +// Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef QDS_TABLE_H +#define QDS_TABLE_H + +#include "QDS_Datum.h" + +#include + +#include +#include + +class QDS_EXPORT QDS_Table : public QtxTable +{ + class DeleteFilter; + + Q_OBJECT + + Q_PROPERTY( bool KeepEditors READ isKeepEditors WRITE setKeepEditors ) + +public: + QDS_Table( QWidget* = 0, const char* = 0 ); + QDS_Table( int, int, QWidget* = 0, const char* = 0 ); + virtual ~QDS_Table(); + + QDS_Datum* verticalHeaderEditor() const; + QDS_Datum* horizontalHeaderEditor() const; + QDS_Datum* headerEditor( const Orientation ) const; + + void setVerticalHeaderEditor( QDS_Datum* ); + void setHorizontalHeaderEditor( QDS_Datum* ); + + void setHeaderEditor( QDS_Datum* ); + virtual void setHeaderEditor( const Orientation, QDS_Datum* ); + + QDS_Datum* tableEditor() const; + virtual void setTableEditor( QDS_Datum* ); + + QDS_Datum* rowEditor( const int ) const; + QDS_Datum* columnEditor( const int ) const; + + virtual void setRowEditor( const int, QDS_Datum* ); + virtual void setColumnEditor( const int, QDS_Datum* ); + + QDS_Datum* cellEditor( const int, const int ) const; + virtual void setCellEditor( const int, const int, QDS_Datum* ); + + QDS_Datum* actualCellEditor( const int, const int ) const; + + virtual void setNumRows( int ); + virtual void setNumCols( int ); + virtual void clearCellWidget( int, int ); + + bool isKeepEditors() const; + void setKeepEditors( const bool ); + +protected: + virtual QWidget* createHeaderEditor( QHeader*, const int, const bool = true ); + virtual QWidget* createEditor( int, int, bool ) const; + virtual void endEdit( int, int, bool, bool ); + virtual void setCellContentFromEditor( int, int ); + virtual void setHeaderContentFromEditor( QHeader*, const int, QWidget* ); + +private: + void initEditor( QDS_Datum* ); + QDS_Datum* datum( const QWidget* ) const; + +private: + typedef QPtrVector DatumVector; + typedef QMap DatumMap; + typedef QMap CellMap; + +private: + QDS_Datum* myHorEdit; + QDS_Datum* myVerEdit; + DatumVector myRowEdit; + DatumVector myColEdit; + CellMap myCellEdit; + QDS_Datum* myTableEdit; + bool myKeepEdits; +}; + +#endif diff --git a/src/QDS/QDS_TextEdit.cxx b/src/QDS/QDS_TextEdit.cxx index 17de76418..1eb66dad9 100644 --- a/src/QDS/QDS_TextEdit.cxx +++ b/src/QDS/QDS_TextEdit.cxx @@ -20,8 +20,17 @@ #include +/* + \class QDS_TextEdit + + Datum with control corresponding to text edit. User can enter parameter value in multiple line editor. +*/ + /*! - Constructor. + Constructor. Create text edit datum object with datum identifier \aid under widget \aparent. + Parameter \aflags define behaviour of datum and set of created subwidgets. Default value of this + parameter is QDS::All. Parameter \acomp specify the component name which will be used during search + of dictionary item. */ QDS_TextEdit::QDS_TextEdit( const QString& id, QWidget* parent, const int flags, const QString& comp ) : QDS_Datum( id, parent, flags, comp ) @@ -36,7 +45,7 @@ QDS_TextEdit::~QDS_TextEdit() } /*! - Returns string from QTextEdit widget. + Returns string from QTextEdit widget. Reimplemented from QDS_Datum. */ QString QDS_TextEdit::getString() const { @@ -47,7 +56,7 @@ QString QDS_TextEdit::getString() const } /*! - Sets the string into QTextEdit widget. + Sets the string into QTextEdit widget. Reimplemented from QDS_Datum. */ void QDS_TextEdit::setString( const QString& txt ) { @@ -74,7 +83,7 @@ QWidget* QDS_TextEdit::createControl( QWidget* parent ) } /*! - Notify about text changing in line edit. + Notify about text changing in text edit. */ void QDS_TextEdit::onTextChanged() { diff --git a/src/QDS/QDS_Validator.cxx b/src/QDS/QDS_Validator.cxx index 02916c0cb..37b2ea658 100644 --- a/src/QDS/QDS_Validator.cxx +++ b/src/QDS/QDS_Validator.cxx @@ -19,24 +19,47 @@ #include "QDS_Validator.h" /*! - Class: QDS_IntegerValidator + \class QDS_IntegerValidator + + This class to provide validation of user inputted string for datum with 'Integer' + value type according to datum properties: minimum value, maximum value, filter. + + Inherits from QIntValidator. */ +/*! + Constructor. Create empty validator object. +*/ QDS_IntegerValidator::QDS_IntegerValidator( QObject* p ) : QIntValidator( p ) { } +/*! + Constructor. Create validator object with filter string \af. +*/ QDS_IntegerValidator::QDS_IntegerValidator( const QString& f, QObject* p ) : QIntValidator( p ), myFilter( f ) { } +/*! + Destructor. +*/ QDS_IntegerValidator::~QDS_IntegerValidator() { } +/*! + Validate the inputed string \ainput. Reimplemented from QIntValidator. Perform + standard check by QIntValidator::validate(). If returned state is not Invalid and + filter specified then perform validation with filter by QRegExpValidator. + + Returns Invalid if input is invalid according to this validator's rules, + Intermediate if it is likely that a little more editing will make the input acceptable + and Acceptable if the input is valid. +*/ QValidator::State QDS_IntegerValidator::validate( QString& input, int& pos ) const { State rgState = Acceptable; @@ -50,24 +73,47 @@ QValidator::State QDS_IntegerValidator::validate( QString& input, int& pos ) con } /*! - Class: QDS_DoubleValidator + \class QDS_DoubleValidator + + This class to provide validation of user inputted string for datum with 'Float' + value type according to datum properties: minimum value, maximum value, precision, filter. + + Inherits from QDoubleValidator. */ +/*! + Constructor. Create empty validator object. +*/ QDS_DoubleValidator::QDS_DoubleValidator( QObject* p ) : QDoubleValidator( p ) { } +/*! + Constructor. Create validator object with filter string \af. +*/ QDS_DoubleValidator::QDS_DoubleValidator( const QString& f, QObject* p ) : QDoubleValidator( p ), myFilter( f ) { } +/*! + Destructor. +*/ QDS_DoubleValidator::~QDS_DoubleValidator() { } +/*! + Validate the inputed string \ainput. Reimplemented from QDoubleValidator. Perform + standard check by QDoubleValidator::validate(). If returned state is not Invalid and + filter specified then perform validation with filter by QRegExpValidator. + + Returns Invalid if input is invalid according to this validator's rules, + Intermediate if it is likely that a little more editing will make the input acceptable + and Acceptable if the input is valid. +*/ QValidator::State QDS_DoubleValidator::validate( QString& input, int& pos ) const { State rgState = Acceptable; @@ -81,15 +127,26 @@ QValidator::State QDS_DoubleValidator::validate( QString& input, int& pos ) cons } /*! - Class: QDS_StringValidator + \class QDS_StringValidator + + This class to provide validation of user inputted string for datum with 'String' + value type according to datum properties: format, filter. + + Inherits from QDoubleValidator. */ +/*! + Constructor. Create empty validator object. +*/ QDS_StringValidator::QDS_StringValidator( QObject* p ) : QValidator( p ), myLen( -1 ) { } +/*! + Constructor. Create validator object with filter string \af. +*/ QDS_StringValidator::QDS_StringValidator( const QString& f, QObject* p ) : QValidator( p ), myFlags( f ), @@ -97,6 +154,9 @@ myLen( -1 ) { } +/*! + Constructor. Create validator object with filter string \aft and format flags \afg. +*/ QDS_StringValidator::QDS_StringValidator( const QString& ft, const QString& fg, QObject* p ) : QValidator( p ), myLen( -1 ), @@ -105,20 +165,40 @@ myFlags( fg ) { } +/*! + Destructor. +*/ QDS_StringValidator::~QDS_StringValidator() { } +/*! + Returns valid string length. If length not specified -1 returned. +*/ int QDS_StringValidator::length() const { return myLen; } -void QDS_StringValidator::setLength( const int l ) -{ - myLen = l; +/*! + Sets the valid string length \al. If value less than zero valid string + length not specified. +*/ +void QDS_StringValidator::setLength( const int l ) +{ + myLen = l; } +/*! + Validate the inputed string \ainput. Reimplemented from QValidator. Convert specified + string to upper/lower case if the format flags contains specificator 'u'/'l'. + If valid string lenght is specified then check given string length. If + filter specified then perform validation with filter by QRegExpValidator. + + Returns Invalid if input is invalid according to this validator's rules, + Intermediate if it is likely that a little more editing will make the input acceptable + and Acceptable if the input is valid. +*/ QValidator::State QDS_StringValidator::validate( QString& input, int& pos ) const { if ( input.isEmpty() ) diff --git a/src/QDS/QDS_Validator.h b/src/QDS/QDS_Validator.h index 537d511a2..e7fed65aa 100644 --- a/src/QDS/QDS_Validator.h +++ b/src/QDS/QDS_Validator.h @@ -24,9 +24,8 @@ #include /*! - Class: QDS_IntegerValidator + class QDS_IntegerValidator */ - class QDS_EXPORT QDS_IntegerValidator : public QIntValidator { public: @@ -41,9 +40,8 @@ private: }; /*! - Class: QDS_DoubleValidator + class QDS_DoubleValidator */ - class QDS_DoubleValidator : public QDoubleValidator { public: @@ -58,13 +56,11 @@ private: }; /*! - Class: QDS_StringValidator + class QDS_StringValidator */ - class QDS_EXPORT QDS_StringValidator : public QValidator { public: - QDS_StringValidator( QObject* p = 0 ); QDS_StringValidator( const QString& f, QObject* p = 0 ); QDS_StringValidator( const QString& ft, const QString& fg, QObject* p = 0 ); diff --git a/src/Qtx/Makefile.am b/src/Qtx/Makefile.am new file mode 100755 index 000000000..b71936b9a --- /dev/null +++ b/src/Qtx/Makefile.am @@ -0,0 +1,150 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : suit +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# header files + +salomeinclude_HEADERS= Qtx.h \ + QtxAction.h \ + QtxColorScale.h \ + QtxComboBox.h \ + QtxDblSpinBox.h \ + QtxDialog.h \ + QtxDockAction.h \ + QtxDockWindow.h \ + QtxGroupBox.h \ + QtxIntSpinBox.h \ + QtxListAction.h \ + QtxListBox.h \ + QtxListOfOperations.h \ + QtxLogoMgr.h \ + QtxMenuButton.h \ + QtxMRUAction.h \ + QtxOperations.h \ + QtxPathDialog.h \ + QtxPopupMgr.h \ + QtxResourceMgr.h \ + QtxStdOperations.h \ + QtxTable.h \ + QtxToolBar.h \ + QtxToolTip.h \ + QtxParser.h \ + QtxPopupMenu.h \ + QtxActionMgr.h \ + QtxActionMenuMgr.h \ + QtxActionToolMgr.h \ + QtxMainWindow.h \ + QtxWorkspaceAction.h \ + QtxWorkstackAction.h \ + QtxListResourceEdit.h \ + QtxWorkstack.h \ + QtxResourceEdit.h \ + QtxListView.h \ + QtxDirListEditor.h \ + QtxDblValidator.h \ + QtxSplash.h + +# Libraries targets + +lib_LTLIBRARIES= libqtx.la + +dist_libqtx_la_SOURCES= \ + Qtx.cxx \ + QtxAction.cxx \ + QtxColorScale.cxx \ + QtxComboBox.cxx \ + QtxDblSpinBox.cxx \ + QtxDialog.cxx \ + QtxDockAction.cxx \ + QtxDockWindow.cxx \ + QtxGroupBox.cxx \ + QtxIntSpinBox.cxx \ + QtxListAction.cxx \ + QtxListBox.cxx \ + QtxListOfOperations.cxx \ + QtxLogoMgr.cxx \ + QtxMenuButton.cxx \ + QtxMRUAction.cxx \ + QtxPathDialog.cxx \ + QtxPopupMgr.cxx \ + QtxResourceMgr.cxx \ + QtxStdOperations.cxx \ + QtxTable.cxx \ + QtxToolBar.cxx \ + QtxToolTip.cxx \ + QtxOperations.cxx \ + QtxParser.cxx \ + QtxPopupMenu.cxx \ + QtxActionMgr.cxx \ + QtxActionMenuMgr.cxx \ + QtxActionToolMgr.cxx \ + QtxMainWindow.cxx \ + QtxWorkspaceAction.cxx \ + QtxWorkstackAction.cxx \ + QtxListResourceEdit.cxx \ + QtxResourceEdit.cxx \ + QtxWorkstack.cxx \ + QtxListView.cxx \ + QtxDirListEditor.cxx \ + QtxDblValidator.cxx \ + QtxSplash.cxx + +MOC_FILES= \ + QtxAction_moc.cxx \ + QtxColorScale_moc.cxx \ + QtxComboBox_moc.cxx \ + QtxDblSpinBox_moc.cxx \ + QtxDialog_moc.cxx \ + QtxDockAction_moc.cxx \ + QtxDockWindow_moc.cxx \ + QtxGroupBox_moc.cxx \ + QtxIntSpinBox_moc.cxx \ + QtxListAction_moc.cxx \ + QtxListBox_moc.cxx \ + QtxLogoMgr_moc.cxx \ + QtxMenuButton_moc.cxx \ + QtxMRUAction_moc.cxx \ + QtxPathDialog_moc.cxx \ + QtxPopupMgr_moc.cxx \ + QtxPopupMenu_moc.cxx \ + QtxTable_moc.cxx \ + QtxToolBar_moc.cxx \ + QtxToolTip_moc.cxx \ + QtxActionMgr_moc.cxx \ + QtxActionMenuMgr_moc.cxx \ + QtxActionToolMgr_moc.cxx \ + QtxMainWindow_moc.cxx \ + QtxWorkspaceAction_moc.cxx \ + QtxWorkstackAction_moc.cxx \ + QtxWorkstack_moc.cxx \ + QtxListView_moc.cxx \ + QtxListResourceEdit_moc.cxx \ + QtxDirListEditor_moc.cxx \ + QtxDblValidator_moc.cxx \ + QtxSplash_moc.cxx +nodist_libqtx_la_SOURCES= $(MOC_FILES) + +libqtx_la_CPPFLAGS=$(QT_INCLUDES) + +libqtx_la_LDFLAGS=$(QT_MT_LIBS) diff --git a/src/Qtx/Makefile.in b/src/Qtx/Makefile.in deleted file mode 100755 index ea5bccbc6..000000000 --- a/src/Qtx/Makefile.in +++ /dev/null @@ -1,165 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : suit -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ - -VPATH=.:@srcdir@:@srcdir@/resources - -@COMMENCE@ - -# header files - -EXPORT_HEADERS= Qtx.h \ - QtxAction.h \ - QtxColorScale.h \ - QtxComboBox.h \ - QtxDblSpinBox.h \ - QtxDialog.h \ - QtxDockAction.h \ - QtxDockWindow.h \ - QtxGroupBox.h \ - QtxIntSpinBox.h \ - QtxListAction.h \ - QtxListBox.h \ - QtxListOfOperations.h \ - QtxLogoMgr.h \ - QtxMenuButton.h \ - QtxMRUAction.h \ - QtxOperations.h \ - QtxPathDialog.h \ - QtxPopupMgr.h \ - QtxResourceMgr.h \ - QtxStdOperations.h \ - QtxTable.h \ - QtxToolBar.h \ - QtxToolTip.h \ - QtxParser.h \ - QtxPopupMenu.h \ - QtxActionMgr.h \ - QtxActionMenuMgr.h \ - QtxActionToolMgr.h \ - QtxMainWindow.h \ - QtxWorkspaceAction.h \ - QtxWorkstackAction.h \ - QtxListResourceEdit.h \ - QtxWorkstack.h \ - QtxResourceEdit.h \ - QtxListView.h \ - QtxDirListEditor.h \ - QtxDblValidator.h \ - QtxSplash.h - -# .po files to transform in .qm - -PO_FILES = \ - -# Libraries targets - -LIB = libqtx.la - -LIB_SRC= \ - Qtx.cxx \ - QtxAction.cxx \ - QtxColorScale.cxx \ - QtxComboBox.cxx \ - QtxDblSpinBox.cxx \ - QtxDialog.cxx \ - QtxDockAction.cxx \ - QtxDockWindow.cxx \ - QtxGroupBox.cxx \ - QtxIntSpinBox.cxx \ - QtxListAction.cxx \ - QtxListBox.cxx \ - QtxListOfOperations.cxx \ - QtxLogoMgr.cxx \ - QtxMenuButton.cxx \ - QtxMRUAction.cxx \ - QtxPathDialog.cxx \ - QtxPopupMgr.cxx \ - QtxResourceMgr.cxx \ - QtxStdOperations.cxx \ - QtxTable.cxx \ - QtxToolBar.cxx \ - QtxToolTip.cxx \ - QtxOperations.cxx \ - QtxParser.cxx \ - QtxPopupMenu.cxx \ - QtxActionMgr.cxx \ - QtxActionMenuMgr.cxx \ - QtxActionToolMgr.cxx \ - QtxMainWindow.cxx \ - QtxWorkspaceAction.cxx \ - QtxWorkstackAction.cxx \ - QtxListResourceEdit.cxx \ - QtxResourceEdit.cxx \ - QtxWorkstack.cxx \ - QtxListView.cxx \ - QtxDirListEditor.cxx \ - QtxDblValidator.cxx \ - QtxSplash.cxx - -LIB_MOC = \ - QtxAction.h \ - QtxColorScale.h \ - QtxComboBox.h \ - QtxDblSpinBox.h \ - QtxDialog.h \ - QtxDockAction.h \ - QtxDockWindow.h \ - QtxGroupBox.h \ - QtxIntSpinBox.h \ - QtxListAction.h \ - QtxListBox.h \ - QtxLogoMgr.h \ - QtxMenuButton.h \ - QtxMRUAction.h \ - QtxPathDialog.h \ - QtxPopupMgr.h \ - QtxPopupMenu.h \ - QtxTable.h \ - QtxToolBar.h \ - QtxToolTip.h \ - QtxActionMgr.h \ - QtxActionMenuMgr.h \ - QtxActionToolMgr.h \ - QtxMainWindow.h \ - QtxWorkspaceAction.h \ - QtxWorkstackAction.h \ - QtxWorkstack.h \ - QtxListView.h \ - QtxListResourceEdit.h \ - QtxDirListEditor.h \ - QtxDblValidator.h \ - QtxSplash.h - -RESOURCES_FILES = \ - -CPPFLAGS+=$(QT_INCLUDES) - -LDFLAGS+=$(QT_MT_LIBS) - -@CONCLUDE@ - - diff --git a/src/Qtx/Qtx.cxx b/src/Qtx/Qtx.cxx index 14704e550..6e2a31648 100755 --- a/src/Qtx/Qtx.cxx +++ b/src/Qtx/Qtx.cxx @@ -22,9 +22,11 @@ #include "Qtx.h" #include +#include #include #include #include +#include #include #include #include @@ -556,3 +558,144 @@ void Qtx::scaleColors( const int num, QValueList& lst ) for ( int i = 0; i < num; i++ ) lst.append( scaleColor( i, 0, num - 1 ) ); } + +/*! + Name: grayscale [static public] + Desc: Convert color image to grayscale image. +*/ +QImage Qtx::grayscale( const QImage& img ) +{ + QImage res = img; + + int colNum = res.numColors(); + if ( colNum ) + { + for ( int i = 0; i < colNum; i++ ) + res.setColor( i, qGray( res.color( i ) ) ); + } + else + { + for ( int y = 0; y < res.height(); y++ ) + { + for ( int x = 0; x < res.width(); x++ ) + { + QRgb pix = res.pixel( x, y ); + res.setPixel( x, y, qRgba( qGray( pix ), qGray( pix ), qGray( pix ), qAlpha( pix ) ) ); + } + } + } + + return res; +} + +/*! + Name: grayscale [static public] + Desc: Convert color pixmap to grayscale pixmap. +*/ +QPixmap Qtx::grayscale( const QPixmap& pix ) +{ + QPixmap res; + res.convertFromImage( grayscale( pix.convertToImage() ) ); + return res; +} + +/*! + Name: transparentImage [static public] + Desc: Create transparent image with specified width \aw, height \ah and color depth \ad. +*/ +QImage Qtx::transparentImage( const int w, const int h, const int d ) +{ + QImage img; + if ( img.create( w, h, d < 0 ? QPixmap::defaultDepth() : d ) ) + { + img.setAlphaBuffer( true ); + for ( int i = 0; i < img.height(); i++ ) + for ( int j = 0; j < img.width(); j++ ) + img.setPixel( j, i, qRgba( 0, 0, 0, 0 ) ); + } + return img; +} + +/*! + Name: transparentPixmap [static public] + Desc: Create transparent pixmap with specified width \aw, height \ah and color depth \ad. +*/ +QPixmap Qtx::transparentPixmap( const int w, const int h, const int d ) +{ + QPixmap pix; + QImage img = transparentImage( w, h, d ); + if ( !img.isNull() ) + pix.convertFromImage( img ); + return pix; +} + +/*! + Name: composite [static public] + Desc: Create composite pixmap. Pixmap 'pix' draws over pixmap 'dest' with coordinates + specified relative upper left corner of 'dest'. If 'dest' not given then new empty + pixmap with appropriate size created. +*/ +QPixmap Qtx::composite( const QPixmap& pix, const int x, const int y, const QPixmap& dest ) +{ + if ( pix.isNull() ) + return dest; + + int width = QMAX( pix.width() + x, dest.width() ); + int height = QMAX( pix.height() + y, dest.height() ); + + QPixmap res( width, height ); + QImage img = transparentImage( width, height, 32 ); + + QPainter p; + p.begin( &res ); + p.fillRect( 0, 0, width, height, QBrush( white ) ); + + if ( !dest.isNull() ) + { + p.drawPixmap( 0, 0, dest ); + QImage temp = dest.convertToImage(); + for ( int i = 0; i < temp.width() && i < img.width(); i++ ) + { + for ( int j = 0; j < temp.height() && j < img.height(); j++ ) + { + if ( temp.hasAlphaBuffer() ) + img.setPixel( i, j, temp.pixel( i, j ) ); + else + { + QRgb p = temp.pixel( i, j ); + img.setPixel( i, j, qRgba( qRed( p ), qGreen( p ), qBlue( p ), 255 ) ); + } + } + } + } + + p.drawPixmap( x, y, pix ); + QImage temp = pix.convertToImage(); + for ( int c = x; c < temp.width() + x && c < img.width(); c++ ) + { + for ( int r = y; r < temp.height() + y && r < img.height(); r++ ) + { + if ( qAlpha( temp.pixel( c - x, r - y ) ) > 0 ) + img.setPixel( c, r, temp.pixel( c - x, r - y ) ); + } + } + + p.end(); + + for ( int ai = 0; ai < img.width(); ai++ ) + { + for ( int aj = 0; aj < img.height(); aj++ ) + { + if ( qAlpha( img.pixel( ai, aj ) ) < 1 ) + img.setPixel( ai, aj, qRgba( 255, 255, 255, 255 ) ); + else + img.setPixel( ai, aj, qRgba( 0, 0, 0, 0 ) ); + } + } + + QBitmap bmp( width, height ); + bmp.convertFromImage( img, Qt::ColorMode_Mask | Qt::ThresholdDither ); + res.setMask( bmp ); + + return res; +} diff --git a/src/Qtx/Qtx.h b/src/Qtx/Qtx.h index 1fef63f04..0d5cb3a40 100755 --- a/src/Qtx/Qtx.h +++ b/src/Qtx/Qtx.h @@ -68,6 +68,9 @@ #endif #endif +#include +#include + class QObject; class QString; class QWidget; @@ -131,6 +134,12 @@ public: static QColor scaleColor( const int, const int, const int ); static void scaleColors( const int, QValueList& ); + + static QImage grayscale( const QImage& ); + static QPixmap grayscale( const QPixmap& ); + static QImage transparentImage( const int, const int, const int = -1 ); + static QPixmap transparentPixmap( const int, const int, const int = -1 ); + static QPixmap composite( const QPixmap&, const int, const int, const QPixmap& = QPixmap() ); }; #endif diff --git a/src/Qtx/QtxAction.cxx b/src/Qtx/QtxAction.cxx index e2a3ad878..dbae4819f 100755 --- a/src/Qtx/QtxAction.cxx +++ b/src/Qtx/QtxAction.cxx @@ -112,7 +112,7 @@ bool QtxAction::addTo( QWidget* w ) successfully and false otherwise. */ -bool QtxAction::addTo( QWidget* w, int index ) +bool QtxAction::addTo( QWidget* w, const int index ) { if ( !addTo( w ) ) return false; @@ -238,14 +238,17 @@ void QtxAction::setPopup( QWidget* w, const int id, QPopupMenu* subPopup ) const if ( !w ) return; - if ( !w->inherits( "QPopupMenu" ) && !w->inherits( "QMenuBar" ) ) - return; // unsupported widget type + QMenuData* pmd = 0; + + if ( w->inherits( "QPopupMenu" ) ) + pmd = ::qt_cast( w ); + else if ( w->inherits( "QMenuBar" ) ) + pmd = ::qt_cast( w ); - QMenuData* md = 0; - QMenuData* pmd = dynamic_cast( w ); if ( !pmd ) return; // bad widget - + + QMenuData* md = 0; QMenuItem* item = pmd->findItem( id, &md ); if ( !item || md != pmd ) return; // item is not found diff --git a/src/Qtx/QtxAction.h b/src/Qtx/QtxAction.h index 2b17df6d8..af0473f3f 100755 --- a/src/Qtx/QtxAction.h +++ b/src/Qtx/QtxAction.h @@ -27,6 +27,10 @@ #include #include +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + class QTX_EXPORT QtxAction : public QAction { Q_OBJECT @@ -38,7 +42,7 @@ public: virtual ~QtxAction(); virtual bool addTo( QWidget* ); - virtual bool addTo( QWidget*, int ); + virtual bool addTo( QWidget*, const int ); virtual bool removeFrom( QWidget* ); protected: @@ -48,4 +52,8 @@ private: QMap myMenuIds; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/Qtx/QtxActionMenuMgr.cxx b/src/Qtx/QtxActionMenuMgr.cxx index b87289a33..94f7050a0 100644 --- a/src/Qtx/QtxActionMenuMgr.cxx +++ b/src/Qtx/QtxActionMenuMgr.cxx @@ -48,12 +48,12 @@ namespace { QValueList l; const QMenuData* md = 0; if ( w->inherits( "QMenuBar" ) ) - md = dynamic_cast( w ); + md = ::qt_cast( w ); else if ( w->inherits( "QPopupMenu" ) ) - md = dynamic_cast( w ); + md = ::qt_cast( w ); if ( md ) { - for ( int i=0; i < md->count(); i++ ) - l.append( md->idAt( i ) ); + for ( uint i = 0; i < md->count(); i++ ) + l.append( md->idAt( i ) ); } return l; } @@ -62,25 +62,38 @@ namespace { { const QMenuData* md = 0; if ( w->inherits( "QMenuBar" ) ) - md = dynamic_cast( w ); + md = ::qt_cast( w ); else if ( w->inherits( "QPopupMenu" ) ) - md = dynamic_cast( w ); - if ( md ) { - for ( int i=0, j=0; i < md->count() && j < l.count(); i++, j++ ) - if ( md->idAt( i ) != l[ j ] ) return retId ? md->idAt( i ) : i; - if ( md->count() > l.count() ) return retId ? md->idAt( md->count()-1 ) : md->count()-1; + md = ::qt_cast( w ); + if ( md ) + { + for ( uint i = 0, j = 0; i < md->count() && j < l.count(); i++, j++ ) + if ( md->idAt( i ) != l[ j ] ) + return retId ? md->idAt( i ) : i; + if ( md->count() > l.count() ) + return retId ? md->idAt( md->count()-1 ) : md->count() - 1; } return -1; } void dumpMenu( QWidget* w, bool before ) { - QMenuData* md = dynamic_cast( w ); - if ( !w ) return; - printf(">>> start dump menu (%s) >>>\n", before ? "before" : "after" ); - for( int i = 0; i < md->count(); i++ ) - printf("%d: %d: %s\n",i,md->idAt(i),md->text(md->idAt(i)).latin1() ); - printf("<<< end dump menu (%s) <<<\n", before ? "before" : "after" ); + if ( !w ) + return; + + QMenuData* md = 0; + if ( w->inherits( "QMenuBar" ) ) + md = ::qt_cast( w ); + else if ( w->inherits( "QPopupMenu" ) ) + md = ::qt_cast( w ); + + if ( !md ) + return; + + printf( ">>> start dump menu (%s) >>>\n", before ? "before" : "after" ); + for ( uint i = 0; i < md->count(); i++ ) + printf( "%d: %d: %s\n", i, md->idAt( i ), md->text( md->idAt( i ) ).latin1() ); + printf( "<<< end dump menu (%s) <<<\n", before ? "before" : "after" ); } }; @@ -914,7 +927,7 @@ void QtxActionMenuMgr::updateMenu( MenuNode* startNode, const bool rec, const bo { NodeList& lst = idMap[it2.current()->group]; int idx = it2.current()->idx; - if ( idx < 0 || idx >= lst.count() ) + if ( idx < 0 || idx >= (int)lst.count() ) lst.append( it2.current() ); else lst.insert( idx, it2.current() ); diff --git a/src/Qtx/QtxDblValidator.h b/src/Qtx/QtxDblValidator.h index 8984bb28f..a5b389fd1 100644 --- a/src/Qtx/QtxDblValidator.h +++ b/src/Qtx/QtxDblValidator.h @@ -22,9 +22,11 @@ #ifndef QTX_DOUBLE_VALIDATOR #define QTX_DOUBLE_VALIDATOR +#include "Qtx.h" + #include -class QtxDblValidator : public QDoubleValidator +class QTX_EXPORT QtxDblValidator : public QDoubleValidator { Q_OBJECT diff --git a/src/Qtx/QtxDialog.cxx b/src/Qtx/QtxDialog.cxx index 2554511a4..c52cb85fe 100755 --- a/src/Qtx/QtxDialog.cxx +++ b/src/Qtx/QtxDialog.cxx @@ -416,12 +416,13 @@ QSize QtxDialog::Border::minimumSizeHint() const QtxDialog::QtxDialog( QWidget* parent, const char* name, bool modal, bool allowResize, const int f, WFlags wf ) : QDialog( parent, name, modal, -#ifdef WIN32 wf | WStyle_Customize | WStyle_Title | WStyle_SysMenu | - ( allowResize ? WStyle_NormalBorder : WStyle_NoBorderEx ) ), +#ifdef WIN32 + ( allowResize ? WStyle_NormalBorder : WStyle_NoBorderEx ) | #else - wf | WStyle_NormalBorder | WStyle_Customize | WStyle_Title | WStyle_SysMenu ), + WStyle_NormalBorder | #endif + ( allowResize ? WStyle_Maximize : 0 ) ), mySender( 0 ), myAlignment( 0 ), myInited( false ), diff --git a/src/Qtx/QtxDockWindow.cxx b/src/Qtx/QtxDockWindow.cxx index 1a9f5d07d..da6f5cc55 100644 --- a/src/Qtx/QtxDockWindow.cxx +++ b/src/Qtx/QtxDockWindow.cxx @@ -285,7 +285,16 @@ QtxDockWindow::~QtxDockWindow() void QtxDockWindow::setWidget( QWidget* wid ) { if ( wid ) - wid->reparent( this, QPoint( 0, 0 ), wid->isVisibleTo( wid->parentWidget() ) ); + { + if ( wid->parentWidget() != this ) + wid->reparent( this, QPoint( 0, 0 ), wid->isVisibleTo( wid->parentWidget() ) ); + if ( myWatcher ) + { + setCaption( wid->caption() ); + if ( wid->icon() ) + setIcon( *wid->icon() ); + } + } QDockWindow::setWidget( wid ); } diff --git a/src/Qtx/QtxListAction.cxx b/src/Qtx/QtxListAction.cxx index e3c4a8484..52f093039 100755 --- a/src/Qtx/QtxListAction.cxx +++ b/src/Qtx/QtxListAction.cxx @@ -144,8 +144,11 @@ myRaise( false ) QtxListAction::~QtxListAction() { - if ( myFrame ) + if ( myFrame ) { myFrame->myAction = 0; + delete myFrame; + myFrame = 0; + } } /*! diff --git a/src/Qtx/QtxListResourceEdit.cxx b/src/Qtx/QtxListResourceEdit.cxx index 3b93b846f..2a7678df4 100644 --- a/src/Qtx/QtxListResourceEdit.cxx +++ b/src/Qtx/QtxListResourceEdit.cxx @@ -686,8 +686,8 @@ QtxListResourceEdit::SelectItem::~SelectItem() void QtxListResourceEdit::SelectItem::store() { int idx = myList->currentItem(); - if ( myIndex.contains( idx ) ) - setInteger( myIndex[idx] ); + if ( idx >= 0 ) + setInteger( myIndex.contains( idx ) ? myIndex[idx] : idx ); } /*! @@ -697,14 +697,15 @@ void QtxListResourceEdit::SelectItem::retrieve() { int id = getInteger( -1 ); - int idx = -1; - for ( QMap::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it ) + for ( QMap::ConstIterator it = myIndex.begin(); it != myIndex.end(); ++it ) { - if ( it.data() == id ) - idx = it.key(); + if ( it.data() == id ) { + myList->setCurrentItem( it.key() ); + return; + } } - - myList->setCurrentItem( idx ); + if ( id >= 0 ) + myList->setCurrentItem( id ); } /*! @@ -1182,7 +1183,7 @@ QtxListResourceEdit::FontItem::FontItem( const QString& title, QtxResourceEdit* mySizes->setInsertionPolicy( QComboBox::NoInsertion ); myBold = new QCheckBox( tr( "Bold" ), this ); myItalic = new QCheckBox( tr( "Italic" ), this ); - myUnderline = new QCheckBox( tr( "Underline" ), this ); + myUnderline = new QCheckBox( tr( "Shadow" ), this ); myPreview = new QToolButton( this ); myPreview->setText( "..." ); @@ -1689,7 +1690,8 @@ void QtxListResourceEdit::FileItem::onOpenFile() if( myFileDlg->exec()==QDialog::Accepted ) { - myFile->setText( myFileDlg->selectedFile() ); + QString selFile = QDir::convertSeparators( myFileDlg->selectedFile() ); + myFile->setText( selFile ); } } diff --git a/src/Qtx/QtxResourceEdit.h b/src/Qtx/QtxResourceEdit.h index fc816fe3b..d6da330ac 100644 --- a/src/Qtx/QtxResourceEdit.h +++ b/src/Qtx/QtxResourceEdit.h @@ -135,7 +135,7 @@ public: virtual void update(); - QVariant property( const QString& ) const; + virtual QVariant property( const QString& ) const; virtual void setProperty( const QString&, const QVariant& ); virtual void store() = 0; diff --git a/src/Qtx/QtxResourceMgr.cxx b/src/Qtx/QtxResourceMgr.cxx index f53df0c55..02b3a1c65 100644 --- a/src/Qtx/QtxResourceMgr.cxx +++ b/src/Qtx/QtxResourceMgr.cxx @@ -858,7 +858,7 @@ QtxResourceMgr::QtxResourceMgr( const QString& appName, const QString& resVarTem QString dirs; if ( ::getenv( envVar ) ) dirs = ::getenv( envVar ); -#ifdef WNT +#ifdef WIN32 QString dirsep = ";"; // for Windows: ";" is used as directories separator #else QString dirsep = "[:|;]"; // for Linux: both ":" and ";" can be used @@ -879,6 +879,11 @@ QtxResourceMgr::~QtxResourceMgr() QStringList prefList = myTranslator.keys(); for ( QStringList::const_iterator it = prefList.begin(); it != prefList.end(); ++it ) removeTranslators( *it ); + for ( ResListIterator resIt( myResources ); resIt.current(); ++resIt ) + delete resIt.current(); + myResources.clear(); + for ( FormatListIterator formIt( myFormats ); formIt.current(); ++formIt ) + delete formIt.current(); } /*! diff --git a/src/Qtx/QtxResourceMgr.h b/src/Qtx/QtxResourceMgr.h index 0bf57831c..ff72dd3c2 100644 --- a/src/Qtx/QtxResourceMgr.h +++ b/src/Qtx/QtxResourceMgr.h @@ -175,6 +175,8 @@ private: bool myIsPixmapCached; bool myIsIgnoreUserValues; + + friend class QtxResourceMgr::Format; }; /*! @@ -185,7 +187,7 @@ class QTX_EXPORT QtxResourceMgr::Format { public: Format( const QString& ); - ~Format(); + virtual ~Format(); QString format() const; diff --git a/src/Qtx/QtxSplash.cxx b/src/Qtx/QtxSplash.cxx index d3244efc9..ff4808076 100644 --- a/src/Qtx/QtxSplash.cxx +++ b/src/Qtx/QtxSplash.cxx @@ -66,6 +66,7 @@ QtxSplash::QtxSplash( const QPixmap& pixmap ) myGradientType = Vertical; myError = 0; myStartColor = red; + myMargin = 5; setPixmap( pixmap ); } @@ -256,6 +257,30 @@ int QtxSplash::textAlignment() const return myAlignment; } +/*! + \brief Set margin. + + Margin is used when drawing progress bar and status messages. + + \param m new margin + \sa margin() +*/ +void QtxSplash::setMargin( const int m ) +{ + myMargin = m; + repaint(); +} + +/*! + \brief Get margin. + \return current margin. + \sa setMargin() +*/ +int QtxSplash::margin() const +{ + return myMargin; +} + /*! Sets message text color to \a color. Default is white. @@ -382,29 +407,11 @@ void QtxSplash::clear() void QtxSplash::drawContents( QPainter* painter ) { QRect r = rect(); + int m = margin(); if ( myTotal > 0 ) { - // draw progress bar outline rectangle - painter->setPen( palette().active().dark() ); - painter->drawLine( r.x()+5, - r.height()-5-_PROGRESS_WIDTH, - r.width()-5, - r.height()-5-_PROGRESS_WIDTH ); - painter->drawLine( r.x()+5, - r.height()-5-_PROGRESS_WIDTH, - r.x()+5, - r.height()-5 ); - painter->setPen( palette().active().light() ); - painter->drawLine( r.x()+5, - r.height()-5, - r.width()-5, - r.height()-5 ); - painter->drawLine( r.width()-5, - r.height()-5-_PROGRESS_WIDTH, - r.width()-5, - r.height()-5 ); // draw progress bar if ( myGradientType == Horizontal ) { - int tng = r.width() - r.x() - 11; + int tng = r.width() - r.x() - m*2; int ng = (int) ( 1.0 * tng * ( myProgress > 0 ? myProgress : 0 ) / myTotal ); int h1, h2, s1, s2, v1, v2; myStartColor.hsv( &h1, &s1, &v1 ); @@ -415,29 +422,48 @@ void QtxSplash::drawContents( QPainter* painter ) s1 + ((s2-s1)*i)/(tng-1), v1 + ((v2-v1)*i)/(tng-1), QColor::Hsv ) ); - painter->drawLine( r.x()+6+i, - r.height()-5-_PROGRESS_WIDTH+1, - r.x()+6+i, - r.height()-6 ); + painter->drawLine( r.x()+m+i, + r.height()-m-_PROGRESS_WIDTH, + r.x()+m+i, + r.height()-m ); } } else { - int ng = (int) ( 1.0 * (r.width() - r.x() - 11) * ( myProgress > 0 ? myProgress : 0 ) / myTotal ); + int ng = (int) ( 1.0 * (r.width() - r.x() - m*2 - 1) * ( myProgress > 0 ? myProgress : 0 ) / myTotal ); int h1, h2, s1, s2, v1, v2; myStartColor.hsv( &h1, &s1, &v1 ); myEndColor.isValid() ? myEndColor.hsv( &h2, &s2, &v2 ) : myStartColor.hsv( &h2, &s2, &v2 ); - for ( int i = 0; i < _PROGRESS_WIDTH-1; i++ ) { - painter->setPen( QColor( h1 + ((h2-h1)*i)/(_PROGRESS_WIDTH-2), - s1 + ((s2-s1)*i)/(_PROGRESS_WIDTH-2), - v1 + ((v2-v1)*i)/(_PROGRESS_WIDTH-2), + for ( int i = 0; i < _PROGRESS_WIDTH; i++ ) { + painter->setPen( QColor( h1 + ((h2-h1)*i)/(_PROGRESS_WIDTH-1), + s1 + ((s2-s1)*i)/(_PROGRESS_WIDTH-1), + v1 + ((v2-v1)*i)/(_PROGRESS_WIDTH-1), QColor::Hsv ) ); - painter->drawLine( r.x()+6, - r.height()-5-_PROGRESS_WIDTH+1+i, - r.x()+6+ng-1, - r.height()-5-_PROGRESS_WIDTH+1+i ); + painter->drawLine( r.x()+m, + r.height()-m-_PROGRESS_WIDTH+i, + r.x()+m+ng, + r.height()-m-_PROGRESS_WIDTH+i ); } } + // draw progress bar outline rectangle + painter->setPen( palette().active().dark() ); + painter->drawLine( r.x()+m, + r.height()-m-_PROGRESS_WIDTH, + r.width()-m, + r.height()-m-_PROGRESS_WIDTH ); + painter->drawLine( r.x()+m, + r.height()-m-_PROGRESS_WIDTH, + r.x()+m, + r.height()-m ); + painter->setPen( palette().active().light() ); + painter->drawLine( r.x()+m, + r.height()-m, + r.width()-m, + r.height()-m ); + painter->drawLine( r.width()-m, + r.height()-m-_PROGRESS_WIDTH, + r.width()-m, + r.height()-m ); } // draw status if ( !myMessage.isEmpty() ) { @@ -447,7 +473,7 @@ void QtxSplash::drawContents( QPainter* painter ) int i = myMessage.length() - 1; while( i >= 0 && myMessage[ i-- ] == '\n' ) shift += spacing; - QRect r1( r.x() + 5, r.y() + 5, r.width() - 10, r.height() - 10 - shift ); + QRect r1( r.x() + m, r.y() + m, r.width() - m*2, r.height() - m*2 - shift ); QRect r2 = r1; if ( myAlignment & Qt::AlignLeft ) r2.setLeft ( r2.left() + 1 ); if ( myAlignment & Qt::AlignTop ) r2.setTop ( r2.top() + 1 ); diff --git a/src/Qtx/QtxSplash.h b/src/Qtx/QtxSplash.h index b6ade167c..05b7088a1 100644 --- a/src/Qtx/QtxSplash.h +++ b/src/Qtx/QtxSplash.h @@ -66,6 +66,9 @@ public: void setTextAlignment( const int ); int textAlignment() const; + void setMargin( const int ); + int margin() const; + void setTextColor( const QColor& ); QColor textColor() const; void setTextColors( const QColor&, const QColor& = QColor() ); @@ -109,6 +112,7 @@ private: QColor myEndColor; int myGradientType; int myError; + int myMargin; }; #endif diff --git a/src/Qtx/QtxWorkstack.cxx b/src/Qtx/QtxWorkstack.cxx index 63fd6de55..3cf22f413 100644 --- a/src/Qtx/QtxWorkstack.cxx +++ b/src/Qtx/QtxWorkstack.cxx @@ -919,7 +919,7 @@ void QtxWorkstack::onDeactivated( QtxWorkstackArea* area ) */ void QtxWorkstack::onContextMenuRequested( QWidget* w, QPoint p ) { - QtxWorkstackArea* anArea = dynamic_cast( (QObject*)sender() ); + QtxWorkstackArea* anArea = ::qt_cast( (QObject*)sender() ); if ( !anArea ) anArea = activeArea(); @@ -948,6 +948,8 @@ void QtxWorkstack::onContextMenuRequested( QWidget* w, QPoint p ) myActionsMap[Rename]->addTo( pm ); } + Qtx::simplifySeparators( pm ); + if ( pm->count() ) pm->exec( p ); @@ -1294,7 +1296,9 @@ void QtxWorkstack::splitterInfo( QSplitter* split, QString& info ) const //Cuts starting '(' symbol and ending '(' symbol void cutBrackets( QString& parameters ) { - if ( !parameters.isEmpty() && parameters[0] == '(' && parameters[parameters.length()-1] == ')' ) + QChar c1 = parameters[0]; + QChar c2 = parameters[int(parameters.length()-1)]; + if ( !parameters.isEmpty() && c1 == '(' && c2 == ')' ) parameters = parameters.mid( 1, parameters.length()-2 ); } @@ -1324,7 +1328,9 @@ bool checkFormat( const QString& parameters ) { QString params( parameters ); // 1. begins and ends with brackets - bool ok = ( params[0] == '(' && params[params.length()-1] == ')' ); + QChar c1 = params[0]; + QChar c2 = params[int(params.length()-1)]; + bool ok = ( c1 == '(' && c2 == ')' ); if ( !ok ) return ok; ::cutBrackets( params ); // 2. has splitter word @@ -1358,13 +1364,16 @@ QStringList getChildren( const QString& str ) int i = 1, nOpen = 1, // count brackets: '(' increments nOpen, ')' decrements start = 0; - while ( i < str.length() ) { - if ( str[i] == '(' ) { + while ( i < (int)str.length() ) + { + if ( str[i] == '(' ) + { nOpen++; if ( nOpen == 1 ) start = i; } - else if ( str[i] == ')' ) { + else if ( str[i] == ')' ) + { nOpen--; if ( nOpen == 0 ) lst.append( str.mid( start, i-start+1 ) ); @@ -1399,7 +1408,7 @@ QWidget* getView( const QWidget* parent, const QString& aName ) QWidget* view = 0; QObjectList *l = parent->topLevelWidget()->queryList( "QWidget", aName, false, true ); if ( !l->isEmpty() ) - view = dynamic_cast( l->first() ); + view = ::qt_cast( l->first() ); delete l; return view; } @@ -1420,7 +1429,8 @@ void QtxWorkstack::setSplitter( QSplitter* splitter, const QString& parameters, // get splitter sizes and store it in the map for future setting QValueList sizes; QStringList sizesLst = QStringList::split( ':', ::getValue( params, "sizes" ) ); - for ( QStringList::Iterator it = sizesLst.begin(); it != sizesLst.end(); ++it ) + QStringList::Iterator it; + for ( it = sizesLst.begin(); it != sizesLst.end(); ++it ) sizes.append( (*it).toInt() ); sMap[ splitter ] = sizes; @@ -1495,8 +1505,8 @@ QtxWorkstack& QtxWorkstack::operator<<( const QString& parameters ) qApp->processEvents(); // restore splitters' sizes (map of sizes is filled in setSplitters) - for ( QMap< QSplitter*, QValueList >::Iterator it = sMap.begin(); it != sMap.end(); ++it ) - it.key()->setSizes( it.data() ); + for ( QMap< QSplitter*, QValueList >::Iterator itm = sMap.begin(); itm != sMap.end(); ++itm ) + itm.key()->setSizes( itm.data() ); return (*this); } @@ -2337,16 +2347,16 @@ void QtxWorkstackTabBar::setActive( const bool on ) { QFont aFont = font(); aFont.setUnderline( on ); - QColorGroup* aColGrp = new QColorGroup(); + QColorGroup aColGrp; QPalette aPal = palette(); if ( !on ) { - aPal.setColor( QColorGroup::HighlightedText, aColGrp->foreground() ); + aPal.setColor( QColorGroup::HighlightedText, aColGrp.foreground() ); aPal.setColor( QColorGroup::Highlight, colorGroup().dark().light( DARK_COLOR_LIGHT ) ); setPalette( aPal ); } else { - aPal.setColor( QColorGroup::HighlightedText, aColGrp->highlightedText() ); - aPal.setColor( QColorGroup::Highlight, aColGrp->highlight() ); + aPal.setColor( QColorGroup::HighlightedText, aColGrp.highlightedText() ); + aPal.setColor( QColorGroup::Highlight, aColGrp.highlight() ); unsetPalette(); } setFont( aFont ); diff --git a/src/QxGraph/Makefile.am b/src/QxGraph/Makefile.am new file mode 100755 index 000000000..b6e64e2c3 --- /dev/null +++ b/src/QxGraph/Makefile.am @@ -0,0 +1,66 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libQxGraph.la + +salomeinclude_HEADERS= \ + QxGraph_ActiveItem.h \ + QxGraph_Prs.h \ + QxGraph_Canvas.h \ + QxGraph_CanvasView.h \ + QxGraph_ViewWindow.h \ + QxGraph_ViewManager.h \ + QxGraph_ViewModel.h \ + QxGraph_Def.h \ + QxGraph.h + +dist_libQxGraph_la_SOURCES= \ + QxGraph_Prs.cxx \ + QxGraph_Canvas.cxx \ + QxGraph_CanvasView.cxx \ + QxGraph_ViewWindow.cxx \ + QxGraph_ViewManager.cxx \ + QxGraph_ViewModel.cxx + +MOC_FILES= \ + QxGraph_Canvas_moc.cxx \ + QxGraph_CanvasView_moc.cxx \ + QxGraph_ViewWindow_moc.cxx \ + QxGraph_ViewManager_moc.cxx \ + QxGraph_ViewModel_moc.cxx + +nodist_libQxGraph_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA= \ + resources/view_fitall.png \ + resources/view_fitarea.png \ + resources/view_glpan.png \ + resources/view_pan.png \ + resources/view_reset.png \ + resources/view_zoom.png + +nodist_salomeres_DATA= \ + QxGraph_images.qm \ + QxGraph_msg_en.qm + +libQxGraph_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT +libQxGraph_la_LDFLAGS=$(QT_MT_LIBS) ../SUIT/libsuit.la diff --git a/src/QxGraph/QxGraph.h b/src/QxGraph/QxGraph.h new file mode 100644 index 000000000..e11d0f0af --- /dev/null +++ b/src/QxGraph/QxGraph.h @@ -0,0 +1,35 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifdef WNT +#ifdef QXGRAPH_EXPORTS +#define QXGRAPH_EXPORT __declspec(dllexport) +#else +#define QXGRAPH_EXPORT __declspec(dllimport) +#endif +#else +#define QXGRAPH_EXPORT +#endif + +#ifdef WNT +#pragma warning ( disable:4251 ) +#endif diff --git a/src/QxGraph/QxGraph_ActiveItem.h b/src/QxGraph/QxGraph_ActiveItem.h new file mode 100644 index 000000000..fc9f008e7 --- /dev/null +++ b/src/QxGraph/QxGraph_ActiveItem.h @@ -0,0 +1,59 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef QXGRAPH_ACTIVEITEM_H +#define QXGRAPH_ACTIVEITEM_H + +#include "QxGraph.h" + +#include +#include +#include + +class QXGRAPH_EXPORT QxGraph_ActiveItem +{ + public: + QxGraph_ActiveItem() {} + ~QxGraph_ActiveItem() {} + + virtual bool isMoveable() = 0; + virtual void beforeMoving() = 0; + virtual void afterMoving() = 0; + + virtual bool isResizable(QPoint thePoint, int& theCursorType) { return false; } + virtual bool isResizing() { return false; } + virtual void beforeResizing(int theCursorType) {} + virtual void resize(QPoint thePoint) {} + virtual void afterResizing() {} + + virtual void hilight(const QPoint& theMousePos, const bool toHilight = true) = 0; + virtual void select(const QPoint& theMousePos, const bool toSelect = true) = 0; + virtual void showPopup(QWidget* theParent, QMouseEvent* theEvent, const QPoint& theMousePos = QPoint()) = 0; + + virtual QString getToolTipText(const QPoint& theMousePos, QRect& theRect) const = 0; + + virtual bool arePartsOfOtherItem(QxGraph_ActiveItem* theSecondItem) { return false; } + + void setTMatrix(QWMatrix theMatrix) { myTMatrix = theMatrix; } + QWMatrix getTMatrix() const { return myTMatrix; } + + private: + QWMatrix myTMatrix; // canvas view's current transformation matrix +}; + +#endif diff --git a/src/QxGraph/QxGraph_Canvas.cxx b/src/QxGraph/QxGraph_Canvas.cxx new file mode 100644 index 000000000..f39c5f6b4 --- /dev/null +++ b/src/QxGraph/QxGraph_Canvas.cxx @@ -0,0 +1,109 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "QxGraph_Canvas.h" +#include "QxGraph_Def.h" +#include "QxGraph_Prs.h" + +#include + +#include +#include + +/*! + Constructor +*/ +QxGraph_Canvas::QxGraph_Canvas(SUIT_ResourceMgr* theMgr) : + QCanvas() +{ + printf("Construct QxGraph_Canvas\n"); + + resize(GRAPH_WIDTH, GRAPH_HEIGHT); + setDoubleBuffering(true); + + QColor aColor = theMgr->colorValue( "QxGraph", "Background", DEF_BACK_COLOR ); + setBackgroundColor(aColor); +} + +/*! + Destructor +*/ +QxGraph_Canvas::~QxGraph_Canvas() +{ + /*QObjectList* aNodeList = queryList("QObject"); + QObjectListIt aIt(*aNodeList); + QObject* anObj; + while ( (anObj = aIt.current()) != 0 ) { + ++aIt; + aNodeList->removeRef(anObj); + delete anObj; + } + delete aNodeList;*/ + + myPrsList.setAutoDelete(true); + myPrsList.clear(); +} + +/*! + Add view +*/ +void QxGraph_Canvas::addView(QCanvasView* theView) +{ + myViews.append( theView ); + QCanvas::addView(theView); + theView->setPaletteBackgroundColor(backgroundColor().light(120)); +} + +/*! + Remove view +*/ +void QxGraph_Canvas::removeView( QCanvasView* theView ) +{ + myViews.remove( theView ); +} + +/*! + Remove item +*/ +void QxGraph_Canvas::removeItem( QCanvasItem* theItem ) +{ + QValueList< QCanvasView* >::iterator anIter; + for ( anIter = myViews.begin(); anIter != myViews.end(); ++anIter ) + { + QxGraph_CanvasView* aView = dynamic_cast( *anIter ); + if ( aView ) + aView->itemRemoved( theItem ); + } + + QCanvas::removeItem( theItem ); +} + +/*! + Get Prs object with index theIndex +*/ +QxGraph_Prs* QxGraph_Canvas::getPrs(int theIndex) +{ + QxGraph_Prs* aRetPrs = 0; + if ( theIndex >= 0 && theIndex < myPrsList.count() ) + aRetPrs = myPrsList.at(theIndex); + return aRetPrs; +} diff --git a/src/QxGraph/QxGraph_Canvas.h b/src/QxGraph/QxGraph_Canvas.h new file mode 100644 index 000000000..9dd6e2c10 --- /dev/null +++ b/src/QxGraph/QxGraph_Canvas.h @@ -0,0 +1,57 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef QXGRAPH_CANVAS_H +#define QXGRAPH_CANVAS_H + +#include "QxGraph.h" + +#include +#include + +class SUIT_ResourceMgr; +class QxGraph_Prs; + +class QXGRAPH_EXPORT QxGraph_Canvas : public QCanvas { + Q_OBJECT + + public: + QxGraph_Canvas(SUIT_ResourceMgr*); + virtual ~QxGraph_Canvas(); + + virtual void addView(QCanvasView* theView); + virtual void removeView(QCanvasView*); + + QPtrList getPrsList() const { return myPrsList; } + QxGraph_Prs* getPrs(int theIndex = 0); + void addPrs(QxGraph_Prs* thePrs) { myPrsList.append(thePrs); } + + virtual void removeItem( QCanvasItem* ); + +private: + + QValueList< QCanvasView* > myViews; + QPtrList myPrsList; + +}; + +#endif diff --git a/src/QxGraph/QxGraph_CanvasView.cxx b/src/QxGraph/QxGraph_CanvasView.cxx new file mode 100644 index 000000000..e7f726b13 --- /dev/null +++ b/src/QxGraph/QxGraph_CanvasView.cxx @@ -0,0 +1,761 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "QxGraph_CanvasView.h" +#include "QxGraph_Canvas.h" +#include "QxGraph_ViewWindow.h" +#include "QxGraph_ActiveItem.h" +#include "QxGraph_Def.h" + +#include +#include + +const char* imageZoomCursor[] = { +"32 32 3 1", +". c None", +"a c #000000", +"# c #ffffff", +"................................", +"................................", +".#######........................", +"..aaaaaaa.......................", +"................................", +".............#####..............", +"...........##.aaaa##............", +"..........#.aa.....a#...........", +".........#.a.........#..........", +".........#a..........#a.........", +"........#.a...........#.........", +"........#a............#a........", +"........#a............#a........", +"........#a............#a........", +"........#a............#a........", +".........#...........#.a........", +".........#a..........#a.........", +".........##.........#.a.........", +"........#####.....##.a..........", +".......###aaa#####.aa...........", +"......###aa...aaaaa.......#.....", +".....###aa................#a....", +"....###aa.................#a....", +"...###aa...............#######..", +"....#aa.................aa#aaaa.", +".....a....................#a....", +"..........................#a....", +"...........................a....", +"................................", +"................................", +"................................", +"................................"}; + +const char* imageCrossCursor[] = { + "32 32 3 1", + ". c None", + "a c #000000", + "# c #ffffff", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "...............#................", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + ".......#################........", + "........aaaaaaa#aaaaaaaaa.......", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "...............#a...............", + "................a...............", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................"}; + +/*! + Constructor +*/ +QxGraph_CanvasView::QxGraph_CanvasView(QxGraph_Canvas* theCanvas, QxGraph_ViewWindow* theViewWindow) : + QCanvasView(theCanvas, theViewWindow, 0, Qt::WRepaintNoErase), + myCurrentItem(0), + myHilightedItem(0), + mySelectedItem(0), + myMovingDone(false), + myCenter(0,0) +{ + printf("Construct QxGraph_CanvasView\n"); + setName("QxGraph_CanvasView"); + + myOperation = NOTHING; + myCursor = cursor(); + mySelectedRect = 0; + + myTimer = new QTimer(this); + connect(myTimer, SIGNAL(timeout()), this, SLOT(onTimeout())); + + viewport()->setMouseTracking(true); +} + +/*! + Destructor +*/ +QxGraph_CanvasView::~QxGraph_CanvasView() +{ +} + +void QxGraph_CanvasView::contentsMousePressEvent(QMouseEvent* theEvent) +{ + myPoint = inverseWorldMatrix().map(theEvent->pos()); + myGlobalPoint = theEvent->globalPos(); + myCurrentItem = 0; + + if ( theEvent->button() == Qt::MidButton && theEvent->state() == Qt::ControlButton + || + myOperation == PANVIEW ) + { // Panning + if ( myOperation != PANVIEW ) { + myOperation = PANVIEW; + myCursor = cursor(); // save old cursor + QCursor panCursor (Qt::SizeAllCursor); + setCursor(panCursor); + } + return; + } + + if ( myOperation == PANGLOBAL ) + { // Global panning + return; + } + + if ( myOperation == WINDOWFIT ) + { // Fit area + return; + } + + if ( theEvent->button() == Qt::LeftButton && theEvent->state() == Qt::ControlButton + || + myOperation == ZOOMVIEW ) + { // Zoom + if ( myOperation != ZOOMVIEW ) { + myOperation = ZOOMVIEW; + myCursor = cursor(); // save old cursor + QPixmap zoomPixmap (imageZoomCursor); + QCursor zoomCursor (zoomPixmap); + setCursor(zoomCursor); + + // the center of the view before zooming + int aXVCenter = viewport()->width()/2; + int aYVCenter = viewport()->height()/2; + myCenter = viewportToContents(QPoint(aXVCenter,aYVCenter)); + } + return; + } + + if ( theEvent->button() == Qt::LeftButton ) + { + QCanvasItemList aList = canvas()->collisions(myPoint); + // to move items on canvas view + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + int aCursorType; + if ( anActItem && anActItem->isResizable(myPoint,aCursorType) ) + { // resize itself only active items if it is resizable + anActItem->beforeResizing(aCursorType); + myCurrentItem = *it; + return; + } + else if ( anActItem && anActItem->isMoveable() ) + { // move itself only active items if it is moveable + anActItem->beforeMoving(); + myCurrentItem = *it; + return; + } + } + } +} + +void QxGraph_CanvasView::contentsMouseMoveEvent(QMouseEvent* theEvent) +{ + QPoint aPoint = inverseWorldMatrix().map(theEvent->pos()); + QPoint aGlobalPoint = theEvent->globalPos(); + + if (myTimer->isActive()) myTimer->stop(); + + if ( myOperation == PANVIEW ) + { // Panning + scrollBy(myGlobalPoint.x() - aGlobalPoint.x(), + myGlobalPoint.y() - aGlobalPoint.y()); + myGlobalPoint = aGlobalPoint; + myMovingDone = true; + return; + } + + if ( myOperation == WINDOWFIT ) + { // Fit within rectangle + int aLX, aTY; //left x and top y + if (myPoint.x() < aPoint.x()) aLX = myPoint.x(); + else aLX = aPoint.x(); + if (myPoint.y() < aPoint.y()) aTY = myPoint.y(); + else aTY = aPoint.y(); + QRect aRect(aLX, aTY, abs(myPoint.x()-aPoint.x()), abs(myPoint.y()-aPoint.y())); + QCanvasRectangle* aRect1 = new QCanvasRectangle(aRect, canvas()); + + //hide old selected rectangle + if (mySelectedRect) + mySelectedRect->hide(); + //draw new selected rectangle + QPen pen(Qt::black,1,Qt::SolidLine); + aRect1->setPen(pen); + aRect1->setZ(1E+6); + aRect1->show(); + + mySelectedRect = aRect1; + canvas()->update(); + + return; + } + + if ( myOperation == ZOOMVIEW ) + { // Zoom + QCanvasItemList aList = canvas()->allItems(); + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) + (*it)->hide(); + + int aXContCenter = myCenter.x(); + int aYContCenter = myCenter.y(); + + QWMatrix m = worldMatrix(); + + double dx = aGlobalPoint.x() - myGlobalPoint.x(); + double s = 1. + fabs(dx)*( (m.m11() < 1) ? m.m11() : 1. )/70.; + if (dx < 0) s = 1./s; + + int aXContCenterScaled = aXContCenter*s; + int aYContCenterScaled = aYContCenter*s; + + m.scale(s, s); + setWorldMatrix(m); + + center(aXContCenterScaled,aYContCenterScaled); + + myCenter.setX(aXContCenterScaled); + myCenter.setY(aYContCenterScaled); + + // remember the canvas view's current transformation matrix in all canvas items + aList = canvas()->allItems(); + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + if ( anActItem ) anActItem->setTMatrix(m); + (*it)->show(); + } + + myGlobalPoint = aGlobalPoint; + myMovingDone = true; + + return; + } + + if ( myCurrentItem ) + { + QxGraph_ActiveItem* anActItem = dynamic_cast( myCurrentItem ); + if ( anActItem && anActItem->isResizing() ) + { // to resize items on canvas view + anActItem->resize(aPoint); + myMovingDone = true; + return; + } + + // to move items on canvas view + if ( myCurrentItem->x() && myCurrentItem->y() ) { + double cx = myCurrentItem->x() - myPoint.x(); + double cy = myCurrentItem->y() - myPoint.y(); + + if (aPoint.x()+cx < 0) aPoint.setX(-(int)cx); + if (aPoint.y()+cy < 0) aPoint.setY(-(int)cy); + } + myCurrentItem->moveBy(aPoint.x() - myPoint.x(), + aPoint.y() - myPoint.y()); + myMovingDone = true; + myPoint = aPoint; + canvas()->update(); + + // scroll contents if mouse is outside + QRect r(contentsX(), contentsY(), visibleWidth(), visibleHeight()); + if (!r.contains(theEvent->pos())) { + int dx = 0, dy = 0; + if (theEvent->pos().x() < r.left()) dx = theEvent->pos().x() - r.left(); + if (theEvent->pos().x() > r.right()) dx = theEvent->pos().x() - r.right(); + if (theEvent->pos().y() < r.top()) dy = theEvent->pos().y() - r.top(); + if (theEvent->pos().y() > r.bottom()) dy = theEvent->pos().y() - r.bottom(); + scrollBy(dx, dy); + // start timer to scroll in silent mode + myDX = dx; myDY = dy; + myTimer->start(100); + } + + return; + } + else + { + QCanvasItemList aList = canvas()->collisions(aPoint); + // perform actions for active items + bool isHilightPerformed = false; + + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + + if (!isHilightPerformed && anActItem) { + // hilight + anActItem->hilight(aPoint); + if (anActItem != myHilightedItem) { + if (myHilightedItem) + myHilightedItem->hilight(aPoint, false); + myHilightedItem = anActItem; + } + isHilightPerformed = true; + + // show tooltip + QxGraph_ToolTip* aToolTip = new QxGraph_ToolTip(this); + aToolTip->maybeTip(aPoint); + } + + int aCursorType; + if ( anActItem && anActItem->isResizable(aPoint,aCursorType) ) { + // set resize cursor + QCursor resizeCursor; + switch (aCursorType) + { + case 1: //left + case 3: //right + resizeCursor = QCursor(Qt::SizeHorCursor); + break; + case 2: //top + case 4: //bottom + resizeCursor = QCursor(Qt::SizeVerCursor); + break; + case 5: //left-top + case 7: //right-bottom + resizeCursor = QCursor(Qt::SizeFDiagCursor); + break; + case 6: //right-top + case 8: //left-bottom + resizeCursor = QCursor(Qt::SizeBDiagCursor); + break; + default : + resizeCursor = QCursor(Qt::ArrowCursor); + break; + } + setCursor(resizeCursor); + return; + } + else { + // reset old cursor + setCursor(QCursor(Qt::ArrowCursor)); + return; + } + } + + if (!isHilightPerformed && myHilightedItem) { + myHilightedItem->hilight(aPoint, false); + myHilightedItem = 0; + QToolTip::hide(); //@ temporary solution + } + + if ( cursor().shape() == Qt::SizeVerCursor || cursor().shape() == Qt::SizeHorCursor + || cursor().shape() == Qt::SizeBDiagCursor || cursor().shape() == Qt::SizeFDiagCursor) + setCursor(QCursor(Qt::ArrowCursor)); + } +} + +/*! + This method is called by QxGraph_Canvas when item is removed. + QxGraph_CanvasView updates its own data accordingly +*/ +void QxGraph_CanvasView::itemRemoved( QCanvasItem* theItem ) +{ + if ( myCurrentItem == theItem ) + myCurrentItem = 0; + + QxGraph_ActiveItem* anActiveItem = dynamic_cast( theItem ); + if ( anActiveItem ) + { + if ( myHilightedItem == anActiveItem ) + myHilightedItem = 0; + if ( mySelectedItem == anActiveItem ) + mySelectedItem = 0; + } +} + +void QxGraph_CanvasView::setSelectedItem( QxGraph_ActiveItem* theItem ) +{ + mySelectedItem = theItem; +} + +QxGraph_ActiveItem* QxGraph_CanvasView::getSelectedItem() const +{ + return mySelectedItem; +} + +void QxGraph_CanvasView::contentsMouseReleaseEvent(QMouseEvent* theEvent) +{ + QPoint aPoint = inverseWorldMatrix().map(theEvent->pos()); + + if (myTimer->isActive()) myTimer->stop(); + + if (myCurrentItem) + { // to move items on canvas view + QxGraph_ActiveItem* anActItem = dynamic_cast( myCurrentItem ); + if ( anActItem && anActItem->isResizing() ) + { + anActItem->afterResizing(); + // reset old cursor + setCursor(QCursor(Qt::ArrowCursor)); + } + else if ( anActItem && anActItem->isMoveable() ) + anActItem->afterMoving(); + } + myCurrentItem = 0; + + if ( myOperation == PANVIEW ) + { // Panning + myOperation = NOTHING; + viewport()->setMouseTracking(true); + setCursor(myCursor); + + emit viewOperationDone(); + } + + if ( myOperation == PANGLOBAL ) + { // Global panning + myOperation = NOTHING; + center( theEvent->x(), theEvent->y() ); + setCursor(myCursor); + + emit viewOperationDone(); + } + + if ( myOperation == WINDOWFIT ) + { // Fit within rectangle + myOperation = NOTHING; + + if (mySelectedRect) { + mySelectedRect->hide(); + mySelectedRect = 0; + //canvas()->update(); + } + + //myPoint is the start point for selecting rectangle now + int aLX, aTY; //left x and top y + if (myPoint.x() < aPoint.x()) aLX = myPoint.x(); + else aLX = aPoint.x(); + if (myPoint.y() < aPoint.y()) aTY = myPoint.y(); + else aTY = aPoint.y(); + + //calculate width and height for new view and new zoom factor + double aXzoom = ((double)visibleWidth())/((double)(abs(myPoint.x()-aPoint.x()))); + double aYzoom = ((double)visibleHeight())/((double)(abs(myPoint.y()-aPoint.y()))); + if (aXzoom > aYzoom) aXzoom = aYzoom; + + QWMatrix m; + m.scale(aXzoom, aXzoom); + setWorldMatrix(m); + + // remember the canvas view's current transformation matrix in all canvas items + QCanvasItemList aList = canvas()->allItems(); + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + if ( anActItem ) anActItem->setTMatrix(m); + } + + setContentsPos((int)(aLX*aXzoom), (int)(aTY*aYzoom)); + + canvas()->update(); + + viewport()->setMouseTracking(true); + setCursor(myCursor); + + emit viewOperationDone(); + } + + if ( myOperation == ZOOMVIEW ) + { // Zoom + myOperation = NOTHING; + viewport()->setMouseTracking(true); + setCursor(myCursor); + + emit viewOperationDone(); + } + + if ( theEvent->button() == RightButton ) + { + // Selection mechanism + QCanvasItemList aList = canvas()->collisions(aPoint); + bool isSelectionPerformed = false; + + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + if (!isSelectionPerformed && anActItem) + { + anActItem->select(aPoint); + if (anActItem != mySelectedItem) + { + if (mySelectedItem && isSelectedItemInCanvas() && + !mySelectedItem->arePartsOfOtherItem(anActItem)) mySelectedItem->select(aPoint, false); + mySelectedItem = anActItem; + + // unhilight hilighted item if selection was performed + if (myHilightedItem) { + myHilightedItem->hilight(aPoint, false); + myHilightedItem = 0; + } + } + isSelectionPerformed = true; + } + } + + if (!isSelectionPerformed) + { + if ( mySelectedItem ) + { + if ( isSelectedItemInCanvas() ) mySelectedItem->select(aPoint, false); + mySelectedItem = 0; + } + + // Background popup + printf("Background popup\n"); + QContextMenuEvent aEvent( QContextMenuEvent::Mouse, + theEvent->pos(), theEvent->globalPos(), + theEvent->state() ); + if ( getViewWindow() ) + getViewWindow()->contextPopupEvent(&aEvent); // => emit contextMenuRequested( &aEvent ); + } + else + { // show context popup for the selected item + mySelectedItem->showPopup(viewport(), theEvent, aPoint); + } + } + + if ( theEvent->button() == LeftButton && !myMovingDone ) + { + // Selection mechanism + QCanvasItemList aList = canvas()->collisions(aPoint); + + if ( aList.empty() && mySelectedItem ) + { + if ( isSelectedItemInCanvas() ) mySelectedItem->select(aPoint, false); + mySelectedItem = 0; + } + else + { + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + if (anActItem) + { + anActItem->select(aPoint); + if (anActItem != mySelectedItem) + { + if (mySelectedItem && isSelectedItemInCanvas() && + !mySelectedItem->arePartsOfOtherItem(anActItem)) mySelectedItem->select(aPoint, false); + mySelectedItem = anActItem; + } + break; + } + } + } + } + + myMovingDone = false; +} + +void QxGraph_CanvasView::contentsMouseDoubleClickEvent(QMouseEvent* theEvent) +{ + +} + +bool QxGraph_CanvasView::isSelectedItemInCanvas() +{ + // check if mySelectedItem is included into the canvas: + // if yes => unselect it + // if no => do nothing + bool anIsInCanvas = false; + QCanvasItemList aListC = canvas()->allItems(); + for (QCanvasItemList::Iterator itC = aListC.begin(); itC != aListC.end(); ++itC) { + QxGraph_ActiveItem* anActItemC = dynamic_cast( *itC ); + if ( anActItemC && anActItemC == mySelectedItem ) { + anIsInCanvas = true; + break; + } + } + return anIsInCanvas; +} + +void QxGraph_CanvasView::activateFitAll() +{ + //myOperation = FITALL; + int w = 0, h = 0; + QCanvasItemList l = canvas()->allItems(); + for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) { + QRect r = (*it)->boundingRect(); + if (w < r.right()) w = r.right(); + if (h < r.bottom()) h = r.bottom(); + } + w += GRAPH_MARGIN; h += GRAPH_MARGIN; + double s = ((double)visibleWidth())/((double)w); + double s1 = ((double)visibleHeight())/((double)h); + if (s > s1) s = s1; + + setContentsPos(0,0); + QWMatrix m; + m.scale(s, s); + setWorldMatrix(m); + + // remember the canvas view's current transformation matrix in all canvas items + QCanvasItemList aList = canvas()->allItems(); + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + if ( anActItem ) anActItem->setTMatrix(m); + } + + canvas()->update(); + //myOperation = NOTHING; + + emit viewOperationDone(); +} + +void QxGraph_CanvasView::activateFitRect() +{ + myOperation = WINDOWFIT; + viewport()->setMouseTracking(false); + myCursor = cursor(); // save old cursor + QCursor handCursor (Qt::PointingHandCursor); + setCursor(handCursor); +} + +void QxGraph_CanvasView::activateZoom() +{ + myOperation = ZOOMVIEW; + viewport()->setMouseTracking(false); + myCursor = cursor(); // save old cursor + QPixmap zoomPixmap (imageZoomCursor); + QCursor zoomCursor (zoomPixmap); + setCursor(zoomCursor); +} + +void QxGraph_CanvasView::activatePanning() +{ + myOperation = PANVIEW; + viewport()->setMouseTracking(false); + myCursor = cursor(); // save old cursor + QCursor panCursor (Qt::SizeAllCursor); + setCursor(panCursor); +} + +void QxGraph_CanvasView::activateGlobalPanning() +{ + myOperation = PANGLOBAL; + myCursor = cursor(); // save old cursor + QPixmap globalPanPixmap (imageCrossCursor); + QCursor glPanCursor (globalPanPixmap); + setCursor(glPanCursor); +} + +void QxGraph_CanvasView::activateReset() +{ + //myOperation = RESETVIEW; + setContentsPos(0,0); + QWMatrix m; + setWorldMatrix(m); + + // remember the canvas view's current transformation matrix in all canvas items + QCanvasItemList aList = canvas()->allItems(); + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + if ( anActItem ) anActItem->setTMatrix(m); + } + + //myOperation = NOTHING; + + emit viewOperationDone(); +} + +void QxGraph_CanvasView::onTimeout() +{ + if (myCurrentItem) { + scrollBy(myDX, myDY); + + double cx, cy; + inverseWorldMatrix().map((double)myDX, (double)myDY, &cx, &cy); + if (myCurrentItem->x()+cx < 0) cx = -myCurrentItem->x(); + if (myCurrentItem->y()+cy < 0) cy = -myCurrentItem->y(); + myCurrentItem->moveBy(cx, cy); + myPoint.setX(myPoint.x()+(int)cx); + myPoint.setY(myPoint.y()+(int)cy); + canvas()->update(); + } +} + +QxGraph_ViewWindow* QxGraph_CanvasView::getViewWindow() const +{ + return dynamic_cast( parent() ); +} + +/*! + Shows tooltip if necessary +*/ +void QxGraph_ToolTip::maybeTip(const QPoint& theMousePos) { + QCanvasItemList aList = ((QCanvasView*)parentWidget())->canvas()->collisions(theMousePos); + + for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) { + QxGraph_ActiveItem* anActItem = dynamic_cast( *it ); + if (anActItem) + { + QRect aRect; + QString aText = anActItem->getToolTipText(theMousePos, aRect); + int avX, avY; + QWMatrix aWM = ((QCanvasView*)parentWidget())->worldMatrix(); + ((QCanvasView*)parentWidget())->contentsToViewport((int)(aRect.left()*aWM.m11()), + (int)(aRect.top()*aWM.m22()), + avX, avY); + QRect aTipRect(avX, avY, (int)(aRect.width()*aWM.m11()), (int)(aRect.height()*aWM.m22())); + if (!aText.isEmpty()) + tip(aTipRect, aText); + return; + } + } +} + + + diff --git a/src/QxGraph/QxGraph_CanvasView.h b/src/QxGraph/QxGraph_CanvasView.h new file mode 100644 index 000000000..6aa5c3b79 --- /dev/null +++ b/src/QxGraph/QxGraph_CanvasView.h @@ -0,0 +1,112 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef QXGRAPH_CANVASVIEW_H +#define QXGRAPH_CANVASVIEW_H + +#include "QxGraph.h" + +#include +#include +#include +#include + +class QxGraph_Canvas; +class QxGraph_ViewWindow; +class QxGraph_ActiveItem; + +class QXGRAPH_EXPORT QxGraph_CanvasView : public QCanvasView { + Q_OBJECT + + public: + enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, PANGLOBAL, + WINDOWFIT, FITALLVIEW, RESETVIEW }; + + QxGraph_CanvasView(QxGraph_Canvas* theCanvas, QxGraph_ViewWindow* theViewWindow); + virtual ~QxGraph_CanvasView(); + + QxGraph_ViewWindow* getViewWindow() const; + + void activateFitAll(); + void activateFitRect(); + void activateZoom(); + void activatePanning(); + void activateGlobalPanning(); + void activateReset(); + + void itemRemoved( QCanvasItem* ); + + void setSelectedItem( QxGraph_ActiveItem* theItem ); + QxGraph_ActiveItem* getSelectedItem() const; + + signals: + void viewOperationDone(); + + public slots: + void onTimeout(); + //void changeBackground(); + + protected: + void contentsMousePressEvent(QMouseEvent* theEvent); + void contentsMouseMoveEvent(QMouseEvent* theEvent); + void contentsMouseReleaseEvent(QMouseEvent* theEvent); + void contentsMouseDoubleClickEvent(QMouseEvent* theEvent); + + bool isSelectedItemInCanvas(); + + private: + // for moving items + QCanvasItem* myCurrentItem; + QPoint myPoint; + QPoint myGlobalPoint; + bool myMovingDone; + QPoint myCenter; + + // for control toolbar actions + OperationType myOperation; + QCursor myCursor; + QCanvasRectangle* mySelectedRect; + + // for automatic content scrolling if mouse is outside + QTimer* myTimer; + int myDX; + int myDY; + + // for hilight + QxGraph_ActiveItem* myHilightedItem; + + // for selection + QxGraph_ActiveItem* mySelectedItem; +}; + + +class QxGraph_ToolTip: public QToolTip { + + public: + QxGraph_ToolTip(QWidget* theWidget, QToolTipGroup* theGroup = 0): + QToolTip(theWidget, theGroup) {} + ~QxGraph_ToolTip() { remove(parentWidget()); } + + virtual void maybeTip(const QPoint& theMousePos); +}; + +#endif diff --git a/src/QxGraph/QxGraph_Def.h b/src/QxGraph/QxGraph_Def.h new file mode 100644 index 000000000..88937e325 --- /dev/null +++ b/src/QxGraph/QxGraph_Def.h @@ -0,0 +1,34 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef QXGRAPH_DEF_H +#define QXGRAPH_DEF_H + +#define DEF_BACK_COLOR QColor(144, 208, 211) +#define RECTANGLE_BODY QColor(255,249,147) + +#define GRAPH_WIDTH 1250 +#define GRAPH_HEIGHT 950 + +#define GRAPH_MARGIN 50 + +#endif diff --git a/src/QxGraph/QxGraph_Prs.cxx b/src/QxGraph/QxGraph_Prs.cxx new file mode 100644 index 000000000..c9c6b219d --- /dev/null +++ b/src/QxGraph/QxGraph_Prs.cxx @@ -0,0 +1,251 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "QxGraph_Prs.h" + +#include "QxGraph_Canvas.h" +#include "QxGraph_Def.h" // for debug only + +#include "SUIT_Session.h" // for debug only + +/*! + Constructor +*/ +QxGraph_Prs::QxGraph_Prs(QxGraph_Canvas* theCanvas): + myCanvas(theCanvas), + myDMode(0), + needUpdate(true) +{ + myCanvas->addPrs(this); +} + +/*! + Destructor +*/ +QxGraph_Prs::~QxGraph_Prs() +{ + for ( DMode2ItemList::iterator it1 = myDisplayMap.begin(); + it1 != myDisplayMap.end(); + it1++ ) + { + for ( std::list::iterator it2 = (*it1).second.begin(); + it2 != (*it1).second.end(); + it2++ ) + { + QCanvasItem* anItem = *it2; + if ( anItem ) delete anItem; + } + } + + myDisplayMap.clear(); +} + +/*! + Add item to display in the view with index theDMode +*/ +void QxGraph_Prs::addItem(QCanvasItem* theItem, int theDMode) +{ + if ( theDMode == -1 ) // add item for the current display mode + myDisplayMap[myDMode].push_back(theItem); + else + myDisplayMap[theDMode].push_back(theItem); +} + +/*! + Remove item from the view with index theDMode +*/ +void QxGraph_Prs::removeItem(QCanvasItem* theItem, int theDMode) +{ + if ( theDMode == -1 ) // remove item from the current display mode + myDisplayMap[myDMode].remove(theItem); + else + myDisplayMap[theDMode].remove(theItem); +} + +/*! Adds all the items of this presentation for the current display mode + * to the canvas. + */ +void QxGraph_Prs::show() +{ + if ( isToUpdate() ) + update(); + + for ( std::list::iterator it = myDisplayMap[myDMode].begin(); + it != myDisplayMap[myDMode].end(); + it++ ) + { + QCanvasItem* anItem = *it; + if ( anItem ) + { + anItem->setCanvas( myCanvas ); + anItem->show(); + } + } +} + +/*! Removes all the items belonging to this presentation from the canvas. + */ +void QxGraph_Prs::hide() +{ + for ( DMode2ItemList::iterator it1 = myDisplayMap.begin(); + it1 != myDisplayMap.end(); + it1++ ) + { + for ( std::list::iterator it2 = (*it1).second.begin(); + it2 != (*it1).second.end(); + it2++ ) + { + QCanvasItem* anItem = *it2; + if ( anItem ) + { + anItem->setCanvas( 0 ); + } + } + } +} + +/*! Prepare for full recomputation of the presentation + */ +void QxGraph_Prs::setToUpdate( const bool theFlag ) +{ + needUpdate = theFlag; +} + +/*! Re-fills the presentation with items. + * Base implementation just resets flag. + * It should be called at the end by re-implementations. + */ +void QxGraph_Prs::update() +{ + setToUpdate( false ); +} + +/*! + Add a QCanvasRectangle item for display mode DMode +*/ +QCanvasItem* QxGraph_Prs::addRectangleItem(QRect theRect, int theDMode) +{ + QCanvasRectangle* aRectItem; + if ( myCanvas ) + { + QCanvasRectangle* aRectItem = new QCanvasRectangle(theRect, myCanvas); + aRectItem->setZ(0); + aRectItem->show(); + myCanvas->update(); + + // test drawing features: brush, pen ... + QBrush aBr(SUIT_Session::session()->resourceMgr()->colorValue( "QxGraph", "NodeBody", RECTANGLE_BODY )); + aRectItem->setBrush(aBr); + } + addItem(aRectItem); + return aRectItem; +} + +/*! + Add a QCanvasPolygon item for display mode DMode +*/ +QCanvasItem* QxGraph_Prs::addPolygonItem(QPointArray thePA, int theDMode) +{ + QCanvasPolygon* aPolyItem; + if ( myCanvas ) + { + aPolyItem = new QCanvasPolygon(myCanvas); + aPolyItem->setZ(0); + aPolyItem->setPoints(thePA); + aPolyItem->show(); + myCanvas->update(); + + // test drawing features: brush, pen ... + QBrush aBr(SUIT_Session::session()->resourceMgr()->colorValue( "QxGraph", "NodeBody", RECTANGLE_BODY )); + aPolyItem->setBrush(aBr); + QPen aPen(Qt::black,2); + aPolyItem->setPen(aPen); + } + addItem(aPolyItem); + return aPolyItem; +} + +/*! + Add a QCanvasLine item for display mode DMode +*/ +QCanvasItem* QxGraph_Prs::addLineItem(QPoint theStart, QPoint theEnd, int theDMode) +{ + QCanvasLine* aLineItem; + if ( myCanvas ) + { + aLineItem = new QCanvasLine(myCanvas); + aLineItem->setZ(0); + aLineItem->setPoints(theStart.x(), theStart.y(), theEnd.x(), theEnd.y()); + aLineItem->show(); + myCanvas->update(); + + // test drawing features: brush, pen ... + QPen aPen(Qt::black,2); + aLineItem->setPen(aPen); + } + addItem(aLineItem); + return aLineItem; +} + +/*! + Add a QCanvasEllipse item for display mode DMode +*/ +QCanvasItem* QxGraph_Prs::addEllipseItem(int theW, int theH, int theStartAngle, int theAngle, int theDMode) +{ + QCanvasEllipse* aEllipseItem; + if ( myCanvas ) + { + aEllipseItem = new QCanvasEllipse(theW, theH, theStartAngle, theAngle, myCanvas); + aEllipseItem->setZ(0); + aEllipseItem->show(); + myCanvas->update(); + + // test drawing features: brush, pen ... + QBrush aBr(SUIT_Session::session()->resourceMgr()->colorValue( "QxGraph", "NodeBody", RECTANGLE_BODY )); + aEllipseItem->setBrush(aBr); + QPen aPen(Qt::black,2); + aEllipseItem->setPen(aPen); + } + addItem(aEllipseItem); + return aEllipseItem; +} + +/*! + Add a QCanvasText item for display mode DMode +*/ +QCanvasItem* QxGraph_Prs::addTextItem(QString theText, int theDMode) +{ + QCanvasText* aTextItem; + if ( myCanvas ) + { + aTextItem = new QCanvasText(theText, myCanvas); + aTextItem->setZ(0); + aTextItem->show(); + myCanvas->update(); + + // test drawing features: font, color, text flags ... + aTextItem->setColor(Qt::darkBlue); + //aTextItem->setFont(QFont("Times"/*"Helvetica"*/, 14, QFont::Normal, true)); + } + addItem(aTextItem); + return aTextItem; +} diff --git a/src/QxGraph/QxGraph_Prs.h b/src/QxGraph/QxGraph_Prs.h new file mode 100644 index 000000000..161610314 --- /dev/null +++ b/src/QxGraph/QxGraph_Prs.h @@ -0,0 +1,73 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef QXGRAPH_PRS_H +#define QXGRAPH_PRS_H + +#include + +#include +#include +#include + +class QxGraph_Canvas; + +class QXGRAPH_EXPORT QxGraph_Prs +{ + public: + QxGraph_Prs(QxGraph_Canvas*); + virtual ~QxGraph_Prs(); + + QxGraph_Canvas* getCanvas() const { return myCanvas; } + + void addItem(QCanvasItem* theItem, int theDMode = -1); + void removeItem(QCanvasItem* theItem, int theDMode = -1); + + /* add items for display mode theDMode + if theDMode is equal to -1 add item for the current (active) display mode */ + QCanvasItem* addRectangleItem(QRect theRect, int theDMode = -1); + QCanvasItem* addPolygonItem(QPointArray thePA, int theDMode = -1); + QCanvasItem* addLineItem(QPoint theStart, QPoint theEnd, int theDMode = -1); + QCanvasItem* addEllipseItem(int theW, int theH, int theStartAngle, int theAngle, int theDMode = -1); + QCanvasItem* addTextItem(QString theText, int theDMode = -1); + + typedef std::map< int, std::list > DMode2ItemList; + + const DMode2ItemList& getDisplayMap() const { return myDisplayMap; } + const std::list& getItems(int theDMode) { return myDisplayMap[theDMode]; } + + void setDMode(int theDMode) { myDMode = theDMode; } + int getDMode() const { return myDMode; } + + virtual void show(); + virtual void hide(); + virtual void setToUpdate( const bool ); + bool isToUpdate() { return needUpdate; } + +protected: + virtual void update(); + +private: + QxGraph_Canvas* myCanvas; + DMode2ItemList myDisplayMap; + + int myDMode; + bool needUpdate; +}; + +#endif diff --git a/src/QxGraph/QxGraph_ViewManager.cxx b/src/QxGraph/QxGraph_ViewManager.cxx new file mode 100644 index 000000000..3709afc7e --- /dev/null +++ b/src/QxGraph/QxGraph_ViewManager.cxx @@ -0,0 +1,56 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "QxGraph_ViewManager.h" + +/*! + Constructor +*/ +QxGraph_ViewManager::QxGraph_ViewManager( SUIT_Study* theStudy, + SUIT_Desktop* theDesktop, + SUIT_ViewModel* theViewModel ) + : SUIT_ViewManager( theStudy, theDesktop, theViewModel ) +{ +} + +/*! + Destructor +*/ +QxGraph_ViewManager::~QxGraph_ViewManager() +{ +} + +/*! + Sets view name + \param theView - view to assign name +*/ +void QxGraph_ViewManager::setViewName(SUIT_ViewWindow* theView) +{ + int aPos = myViews.find(theView); + theView->setCaption( QString( "QxGraph scene:%1 - viewer:%2" ).arg( myId ).arg(aPos+1)); +} + +/*! + Fills popup menu with custom actions + \param popup - popup menu to be filled with +*/ +void QxGraph_ViewManager::contextMenuPopup( QPopupMenu* thePopup) +{ + SUIT_ViewManager::contextMenuPopup( thePopup ); + // to be implemented +} diff --git a/src/QxGraph/QxGraph_ViewManager.h b/src/QxGraph/QxGraph_ViewManager.h new file mode 100644 index 000000000..2e45cc3a6 --- /dev/null +++ b/src/QxGraph/QxGraph_ViewManager.h @@ -0,0 +1,44 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef QXGRAPH_VIEWMANAGER_H +#define QXGRAPH_VIEWMANAGER_H + +#include "QxGraph.h" + +#include "QxGraph_ViewModel.h" +#include "SUIT_ViewManager.h" + +class SUIT_Desktop; + +class QXGRAPH_EXPORT QxGraph_ViewManager : public SUIT_ViewManager +{ + Q_OBJECT + +public: + QxGraph_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop, SUIT_ViewModel* theViewModel = 0 ); + ~QxGraph_ViewManager(); + + virtual void contextMenuPopup( QPopupMenu* thePopup ); + +protected: + void setViewName(SUIT_ViewWindow* theView); + +}; + +#endif diff --git a/src/QxGraph/QxGraph_ViewModel.cxx b/src/QxGraph/QxGraph_ViewModel.cxx new file mode 100644 index 000000000..df49f0829 --- /dev/null +++ b/src/QxGraph/QxGraph_ViewModel.cxx @@ -0,0 +1,157 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "QxGraph_ViewModel.h" +#include "QxGraph_ViewWindow.h" +#include "QxGraph_Canvas.h" +#include "QxGraph_CanvasView.h" +#include "QxGraph_Def.h" +#include "QxGraph_Prs.h" + +#include "SUIT_Desktop.h" +#include "SUIT_ViewWindow.h" +#include "SUIT_Session.h" + +#include +#include +#include // for addRectangleItem(...) method (can be removed in the future) + +/*! + Constructor +*/ +QxGraph_Viewer::QxGraph_Viewer() + :SUIT_ViewModel(), + myCanvas(0), + myCurrentView(0) +{ + printf("Construct QxGraph_Viewer\n"); + //myCanvases.setAutoDelete(true); + //myCanvasViews.setAutoDelete(true); +} + +/*! + Destructor +*/ +QxGraph_Viewer::~QxGraph_Viewer() +{ + if ( myCanvas ) delete myCanvas; + //if ( !myCanvases.isEmpty() ) myCanvases.clear(); + if ( !myCanvasViews.isEmpty() ) myCanvasViews.clear(); + myCurrentView = 0; +} + +/*! + Start initialization of view window + \param view - view window to be initialized +*/ +void QxGraph_Viewer::initView( QxGraph_ViewWindow* view ) +{ + if ( view ) + { + view->initLayout(); + + /* + // test add items into the current canvas view + QRect aRect(100,200,200,100); + QCanvasItem* aRectItem = aPrs->addRectangleItem(aRect); + //delete aRectItem; + + QPointArray aPA(6); + aPA.putPoints(0, 6, 400,100, 500,70, 600,100, 600,200, 500,230, 400,200); + QCanvasItem* aPolyItem = aPrs->addPolygonItem(aPA); + //delete aPolyItem; + + QPoint aStart(500,300), aEnd(700,250); + QCanvasItem* aLineItem = aPrs->addLineItem(aStart, aEnd); + //delete aLineItem; + + QCanvasItem* aEllipseItem = aPrs->addEllipseItem(200, 100, 30*16, 120*16); + aEllipseItem->setX(400); + aEllipseItem->setY(400); + //delete aEllipseItem; + + QCanvasItem* aTextItem = aPrs->addTextItem("This is a QCanvasText item"); + aTextItem->setX(100); + aTextItem->setY(500); + //delete aTextItem; + */ + } +} + +/*! + Creates new view window + \param theDesktop - main window of application +*/ +SUIT_ViewWindow* QxGraph_Viewer::createView(SUIT_Desktop* theDesktop) +{ + QxGraph_ViewWindow* aRes = new QxGraph_ViewWindow( theDesktop, this ); + initView( aRes ); + return aRes; +} + +/*! + Set view with index theIndex from myCanvasViews as current view + \param theIndex - the index of the view in the list +*/ +void QxGraph_Viewer::setCurrentView(int theIndex) +{ + if ( theIndex >= 0 && theIndex < myCanvasViews.count() ) + { + myCurrentView = myCanvasViews.at(theIndex); + myViewManager->getActiveView()->setCentralWidget(myCurrentView); + } +} + +/*! + Builds popup for QxGraph viewer +*/ +void QxGraph_Viewer::contextMenuPopup(QPopupMenu* thePopup) +{ + printf("QxGraph_Viewer::contextMenuPopup\n"); + thePopup->insertItem( tr( "MEN_CHANGE_BACKGROUND" ), this, SLOT( onChangeBgColor() ) ); + + thePopup->insertSeparator(); + + QxGraph_ViewWindow* aView = (QxGraph_ViewWindow*)(myViewManager->getActiveView()); + if ( aView && !aView->getToolBar()->isVisible() ) + thePopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) ); +} + +/*! + SLOT: called if background color is to be changed changed, passes new color to current canvas view +*/ +void QxGraph_Viewer::onChangeBgColor() +{ + QxGraph_ViewWindow* aView = (QxGraph_ViewWindow*)(myViewManager->getActiveView()); + if( !aView ) + return; + QColor aColorActive = aView->backgroundColor(); + + QColor selColor = QColorDialog::getColor( aColorActive, aView); + if ( selColor.isValid() ) + aView->setBackgroundColor(selColor); +} + +/*! + SLOT: called when popup item "Show toolbar" is activated, shows toolbar of active view window +*/ +void QxGraph_Viewer::onShowToolbar() { + QxGraph_ViewWindow* aView = (QxGraph_ViewWindow*)(myViewManager->getActiveView()); + if ( aView ) + aView->getToolBar()->show(); +} diff --git a/src/QxGraph/QxGraph_ViewModel.h b/src/QxGraph/QxGraph_ViewModel.h new file mode 100644 index 000000000..e04fcb35e --- /dev/null +++ b/src/QxGraph/QxGraph_ViewModel.h @@ -0,0 +1,82 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef QXGRAPH_VIEWMODEL_H +#define QXGRAPH_VIEWMODEL_H + +#include "QxGraph.h" + +#include "SUIT_ViewModel.h" + +class QCanvasItem; // for addRectangleItem(...) method (can be removed in the future) + +class QxGraph_Canvas; +class QxGraph_CanvasView; +class QxGraph_ViewWindow; +class QxGraph_Prs; + +class QXGRAPH_EXPORT QxGraph_Viewer: public SUIT_ViewModel +{ + Q_OBJECT + + public: + static QString Type() { return "QxGraphViewer"; } + + QxGraph_Viewer(); + virtual ~QxGraph_Viewer(); + + virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop); + virtual QString getType() const { return Type(); } + + virtual void contextMenuPopup(QPopupMenu*); + + QxGraph_Canvas* getCanvas() const { return myCanvas; } + void setCanvas(QxGraph_Canvas* theCanvas) { myCanvas = theCanvas; } + //QPtrList getCanvases() { return myCanvases; } + //void setCanvases(QPtrList theCanvases) { myCanvases = theCanvases; } + + //void addCanvas(QxGraph_Canvas* theCanvas) { myCanvases.append(theCanvas); } + //void removeCanvas(QxGraph_Canvas* theCanvas) { myCanvases.remove(theCanvas); } + + QPtrList getCanvasViews() { return myCanvasViews; } + void setCanvasViews(QPtrList theViews) { myCanvasViews = theViews; } + + void addView(QxGraph_CanvasView* theView) { myCanvasViews.append(theView); } + void removeView(QxGraph_CanvasView* theView) { myCanvasViews.remove(theView); } + + QxGraph_CanvasView* getCurrentView() const { return myCurrentView; } + void setCurrentView(QxGraph_CanvasView* theView) { myCurrentView = theView; } + void setCurrentView(int theIndex); + + protected: + void initView(QxGraph_ViewWindow* view); + + protected slots: + void onShowToolbar(); + void onChangeBgColor(); + + private: + QxGraph_Canvas* myCanvas; + //QPtrList myCanvases; + QPtrList myCanvasViews; + + QxGraph_CanvasView* myCurrentView; + +}; + +#endif diff --git a/src/QxGraph/QxGraph_ViewWindow.cxx b/src/QxGraph/QxGraph_ViewWindow.cxx new file mode 100644 index 000000000..1e64a8b06 --- /dev/null +++ b/src/QxGraph/QxGraph_ViewWindow.cxx @@ -0,0 +1,288 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "QxGraph_ViewWindow.h" +#include "QxGraph_Def.h" +#include "QxGraph_Canvas.h" +#include "QxGraph_CanvasView.h" + +#include +#include +#include + +//QT Include +#include +#include +//#include + +using namespace std; + +/*! + Constructor +*/ +QxGraph_ViewWindow::QxGraph_ViewWindow( SUIT_Desktop* theDesktop, QxGraph_Viewer* theModel) + : SUIT_ViewWindow( theDesktop ) +{ + printf("Construct QxGraph_ViewWindow\n"); + myViewModel = theModel; +} + +/*! + Initialization +*/ +void QxGraph_ViewWindow::initLayout() +{ + initCanvas(); + initCanvasViews(); + + myToolBar = new QToolBar(this); + myToolBar->setCloseMode(QDockWindow::Undocked); + myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); + createActions(); + createToolBar(); +} + +/*! + Canvas initialization +*/ +void QxGraph_ViewWindow::initCanvas() +{ + if ( myViewModel ) + myViewModel->setCanvas( new QxGraph_Canvas(resMgr()) ); + //myViewModel->addCanvas( new QxGraph_Canvas(resMgr()) ); +} + +/*! + Canvas views initialization +*/ +void QxGraph_ViewWindow::initCanvasViews() +{ + if ( myViewModel ) + { + for (int i = 0; i < 2; i++) + { + //QxGraph_Canvas* aCanvas = new QxGraph_Canvas(resMgr()); + //myViewModel->addCanvas( aCanvas ); + + QxGraph_CanvasView* aCanvasView = new QxGraph_CanvasView( myViewModel->getCanvas(), this ); + //QxGraph_CanvasView* aCanvasView = new QxGraph_CanvasView( aCanvas, this ); + myViewModel->addView(aCanvasView); + + aCanvasView->hide(); + } + + // the first view is shown and is the current + myViewModel->getCanvasViews().first()->show(); + myViewModel->setCurrentView( myViewModel->getCanvasViews().first() ); + + /* test for 1 view --> + QxGraph_CanvasView* aCanvasView = new QxGraph_CanvasView( myViewModel->getCanvas(), this ); + myViewModel->addView(aCanvasView); + myViewModel->setCurrentView(aCanvasView); + test for 1 view <-- */ + + setCentralWidget( myViewModel->getCurrentView() ); + + /*if ( inherits( "QMainWindow" ) ) { + printf("== > 1\n"); + ( ( QMainWindow* )this )->setCentralWidget( myViewModel->getCurrentView() ); + } + else { + printf("== > 2\n"); + QBoxLayout* layout = new QVBoxLayout( this ); + layout->addWidget( myViewModel->getCurrentView() ); + }*/ + } +} + +/*! + Creates actions of QxGraph view window +*/ +void QxGraph_ViewWindow::createActions() +{ + if (!myActionsMap.isEmpty()) return; + SUIT_ResourceMgr* aResMgr = resMgr(); + QtxAction* aAction; + + // FitAll + aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_FITALL" ) ), + tr( "MNU_FITALL" ), 0, this); + aAction->setStatusTip(tr("DSC_FITALL")); + connect(aAction, SIGNAL(activated()), this, SLOT(onViewFitAll())); + myActionsMap[ FitAllId ] = aAction; + + // FitRect + aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_FITAREA" ) ), + tr( "MNU_FITRECT" ), 0, this); + aAction->setStatusTip(tr("DSC_FITRECT")); + connect(aAction, SIGNAL(activated()), this, SLOT(onViewFitArea())); + myActionsMap[ FitRectId ] = aAction; + + // Zoom + aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_ZOOM" ) ), + tr( "MNU_ZOOM_VIEW" ), 0, this); + aAction->setStatusTip(tr("DSC_ZOOM_VIEW")); + connect(aAction, SIGNAL(activated()), this, SLOT(onViewZoom())); + myActionsMap[ ZoomId ] = aAction; + + // Panning + aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_PAN" ) ), + tr( "MNU_PAN_VIEW" ), 0, this); + aAction->setStatusTip(tr("DSC_PAN_VIEW")); + connect(aAction, SIGNAL(activated()), this, SLOT(onViewPan())); + myActionsMap[ PanId ] = aAction; + + // Global Panning + aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_GLOBALPAN" ) ), + tr( "MNU_GLOBALPAN_VIEW" ), 0, this); + aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW")); + connect(aAction, SIGNAL(activated()), this, SLOT(onViewGlobalPan())); + myActionsMap[ GlobalPanId ] = aAction; + + // Reset + aAction = new QtxAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_RESET" ) ), + tr( "MNU_RESET_VIEW" ), 0, this); + aAction->setStatusTip(tr("DSC_RESET_VIEW")); + connect(aAction, SIGNAL(activated()), this, SLOT(onViewReset())); + myActionsMap[ ResetId ] = aAction; +} + +/*! + Creates toolbar of QxGraph view window +*/ +void QxGraph_ViewWindow::createToolBar() +{ + SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar, "scale"); + aScaleBtn->AddAction(myActionsMap[FitAllId]); + aScaleBtn->AddAction(myActionsMap[FitRectId]); + aScaleBtn->AddAction(myActionsMap[ZoomId]); + + SUIT_ToolButton* aPanningBtn = new SUIT_ToolButton(myToolBar, "pan"); + aPanningBtn->AddAction(myActionsMap[PanId]); + aPanningBtn->AddAction(myActionsMap[GlobalPanId]); + + myActionsMap[ResetId]->addTo(myToolBar); +} + +/*! + Destructor +*/ +QxGraph_ViewWindow::~QxGraph_ViewWindow() {} + +/*! + Reset the active view +*/ +void QxGraph_ViewWindow::onViewReset() +{ + printf( "QxGraph_ViewWindow::onViewReset\n" ); + if ( myViewModel && myViewModel->getCurrentView() ) + myViewModel->getCurrentView()->activateReset(); +} + +/*! + Sets a new center of the active view +*/ +void QxGraph_ViewWindow::onViewGlobalPan() +{ + printf( "QxGraph_ViewWindow::onViewGlobalPan\n" ); + if ( myViewModel && myViewModel->getCurrentView() ) + myViewModel->getCurrentView()->activateGlobalPanning(); +} + +/*! + Zooms the active view +*/ +void QxGraph_ViewWindow::onViewZoom() +{ + printf( "QxGraph_ViewWindow::onViewZoom\n" ); + if ( myViewModel && myViewModel->getCurrentView() ) + myViewModel->getCurrentView()->activateZoom(); +} + +/*! + Moves the active view +*/ +void QxGraph_ViewWindow::onViewPan() +{ + printf( "QxGraph_ViewWindow::onViewPan\n" ); + if ( myViewModel && myViewModel->getCurrentView() ) + myViewModel->getCurrentView()->activatePanning(); +} + +/*! + Fits all obejcts within a rectangular area of the active view +*/ +void QxGraph_ViewWindow::onViewFitArea() +{ + printf( "QxGraph_ViewWindow::onViewFitArea\n" ); + if ( myViewModel && myViewModel->getCurrentView() ) + myViewModel->getCurrentView()->activateFitRect(); +} + +/*! + Fits all objects in the active view +*/ +void QxGraph_ViewWindow::onViewFitAll() +{ + printf( "QxGraph_ViewWindow::onViewFitAll\n" ); + if ( myViewModel && myViewModel->getCurrentView() ) + myViewModel->getCurrentView()->activateFitAll(); +} + +/*! + Set background of the viewport +*/ +void QxGraph_ViewWindow::setBackgroundColor( const QColor& color ) +{ + if ( myViewModel && myViewModel->getCurrentView()) { + myViewModel->getCurrentView()->canvas()->setBackgroundColor(color); + myViewModel->getCurrentView()->setPaletteBackgroundColor(color.light(120)); + } +} + +/*! + Returns background of the viewport +*/ +QColor QxGraph_ViewWindow::backgroundColor() const +{ + if ( myViewModel && myViewModel->getCurrentView()) + return myViewModel->getCurrentView()->canvas()->backgroundColor(); + return QColor(); +} + +/*! + Custom resize event handler +*/ +void QxGraph_ViewWindow::resizeEvent( QResizeEvent* theEvent ) +{ + // QMainWindow::resizeEvent( theEvent ); + //if ( myView ) myView->resizeView( theEvent ); +} + +/*! + Get resource manager +*/ +SUIT_ResourceMgr* QxGraph_ViewWindow::resMgr() const +{ + return SUIT_Session::session()->resourceMgr(); +} + diff --git a/src/QxGraph/QxGraph_ViewWindow.h b/src/QxGraph/QxGraph_ViewWindow.h new file mode 100644 index 000000000..88fe11bed --- /dev/null +++ b/src/QxGraph/QxGraph_ViewWindow.h @@ -0,0 +1,95 @@ +// SALOME QxGraph : build Supervisor viewer into desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef QXGRAPH_VIEWWINDOW_H +#define QXGRAPH_VIEWWINDOW_H + +#include "QxGraph.h" +#include "QxGraph_ViewModel.h" + +#include "SUIT_ViewWindow.h" + +#include "QtxAction.h" + +#include + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + +class SUIT_ResourceMgr; + +class QXGRAPH_EXPORT QxGraph_ViewWindow : public SUIT_ViewWindow { + Q_OBJECT + + public: + QxGraph_ViewWindow(SUIT_Desktop* theDesktop, QxGraph_Viewer* theModel); + virtual ~QxGraph_ViewWindow(); + + void setBackgroundColor( const QColor& ); + QColor backgroundColor() const; + + QToolBar* getToolBar() { return myToolBar; } + + SUIT_ResourceMgr* resMgr() const; + + QxGraph_Viewer* getViewModel() const { return myViewModel; } + void setViewModel(QxGraph_Viewer* theViewModel) { myViewModel = theViewModel; } + + virtual void initLayout(); + + void contextPopupEvent(QContextMenuEvent* theEvent) { emit contextMenuRequested( theEvent); } + + public slots: + void onViewFitAll(); + void onViewFitArea(); + void onViewZoom(); + void onViewPan(); + void onViewGlobalPan(); + void onViewReset(); + + protected: + void resizeEvent( QResizeEvent* theEvent ); + + virtual void initCanvas(); + virtual void initCanvasViews(); + + private: + void createActions(); + void createToolBar(); + + //! Actions ID + enum { FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, ResetId }; + typedef QMap ActionsMap; + + ActionsMap myActionsMap; + QToolBar* myToolBar; + + QxGraph_Viewer* myViewModel; + +}; + +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + +#endif diff --git a/src/QxGraph/resources/QxGraph_images.po b/src/QxGraph/resources/QxGraph_images.po new file mode 100644 index 000000000..3b59f6125 --- /dev/null +++ b/src/QxGraph/resources/QxGraph_images.po @@ -0,0 +1,42 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File: QxGraph_images.po +// Created: 03/02/2007 +// Author: Margarita Karpunina +// Copyright (C) CEA 2007 + + +msgid "ICON_QXGRAPH_FITALL" +msgstr "view_fitall.png" + +msgid "ICON_QXGRAPH_FITAREA" +msgstr "view_fitarea.png" + +msgid "ICON_QXGRAPH_ZOOM" +msgstr "view_zoom.png" + +msgid "ICON_QXGRAPH_PAN" +msgstr "view_pan.png" + +msgid "ICON_QXGRAPH_GLOBALPAN" +msgstr "view_glpan.png" + +msgid "ICON_QXGRAPH_RESET" +msgstr "view_reset.png" + diff --git a/src/QxGraph/resources/QxGraph_msg_en.po b/src/QxGraph/resources/QxGraph_msg_en.po new file mode 100644 index 000000000..670735b24 --- /dev/null +++ b/src/QxGraph/resources/QxGraph_msg_en.po @@ -0,0 +1,40 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File: QxGraph_msg_en.po +// Created: 03/02/2007 +// Author: Margarita Karpunina +// Copyright (C) CEA 2007 + +msgid "LBL_TOOLBAR_LABEL" +msgstr "View Operations" + +msgid "DSC_RESET_VIEW" +msgstr "Reset View Point" + +msgid "MNU_RESET_VIEW" +msgstr "Reset" + +msgid "DSC_PAN_VIEW" +msgstr "Panning the view" + +msgid "MNU_PAN_VIEW" +msgstr "Panning" + +msgid "MEN_CHANGE_BACKGROUND" +msgstr "Change background..." diff --git a/src/QxGraph/resources/view_fitall.png b/src/QxGraph/resources/view_fitall.png new file mode 100755 index 0000000000000000000000000000000000000000..c09ff94ad89b32483194de03275ece8844f985da GIT binary patch literal 523 zcmV+m0`&cfP)?PhR9q@fLZN1A`}f&DKuL#6x)fXr>83)#*`Z*DLNWx> zd|z|PU49gYeyKLzz5C?*-n~1GV)|F<_=+jVYW#P)ifeUwvJ$3M?|BI41;baV+C4ze+DhUx>sE#&ay0uli=5tOXJB{D>+os zPG2L#Hrow9Q?}fM{aIbH-4~bqZ$E<>xz@hl54Sx7r~Sb&L^0gNRz zG{hy9;RtH!{S%7=zT0gpVE|wuBsci%&gSzh zE{P0?$>*iRN2v;ihL$e@S@}&<077^hYA7y(Q(+3QD4a`?)?ctH{QyT@0vIgdd#3;Z N002ovPDHLkV1fY3?PhRGdP)2p#HH|33Q%C|O!E6r^~zZh;0?@J zRznD>ih9>Q3RZzetkEITfui?_;cyGVW%sH}v&R{K!#xzoF`uaimYT!$I%KZWv|ZOV z%EEO`wU76_ZgeP}98bo16C};iWJH(%0EV|iWA9{_QFuVB%Eu|IY4j11>$v5gQZa{F z1nKO)cew+pRat1-_G`=amaZ2LD=-vTU~nMovH&X!X&1l>OhyJU>9*7o;uP(oc08j7 z@B~b{?6zEE{;KY9uZ@(|O6evTZV1K(G6p=2X^jN^%3VgvOUhyMr#bycT8p3KYh^rF z;cLiWNLwBPI75B-nQDT{(??YMeDb}NwElus^$S4h`^wgq1%Utn002ovPDHLkV1kOB B=B@w$ literal 0 HcmV?d00001 diff --git a/src/QxGraph/resources/view_glpan.png b/src/QxGraph/resources/view_glpan.png new file mode 100755 index 0000000000000000000000000000000000000000..c23322a4ae4dc6ffdbbac6af7b397fc35554d750 GIT binary patch literal 540 zcmV+%0^|LOP)BjE6vuxTJUoGh6Qn~vN=>^&xI;}l#9IvgP$g6AE(vlcIgp?XHrJ&k{W1Y*5aB-VXic*jlIhC!B7St)|@M2Zv zKenaC)vQ4nzyL&q^HF@Ps8&pMw%bQCPY@B#UY!B(`pt01s9iyYa}JcEAyTRpnOsbG zdA^B<`wS6bur20$HUwG&k~y#jYc1f%#w&@a=HN(Zy|wwH6&}?Ajs&+1Z$#!H!3<5~&m3wL|-GpP>|d z`#Qsx*1O&z27j^3$vh!{%87IY{L3!mjRHSDRoU*ag!^Q@2sb?~ilTXUh^!Z3)6-D= e58(*eCY}K*P2#+!$#_8k0000BjE7>1uK9zKDF6S$E4l!kVRaE6$4Xf~VvvDRH$!HE9XPz1Z$vi!vUUz@DL`3!kYtP=iy&zkp=%%I{0NeTtoDI(ah_7On-TAd!lpGY-d%JO%@!%DiVZEgRb(KYiRlo=qu7Yl1y{SK zy}w&x41D=K^XYHt6@$N+u9!KPU5bdHI#2_85YZsxw7e`anCfhV=`LxAq-=b5A) z8p7SrJ6^nc$^5E9RS^+J!!ZE!s|v{k5lH~{GC}}jqVGzFEiA9!zM;Hykby01dWF@z zVl*7{^>hZn^y3s)IslrwA(tE}B)x~K+WC8S4}hb06GVi(h%m{7EENb*ZV1x|dmrD8 zhGWX_uIpiPg_ENR)x6^3>>Oi=eFHAe&S~lf-9!axJ^Vwa`{r2tbtilO`F^_O#g7HP z_B3_F@rPq(UuLZR8Xyit3~h zU1AGWRdk~rSVXXe?Q(Vk%S(q84?pNv-1`04&K|DrR}2`SnLdjBen4wG*G5%obh{EM z)&bigv~oXvK1qi3?SbT*>jmC>R`)9)-YB``NGAUW6cMBl1`KF)`@^?8mSVpEcL1+S TU5X{h00000NkvXXu0mjf?E%y8 literal 0 HcmV?d00001 diff --git a/src/QxGraph/resources/view_zoom.png b/src/QxGraph/resources/view_zoom.png new file mode 100755 index 0000000000000000000000000000000000000000..b46573914ded57ddbdbd0fdfdeca02dbe772beca GIT binary patch literal 488 zcmVP)R=vXa|KZLWj83QE`$^LZRkww0}TLmX=HfmqNPPq2N*whk_Xj$snY8 zUUSLanZyo0AYSg{$NTZzS(MUQb#Y!Ck$rN9RgpuQ&7K0LR35Y_KajzeZ%c~fn35!+ zWS{V~XL+grjmQ&lviz zrUWkmMZZx26Skmst4*RMsB_t&#p8naVLf;aiacwZf@lWrK%dKN2q9Ie-gS@sXFtVU zZG=b%3g1J9BU%VicCWhR%{~4`^iUK-WrPMyS_UwdVrYm{w9DF|VMn%Uf-$7!u&MEb!2y^*cm)hs zP^%%#DetTaV}N~#Mm7VmvRVhLRd%@w21A=K3xrpyc%8_&%Lse(z0s~!6HJZF=<I eF4Jm)Rp}3mY2qUGWh$%y0000 -# include +#include +#include class QTextView; class HelpWindow : public QMainWindow { + Q_OBJECT + public: HelpWindow( QWidget* parent = 0, const char* name = 0); ~HelpWindow(); @@ -46,6 +48,5 @@ public: private: QTextView* myTextView; }; -# endif /* __HELPWINDOW_H__ */ - +#endif diff --git a/src/RegistryDisplay/IntervalWindow.hxx b/src/RegistryDisplay/IntervalWindow.hxx index 0ec1fd77a..420ce5a0a 100755 --- a/src/RegistryDisplay/IntervalWindow.hxx +++ b/src/RegistryDisplay/IntervalWindow.hxx @@ -36,6 +36,8 @@ using namespace std; class IntervalWindow : public QDialog { + Q_OBJECT + public: IntervalWindow( QWidget* parent = 0 ); ~IntervalWindow(); diff --git a/src/RegistryDisplay/Makefile.in b/src/RegistryDisplay/Makefile.am similarity index 63% rename from src/RegistryDisplay/Makefile.in rename to src/RegistryDisplay/Makefile.am index 46b60c25a..2034b5001 100755 --- a/src/RegistryDisplay/Makefile.in +++ b/src/RegistryDisplay/Makefile.am @@ -26,34 +26,24 @@ # Module : SALOME # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl +include $(top_srcdir)/adm_local/unix/make_common_starter.am -@COMMENCE@ +lib_LTLIBRARIES = libRegistryDisplay.la -EXPORT_PYSCRIPTS = +salomeinclude_HEADERS= \ + HelpWindow.hxx \ + IntervalWindow.hxx \ + RegWidget.h -EXPORT_HEADERS= HelpWindow.hxx \ - IntervalWindow.hxx \ - RegWidget.h +dist_libRegistryDisplay_la_SOURCES= \ + HelpWindow.cxx \ + RegWidget.cxx \ + RegWidgetFactory.cxx \ + IntervalWindow.cxx -# Libraries targets +MOC_FILES = RegWidget_moc.cxx +nodist_libRegistryDisplay_la_SOURCES= $(MOC_FILES) -LIB = libRegistryDisplay.la - -LIB_SRC = HelpWindow.cxx \ - RegWidget.cxx \ - RegWidgetFactory.cxx \ - IntervalWindow.cxx - -LIB_MOC = RegWidget.h - -LIB_CLIENT_IDL = SALOME_Registry.idl SALOME_Exception.idl - -CPPFLAGS+=$(QT_INCLUDES) $(KERNEL_CXXFLAGS) -LDFLAGS+=$(QT_MT_LIBS) $(KERNEL_LDFLAGS) -lSalomeNS -lOpUtil - - -@CONCLUDE@ +libRegistryDisplay_la_CPPFLAGS=$(QT_INCLUDES) @KERNEL_CXXFLAGS@ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@\ + -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl +libRegistryDisplay_la_LDFLAGS=$(QT_MT_LIBS) $(KERNEL_LDFLAGS) -lSalomeNS -lOpUtil -lSalomeIDLKernel diff --git a/src/RegistryDisplay/RegWidget.cxx b/src/RegistryDisplay/RegWidget.cxx index 19d3af36b..413dca711 100755 --- a/src/RegistryDisplay/RegWidget.cxx +++ b/src/RegistryDisplay/RegWidget.cxx @@ -764,6 +764,8 @@ QString findFile( QString filename ) dir = addSlash(dir) ; dir = dir + "resources" ; dir = addSlash(dir) ; + dir = dir + "kernel" ; + dir = addSlash(dir) ; QFileInfo fileInfo( dir + filename ); if ( fileInfo.isFile() && fileInfo.exists() ) return fileInfo.filePath(); diff --git a/src/RegistryDisplay/RegWidget.h b/src/RegistryDisplay/RegWidget.h index 5b44b550e..3a1431777 100755 --- a/src/RegistryDisplay/RegWidget.h +++ b/src/RegistryDisplay/RegWidget.h @@ -51,11 +51,10 @@ class InfoWindow; class RegWidget : public QMainWindow { - Q_OBJECT public: - RegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 ); + RegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 ); ~RegWidget(); void SetListe(); void SetListeHistory(); @@ -114,13 +113,4 @@ private: }; -# endif /* # ifndef __REGWIDGET_H__ */ - - - - - - - - - +#endif diff --git a/src/ResExporter/Makefile.in b/src/ResExporter/Makefile.am similarity index 74% rename from src/ResExporter/Makefile.in rename to src/ResExporter/Makefile.am index e1838e26d..bc9d55ece 100755 --- a/src/ResExporter/Makefile.in +++ b/src/ResExporter/Makefile.am @@ -21,28 +21,13 @@ # Module : SalomeApp # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - - -BIN = ResourceExporter -BIN_SRC = - -CPPFLAGS += $(QT_INCLUDES) - -LDFLAGS += $(QT_MT_LIBS) -LIBS += -lsuit -lqtx - -LDFLAGSFORBIN = ${LDFLAGS} -LIBSFORBIN = $(LIBS) -@CONCLUDE@ - +include $(top_srcdir)/adm_local/unix/make_common_starter.am +bin_PROGRAMS= ResourceExporter +dist_ResourceExporter_SOURCES=ResourceExporter.cxx +ResourceExporter_CPPFLAGS= $(QT_INCLUDES) -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT +ResourceExporter_LDFLAGS= $(QT_MT_LIBS) +ResourceExporter_LDADD= ../SUIT/libsuit.la ../Qtx/libqtx.la diff --git a/src/ResExporter/ResourceExporter.cxx b/src/ResExporter/ResourceExporter.cxx index 874539349..7788f8b7c 100644 --- a/src/ResExporter/ResourceExporter.cxx +++ b/src/ResExporter/ResourceExporter.cxx @@ -145,7 +145,7 @@ int main( int argc, char** argv ) QString value = resMgr->stringValue( section, param ); QStringList valsOld = QStringList::split( separ, value ); QStringList valsNew = QStringList::split( separ, newValue ); - for ( int i = 0; i < valsNew.count(); i++ ) + for ( int i = 0; i < (int)valsNew.count(); i++ ) if ( !valsOld.contains( valsNew[i] ) ) valsOld.append( valsNew[i] ); resMgr->setValue( section, param, valsOld.join( separ ) ); diff --git a/src/SALOME_PY/Makefile.in b/src/SALOME_PY/Makefile.am similarity index 56% rename from src/SALOME_PY/Makefile.in rename to src/SALOME_PY/Makefile.am index d1eb1c2bc..6d94b90d4 100755 --- a/src/SALOME_PY/Makefile.in +++ b/src/SALOME_PY/Makefile.am @@ -26,27 +26,19 @@ # Module : SALOME # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -# Libraries targets - -LIB = libSalomePy.la -LIB_SRC = SalomePy.cxx - -LIB_CLIENT_IDL = SALOMEDS.idl \ - SALOMEDS_Attributes.idl \ - SALOME_Exception.idl \ - SALOME_GenericObj.idl - -CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) $(BOOST_CPPFLAGS) $(KERNEL_CXXFLAGS) -DHAVE_CONFIG_H -LDFLAGS+= $(PYTHON_LIBS) $(QT_MT_LIBS) $(VTK_LIBS) $(OGL_LIBS) -lSalomeApp -lvtkCommonPython -lvtkGraphicsPython -lvtkImagingPython -# -lVTKViewer - - -@CONCLUDE@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES= libSalomePy.la +dist_libSalomePy_la_SOURCES= SalomePy.cxx + +libSalomePy_la_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(VTK_INCLUDES) \ + $(OGL_INCLUDES) $(CAS_CXXFLAGS) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ \ + -DHAVE_CONFIG_H -I$(srcdir)/../SalomeApp -I$(srcdir)/../LightApp \ + -I$(srcdir)/../Event -I$(srcdir)/../Session -I$(srcdir)/../SVTK \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../CAM \ + -I$(srcdir)/../STD -I$(srcdir)/../VTKViewer -I$(srcdir)/../OBJECT \ + @CAS_CPPFLAGS@ \ + -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ +libSalomePy_la_LDFLAGS=$(PYTHON_LIBS) $(QT_MT_LIBS) $(VTK_LIBS) $(OGL_LIBS) \ + ../SalomeApp/libSalomeApp.la \ + -lvtkCommonPythonD -lvtkGraphicsPythonD -lvtkImagingPythonD diff --git a/src/SALOME_PY/SalomePy.cxx b/src/SALOME_PY/SalomePy.cxx index eb9a20756..6b8b62410 100755 --- a/src/SALOME_PY/SalomePy.cxx +++ b/src/SALOME_PY/SalomePy.cxx @@ -45,14 +45,37 @@ using namespace std; +#define PUBLISH_ENUM(i) \ +{ \ + PyObject *w; \ + int rc; \ + if ( ( w = PyInt_FromLong( i ) ) == NULL ) return; \ + rc = PyDict_SetItemString( aModuleDict, #i, w ); \ + Py_DECREF( w ); \ + if ( rc < 0 ) return; \ +} + +// enumeration : view type +enum { + ViewFront, // fron view + ViewBack, // back view + ViewTop, // top view + ViewBottom, // bottom view + ViewRight, // right view + ViewLeft // left view +}; + + /*! VSR : 19.04.05 : Reimplemented for new SALOME GUI (SUIT-based) All methods are implemented using Event mechanism: - getRenderer() - getRenderWindow() - getRenderWindowInteractor() - These methods open new VTK viewer if there is no one opened. - In case of error methods return None object in Python. + - showTrihedron() + These methods (except showTrihedron() ) open new VTK viewer + if there is no one opened. + In case of error all methods return None object in Python. */ static PyObject* GetPyClass(const char* theClassName){ @@ -74,7 +97,12 @@ static PyObject* GetPyClass(const char* theClassName){ return aPyClass; } -static SVTK_ViewWindow* GetVTKViewWindow() { +// internal enum: find or create VTK window +enum { __Find, // try to find only + __FindOrCreate, // try to find: if not found - create new + __Create }; // try to find: if not found - create new + +static SVTK_ViewWindow* GetVTKViewWindow( int toCreate = __FindOrCreate ) { SVTK_ViewWindow* aVW = NULL; if ( SUIT_Session::session() ) { // get application @@ -84,13 +112,27 @@ static SVTK_ViewWindow* GetVTKViewWindow() { SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); if ( aStudy ) { // find or create VTK view manager - SVTK_ViewManager* aVM = dynamic_cast( anApp->getViewManager( "VTKViewer", true ) ); - if ( aVM ) { - aVW = dynamic_cast( aVM->getActiveView() ); - // VSR : When new view window is created it can be not active yet at this moment, - // so the following is a some workaround - if ( !aVW && !aVM->getViews().isEmpty() ) - aVW = dynamic_cast( aVM->getViews()[ 0 ] ); + if ( toCreate == __Create ) { + SVTK_ViewManager* aVM = dynamic_cast( anApp->createViewManager( "VTKViewer" ) ); + if ( aVM ) { + aVW = dynamic_cast( aVM->getActiveView() ); + if ( !aVW ) + aVW = dynamic_cast( aVM->createViewWindow() ); + // VSR : When new view window is created it can be not active yet at this moment, + // so the following is a some workaround + if ( !aVW && !aVM->getViews().isEmpty() ) + aVW = dynamic_cast( aVM->getViews()[ 0 ] ); + } + } + else { + SVTK_ViewManager* aVM = dynamic_cast( anApp->getViewManager( "VTKViewer", toCreate == __FindOrCreate ) ); + if ( aVM ) { + aVW = dynamic_cast( aVM->getActiveView() ); + // VSR : When new view window is created it can be not active yet at this moment, + // so the following is a some workaround + if ( !aVW && !aVM->getViews().isEmpty() ) + aVW = dynamic_cast( aVM->getViews()[ 0 ] ); + } } } } @@ -99,15 +141,19 @@ static SVTK_ViewWindow* GetVTKViewWindow() { } /*! - Get VTK renderer (opens new VTK window if there is no one opened) + Get VTK renderer. + Always opens new VTK window if parameter is non zero. + Otherwise opens new VTK window only if there is no one opened. */ class TGetRendererEvent: public SALOME_Event { public: typedef PyObject* TResult; TResult myResult; - TGetRendererEvent() : myResult( Py_None ) {} + int myCreate; + TGetRendererEvent( bool toCreate ) + : myResult( Py_None ), myCreate( toCreate ) {} virtual void Execute() { - if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) { + if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( myCreate ? __Create : __FindOrCreate ) ) { PyObject* aPyClass = GetPyClass("vtkRenderer"); vtkRenderer* aVTKObject = aVTKViewWindow->getRenderer(); myResult = PyVTKObject_New(aPyClass,aVTKObject); @@ -116,19 +162,29 @@ public: }; extern "C" PyObject *libSalomePy_getRenderer(PyObject *self, PyObject *args) { - return ProcessEvent( new TGetRendererEvent() ); + PyObject* aResult = Py_None; + int toCreate = 0; + if ( !PyArg_ParseTuple(args, "|i:getRenderer", &toCreate) ) + PyErr_Print(); + else + aResult = ProcessEvent( new TGetRendererEvent( toCreate ) ); + return aResult; } /*! - Get VTK render window (opens new VTK window if there is no one opened) + Get VTK render window. + Always opens new VTK window if parameter is non zero. + Otherwise opens new VTK window only if there is no one opened. */ class TGetRenderWindowEvent: public SALOME_Event { public: typedef PyObject* TResult; TResult myResult; - TGetRenderWindowEvent() : myResult( Py_None ) {} + int myCreate; + TGetRenderWindowEvent( bool toCreate ) + : myResult( Py_None ), myCreate( toCreate ) {} virtual void Execute() { - if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) { + if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( myCreate ? __Create : __FindOrCreate ) ) { PyObject* aPyClass = GetPyClass("vtkRenderWindow"); vtkRenderWindow* aVTKObject = aVTKViewWindow->getRenderWindow(); myResult = PyVTKObject_New(aPyClass,aVTKObject); @@ -137,19 +193,29 @@ public: }; extern "C" PyObject *libSalomePy_getRenderWindow(PyObject *self, PyObject *args) { - return ProcessEvent( new TGetRenderWindowEvent() ); + PyObject* aResult = Py_None; + int toCreate = 0; + if ( !PyArg_ParseTuple(args, "|i:getRenderWindow", &toCreate) ) + PyErr_Print(); + else + aResult = ProcessEvent( new TGetRenderWindowEvent( toCreate ) ); + return aResult; } /*! - Get VTK render window interactor (opens new VTK window if there is no one opened) + Get VTK render window interactor. + Always opens new VTK window if parameter is non zero. + Otherwise opens new VTK window only if there is no one opened. */ class TGetRenderWindowInteractorEvent: public SALOME_Event { public: typedef PyObject* TResult; TResult myResult; - TGetRenderWindowInteractorEvent() : myResult( Py_None ) {} + int myCreate; + TGetRenderWindowInteractorEvent( bool toCreate ) + : myResult( Py_None ), myCreate( toCreate ) {} virtual void Execute() { - if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) { + if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( myCreate ? __Create : __FindOrCreate ) ) { PyObject* aPyClass = GetPyClass("vtkRenderWindowInteractor"); vtkRenderWindowInteractor* aVTKObject = aVTKViewWindow->getInteractor(); myResult = PyVTKObject_New(aPyClass,aVTKObject); @@ -158,7 +224,122 @@ public: }; extern "C" PyObject *libSalomePy_getRenderWindowInteractor(PyObject *self, PyObject *args) { - return ProcessEvent( new TGetRenderWindowInteractorEvent() ); + PyObject* aResult = Py_None; + int toCreate = 0; + if ( !PyArg_ParseTuple(args, "|i:getRenderWindowInteractor", &toCreate) ) + PyErr_Print(); + else + aResult = ProcessEvent( new TGetRenderWindowInteractorEvent( toCreate ) ); + return aResult; +} + +/*! + Show/hide trihedron in the current VTK viewer (if there is one) +*/ +extern "C" PyObject *libSalomePy_showTrihedron(PyObject *self, PyObject *args) +{ + class TEvent: public SALOME_Event { + public: + int myShow; + TEvent( int bShow ) + : myShow( bShow ) {} + virtual void Execute() { + if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) { + if ( aVTKViewWindow->isTrihedronDisplayed() != myShow ) + aVTKViewWindow->onViewTrihedron(); + } + } + }; + + PyObject* aResult = Py_None; + int bShow = 0; + if ( !PyArg_ParseTuple(args, "i:showTrihedron", &bShow) ) + PyErr_Print(); + else + ProcessVoidEvent( new TEvent( bShow ) ); + return aResult; +} + +/*! + Fit all the contents in the current VTK viewer (if there is one) +*/ +extern "C" PyObject *libSalomePy_fitAll(PyObject *self, PyObject *args) +{ + class TEvent: public SALOME_Event { + public: + TEvent() {} + virtual void Execute() { + if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) { + aVTKViewWindow->onFitAll(); + } + } + }; + + ProcessVoidEvent( new TEvent() ); + return Py_None; +} + +/*! + Set view type fot the current VTK viewer (if there is one) +*/ +extern "C" PyObject *libSalomePy_setView(PyObject *self, PyObject *args) +{ + class TEvent: public SALOME_Event { + public: + long myType; + TEvent( long type ) : myType( type) {} + virtual void Execute() { + if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) { + switch( myType ) { + case ViewFront: + aVTKViewWindow->onFrontView(); break; + case ViewBack: + aVTKViewWindow->onBackView(); break; + case ViewTop: + aVTKViewWindow->onTopView(); break; + case ViewBottom: + aVTKViewWindow->onBottomView(); break; + case ViewRight: + aVTKViewWindow->onRightView(); break; + case ViewLeft: + aVTKViewWindow->onLeftView(); break; + default: + PyErr_Format(PyExc_ValueError,"setView%: wrong parameter value; must be between %d and %d", ViewFront, ViewLeft ); + break; + } + } + } + }; + + long type = -1; + if ( !PyArg_ParseTuple(args, "l:setView", &type) ) + PyErr_Print(); + else { + ProcessVoidEvent( new TEvent( type ) ); + if( PyErr_Occurred() ) + PyErr_Print(); + } + return Py_None; +} + +/*! + Reset contents of the current VTK viewer (if there is one) + to the default state +*/ +extern "C" PyObject *libSalomePy_resetView(PyObject *self, PyObject *args) +{ + class TEvent: public SALOME_Event { + public: + TEvent() {} + virtual void Execute() { + if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) { + aVTKViewWindow->onResetView(); + } + } + }; + + ProcessVoidEvent( new TEvent() ); + return Py_None; } /*! @@ -166,18 +347,34 @@ extern "C" PyObject *libSalomePy_getRenderWindowInteractor(PyObject *self, PyObj */ static PyMethodDef Module_Methods[] = { - { "getRenderer", libSalomePy_getRenderer, METH_NOARGS }, - { "getRenderWindow", libSalomePy_getRenderWindow, METH_NOARGS }, - { "getRenderWindowInteractor", libSalomePy_getRenderWindow, METH_NOARGS }, + { "getRenderer", libSalomePy_getRenderer, METH_VARARGS }, + { "getRenderWindow", libSalomePy_getRenderWindow, METH_VARARGS }, + { "getRenderWindowInteractor", libSalomePy_getRenderWindowInteractor, METH_VARARGS }, + { "showTrihedron", libSalomePy_showTrihedron, METH_VARARGS }, + { "fitAll", libSalomePy_fitAll, METH_NOARGS }, + { "setView", libSalomePy_setView, METH_VARARGS }, + { "resetView", libSalomePy_resetView, METH_NOARGS }, { NULL, NULL } }; extern "C" void initlibSalomePy() { static char modulename[] = "libSalomePy"; - /*PyObject* aModule = */Py_InitModule(modulename, Module_Methods); - if(PyErr_Occurred()){ + // init module + PyObject* aModule = Py_InitModule(modulename, Module_Methods); + if( PyErr_Occurred() ) { PyErr_Print(); return; } + // get module's dictionary + PyObject *aModuleDict = PyModule_GetDict( aModule ); + if ( aModuleDict == NULL ) + return; + // add View type enumeration + PUBLISH_ENUM( ViewFront ); + PUBLISH_ENUM( ViewBack ); + PUBLISH_ENUM( ViewTop ); + PUBLISH_ENUM( ViewBottom ); + PUBLISH_ENUM( ViewRight ); + PUBLISH_ENUM( ViewLeft ); } diff --git a/src/SALOME_PYQT/Makefile.in b/src/SALOME_PYQT/Makefile.am similarity index 88% rename from src/SALOME_PYQT/Makefile.in rename to src/SALOME_PYQT/Makefile.am index f3b93eac7..a96896abb 100755 --- a/src/SALOME_PYQT/Makefile.in +++ b/src/SALOME_PYQT/Makefile.am @@ -24,14 +24,6 @@ # Module : SALOME # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am - -@COMMENCE@ - -SUBDIRS = SALOME_PYQT_GUI SalomePyQt - -@MODULE@ +SUBDIRS = SALOME_PYQT_GUI SalomePyQt diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in b/src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.am similarity index 53% rename from src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in rename to src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.am index 41276e5dc..cf5e4c998 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in +++ b/src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.am @@ -20,66 +20,52 @@ # Author : Nicolas REJNERI # Module : SALOME -top_srcdir=@top_srcdir@ -top_builddir=../../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl +include $(top_srcdir)/adm_local/unix/make_common_starter.am -@COMMENCE@ +# Sip flags +SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS) -# small trick for Mandrake-10.1: PyQt 3.13 does not support Qt 3.3.3 -ifeq ($(QT_VERS),Qt_3_3_3) -QT_VERS = Qt_3_3_0 -endif +###################### -ifeq ($(QT_VERS),Qt_3_3_4) -QT_VERS = Qt_3_3_0 -endif +# Library target +lib_LTLIBRARIES= libSalomePyQtGUI.la -# Sip flags -SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS) # Sip sources -ifeq ($(SIP_VERS),v4_old) +if IS_SIP_V4 SIP_SRC = sipSalomePyQtGUIcmodule.cc SIP_FILES = SALOME_PYQT_GUI.sip -else -ifeq ($(SIP_VERS),v4_new) -SIP_SRC = sipSalomePyQtGUIcmodule.cc -SIP_FILES = SALOME_PYQT_GUI.sip -else +else !IS_SIP_V4 SIP_SRC = SalomePyQtGUIcmodule.cc SIP_FILES = SALOME_PYQT_GUI.sip endif -endif -###################### +EXTRA_DIST+= $(SIP_FILES) -# headers -EXPORT_HEADERS = SALOME_PYQT_GUI.h \ - SALOME_PYQT_PyInterp.h \ - SALOME_PYQT_Module.h +salomeinclude_HEADERS = \ + SALOME_PYQT_GUI.h \ + SALOME_PYQT_PyInterp.h \ + SALOME_PYQT_Module.h -# Library target -LIB = libSalomePyQtGUI.la +dist_libSalomePyQtGUI_la_SOURCES= \ + SALOME_PYQT_PyInterp.cxx \ + SALOME_PYQT_Module.cxx -# library sources -LIB_SRC = SALOME_PYQT_PyInterp.cxx \ - SALOME_PYQT_Module.cxx \ - $(SIP_SRC) +dist_libSalomePyQtGUI_la_SOURCES: $(SIP_SRC) # moc pre-processing -LIB_MOC = SALOME_PYQT_Module.h - -LIB_CLIENT_IDL = SALOME_Exception.idl \ - SALOME_GenericObj.idl \ - SALOME_ContainerManager.idl \ - SALOME_Component.idl - -CPPFLAGS += $(QT_INCLUDES) $(SIP_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) -DHAVE_CONFIG_H $(KERNEL_CXXFLAGS) -D__CALL_OLD_METHODS__ - -LIBS += $(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) $(OGL_LIBS) -LDFLAGS += -lPyInterp -lSalomeApp +MOC_FILES= SALOME_PYQT_Module_moc.cxx +nodist_libSalomePyQtGUI_la_SOURCES= $(MOC_FILES) $(SIP_SRC) + +libSalomePyQtGUI_la_CPPFLAGS= $(QT_INCLUDES) $(SIP_INCLUDES) $(PYTHON_INCLUDES) \ + $(CAS_CPPFLAGS) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) \ + -DHAVE_CONFIG_H @KERNEL_CXXFLAGS@ -D__CALL_OLD_METHODS__ \ + -I$(srcdir)/../../PyInterp -I$(srcdir)/../../SalomeApp \ + -I$(srcdir)/../../SUIT -I$(srcdir)/../../Qtx -I$(srcdir)/../../LightApp \ + -I$(srcdir)/../../SalomeApp -I$(srcdir)/../../CAM -I$(srcdir)/../../STD \ + -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ +libSalomePyQtGUI_la_LIBADD= $(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) \ + $(OGL_LIBS) ../../PyInterp/libPyInterp.la ../../SalomeApp/libSalomeApp.la ################################## @@ -88,9 +74,6 @@ LDFLAGS += -lPyInterp -lSalomeApp $(SIP_SRC): $(SIP_FILES) $(SIP) $(SIP_FLAGS) $< -$(MOC_SRC): $(MOC_H) - $(MOC) $< -o $@ +$(dist_libSalomePyQtGUI_la_SOURCES): $(SIP_SRC) ################################### - -@CONCLUDE@ 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 5d11cf063..d7f8dc59c 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx +++ b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx @@ -17,14 +17,16 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +#include "PyInterp_Dispatcher.h" #include "SALOME_PYQT_Module.h" -#include "PyInterp_Dispatcher.h" + #include "SUIT_ResourceMgr.h" #include "STD_MDIDesktop.h" #include "STD_TabDesktop.h" #include "SalomeApp_Application.h" #include "SalomeApp_Study.h" +#include "LightApp_Preferences.h" #include "QtxWorkstack.h" #include "QtxActionMenuMgr.h" @@ -38,15 +40,16 @@ #include #include +#ifndef WIN32 #include "SALOME_PYQT_SipDefs.h" -#if defined(SIP_VERS_v4_old) || defined(SIP_VERS_v4_new) -#include "sipAPISalomePyQtGUI.h" -#else -#include "sipSalomePyQtGUIDeclSalomePyQtGUI.h" #endif +#include "sipAPISalomePyQtGUI.h" -#include -#include +#include +#if SIP_VERSION < 0x040700 +#include "sipqtQWidget.h" +#include "sipqtQPopupMenu.h" +#endif #include @@ -167,7 +170,8 @@ SALOME_PYQT_Module* SALOME_PYQT_Module::getInitModule() SALOME_PYQT_Module::SALOME_PYQT_Module() : SalomeApp_Module( __DEFAULT_NAME__ ), myModule( 0 ), - myXmlHandler ( 0 ) + myXmlHandler ( 0 ), + myLastActivateStatus( true ) { } @@ -250,6 +254,9 @@ bool SALOME_PYQT_Module::activateModule( SUIT_Study* theStudy ) if ( !res ) return res; + // reset the activation status to the default value + myLastActivateStatus = true; + // ActivateReq: request class for internal activate() operation class ActivateReq : public PyInterp_Request { @@ -274,6 +281,9 @@ bool SALOME_PYQT_Module::activateModule( SUIT_Study* theStudy ) // Posting the request PyInterp_Dispatcher::Get()->Exec( new ActivateReq( theStudy, this ) ); + if ( !lastActivationStatus() ) + return false; + // activate menus, toolbars, etc setMenuShown( true ); setToolShown( true ); @@ -281,6 +291,8 @@ bool SALOME_PYQT_Module::activateModule( SUIT_Study* theStudy ) if ( menuMgr() ) connect( menuMgr(), SIGNAL( menuHighlighted( int, int ) ), this, SLOT( onMenuHighlighted( int, int ) ) ); + connect( getApp(), SIGNAL( preferenceChanged( const QString&, const QString&, const QString& ) ), + this, SLOT( preferenceChanged( const QString&, const QString&, const QString& ) ) ); // create menus & toolbars from XML file if required if ( myXmlHandler ) @@ -324,6 +336,8 @@ bool SALOME_PYQT_Module::deactivateModule( SUIT_Study* theStudy ) if ( menuMgr() ) disconnect( menuMgr(), SIGNAL( menuHighlighted( int, int ) ), this, SLOT( onMenuHighlighted( int, int ) ) ); + disconnect( getApp(), SIGNAL( preferenceChanged( const QString&, const QString&, const QString& ) ), + this, SLOT( preferenceChanged( const QString&, const QString&, const QString& ) ) ); // remove menus & toolbars created from XML file if required if ( myXmlHandler ) @@ -361,6 +375,58 @@ bool SALOME_PYQT_Module::deactivateModule( SUIT_Study* theStudy ) return SalomeApp_Module::deactivateModule( theStudy ); } +/*! + * Returns the status of last trying of module activation. + * Before fisrt activation - status is false +*/ +bool SALOME_PYQT_Module::lastActivationStatus() const +{ + return myLastActivateStatus; +} + +/*! + Preferences changing (application) - called when preference is changed +*/ +void SALOME_PYQT_Module::preferenceChanged( const QString& module, + const QString& section, + const QString& setting ) +{ + MESSAGE( "SALOME_PYQT_Module::preferenceChanged"); + + // perform synchronous request to Python event dispatcher + class Event : public PyInterp_LockRequest + { + public: + Event( PyInterp_base* _py_interp, + SALOME_PYQT_Module* _obj, + const QString& _section, + const QString& _setting ) + : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) + myObj ( _obj ), + mySection( _section ), + mySetting( _setting ) {} + + protected: + virtual void execute() + { + myObj->prefChanged( mySection, mySetting ); + } + + private: + SALOME_PYQT_Module* myObj; + QString mySection, mySetting; + }; + + if ( module != moduleName() ) { + // Module's preferences are processed by preferencesChanged() method + // ... + // Posting the request only if dispatcher is not busy! + // Executing the request synchronously + if ( !PyInterp_Dispatcher::Get()->IsBusy() ) + PyInterp_Dispatcher::Get()->Exec( new Event( myInterp, this, section, setting ) ); + } +} + /*! * Called when study desktop is activated. * Used for notifying about changing of the active study. @@ -538,6 +604,38 @@ void SALOME_PYQT_Module::contextMenuPopup( const QString& theContext, QPopupMenu PyInterp_Dispatcher::Get()->Exec( new PopupMenuEvent( myInterp, this, theContext, thePopupMenu ) ); } +/*! + * Export preferences for the Python module. + * Called only once when the first instance of the module is created. + */ +void SALOME_PYQT_Module::createPreferences() +{ + MESSAGE( "SALOME_PYQT_Module::createPreferences"); + // perform synchronous request to Python event dispatcher + class Event : public PyInterp_LockRequest + { + public: + Event( PyInterp_base* _py_interp, + SALOME_PYQT_Module* _obj ) + : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) + myObj ( _obj ) {} + + protected: + virtual void execute() + { + myObj->initPreferences(); + } + + private: + SALOME_PYQT_Module* myObj; + }; + + // Posting the request only if dispatcher is not busy! + // Executing the request synchronously + if ( !PyInterp_Dispatcher::Get()->IsBusy() ) + PyInterp_Dispatcher::Get()->Exec( new Event( myInterp, this ) ); +} + /*! * Defines the dockable window associated with the module. * To fill the list of windows the correspondind Python module's windows() @@ -566,6 +664,44 @@ void SALOME_PYQT_Module::viewManagers( QStringList& listik ) const } } +/*! + Preferences changing (module) - called when the module's preferences are changed +*/ +void SALOME_PYQT_Module::preferencesChanged( const QString& section, const QString& setting ) +{ + MESSAGE( "SALOME_PYQT_Module::preferencesChanged"); + + // perform synchronous request to Python event dispatcher + class Event : public PyInterp_LockRequest + { + public: + Event( PyInterp_base* _py_interp, + SALOME_PYQT_Module* _obj, + const QString& _section, + const QString& _setting ) + : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) + myObj ( _obj ), + mySection( _section ), + mySetting( _setting ) {} + + protected: + virtual void execute() + { + myObj->prefChanged( mySection, mySetting ); + } + + private: + SALOME_PYQT_Module* myObj; + QString mySection, mySetting; + }; + + // Posting the request only if dispatcher is not busy! + // Executing the request synchronously + if ( !PyInterp_Dispatcher::Get()->IsBusy() ) + PyInterp_Dispatcher::Get()->Exec( new Event( myInterp, this, section, setting ) ); +} + + /*! * Performs internal initialization * - initializes/gets the Python interpreter (one per study) @@ -618,8 +754,7 @@ void SALOME_PYQT_Module::init( CAM_Application* app ) // ... first put default values myWindowsMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::DockLeft ); myWindowsMap.insert( SalomeApp_Application::WT_PyConsole, Qt::DockBottom ); - // VSR: LogWindow is not yet implemented - // myWindowsMap.insert( SalomeApp_Application::WT_LogWindow, Qt::DockBottom ); + myWindowsMap.insert( SalomeApp_Application::WT_LogWindow, Qt::DockBottom ); if(PyObject_HasAttrString(myModule , "windows")){ PyObjWrapper res1( PyObject_CallMethod( myModule, "windows", "" ) ); @@ -699,9 +834,15 @@ void SALOME_PYQT_Module::activate( SUIT_Study* theStudy ) // call Python module's activate() method (for the new modules) if(PyObject_HasAttrString(myModule , "activate")){ - PyObjWrapper res1( PyObject_CallMethod( myModule, "activate", "" ) ); - if( !res1 ) { + PyObject* res1 = PyObject_CallMethod( myModule, "activate", "" ); + if ( !res1 || !PyBool_Check( res1 ) ) { PyErr_Print(); + //= true: for support of old modules + myLastActivateStatus = true; + } + else { + //detect return status + myLastActivateStatus = PyObject_IsTrue( res1 ); } } } @@ -826,6 +967,7 @@ Engines::Component_var SALOME_PYQT_Module::getEngine() const */ QString SALOME_PYQT_Module::engineIOR() const { + QString anIOR = QString::null; if ( !CORBA::is_nil( getEngine() ) ) return QString( getApp()->orb()->object_to_string( getEngine() ) ); return QString( "" ); @@ -946,6 +1088,31 @@ void SALOME_PYQT_Module::menuHighlight( const int menu, const int submenu ) } } +/*! + * Initialises preferences for the module + * - calls Python module's createPreferences() method + */ +void SALOME_PYQT_Module::initPreferences() +{ + // Python interpreter should be initialized and Python module should be + // import first + if ( !myInterp || !myModule ) + return; + + // temporary set myInitModule because createPreferences() method + // might be called during the module intialization process + myInitModule = this; + + if ( PyObject_HasAttrString(myModule , "createPreferences") ) { + PyObjWrapper res( PyObject_CallMethod( myModule, "createPreferences", "" ) ); + if( !res ) { + PyErr_Print(); + } + } + + myInitModule = 0; +} + /*! * Initialises python subinterpreter (one per study) */ @@ -1067,6 +1234,29 @@ void SALOME_PYQT_Module::setWorkSpace() } //__CALL_OLD_METHODS__ } +/*! + * Preference changing callback function + * - calls Python module's preferenceChanged(string,string,string) method + */ +void SALOME_PYQT_Module::prefChanged( const QString& section, const QString& setting ) +{ + // Python interpreter should be initialized and Python module should be + // import first + if ( !myInterp || !myModule ) + return; + + if ( PyObject_HasAttrString(myModule , "preferenceChanged") ) { + PyObjWrapper res( PyObject_CallMethod( myModule, + "preferenceChanged", + "ss", + section.latin1(), + setting.latin1() ) ); + if( !res ) { + PyErr_Print(); + } + } +} + /*! * Returns default menu group */ @@ -1241,6 +1431,7 @@ QAction* SALOME_PYQT_Module::createAction( const int id, const QString& text, co } return a; } + /*! * Load icon from resource file */ @@ -1434,6 +1625,47 @@ bool SALOME_PYQT_Module::clearMenu( const int id, const int menu, const bool rem return false; } +/*! + * The next methods call the parent implementation. + * This is done to open protected methods from LightApp_Module class. + */ + +int SALOME_PYQT_Module::addGlobalPreference( const QString& label ) +{ + LightApp_Preferences* pref = preferences(); + if ( !pref ) + return -1; + + return pref->addPreference( label, -1 ); +} + +int SALOME_PYQT_Module::addPreference( const QString& label ) +{ + return SalomeApp_Module::addPreference( label ); +} + +int SALOME_PYQT_Module::addPreference( const QString& label, + const int pId, const int type, + const QString& section, + const QString& param ) +{ + return SalomeApp_Module::addPreference( label, pId, type, section, param ); +} + +QVariant SALOME_PYQT_Module::preferenceProperty( const int id, + const QString& prop ) const +{ + QVariant v = SalomeApp_Module::preferenceProperty( id, prop ); + return v; +} + +void SALOME_PYQT_Module::setPreferenceProperty( const int id, + const QString& prop, + const QVariant& var ) +{ + SalomeApp_Module::setPreferenceProperty( id, prop, var ); +} + // SALOME_PYQT_XmlHandler class implementation // gets an tag name for the dom element [ static ] 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 7d20a3400..65def75f6 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h +++ b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h @@ -74,6 +74,9 @@ private: QMap myWindowsMap; /* compatible view managers list */ QStringList myViewMgrList; + + /* status of last trying of module activation*/ + bool myLastActivateStatus; /****************************** * Construction/destruction @@ -109,6 +112,9 @@ public: /* context popup menu request */ void contextMenuPopup( const QString&, QPopupMenu*, QString& ); + /* create preferences */ + void createPreferences(); + /* get module engine IOR */ virtual QString engineIOR() const; @@ -147,16 +153,31 @@ public: /* load icon from resource file */ QIconSet loadIcon( const QString& fileName ); + /* working with preferences : open protected methods */ + int addGlobalPreference( const QString& ); + int addPreference( const QString& ); + int addPreference( const QString&, const int, const int = -1, + const QString& = QString::null, + const QString& = QString::null ); + QVariant preferenceProperty( const int, const QString& ) const; + void setPreferenceProperty( const int, const QString&, const QVariant& ); + /* Show/hide menus/toolbars */ void setMenuShown( const bool ); void setToolShown( const bool ); + /* Preferences changing (module) */ + void preferencesChanged( const QString&, const QString& ); + public slots: /* activation */ virtual bool activateModule( SUIT_Study* ); /* deactivation */ virtual bool deactivateModule( SUIT_Study* ); + /* Preferences changing (application) */ + void preferenceChanged( const QString&, const QString&, const QString& ); + /****************************** * Internal methods ******************************/ @@ -182,6 +203,10 @@ private: void init ( CAM_Application* ); /* internal activation */ void activate ( SUIT_Study* ); + + /* getting status of last module activation */ + bool lastActivationStatus() const; + /* internal deactivation */ void deactivate ( SUIT_Study* ); /* customization */ @@ -194,6 +219,8 @@ private: void guiEvent( const int ); /* Menu highlight processing */ void menuHighlight( const int, const int ); + /* Init preferences */ + void initPreferences(); /* initialize a Python subinterpreter */ void initInterp ( int ); @@ -202,6 +229,9 @@ private: /* set workspace to Python GUI module */ void setWorkSpace(); + /* preferences changing */ + void prefChanged( const QString&, const QString& ); + friend class SALOME_PYQT_XmlHandler; }; diff --git a/src/SALOME_PYQT/SalomePyQt/Makefile.am b/src/SALOME_PYQT/SalomePyQt/Makefile.am new file mode 100644 index 000000000..50ee57d5c --- /dev/null +++ b/src/SALOME_PYQT/SalomePyQt/Makefile.am @@ -0,0 +1,127 @@ +# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Nicolas REJNERI +# Module : SALOME + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# Sip flags +SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS) + +# Sip common sources +SIP_SRC = sipSalomePyQtSalomePyQt.cc \ + sipSalomePyQtSALOME_Selection.cc \ + sipSalomePyQtQtxAction.cc + +# Sip version-specific sources +if IS_SIP_V4 +SIP_SRC += sipSalomePyQtcmodule.cc +else !IS_SIP_V4 +SIP_SRC += SalomePyQtcmodule.cc +endif + +# Sip/moc sources and Sip definition files +if IS_SIP_V4 +if IS_SIP_NEW +MOC_SRC = +MOC_H = +SIP_FILES = SalomePyQt_v4.sip +else !IS_SIP_NEW +MOC_SRC = sipSalomePyQtcmodule_moc.cxx +MOC_H = sipSalomePyQtcmodule.h +SIP_FILES = SalomePyQt_v4.sip +endif +else !IS_SIP_V4 +SIP_FILES = SalomePyQt.sip +if IS_SIP_NEW +MOC_SRC = SalomePyQtcmodule_moc.cxx +MOC_H = SalomePyQtcmodule.h +else !IS_SIP_NEW +MOC_SRC = sipSalomePyQtProxySalomePyQt_moc.cxx +MOC_H = sipSalomePyQtProxySalomePyQt.h +endif +endif + +EXTRA_DIST+= SalomePyQt.sip SalomePyQt_v4.sip + +# Libraries targets +MOC_FILES= SalomePyQt_moc.cxx + +COMMON_CPP_FLAGS=$(QT_INCLUDES) $(SIP_INCLUDES) $(PYTHON_INCLUDES) \ + $(CAS_CPPFLAGS) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) \ + -DHAVE_CONFIG_H @KERNEL_CXXFLAGS@ -I$(top_builddir)/salomeadn/unix \ + -I$(top_builddir)/idl \ + -I$(srcdir)/../../SUIT -I$(srcdir)/../../CAM -I$(srcdir)/../../STD \ + -I$(srcdir)/../../Qtx -I$(srcdir)/../../SalomeApp -I$(srcdir)/../../Event \ + -I$(srcdir)/../../SalomeSession -I$(srcdir)/../../LogWindow \ + -I$(srcdir)/../../VTKViewer -I$(srcdir)/../../TOOLSGUI \ + -I$(srcdir)/../SALOME_PYQT_GUI -I$(srcdir)/../../PyInterp \ + -I$(srcdir)/../../LightApp -I$(srcdir)/../../ObjBrowser \ + -I$(srcdir)/../../OBJECT \ + -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ + +COMMON_LIBS=$(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) \ + $(OGL_LIBS) ../../SUIT/libsuit.la ../../CAM/libCAM.la ../../STD/libstd.la \ + ../../Qtx/libqtx.la ../../SalomeApp/libSalomeApp.la ../../Event/libEvent.la \ + ../../Session/libSalomeSession.la ../../LogWindow/libLogWindow.la \ + ../../VTKViewer/libVTKViewer.la ../../TOOLSGUI/libToolsGUI.la \ + ../SALOME_PYQT_GUI/libSalomePyQtGUI.la + +if IS_SIP_V4 + +lib_LTLIBRARIES = libSalomePyQt.la +dist_libSalomePyQt_la_SOURCES= SalomePyQt.cxx +nodist_libSalomePyQt_la_SOURCES= $(MOC_FILES) $(SIP_SRC) $(MOC_SRC) +libSalomePyQt_la_CPPFLAGS = $(COMMON_CPP_FLAGS) +libSalomePyQt_la_LIBADD = $(COMMON_LIBS) + +else !IS_SIP_V4 + +lib_LTLIBRARIES = libSalomePyQtcmodule.la +dist_libSalomePyQtcmodule_la_SOURCES= SalomePyQt.cxx +nodist_libSalomePyQtcmodule_la_SOURCES= $(MOC_FILES) $(SIP_SRC) $(MOC_SRC) +libSalomePyQtcmodule_la_CPPFLAGS = $(MY_CPP_FLAGS) +libSalomePyQtcmodule_la_LIBADD = $(COMMON_LIBS) + +endif + +if IS_SIP_V4 +else +nodist_sharedpkgpython_PYTHON= SalomePyQt.py +endif + +# Custom build step: generate C++ wrapping according to $(SIP_FILES) +$(SIP_SRC): $(SIP_FILES) + $(SIP) $(SIP_FLAGS) $< + +$(MOC_H): $(SIP_FILES) + $(SIP) $(SIP_FLAGS) $< + +if IS_SIP_V4 +install-exec-hook: $(libdir)/SalomePyQt.so +$(libdir)/SalomePyQt.so: + (cd $(libdir); ln -s libSalomePyQt.so SalomePyQt.so;) +else !IS_SIP_V4 +install-exec-hook: $(libdir)/SalomePyQtcmodule.so +$(libdir)/SalomePyQt.so: + (cd $(libdir); ln -sf libSalomePyQtcmodule.so SalomePyQt.so;) +endif + +$(SIP_SRC): $(MOC_SRC) diff --git a/src/SALOME_PYQT/SalomePyQt/Makefile.in b/src/SALOME_PYQT/SalomePyQt/Makefile.in deleted file mode 100644 index 31a845634..000000000 --- a/src/SALOME_PYQT/SalomePyQt/Makefile.in +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Nicolas REJNERI -# Module : SALOME - -top_srcdir=@top_srcdir@ -top_builddir=../../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -# small trick for Mandrake-10.1: PyQt 3.13 does not support Qt 3.3.3 -ifeq ($(QT_VERS),Qt_3_3_3) -QT_VERS = Qt_3_3_0 -endif -ifeq ($(QT_VERS),Qt_3_3_4) -QT_VERS = Qt_3_3_0 -endif - -# Sip flags -SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS) - -# Sip common sources -SIP_SRC = sipSalomePyQtSalomePyQt.cc \ - sipSalomePyQtSALOME_Selection.cc \ - sipSalomePyQtQtxAction.cc - -# Sip version-specific sources -ifeq ($(SIP_VERS),v4_old) -SIP_SRC += sipSalomePyQtcmodule.cc -else -ifeq ($(SIP_VERS),v4_new) -SIP_SRC += sipSalomePyQtcmodule.cc -else -SIP_SRC += SalomePyQtcmodule.cc -endif -endif - -# Sip/moc sources -ifeq ($(SIP_VERS),v4_old) -MOC_SRC = sipSalomePyQtcmodule_moc.cxx -MOC_H = sipSalomePyQtcmodule.h -else -ifeq ($(SIP_VERS),v3_new) -MOC_SRC = SalomePyQtcmodule_moc.cxx -MOC_H = SalomePyQtcmodule.h -else -ifeq ($(SIP_VERS),v3_old) -MOC_SRC = sipSalomePyQtProxySalomePyQt_moc.cxx -MOC_H = sipSalomePyQtProxySalomePyQt.h -endif -endif -endif - -# Sip definition files -ifeq ($(SIP_VERS),v4_old) -SIP_FILES = SalomePyQt_v4.sip -else -ifeq ($(SIP_VERS),v4_new) -SIP_FILES = SalomePyQt_v4.sip -else -SIP_FILES = SalomePyQt.sip -endif -endif - -# Libraries targets -ifeq ($(SIP_VERS),v4_old) -LIB = SalomePyQt.so -else -ifeq ($(SIP_VERS),v4_new) -LIB = SalomePyQt.so -else -LIB = libSalomePyQtcmodule.la -endif -endif - -# Exported python scripts -ifeq ($(SIP_VERS),v3_old) -EXPORT_SHAREDPYSCRIPTS = SalomePyQt.py -else -ifeq ($(SIP_VERS),v3_new) -EXPORT_SHAREDPYSCRIPTS = SalomePyQt.py -endif -endif - -# Library sources -LIB_SRC = SalomePyQt.cxx \ - $(SIP_SRC) \ - $(MOC_SRC) - -# Library moc sources -LIB_MOC = SalomePyQt.h - -# Client IDL -LIB_CLIENT_IDL = SALOME_Exception.idl SALOME_GenericObj.idl - -# Compilation/linkage flags -CPPFLAGS += $(QT_INCLUDES) $(SIP_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) -DHAVE_CONFIG_H $(KERNEL_CXXFLAGS) -LIBS += $(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) $(OGL_LIBS) -LDFLAGS += -lsuit -lCAM -lstd -lqtx -lSalomeApp -lSalomeSession -lEvent -lLogWindow -lVTKViewer -lToolsGUI -lSalomePyQtGUI - - -# Custom build step: generate C++ wrapping according to $(SIP_FILES) -$(SIP_SRC): $(SIP_FILES) - $(SIP) $(SIP_FLAGS) $< - -$(MOC_SRC): $(MOC_H) - $(MOC) $< -o $@ - -@CONCLUDE@ diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx index d76d0bd1d..15ee7c264 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx @@ -39,6 +39,7 @@ #include "LightApp_SelectionMgr.h" #include "OB_Browser.h" #include "QtxAction.h" +#include "LogWindow.h" using namespace std; @@ -495,6 +496,35 @@ void SalomePyQt::addDoubleSetting( const QString& name, const double value, bool ProcessVoidEvent( new TEvent( name, value, autoValue ) ); } +/*! + SalomePyQt::addBoolSetting + Adds an boolean setting to the application preferences + parameter is obsolete parameter and currently not used. To be removed lately. + This function is obsolete. Use addSetting() instead. +*/ +void SalomePyQt::addBoolSetting( const QString& name, const bool value, bool autoValue ) +{ + class TEvent: public SALOME_Event { + QString myName; + bool myValue; + bool myAutoValue; + public: + TEvent( const QString& name, const bool value, bool autoValue ) + : myName( name ), myValue( value ), myAutoValue( autoValue ) {} + virtual void Execute() { + if ( SUIT_Session::session() ) { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + QStringList sl = QStringList::split( ":", myName ); + QString _sec = sl.count() > 1 ? sl[ 0 ].stripWhiteSpace() : QString( DEFAULT_SECTION ); + QString _nam = sl.count() > 1 ? sl[ 1 ].stripWhiteSpace() : sl.count() > 0 ? sl[ 0 ].stripWhiteSpace() : QString( "" ); + if ( !_sec.isEmpty() && !_nam.isEmpty() ) + resMgr->setValue( _sec, _nam, myValue ); + } + } + }; + ProcessVoidEvent( new TEvent( name, value, autoValue ) ); +} + /*! SalomePyQt::removeSettings Removes a setting from the application preferences @@ -601,6 +631,32 @@ void SalomePyQt::addSetting( const QString& section, const QString& name, const ProcessVoidEvent( new TEvent( section, name, value ) ); } +/*! + SalomePyQt::addSetting + Adds a boolean setting to the application preferences + (note: the last "dumb" parameter is used in order to avoid + sip compilation error because of conflicting int and bool types) +*/ +void SalomePyQt::addSetting( const QString& section, const QString& name, const bool value, const int ) +{ + class TEvent: public SALOME_Event { + QString mySection; + QString myName; + bool myValue; + public: + TEvent( const QString& section, const QString& name, bool value ) + : mySection( section ), myName( name ), myValue( value ) {} + virtual void Execute() { + if ( SUIT_Session::session() ) { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if ( !mySection.isEmpty() && !myName.isEmpty() ) + resMgr->setValue( mySection, myName, myValue ); + } + } + }; + ProcessVoidEvent( new TEvent( section, name, value ) ); +} + /*! SalomePyQt::addSetting Adds a string setting to the application preferences @@ -702,7 +758,7 @@ public: /*! \return an double setting from the application preferences */ -double SalomePyQt::doubleSetting( const QString& section, const QString& name, const int def ) +double SalomePyQt::doubleSetting( const QString& section, const QString& name, const double def ) { return ProcessEvent( new TGetDblSettingEvent( section, name, def ) ); } @@ -816,6 +872,30 @@ void SalomePyQt::removeSetting( const QString& section, const QString& name ) ProcessVoidEvent( new TEvent( section, name ) ); } +/*! + SalomePyQt::hasSetting + Returns True if the settings exists +*/ +class THasColorSettingEvent: public SALOME_Event { +public: + typedef bool TResult; + TResult myResult; + QString mySection; + QString myName; + THasColorSettingEvent( const QString& section, const QString& name ) + : mySection( section ), myName( name ) {} + virtual void Execute() { + if ( SUIT_Session::session() ) { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + myResult = resMgr->hasValue( mySection, myName ); + } + } +}; +bool SalomePyQt::hasSetting( const QString& section, const QString& name ) +{ + return ProcessEvent( new THasColorSettingEvent( section, name ) ); +} + /*! SalomePyQt::getFileName Displays 'Open/Save file' dialog box and returns a user's choice (file name) @@ -1364,3 +1444,250 @@ bool SalomePyQt::clearMenu( const int id, const int menu, const bool removeActio return ProcessEvent( new TClearMenuEvent( id, menu, removeActions ) ); } +/*! + SalomePyQt::addGlobalPreference + Adds global (not module) preferences group + */ +class TAddGlobalPrefEvent: public SALOME_Event { +public: + typedef int TResult; + TResult myResult; + QString myLabel; + TAddGlobalPrefEvent( const QString& label ) + : myResult( -1 ), myLabel( label ) {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); + if ( !module ) + module = dynamic_cast( anApp->activeModule() ); + if ( module ) + myResult = module->addGlobalPreference( myLabel ); + } + } +}; +int SalomePyQt::addGlobalPreference( const QString& label ) +{ + return ProcessEvent( new TAddGlobalPrefEvent( label ) ); +} + +/*! + SalomePyQt::addPreference + Adds preference + */ +class TAddPrefEvent: public SALOME_Event { +public: + typedef int TResult; + TResult myResult; + QString myLabel; + TAddPrefEvent( const QString& label ) + : myResult( -1 ), myLabel( label ) {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); + if ( !module ) + module = dynamic_cast( anApp->activeModule() ); + if ( module ) + myResult = module->addPreference( myLabel ); + } + } +}; +int SalomePyQt::addPreference( const QString& label ) +{ + return ProcessEvent( new TAddPrefEvent( label ) ); +} + +/*! + SalomePyQt::addPreference + Adds preference + */ +class TAddPrefParamEvent: public SALOME_Event { +public: + typedef int TResult; + TResult myResult; + QString myLabel; + int myPId; + int myType; + QString mySection; + QString myParam; + TAddPrefParamEvent( const QString& label, + const int pId, const int type, + const QString& section, + const QString& param ) + : myResult( -1 ), + myLabel( label ), myPId( pId ), myType( type ), + mySection( section ), myParam ( param ) {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); + if ( !module ) + module = dynamic_cast( anApp->activeModule() ); + if ( module ) + myResult = module->addPreference( myLabel, myPId, myType, mySection, myParam ); + } + } +}; +int SalomePyQt::addPreference( const QString& label, const int pId, const int type, + const QString& section, const QString& param ) +{ + return ProcessEvent( new TAddPrefParamEvent( label, pId, type, section, param ) ); +} + +/*! + SalomePyQt::preferenceProperty + Gets the property value for the given (by id) preference + */ +class TPrefPropEvent: public SALOME_Event { +public: + typedef QVariant TResult; + TResult myResult; + int myId; + QString myProp; + TPrefPropEvent( const int id, const QString& prop ) + : myId( id ), myProp( prop ) + { + myResult = QVariant(); + } + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); + if ( !module ) + module = dynamic_cast( anApp->activeModule() ); + if ( module ) + myResult = module->preferenceProperty( myId, myProp ); + } + } +}; +QVariant SalomePyQt::preferenceProperty( const int id, const QString& prop ) +{ + return ProcessEvent( new TPrefPropEvent( id, prop ) ); +} + +/*! + SalomePyQt::setPreferenceProperty + Sets the property value for the given (by id) preference + */ +void SalomePyQt::setPreferenceProperty( const int id, + const QString& prop, + const QVariant& var ) +{ + class TEvent: public SALOME_Event { + int myId; + QString myProp; + QVariant myVar; + public: + TEvent( const int id, const QString& prop, const QVariant& var ) + : myId( id ), myProp( prop ), myVar( var ) {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); + if ( !module ) + module = dynamic_cast( anApp->activeModule() ); + if ( module ) + module->setPreferenceProperty( myId, myProp, myVar ); + } + } + }; + ProcessVoidEvent( new TEvent( id, prop, var) ); +} + +/*! + SalomePyQt::addPreferenceProperty + Adds the property value to the list of values + for the given (by id) preference + + This method allows creating properties which are QValueList + - there is no way to pass such values directly to QVariant parameter + from Python + */ +void SalomePyQt::addPreferenceProperty( const int id, + const QString& prop, + const int idx, + const QVariant& var ) +{ + class TEvent: public SALOME_Event { + int myId; + QString myProp; + int myIdx; + QVariant myVar; + public: + TEvent( const int id, const QString& prop, const int idx, const QVariant& var ) + : myId( id ), myProp( prop ), myIdx( idx), myVar( var ) {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); + if ( !module ) + module = dynamic_cast( anApp->activeModule() ); + if ( module ) { + QVariant var = module->preferenceProperty( myId, myProp ); + if ( var.isValid() ) { + if ( var.type() == QVariant::StringList ) { + QStringList sl = var.asStringList(); + if ( myIdx >= 0 && myIdx < sl.count() ) + sl[myIdx] = myVar.asString(); + else + sl.append( myVar.asString() ); + module->setPreferenceProperty( myId, myProp, sl ); + } + else if ( var.type() == QVariant::List ) { + QValueList vl = var.asList(); + if ( myIdx >= 0 && myIdx < vl.count() ) + vl[myIdx] = myVar; + else + vl.append( myVar ); + module->setPreferenceProperty( myId, myProp, vl ); + } + } + else { + QValueList vl; + vl.append( myVar ); + module->setPreferenceProperty( myId, myProp, vl ); + } + } + } + } + }; + ProcessVoidEvent( new TEvent( id, prop, idx, var) ); +} + +/*! + SalomePyQt::message + Puts the message to the Log output window + */ +void SalomePyQt::message( const QString& msg, bool addSeparator ) +{ + class TEvent: public SALOME_Event { + QString myMsg; + bool myAddSep; + public: + TEvent( const QString& msg, bool addSeparator ) + : myMsg( msg ), myAddSep( addSeparator ) {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + LogWindow* lw = anApp->logWindow(); + if ( lw ) + lw->putMessage( myMsg, myAddSep ); + } + } + }; + ProcessVoidEvent( new TEvent( msg, addSeparator ) ); +} + +/*! + SalomePyQt::clearMessages + Removes all the messages from the Log output window + */ +void SalomePyQt::clearMessages() +{ + class TEvent: public SALOME_Event { + public: + TEvent() {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + LogWindow* lw = anApp->logWindow(); + if ( lw ) + lw->clear(); + } + } + }; + ProcessVoidEvent( new TEvent() ); +} diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h index b656cd1c0..d160c193c 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h @@ -25,6 +25,7 @@ #include #include +#include class LightApp_SelectionMgr; class SalomeApp_Application; @@ -73,6 +74,23 @@ enum { WT_User = LightApp_Application::WT_User }; +enum { + PT_Space = LightApp_Preferences::Space, + PT_Bool = LightApp_Preferences::Bool, + PT_Color = LightApp_Preferences::Color, + PT_String = LightApp_Preferences::String, + PT_Selector = LightApp_Preferences::Selector, + PT_DblSpin = LightApp_Preferences::DblSpin, + PT_IntSpin = LightApp_Preferences::IntSpin, + PT_Double = LightApp_Preferences::Double, + PT_Integer = LightApp_Preferences::Integer, + PT_GroupBox = LightApp_Preferences::GroupBox, + PT_Font = LightApp_Preferences::Font, + PT_DirList = LightApp_Preferences::DirList, + PT_File = LightApp_Preferences::File, + PT_User = LightApp_Preferences::User +}; + class SalomePyQt { public: @@ -129,20 +147,41 @@ public: static void addSetting ( const QString&, const QString&, const double ); static void addSetting ( const QString&, const QString&, const int ); + static void addSetting ( const QString&, const QString&, const bool, const int ); static void addSetting ( const QString&, const QString&, const QString& ); static void addSetting ( const QString&, const QString&, const QColor& ); static int integerSetting( const QString&, const QString&, const int = 0 ); - static double doubleSetting ( const QString&, const QString&, const int = 0 ); + static double doubleSetting ( const QString&, const QString&, const double = 0 ); static bool boolSetting ( const QString&, const QString&, const bool = 0 ); static QString stringSetting ( const QString&, const QString&, const QString& = QString("") ); static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() ); static void removeSetting ( const QString&, const QString& ); + static bool hasSetting ( const QString&, const QString& ); // obsolete static void addStringSetting( const QString&, const QString&, bool = true ); static void addIntSetting ( const QString&, const int, bool = true ); + static void addBoolSetting ( const QString&, const bool, bool = true ); static void addDoubleSetting( const QString&, const double, bool = true ); static void removeSettings ( const QString& ); static QString getSetting ( const QString& ); + + static int addGlobalPreference( const QString& ); + static int addPreference( const QString& ); + static int addPreference( const QString&, + const int, const int = -1, + const QString& = QString::null, + const QString& = QString::null ); + static QVariant preferenceProperty( const int, const QString& ); + static void setPreferenceProperty( const int, + const QString&, + const QVariant& ); + static void addPreferenceProperty( const int, + const QString&, + const int, + const QVariant& ); + + static void message( const QString&, bool = true ); + static void clearMessages(); }; #endif // SALOME_PYQT_H diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip index dcb650178..f73f7b0ea 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip @@ -46,6 +46,23 @@ enum WindowType { WT_User }; +enum PrefType { + PT_Space, + PT_Bool, + PT_Color, + PT_String, + PT_Selector, + PT_DblSpin, + PT_IntSpin, + PT_Double, + PT_Integer, + PT_GroupBox, + PT_Font, + PT_DirList, + PT_File, + PT_User +}; + class QtxAction : QAction { %TypeHeaderCode @@ -116,19 +133,39 @@ public: static void addSetting ( const QString&, const QString&, const double ); static void addSetting ( const QString&, const QString&, const int /Constrained/ ); + static void addSetting ( const QString&, const QString&, const bool, const int ); static void addSetting ( const QString&, const QString&, const QString& ); static void addSetting ( const QString&, const QString&, const QColor& ); static int integerSetting( const QString&, const QString&, int = 0 ); - static double doubleSetting ( const QString&, const QString&, int = 0 ); + static double doubleSetting ( const QString&, const QString&, double = 0 ); static bool boolSetting ( const QString&, const QString&, bool = false ); static QString stringSetting ( const QString&, const QString&, const QString& = QString("") ); static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() ); static void removeSetting ( const QString&, const QString& ); + static bool hasSetting ( const QString&, const QString& ); // obsolete static void addStringSetting( const QString&, const QString&, bool = true ); static void addIntSetting ( const QString&, const int, bool = true ); static void addDoubleSetting( const QString&, const double, bool = true ); + static void addBoolSetting ( const QString&, const bool, bool = true ); static void removeSettings ( const QString& ); static QString getSetting ( const QString& ); + + static int addGlobalPreference( const QString& ); + static int addPreference( const QString& ); + static int addPreference( const QString&, const int, int = -1, + const QString& = QString::null, + const QString& = QString::null ); + static QVariant preferenceProperty( const int, const QString& ); + static void setPreferenceProperty( const int, + const QString&, + const QVariant& ); + static void addPreferenceProperty( const int, + const QString&, + const int, + const QVariant& ); + + static void message( const QString&, bool = true ); + static void clearMessages(); }; diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip b/src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip index 3d0196f88..91419367b 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip @@ -11,6 +11,10 @@ %Import qtmod.sip +%ExportedHeaderCode +#include +%End + class SALOME_Selection : QObject { %TypeHeaderCode @@ -18,9 +22,9 @@ class SALOME_Selection : QObject %End public: - void Clear(); - void ClearIObjects(); - void ClearFilters(); + void Clear() /ReleaseGIL/ ; + void ClearIObjects() /ReleaseGIL/ ; + void ClearFilters() /ReleaseGIL/ ; private: SALOME_Selection( QObject* /TransferThis/ ); @@ -29,6 +33,8 @@ signals: void currentSelectionChanged(); }; +//%ExportedHeaderCode + enum MenuName { File = 1, View = 2, @@ -46,12 +52,30 @@ enum WindowType { WT_User }; +enum PrefType { + PT_Space, + PT_Bool, + PT_Color, + PT_String, + PT_Selector, + PT_DblSpin, + PT_IntSpin, + PT_Double, + PT_Integer, + PT_GroupBox, + PT_Font, + PT_DirList, + PT_File, + PT_User +}; + +//%End + class QtxAction : QAction { %TypeHeaderCode #include %End - private: QtxAction(const QtxAction &); }; @@ -63,71 +87,93 @@ class SalomePyQt %End public: - static QWidget* getDesktop(); - static QWidget* getMainFrame(); - static QMenuBar* getMainMenuBar(); - static QPopupMenu* getPopupMenu( const MenuName ); - static SALOME_Selection* getSelection() /Factory/; - static int getStudyId(); - static void putInfo( const QString&, const int = 0 ); - static const QString getActiveComponent(); - static void updateObjBrowser( const int = 0, bool = true ); + static QWidget* getDesktop() /ReleaseGIL/ ; + static QWidget* getMainFrame() /ReleaseGIL/ ; + static QMenuBar* getMainMenuBar() /ReleaseGIL/ ; + static QPopupMenu* getPopupMenu( const MenuName ) /ReleaseGIL/ ; + static SALOME_Selection* getSelection() /Factory,ReleaseGIL/ ; + static int getStudyId() /ReleaseGIL/ ; + static void putInfo( const QString&, const int = 0 ) /ReleaseGIL/ ; + static const QString getActiveComponent() /ReleaseGIL/ ; + static void updateObjBrowser( const int = 0, bool = true ) /ReleaseGIL/ ; static QString getFileName ( QWidget*, const QString&, const QStringList&, const QString&, bool ) /ReleaseGIL/ ; static QStringList getOpenFileNames ( QWidget*, const QString&, const QStringList&, const QString& ) /ReleaseGIL/ ; static QString getExistingDirectory( QWidget*, const QString&, const QString& ) /ReleaseGIL/ ; - static void helpContext( const QString&, const QString& ); + static void helpContext( const QString&, const QString& ) /ReleaseGIL/ ; - static bool dumpView( const QString& ); + static bool dumpView( const QString& ) /ReleaseGIL/ ; - static int defaultMenuGroup(); + static int defaultMenuGroup() /ReleaseGIL/ ; - static int createTool( const QString& ); - static int createTool( const int, const int, const int = -1 ); - static int createTool( const int, const QString&, const int = -1 ); - static int createTool( QtxAction*, const int, const int = -1, const int = -1 ); - static int createTool( QtxAction*, const QString&, const int = -1, const int = -1 ); + static int createTool( const QString& ) /ReleaseGIL/ ; + static int createTool( const int, const int, const int = -1 ) /ReleaseGIL/ ; + static int createTool( const int, const QString&, const int = -1 ) /ReleaseGIL/ ; + static int createTool( QtxAction*, const int, const int = -1, const int = -1 ) /ReleaseGIL/ ; + static int createTool( QtxAction*, const QString&, const int = -1, const int = -1 ) /ReleaseGIL/ ; static int createMenu( const QString&, const int, - const int = -1, const int = -1, const int = -1 ); + const int = -1, const int = -1, const int = -1 ) /ReleaseGIL/ ; static int createMenu( const QString&, const QString&, - const int = -1, const int = -1, const int = -1 ); + const int = -1, const int = -1, const int = -1 ) /ReleaseGIL/ ; static int createMenu( const int, const int, - const int = -1, const int = -1 ); + const int = -1, const int = -1 ) /ReleaseGIL/ ; static int createMenu( const int, const QString&, - const int = -1, const int = -1 ); + const int = -1, const int = -1 ) /ReleaseGIL/ ; static int createMenu( QtxAction*, const int, const int = -1, - const int = -1, const int = -1 ); + const int = -1, const int = -1 ) /ReleaseGIL/ ; static int createMenu( QtxAction*, const QString&, const int = -1, - const int = -1, const int = -1 ); - static QtxAction* createSeparator(); + const int = -1, const int = -1 ) /ReleaseGIL/ ; + static QtxAction* createSeparator() /ReleaseGIL/ ; static QtxAction* createAction( const int, const QString&, const QString& = QString::null, const QString& = QString::null, - const QString& = QString::null, const int = 0, const bool = false ); + const QString& = QString::null, const int = 0, const bool = false ) /ReleaseGIL/ ; - static QtxAction* action( const int ); - static int actionId( const QtxAction* ); + static QtxAction* action( const int ) /ReleaseGIL/ ; + static int actionId( const QtxAction* ) /ReleaseGIL/ ; static bool clearMenu( const int = 0, const int = 0, - const bool = true ); - - static void addSetting ( const QString&, const QString&, const double ); - static void addSetting ( const QString&, const QString&, const int /Constrained/ ); - static void addSetting ( const QString&, const QString&, const QString& ); - static void addSetting ( const QString&, const QString&, const QColor& ); - static int integerSetting( const QString&, const QString&, const int = 0 ); - static double doubleSetting ( const QString&, const QString&, const int = 0 ); - static bool boolSetting ( const QString&, const QString&, const bool = false ); - static QString stringSetting ( const QString&, const QString&, const QString& = QString("") ); - static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() ); - static void removeSetting ( const QString&, const QString& ); + const bool = true ) /ReleaseGIL/ ; + + static void addSetting ( const QString&, const QString&, const double ) /ReleaseGIL/ ; + static void addSetting ( const QString&, const QString&, const int /Constrained/ ) /ReleaseGIL/ ; + static void addSetting ( const QString&, const QString&, const bool, const int ) /ReleaseGIL/ ; + static void addSetting ( const QString&, const QString&, const QString& ) /ReleaseGIL/ ; + static void addSetting ( const QString&, const QString&, const QColor& ) /ReleaseGIL/ ; + static int integerSetting( const QString&, const QString&, const int = 0 ) /ReleaseGIL/ ; + static double doubleSetting ( const QString&, const QString&, const double = 0 ) /ReleaseGIL/ ; + static bool boolSetting ( const QString&, const QString&, const bool = false ) /ReleaseGIL/ ; + static QString stringSetting ( const QString&, const QString&, const QString& = QString("") ) /ReleaseGIL/ ; + static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() ) /ReleaseGIL/ ; + static void removeSetting ( const QString&, const QString& ) /ReleaseGIL/ ; + static bool hasSetting ( const QString&, const QString& ) /ReleaseGIL/ ; // obsolete - static void addStringSetting( const QString&, const QString&, bool = true ); - static void addIntSetting ( const QString&, const int, bool = true ); - static void addDoubleSetting( const QString&, const double, bool = true ); - static void removeSettings ( const QString& ); - static QString getSetting ( const QString& ); + static void addStringSetting( const QString&, const QString&, bool = true ) /ReleaseGIL/ ; + static void addIntSetting ( const QString&, const int, bool = true ) /ReleaseGIL/ ; + static void addDoubleSetting( const QString&, const double, bool = true ) /ReleaseGIL/ ; + static void addBoolSetting ( const QString&, const bool, bool = true ) /ReleaseGIL/ ; + static void removeSettings ( const QString& ) /ReleaseGIL/ ; + static QString getSetting ( const QString& ) /ReleaseGIL/ ; + + static int addGlobalPreference( const QString& ) /ReleaseGIL/ ; + static int addPreference( const QString& ) /ReleaseGIL/ ; + static int addPreference( const QString&, + const int, const int = -1, + const QString& = QString::null, + const QString& = QString::null ) /ReleaseGIL/ ; + static QVariant preferenceProperty( const int, const QString& ) /ReleaseGIL/ ; + static void setPreferenceProperty( const int, + const QString&, + const QVariant& ) /ReleaseGIL/ ; + static void addPreferenceProperty( const int, + const QString&, + const int, + const QVariant& ) /ReleaseGIL/ ; + + static void message( const QString&, bool = true ) /ReleaseGIL/ ; + static void clearMessages() /ReleaseGIL/ ; }; + diff --git a/src/SALOME_SWIG/Help.py b/src/SALOME_SWIG/Help.py new file mode 100755 index 000000000..404ee4dfc --- /dev/null +++ b/src/SALOME_SWIG/Help.py @@ -0,0 +1,141 @@ +# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +# +# +# +# File : Help.py +# Author : Paul RASCLE, EDF +# Module : SALOME +# $Header$ + +class SalomeDoc: + def __init__(self, aDoc): + self.doc = aDoc + def __repr__(self): + print self.doc + return "---" + def salome(self): + doc_salome = ''' +MODULE : salome +--------------- +module salome gives access to Salome ressources: +variables: + + salome:orb : CORBA + salome.naming_service : instance of naming Service class + methods: + Resolve(name) : find a CORBA object (ior) by its pathname + Register(name) : register a CORBA object under a pathname + salome.lcc : instance of lifeCycleCORBA class + methods: + FindOrLoadComponent(server,name) : + obtain an Engine (CORBA object) + or launch the Engine if not found, + with a Server name and an Engine name + salome.sg + methods: + updateObjBrowser(bool): + getActiveStudyId(): + getActiveStudyName(): + + SelectedCount(): returns number of selected objects + getSelected(i): returns entry of selected object number i + getAllSelected(): returns list of entry of selected objects + AddIObject(Entry): select an existing Interactive object + RemoveIObject(Entry): remove object from selection + ClearIObjects(): clear selection + + Display(*Entry): + DisplayOnly(Entry): + Erase(Entry): + DisplayAll(): + EraseAll(): + + IDToObject(Entry): returns CORBA reference from entry + + salome.myStudyName : active Study Name + salome.myStudyId : active Study Id + salome.myStudy : the active Study itself (CORBA ior) + methods : defined in SALOMEDS.idl + +methods: + salome.DumpStudy(study) : Dump a study, given the ior +--- +''' + print doc_salome + + def geompy(self): + doc_geompy = ''' +MODULE : geompy +--------------- +module geompy provides an encapsulation of GEOM Engine methods +variables: + geompy.geom : a Geometry Engine, found or loaded + at first import of module geompy. + methods : defined in GEOM_Gen.idl + geompy.myBuilder : a study builder + geompy.father : GEOM root in current study (salome.myStudy) + +methods: + addToStudy(aShape, aName) : add the shape into the current study + --- all methods of GEOM_Gen.idl that returns a shape are encapsulated, + with the same interface : shapes are named with their ior +''' + print doc_geompy + + def supervision(self): + doc_supervision = ''' +MODULES : SALOME_SuperVisionEditor and SALOME_SuperVisionExecutor +----------------------------------------------------------------- +this modules provide access to Editor and Executor Engine methods + +See SUPERV.idl + +In order to run the example (supervisionexample.py) + + Type : from supervisionexample import * + supervisionexample.py contains comments + +A new python example avoids references to LifeCycleCORBA + avoids references to NamingService + avoids references to ModuleCatalog + avoids SuperVisionComponent creation + allows G.Input(...) instead of AddInput(G,...) + replaces Editor/Executor with Graph + allows Nodes, Ports and Links CORBA objects + shortens methods names + ... + + See /SuperVisionTest/resources/GraphExample.py + and GraphExample.xml +--- +''' + print doc_supervision + + + +help = SalomeDoc(''' +Availables modules: + salome : gives access to Salome ressources + geompy : encapsulation of GEOM Engine methods + supervision : gives access to SuperVision Engine +To obtain specific help on a module "truc", type: help.truc() +To run an example, type: import example3 +''') + diff --git a/src/SALOME_SWIG/Makefile.am b/src/SALOME_SWIG/Makefile.am new file mode 100755 index 000000000..f5a184e42 --- /dev/null +++ b/src/SALOME_SWIG/Makefile.am @@ -0,0 +1,116 @@ +# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# +# +# File : Makefile.in +# Author : Paul RASCLE, EDF +# Module : SALOME +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# =============================================================== +# Swig targets +# =============================================================== +# (cf. http://www.geocities.com/foetsch/python/swig_linux.htm) +# +# Step 1: build the wrapping source files with swig +# +# libSALOME_LifeCycleCORBA.i -- swig --> swig_wrap.cpp +# libSALOME_Swig.py +# +# Step 2: build the dynamic library from cpp built source files and +# dependant libraries. +# +# swig_wrap.cpp -- gcc --> swig_wrap.o |-- link --> _libSALOME_Swig.la +# + | +# dependant libs | +# +# The file libSALOME_Swigcmodule.py will be installed in +# /lib/python/site-package/salome. +# The library will be installed in the same place. +# + +# this option puts it to dist +#BUILT_SOURCES = swig_wrap.cpp + +SWIG_FLAGS = @SWIG_FLAGS@ -I$(srcdir) +SWIG_SOURCES = libSALOME_Swig.i + +nodist_pkgpython_DATA = libSALOME_Swig.py +libSALOME_Swig.py: swig_wrap.cpp + +# library +lib_LTLIBRARIES = libSALOME_Swigcmodule.la +libSALOME_Swigcmodule_la_SOURCES = $(BUILT_SOURCES) $(SWIG_SOURCES) SALOMEGUI_Swig.cxx +nodist_libSALOME_Swigcmodule_la_SOURCES = swig_wrap.cpp +salomeinclude_HEADERS= SALOMEGUI_Swig.hxx SALOMEGUI_Swig.i + +libSALOME_Swigcmodule_la_CPPFLAGS =\ + $(QT_INCLUDES) $(PYTHON_INCLUDES) $(CAS_CPPFLAGS) $(VTK_INCLUDES) \ + $(OGL_INCLUDES) $(BOOST_CPPFLAGS) -DHAVE_CONFIG_H @KERNEL_CXXFLAGS@ \ + -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl \ + -I$(srcdir)/../SalomeApp -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT \ + -I$(srcdir)/../ObjBrowser -I$(srcdir)/../LightApp -I$(srcdir)/../SOCC \ + -I$(srcdir)/../SVTK -I$(srcdir)/../Event -I$(srcdir)/../OBJECT \ + -I$(srcdir)/../CAM -I$(srcdir)/../STD -I$(srcdir)/../OCCViewer \ + -I$(srcdir)/../Prs -I$(srcdir)/../VTKViewer -I$(srcdir)/../SPlot2d \ + -I$(srcdir)/../Plot2d \ + @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ + +libSALOME_Swigcmodule_la_LDFLAGS = -module +libSALOME_Swigcmodule_la_LIBADD = \ + ../SalomeApp/libSalomeApp.la \ + @PYTHON_LIBS@ + +swig_wrap.cpp : $(SWIG_SOURCES) + $(SWIG) $(SWIG_FLAGS) -o $@ $< + +CLEANFILES = swig_wrap.cpp + +# +# =============================================================== +# Files to be installed +# =============================================================== +# + +# Scripts to be installed. +dist_salomescript_DATA= \ + examplevtk1.py \ + test_table.py \ + test_big_table.py \ + test_many_objects.py \ + test_remove_ref.py \ + libSALOME_Swig.py + +nodist_salomescript_DATA= \ + supervisionexample.py \ + supervisiongeomexample.py + +EXTRA_DIST+= \ + supervisionexample.py.in \ + supervisiongeomexample.py.in + +sharedpkgpython_PYTHON= SALOMEGUI_shared_modules.py + +install-exec-hook: $(libdir)/_libSALOME_Swig.so + +$(libdir)/_libSALOME_Swig.so: + (cd $(libdir); ln -sf libSALOME_Swigcmodule.so _libSALOME_Swig.so;) diff --git a/src/SALOME_SWIG/Makefile.in b/src/SALOME_SWIG/Makefile.in deleted file mode 100755 index 80cc9daf3..000000000 --- a/src/SALOME_SWIG/Makefile.in +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# -# -# File : Makefile.in -# Author : Paul RASCLE, EDF -# Module : SALOME -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= SALOMEGUI_Swig.hxx \ - SALOMEGUI_Swig.i - -# Libraries targets - -LIB = libSALOME_Swigcmodule.la -LIB_SRC = SALOMEGUI_Swig.cxx - -LIB_CLIENT_IDL = SALOMEDS.idl \ - SALOME_Exception.idl \ - SALOME_GenericObj.idl - -SWIG_DEF = libSALOME_Swig.i -EXPORT_PYSCRIPTS = libSALOME_Swig.py examplevtk1.py supervisionexample.py supervisiongeomexample.py test_table.py test_big_table.py test_many_objects.py test_remove_ref.py - -EXPORT_SHAREDPYSCRIPTS=SALOMEGUI_shared_modules.py - -CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) -DHAVE_CONFIG_H $(KERNEL_CXXFLAGS) -LIBS+= $(PYTHON_LIBS) -LDFLAGS+= -lSalomeApp - -@CONCLUDE@ diff --git a/src/SALOME_SWIG/PyInterp.py b/src/SALOME_SWIG/PyInterp.py new file mode 100755 index 000000000..3e0133d89 --- /dev/null +++ b/src/SALOME_SWIG/PyInterp.py @@ -0,0 +1,102 @@ +# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +# +# +# +# File : PyInterp.py +# Author : Paul RASCLE, EDF +# Module : SALOME +# $Header$ + +import sys +from omniORB import CORBA +from LifeCycleCORBA import * +from libSALOME_Swig import * +import SALOMEDS +from SALOME_NamingServicePy import * + + #-------------------------------------------------------------------------- + +def DumpComponent(Study, SO, offset): + it = Study.NewChildIterator(SO) + Builder = Study.NewBuilder() + while it.More(): + CSO = it.Value() + it.Next() + anAttr = Builder.FindOrCreateAttribute(CSO, "AttributeName") + AtName = anAttr._narrow(SALOMEDS.AttributeName) + t_name = AtName.Value() + if t_name[0] == 1: + ofs = 1 + a = "" + while ofs <= offset: + a = a + "--" + ofs = ofs +1 + print a + ">" + CSO.GetID() + " " + t_name[1] + t_RefSO = CSO.ReferencedObject() + if t_RefSO[0] == 1: + RefSO = t_RefSO[1] + ofs = 1 + a = "" + while ofs <= offset: + a = a + " " + ofs = ofs +1 + print a + ">" + RefSO.GetID() + DumpComponent(Study, CSO, offset+2) + + #-------------------------------------------------------------------------- + +def DumpStudy(Study): + itcomp = Study.NewComponentIterator() + while itcomp.More(): + SC = itcomp.Value() + itcomp.Next() + name = SC.ComponentDataType() + print "-> ComponentDataType is " + name + DumpComponent(Study, SC, 1) + + + #-------------------------------------------------------------------------- + +# initialise the ORB +orb = CORBA.ORB_init([''], CORBA.ORB_ID) + +# create an LifeCycleCORBA instance +lcc = LifeCycleCORBA(orb) + +# create an SALOMEGUI_Swig instance +sg = SALOMEGUI_Swig() + +#create an naming service instance +naming_service = SALOME_NamingServicePy_i(orb) + +# get active study name and id +myStudyName = sg.getActiveStudyName() +print myStudyName + +myStudyId = sg.getActiveStudyId() +print myStudyId + +# get Study Manager reference +obj = naming_service.Resolve('myStudyManager') +myStudyManager = obj._narrow(SALOMEDS.StudyManager) + +# get active study +myStudy = myStudyManager.GetStudyByName(myStudyName) + diff --git a/src/SALOME_SWIG/SALOMEGUI_Swig.cxx b/src/SALOME_SWIG/SALOMEGUI_Swig.cxx index ccf9b841a..d56fafe08 100644 --- a/src/SALOME_SWIG/SALOMEGUI_Swig.cxx +++ b/src/SALOME_SWIG/SALOMEGUI_Swig.cxx @@ -40,6 +40,9 @@ #include "SALOME_Prs.h" #include "SOCC_ViewModel.h" #include "SVTK_ViewModel.h" +#include "SVTK_ViewWindow.h" +#include "SOCC_ViewWindow.h" +#include "SPlot2d_ViewWindow.h" #include "SALOME_Event.hxx" #include "SALOME_ListIO.hxx" @@ -554,7 +557,7 @@ public: SALOME_View* view = dynamic_cast( window->getViewManager()->getViewModel() ); if ( view ) { SALOME_Prs* aPrs = view->CreatePrs( myEntry ); - myResult = aPrs->IsNull(); + myResult = !aPrs->IsNull(); } } } @@ -569,3 +572,188 @@ bool SALOMEGUI_Swig::IsInCurrentView( const char* theEntry ) { return ProcessEvent( new TIsInViewerEvent( theEntry ) ); } + +/*! + Updates (repaint) current view +*/ +void SALOMEGUI_Swig::UpdateView() +{ + class TEvent: public SALOME_Event { + public: + TEvent() {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); + if ( window ) { + SALOME_View* view = dynamic_cast( window->getViewManager()->getViewModel() ); + if ( view ) + view->Repaint(); + } + } + } + }; + ProcessVoidEvent( new TEvent() ); +} + +/*! + Fit all the contents of the current view window + */ +void SALOMEGUI_Swig::FitAll() +{ + class TEvent: public SALOME_Event { + public: + TEvent() {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); + if ( window ) { + if ( dynamic_cast( window ) ) + (dynamic_cast( window ))->onFitAll(); + else if ( dynamic_cast( window ) ) + (dynamic_cast( window ))->onFitAll(); + else if ( dynamic_cast( window ) ) + (dynamic_cast( window ))->onFitAll(); + } + } + } + }; + ProcessVoidEvent( new TEvent() ); +} + +/*! + Reset current view window to the default state. + */ +void SALOMEGUI_Swig::ResetView() +{ + class TEvent: public SALOME_Event { + public: + TEvent() {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); + if ( window ) { + if ( dynamic_cast( window ) ) + (dynamic_cast( window ))->onResetView(); + else if ( dynamic_cast( window ) ) + (dynamic_cast( window ))->onResetView(); + else if ( dynamic_cast( window ) ) + (dynamic_cast( window ))->onFitAll(); + // VSR: there is no 'ResetView' functionality for Plot2d viewer, + // so we use 'FitAll' instead. + } + } + } + }; + ProcessVoidEvent( new TEvent() ); +} + +enum { + __ViewTop, + __ViewBottom, + __ViewLeft, + __ViewRight, + __ViewFront, + __ViewBack +}; + +void setView( int view ) +{ + class TEvent: public SALOME_Event { + private: + int myView; + public: + TEvent( int view ) : myView( view ) {} + virtual void Execute() { + if ( SalomeApp_Application* anApp = getApplication() ) { + SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); + if ( window ) { + if ( dynamic_cast( window ) ) { + switch( myView ) { + case __ViewTop: + (dynamic_cast( window ))->onTopView(); break; + case __ViewBottom: + (dynamic_cast( window ))->onBottomView(); break; + case __ViewLeft: + (dynamic_cast( window ))->onLeftView(); break; + case __ViewRight: + (dynamic_cast( window ))->onRightView(); break; + case __ViewFront: + (dynamic_cast( window ))->onFrontView(); break; + case __ViewBack: + (dynamic_cast( window ))->onBackView(); break; + default: + break; + } + } + else if ( dynamic_cast( window ) ) { + switch( myView ) { + case __ViewTop: + (dynamic_cast( window ))->onTopView(); break; + case __ViewBottom: + (dynamic_cast( window ))->onBottomView(); break; + case __ViewLeft: + (dynamic_cast( window ))->onLeftView(); break; + case __ViewRight: + (dynamic_cast( window ))->onRightView(); break; + case __ViewFront: + (dynamic_cast( window ))->onFrontView(); break; + case __ViewBack: + (dynamic_cast( window ))->onBackView(); break; + default: + break; + } + } + } + } + } + }; + ProcessVoidEvent( new TEvent( view ) ); +} + +/*! + Switch current view window to show top view + */ +void SALOMEGUI_Swig::ViewTop() +{ + setView( __ViewTop ); +} + +/*! + Switch current view window to show bottom view + */ +void SALOMEGUI_Swig::ViewBottom() +{ + setView( __ViewBottom ); +} + +/*! + Switch current view window to show left view + */ +void SALOMEGUI_Swig::ViewLeft() +{ + setView( __ViewLeft ); +} + +/*! + Switch current view window to show right view + */ +void SALOMEGUI_Swig::ViewRight() +{ + setView( __ViewRight ); +} + +/*! + Switch current view window to show front view + */ +void SALOMEGUI_Swig::ViewFront() +{ + setView( __ViewFront ); +} + +/*! + Switch current view window to show back view + */ +void SALOMEGUI_Swig::ViewBack() +{ + setView( __ViewBack ); +} diff --git a/src/SALOME_SWIG/SALOMEGUI_Swig.hxx b/src/SALOME_SWIG/SALOMEGUI_Swig.hxx index 456211227..97e09fa28 100644 --- a/src/SALOME_SWIG/SALOMEGUI_Swig.hxx +++ b/src/SALOME_SWIG/SALOMEGUI_Swig.hxx @@ -60,6 +60,17 @@ public: void DisplayAll(); void EraseAll(); bool IsInCurrentView( const char *Entry ); + void UpdateView(); + + /* view operations */ + void FitAll(); + void ResetView(); + void ViewTop(); + void ViewBottom(); + void ViewLeft(); + void ViewRight(); + void ViewFront(); + void ViewBack(); /* get component name/username */ const char* getComponentName( const char* ComponentUserName ); diff --git a/src/SALOME_SWIG/SALOMEGUI_Swig.i b/src/SALOME_SWIG/SALOMEGUI_Swig.i index 8ad7a3ae0..7db1de909 100644 --- a/src/SALOME_SWIG/SALOMEGUI_Swig.i +++ b/src/SALOME_SWIG/SALOMEGUI_Swig.i @@ -30,7 +30,24 @@ #include "SALOMEGUI_Swig.hxx" %} -%include "pointer.i" +%include "cpointer.i" + +/* Exception handler for all functions */ +%exception { + class PyAllowThreadsGuard { + public: + // Py_BEGIN_ALLOW_THREADS + PyAllowThreadsGuard() { _save = PyEval_SaveThread(); } + // Py_END_ALLOW_THREADS + ~PyAllowThreadsGuard() { PyEval_RestoreThread(_save); } + private: + PyThreadState *_save; + }; + + PyAllowThreadsGuard guard; + + $action +} class SALOMEGUI_Swig { @@ -63,6 +80,17 @@ class SALOMEGUI_Swig void DisplayAll(); void EraseAll(); bool IsInCurrentView(const char *Entry); + void UpdateView(); + +/* view operations */ + void FitAll(); + void ResetView(); + void ViewTop(); + void ViewBottom(); + void ViewLeft(); + void ViewRight(); + void ViewFront(); + void ViewBack(); /* get component name/username */ const char* getComponentName( const char* ComponentUserName ); diff --git a/src/SALOME_SWIG/salome.py b/src/SALOME_SWIG/salome.py new file mode 100755 index 000000000..9d45865db --- /dev/null +++ b/src/SALOME_SWIG/salome.py @@ -0,0 +1,157 @@ +# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +# +# +# +# File : salome.py +# Author : Paul RASCLE, EDF +# Module : SALOME +# $Header$ + +from omniORB import CORBA +from LifeCycleCORBA import * +from libSALOME_Swig import * +import SALOMEDS +from SALOME_NamingServicePy import * + +from SALOME_utilities import * + +#-------------------------------------------------------------------------- + +def DumpComponent(Study, SO, offset): + it = Study.NewChildIterator(SO) + Builder = Study.NewBuilder() + while it.More(): + CSO = it.Value() + it.Next() + anAttr = Builder.FindOrCreateAttribute(CSO, "AttributeName") + AtName = anAttr._narrow(SALOMEDS.AttributeName) + t_name = AtName.Value() + if t_name[0] == 1: + ofs = 1 + a = "" + while ofs <= offset: + a = a + "--" + ofs = ofs +1 + MESSAGE( a + ">" + str(CSO.GetID()) + " " + str(t_name[1]) ) + t_RefSO = CSO.ReferencedObject() + if t_RefSO[0] == 1: + RefSO = t_RefSO[1] + ofs = 1 + a = "" + while ofs <= offset: + a = a + " " + ofs = ofs +1 + MESSAGE( a + ">" + str(RefSO.GetID()) ) + DumpComponent(Study, CSO, offset+2) + + #-------------------------------------------------------------------------- + +def DumpStudy(Study): + itcomp = Study.NewComponentIterator() + while itcomp.More(): + SC = itcomp.Value() + itcomp.Next() + name = SC.ComponentDataType() + MESSAGE( "-> ComponentDataType is " + name ) + DumpComponent(Study, SC, 1) + + + #-------------------------------------------------------------------------- + +def ImportComponentGUI(ComponentName): + libName = "lib" + ComponentName + "_Swig" + command = "from " + libName + " import *" + exec ( command ) + constructor = ComponentName + "_Swig()" + command = "gui = " + constructor + exec ( command ) + return gui + + #-------------------------------------------------------------------------- + +def SalomeGUIgetAllSelected(self): + selNumber = self.SelectedCount() + listSelected = [] + for i in range(selNumber): + listSelected.append(self.getSelected(i)) + return listSelected + +class SalomeGUI(SALOMEGUI_Swig): + getAllSelected = SalomeGUIgetAllSelected + + #-------------------------------------------------------------------------- + +def IDToObject(id): + myObj = None + mySO = myStudy.FindObjectID(id); + if mySO is not None: + ok, anAttr = mySO.FindAttribute("AttributeIOR") + if ok: + AtIOR = anAttr._narrow(SALOMEDS.AttributeIOR) + if AtIOR.Value() != "": + myObj = orb.string_to_object(AtIOR.Value()) + return myObj + +def ObjectToSObject(obj): + mySO = None + if obj is not None: + ior = orb.object_to_string(obj) + if ior != "": + mySO = myStudy.FindObjectIOR(ior) + return mySO + +def ObjectToID(obj): + mySO = ObjectToSObject(obj) + if mySO: + return mySO.GetID() + return "" + +def IDToSObject(id): + mySO = myStudy.FindObjectID(id); + return mySO + + #-------------------------------------------------------------------------- + +# initialise the ORB +orb = CORBA.ORB_init([''], CORBA.ORB_ID) + +# create an LifeCycleCORBA instance +lcc = LifeCycleCORBA(orb) + +# create an SALOMEGUI_Swig instance +sg = SalomeGUI() + +#create an naming service instance +naming_service = SALOME_NamingServicePy_i(orb) + +# get active study name and id +myStudyName = sg.getActiveStudyName() +MESSAGE( myStudyName ) + +myStudyId = sg.getActiveStudyId() +MESSAGE( str(myStudyId) ) + +# get Study Manager reference +obj = naming_service.Resolve('myStudyManager') +myStudyManager = obj._narrow(SALOMEDS.StudyManager) + +# get active study +myStudy = myStudyManager.GetStudyByName(myStudyName) + diff --git a/src/SALOME_SWIG/supervisionexample.py b/src/SALOME_SWIG/supervisionexample.py deleted file mode 100755 index 351315028..000000000 --- a/src/SALOME_SWIG/supervisionexample.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -#============================================================================== -# File : supervisionexample.py -# Created : 23 nov 2001 -# Author : Jean Rahuel -# Project : SALOME -# Copyright : CEA -#============================================================================== - -from SuperV import * - - - -# load this object with Nodes, Links and Datas stored in GraphEssai.xml -# (GraphEssai.xml was created with python in SuperVisionTest and GraphEssai.py) -myGraph = Graph("@ROOT_BUILDDIR@/share/salome/resources/GraphEssai.xml") - -#myGraph = Graph("/home/data/jr_HEAD/build/share/salome/resources/GraphEssai.xml") -# This DataFlow is "valid" : no loop, correct links between Nodes etc... - -print myGraph.IsValid() - -# Get Nodes -myGraph.PrintNodes() -Add,Sub,Mul,Div = myGraph.Nodes() - -# Load Datas -Addx = Add.Input("x",3.) -Addy = Add.Input("y",4.5) -Subx = Sub.Input("x",1.5) - -# Get Output Port -Addz = Add.Port('z') -Subz = Sub.Port('z') -Mulz = Mul.Port('z') -Divz = Div.Port('z') - -# This DataFlow is "executable" : all pending Ports are defined with Datas -print myGraph.IsExecutable() - -# Starts only execution of that DataFlow and gets control immediatly -print myGraph.Run() - -# That DataFlow is running ==> 0 (false) -print myGraph.IsDone() - -# Events of execution : -aStatus,aNode,anEvent,aState = myGraph.Event() -while aStatus : - print aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState - aStatus,aNode,anEvent,aState = myGraph.Event() -print myGraph.IsDone() - -# Wait for Completion (but it is already done after event loop ...) -print "Done : ",myGraph.DoneW() - -# Get result -print "Result : ",Divz.ToString() - -# Intermediate results : -print "Intermediate Result Add\z : ",Addz.ToString() -print "Intermediate Result Sub\z : ",Subz.ToString() -print "Intermediate Result Mul\z : ",Mulz.ToString() - -print " " -print "Type : print myGraph.IsDone()" -print " If execution is finished ==> 1 (true)" -print " " -print "Type : print Divz.ToString()" -print " You will get the result" -print " " -print "Type : myGraph.PrintPorts()" -print " to see input and output values of the graph" -print " " -print "Type : Add.PrintPorts()" -print "Type : Sub.PrintPorts()" -print "Type : Mul.PrintPorts()" -print "Type : Div.PrintPorts()" -print " to see input and output values of nodes" - -# Export will create newsupervisionexample.xml and the corresponding .py file -print myGraph.Export("@ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml") - -print " " -print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml" -print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.py" diff --git a/src/SALOME_SWIG/supervisionexample.py.in b/src/SALOME_SWIG/supervisionexample.py.in index 56bdd9bf5..66974aeb6 100755 --- a/src/SALOME_SWIG/supervisionexample.py.in +++ b/src/SALOME_SWIG/supervisionexample.py.in @@ -12,9 +12,9 @@ from SuperV import * # load this object with Nodes, Links and Datas stored in GraphEssai.xml # (GraphEssai.xml was created with python in SuperVisionTest and GraphEssai.py) -myGraph = Graph("@ROOT_BUILDDIR@/share/salome/resources/GraphEssai.xml") +myGraph = Graph("@ROOT_BUILDDIR@/share/salome/resources/superv/GraphEssai.xml") -#myGraph = Graph("/home/data/jr_HEAD/build/share/salome/resources/GraphEssai.xml") +#myGraph = Graph("/home/data/jr_HEAD/build/share/salome/resources/superv/GraphEssai.xml") # This DataFlow is "valid" : no loop, correct links between Nodes etc... print myGraph.IsValid() @@ -78,8 +78,8 @@ print "Type : Div.PrintPorts()" print " to see input and output values of nodes" # Export will create newsupervisionexample.xml and the corresponding .py file -print myGraph.Export("@ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml") +print myGraph.Export("@ROOT_BUILDDIR@/share/salome/resources/superv/newsupervisionexample.xml") print " " -print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml" -print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.py" +print "See file @ROOT_BUILDDIR@/share/salome/resources/superv/newsupervisionexample.xml" +print "See file @ROOT_BUILDDIR@/share/salome/resources/superv/newsupervisionexample.py" diff --git a/src/SALOME_SWIG/supervisiongeomexample.py b/src/SALOME_SWIG/supervisiongeomexample.py deleted file mode 100755 index bf9e5b746..000000000 --- a/src/SALOME_SWIG/supervisiongeomexample.py +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# Generated python file of Graph GraphGeom2Essai - -from SuperV import * - -import salome - -import geompy - - -geom = lcc.FindOrLoadComponent("FactoryServer", "Geometry") -geom.GetCurrentStudy(salome.myStudyId) - -myBuilder = salome.myStudy.NewBuilder() - -# Graph creation -GraphGeom2Essai = Graph( 'GraphGeom2Essai' ) -print GraphGeom2Essai.SetAuthor( '' ) -print GraphGeom2Essai.SetComment( '' ) -GraphGeom2Essai.Coords( 0 , 0 ) - -# Creation of Nodes -MakeSphere = GraphGeom2Essai.Node( 'Geometry' , 'Geometry' , 'MakeSphere' ) -print MakeSphere.SetAuthor( '' ) -print MakeSphere.SetContainer( 'FactoryServer' ) -print MakeSphere.SetComment( '' ) -MakeSphere.Coords( 26 , 13 ) -MakeCopy = GraphGeom2Essai.Node( 'Geometry' , 'Geometry' , 'MakeCopy' ) -print MakeCopy.SetAuthor( '' ) -print MakeCopy.SetContainer( 'FactoryServer' ) -print MakeCopy.SetComment( '' ) -MakeCopy.Coords( 219 , 12 ) -MakeTranslation = GraphGeom2Essai.Node( 'Geometry' , 'Geometry' , 'MakeTranslation' ) -print MakeTranslation.SetAuthor( '' ) -print MakeTranslation.SetContainer( 'FactoryServer' ) -print MakeTranslation.SetComment( '' ) -MakeTranslation.Coords( 219 , 159 ) -MakeFuse = GraphGeom2Essai.Node( 'Geometry' , 'Geometry' , 'MakeFuse' ) -print MakeFuse.SetAuthor( '' ) -print MakeFuse.SetContainer( 'FactoryServer' ) -print MakeFuse.SetComment( '' ) -MakeFuse.Coords( 465 , 106 ) - -# Creation of intermediate Output variables and of links -MakeSphereshape = MakeSphere.Port( 'shape' ) -MakeCopyshape1 = GraphGeom2Essai.Link( MakeSphereshape , MakeCopy.Port( 'shape1' ) ) -MakeTranslationshape1 = GraphGeom2Essai.Link( MakeSphereshape , MakeTranslation.Port( 'shape1' ) ) -MakeCopyshape = MakeCopy.Port( 'shape' ) -MakeFuseshape1 = GraphGeom2Essai.Link( MakeCopyshape , MakeFuse.Port( 'shape1' ) ) -MakeTranslationshape = MakeTranslation.Port( 'shape' ) -MakeFuseshape2 = GraphGeom2Essai.Link( MakeTranslationshape , MakeFuse.Port( 'shape2' ) ) - -# Creation of Input datas -MakeSpherex1 = MakeSphere.Input( 'x1' , 0) -MakeSpherey1 = MakeSphere.Input( 'y1' , 0) -MakeSpherez1 = MakeSphere.Input( 'z1' , 0) -MakeSphereradius = MakeSphere.Input( 'radius' , 50) -MakeTranslationx1 = MakeTranslation.Input( 'x1' , 80) -MakeTranslationy1 = MakeTranslation.Input( 'y1' , 0) -MakeTranslationz1 = MakeTranslation.Input( 'z1' , 0) - -# Missing Input datas : None - -# Creation of Output variables -MakeFuseshape = MakeFuse.Port( 'shape' ) - -# State of Ports of the Graph -GraphGeom2Essai.PrintPorts() - -# Start asynchronous run -print GraphGeom2Essai.Run() - -# Done ? -print GraphGeom2Essai.IsDone() - -# Events of execution : -aStatus,aNode,anEvent,aState = GraphGeom2Essai.Event() -while aStatus : - print aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState - aStatus,aNode,anEvent,aState = GraphGeom2Essai.Event() -print GraphGeom2Essai.IsDone() - -# Waiting end of execution : -print GraphGeom2Essai.DoneW() - -print " " -print "Type print GraphGeom2Essai.IsDone()" -print "1 <==> It's done" -print " " -print "Type print GraphGeom2Essai.DoneW()" -print "Wait until end of execution : 1(success)" -print " " -print "Type GraphGeom2Essai.PrintPorts()" -print " to see input and output values of the graph" -print " " -print "Type MakeSphere.PrintPorts()" -print "Type MakeCopy.PrintPorts()" -print "Type MakeTranslation.PrintPorts()" -print "Type MakeFuse.PrintPorts()" -print " to see input and output values of nodes" -print " " -print "Type print GraphGeom2Essai.Export('File-Name')" -print "You will get a .py and a .xml file of this graph" diff --git a/src/SALOME_SWIG/testattr.py b/src/SALOME_SWIG/testattr.py deleted file mode 100755 index 18f091546..000000000 --- a/src/SALOME_SWIG/testattr.py +++ /dev/null @@ -1,109 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# -# -# File : testattr.py -# Module : SALOME - -import SALOMEDS -#import SALOMEDS_Attributes_idl -import geompy -import salome -# =============================================================== - -# creating new object =========================================== -obj = geompy.myBuilder.NewObject(geompy.father) - -# adding Name attribute ========================================= -A1 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeName") -name = A1._narrow(SALOMEDS.AttributeName) -name.SetValue("First Object") - -# adding Comment attribute ====================================== -A2 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeComment") -comment = A2._narrow(SALOMEDS.AttributeComment) -comment.SetValue("This is Comment attribute") - -# adding IOR attribute ========================================== -#A3 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeIOR") -# ... - -# adding integer attribute ====================================== -A4 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeInteger") -integer = A4._narrow(SALOMEDS.AttributeInteger) -integer.SetValue(12) - -# adding real attribute ========================================= -A5 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeReal") -real = A5._narrow(SALOMEDS.AttributeReal) -real.SetValue(0.25) - -# adding sequence of integer attribute ========================== -A6 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeSequenceOfInteger") -intseq = A6._narrow(SALOMEDS.AttributeSequenceOfInteger) -intseq.Add(1) -intseq.Add(2) -intseq.Add(3) - - -# adding sequence of real attribute ============================= -A7 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeSequenceOfReal") -realseq = A7._narrow(SALOMEDS.AttributeSequenceOfReal) -realseq.Add(0.001) -realseq.Add(0.002) -realseq.Add(0.003) - -# adding PersistentRef attribute ================================ -#A8 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributePersistentRef") -# ... - -# adding Drawable attribute ===================================== -A9 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeDrawable") -drawable = A9._narrow(SALOMEDS.AttributeDrawable) -drawable.SetDrawable(1) - -# adding Selectable attribute =================================== -#A10 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeSelectable") -# ... - -# adding Expandable attribute =================================== -#A11 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeExpandable") -# ... - -# adding Opened attribute ======================================= -#A12 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeOpened") -# ... - -# adding TextColor attribute ==================================== -A13 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeTextColor") -textcolor = A13._narrow(SALOMEDS.AttributeTextColor) - -# ... - -# adding TextHighlightColor of real attribute =================== -#A14 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributeTextHighlightColor") -# ... - -# adding PixMap of real attribute =============================== -#A15 = geompy.myBuilder.FindOrCreateAttribute(obj,"AttributePixMap") -# ... - -# opening OCAF Browser ========================================== -# result = salome.myStudy.OCAFBrowser() diff --git a/src/SOCC/Makefile.in b/src/SOCC/Makefile.am similarity index 58% rename from src/SOCC/Makefile.in rename to src/SOCC/Makefile.am index f1ad96778..25db60672 100755 --- a/src/SOCC/Makefile.in +++ b/src/SOCC/Makefile.am @@ -21,33 +21,30 @@ # Module : SOCC # $Header: /dn06/SALOME_CVS/GUI_SRC/src/SOCC/Makefile.in,v 1.1 -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES=libSOCC.la -@COMMENCE@ +salomeinclude_HEADERS= \ + SOCC.h \ + SOCC_ViewModel.h \ + SOCC_Prs.h \ + SOCC_ViewWindow.h -# header files -EXPORT_HEADERS= SOCC.h \ - SOCC_ViewModel.h \ - SOCC_Prs.h \ - SOCC_ViewWindow.h +dist_libSOCC_la_SOURCES= \ + SOCC_ViewModel.cxx \ + SOCC_Prs.cxx \ + SOCC_ViewWindow.cxx -# Libraries targets -LIB = libSOCC.la +MOC_FILES= \ + SOCC_ViewModel_moc.cxx \ + SOCC_ViewWindow_moc.cxx +nodist_libSOCC_la_SOURCES= $(MOC_FILES) -LIB_SRC= SOCC_ViewModel.cxx \ - SOCC_Prs.cxx \ - SOCC_ViewWindow.cxx +libSOCC_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(BOOST_CPPFLAGS) \ + -I$(srcdir)/../SUIT -I$(srcdir)/../OBJECT -I$(srcdir)/../Prs \ + -I$(srcdir)/../OCCViewer -I$(srcdir)/../Qtx -LIB_MOC = SOCC_ViewModel.h \ - SOCC_ViewWindow.h - -CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) $(BOOST_CPPFLAGS) - -LDFLAGS+=$(QT_MT_LIBS) -LIBS+= -lsuit -lSalomeObject -lSalomePrs -lOCCViewer - -@CONCLUDE@ +libSOCC_la_LDFLAGS=$(QT_MT_LIBS) +libSOCC_la_LIBADD= ../SUIT/libsuit.la ../OBJECT/libSalomeObject.la \ + ../Prs/libSalomePrs.la ../OCCViewer/libOCCViewer.la diff --git a/src/SOCC/SOCC_Prs.cxx b/src/SOCC/SOCC_Prs.cxx index 44623c874..eb2cb6821 100644 --- a/src/SOCC/SOCC_Prs.cxx +++ b/src/SOCC/SOCC_Prs.cxx @@ -74,7 +74,7 @@ void SOCC_Prs::AddObject( const Handle(AIS_InteractiveObject)& obj ) */ bool SOCC_Prs::IsNull() const { - return myObjects.IsEmpty(); + return myObjects.IsEmpty() == Standard_True; } /*! diff --git a/src/SOCC/SOCC_ViewModel.cxx b/src/SOCC/SOCC_ViewModel.cxx index 8d425a47c..8d27c10a7 100755 --- a/src/SOCC/SOCC_ViewModel.cxx +++ b/src/SOCC/SOCC_ViewModel.cxx @@ -521,12 +521,8 @@ void SOCC_Viewer::EraseAll( const bool forced ) // } //} } - - // display trihedron if necessary - if ( isTrihedronDisplayed ) - getAISContext()->Display( getTrihedron() ); - else - Repaint(); + + Repaint(); } /*! diff --git a/src/SOCC/SOCC_ViewWindow.cxx b/src/SOCC/SOCC_ViewWindow.cxx index 2e519687b..d7c4edb81 100644 --- a/src/SOCC/SOCC_ViewWindow.cxx +++ b/src/SOCC/SOCC_ViewWindow.cxx @@ -79,23 +79,23 @@ SOCC_ViewWindow myViewPort->fitAll(); break; case SUIT_Accel::RotateLeft : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx - inc, cy ); + myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint ); + myViewPort->rotate( cx - inc, cy, myCurrPointType, mySelectedPoint ); myViewPort->endRotation(); break; case SUIT_Accel::RotateRight : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx + inc, cy ); + myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint ); + myViewPort->rotate( cx + inc, cy, myCurrPointType, mySelectedPoint ); myViewPort->endRotation(); break; case SUIT_Accel::RotateUp : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx, cy - inc ); + myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint ); + myViewPort->rotate( cx, cy - inc, myCurrPointType, mySelectedPoint ); myViewPort->endRotation(); break; case SUIT_Accel::RotateDown : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx, cy + inc ); + myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint ); + myViewPort->rotate( cx, cy + inc, myCurrPointType, mySelectedPoint ); myViewPort->endRotation(); break; } diff --git a/src/SPlot2d/Makefile.am b/src/SPlot2d/Makefile.am new file mode 100644 index 000000000..17dc25b37 --- /dev/null +++ b/src/SPlot2d/Makefile.am @@ -0,0 +1,52 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libSPlot2d.la + +salomeinclude_HEADERS = \ + SPlot2d.h \ + SPlot2d_Curve.h \ + SPlot2d_Prs.h \ + SPlot2d_ViewModel.h \ + SPlot2d_ViewWindow.h + +dist_libSPlot2d_la_SOURCES = \ + SPlot2d_Curve.cxx \ + SPlot2d_Prs.cxx \ + SPlot2d_ViewModel.cxx \ + SPlot2d_ViewWindow.cxx + +MOC_FILES = \ + SPlot2d_ViewModel_moc.cxx \ + SPlot2d_ViewWindow_moc.cxx +nodist_libSPlot2d_la_SOURCES = $(MOC_FILES) + +nodist_salomeres_DATA = SPlot2d_msg_en.qm + +libSPlot2d_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(QWT_INCLUDES) $(BOOST_CPPFLAGS) \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../Plot2d -I$(srcdir)/../Prs \ + -I$(srcdir)/../OBJECT +libSPlot2d_la_LDFLAGS=$(QT_MT_LIBS) $(QWT_LIBS) ../SUIT/libsuit.la ../Plot2d/libPlot2d.la ../Prs/libSalomePrs.la + + + + + diff --git a/src/SPlot2d/Makefile.in b/src/SPlot2d/Makefile.in deleted file mode 100644 index 0304abbee..000000000 --- a/src/SPlot2d/Makefile.in +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# source path -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -EXPORT_HEADERS = \ - SPlot2d.h \ - SPlot2d_Curve.h \ - SPlot2d_Prs.h \ - SPlot2d_ViewModel.h - -# .po files to transform in .qm -PO_FILES = SPlot2d_msg_en.po - -# Libraries targets - -LIB = libSPlot2d.la -LIB_SRC = \ - SPlot2d_Curve.cxx \ - SPlot2d_Prs.cxx \ - SPlot2d_ViewModel.cxx - -LIB_MOC = \ - SPlot2d_ViewModel.h - -CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) $(QWT_INCLUDES) $(BOOST_CPPFLAGS) -LDFLAGS+=$(QT_MT_LIBS) $(QWT_LIBS) -lsuit -lPlot2d -lSalomePrs - - -@CONCLUDE@ - - - - - diff --git a/src/SPlot2d/SPlot2d_ViewModel.cxx b/src/SPlot2d/SPlot2d_ViewModel.cxx index 4ac94388f..527a8a135 100644 --- a/src/SPlot2d/SPlot2d_ViewModel.cxx +++ b/src/SPlot2d/SPlot2d_ViewModel.cxx @@ -22,6 +22,8 @@ #include "SPlot2d_ViewModel.h" +#include "SPlot2d_ViewWindow.h" + #include "SPlot2d_Prs.h" #include "SUIT_Session.h" #include "SUIT_Application.h" @@ -114,10 +116,10 @@ void SPlot2d_Viewer::rename( const Handle(SALOME_InteractiveObject)& IObject, void SPlot2d_Viewer::renameAll( const Handle(SALOME_InteractiveObject)& IObj, const QString& name ) { SUIT_ViewManager* vm = getViewManager(); - if( vm ) + if ( vm ) { const QPtrVector& wnds = vm->getViews(); - for( int i=0; i( wnds.at( i ) ); rename( IObj, name, pwnd->getViewFrame() ); @@ -379,3 +381,14 @@ void SPlot2d_Viewer::onCloneView( Plot2d_ViewFrame* clonedVF, Plot2d_ViewFrame* newVF->displayCurve( *anIt, false ); newVF->Repaint(); } + +/*! + create SPlot2d_ViewWindow +*/ +SUIT_ViewWindow* SPlot2d_Viewer::createView( SUIT_Desktop* theDesktop ) +{ + SPlot2d_ViewWindow* aPlot2dView = new SPlot2d_ViewWindow(theDesktop, this); + if (getPrs()) + aPlot2dView->getViewFrame()->Display(getPrs()); + return aPlot2dView; +} diff --git a/src/SPlot2d/SPlot2d_ViewModel.h b/src/SPlot2d/SPlot2d_ViewModel.h index c9968c055..7182def58 100644 --- a/src/SPlot2d/SPlot2d_ViewModel.h +++ b/src/SPlot2d/SPlot2d_ViewModel.h @@ -52,6 +52,8 @@ public: void rename( const Handle(SALOME_InteractiveObject)&, const QString&, Plot2d_ViewFrame* = 0 ); void renameAll( const Handle(SALOME_InteractiveObject)&, const QString& ); bool isInViewer( const Handle(SALOME_InteractiveObject)& IObject ); + + virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop); /* display */ void Display( const Handle(SALOME_InteractiveObject)& IObject, bool update = true ); diff --git a/src/SPlot2d/SPlot2d_ViewWindow.cxx b/src/SPlot2d/SPlot2d_ViewWindow.cxx new file mode 100644 index 000000000..0e0a376b2 --- /dev/null +++ b/src/SPlot2d/SPlot2d_ViewWindow.cxx @@ -0,0 +1,75 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "SPlot2d_ViewWindow.h" + +#include "Plot2d_ViewFrame.h" + +#include "SUIT_Accel.h" + +/*! + Constructor +*/ +SPlot2d_ViewWindow +::SPlot2d_ViewWindow( SUIT_Desktop* theDesktop, + Plot2d_Viewer* theModel) + : Plot2d_ViewWindow( theDesktop, theModel ) +{ +} + +/*! + Destructor +*/ +SPlot2d_ViewWindow +::~SPlot2d_ViewWindow() +{ +} + +/*! + Performs action + \param theAction - type of action +*/ +bool +SPlot2d_ViewWindow +::action( const int theAction ) +{ + switch ( theAction ) { + case SUIT_Accel::PanLeft: + getViewFrame()->onPanLeft(); + break; + case SUIT_Accel::PanRight: + getViewFrame()->onPanRight(); + break; + case SUIT_Accel::PanUp: + getViewFrame()->onPanUp(); + break; + case SUIT_Accel::PanDown: + getViewFrame()->onPanDown(); + break; + case SUIT_Accel::ZoomIn: + getViewFrame()->onZoomIn(); + break; + case SUIT_Accel::ZoomOut: + getViewFrame()->onZoomOut(); + break; + case SUIT_Accel::ZoomFit: + getViewFrame()->fitAll(); + break; + } + return true; +} diff --git a/src/SPlot2d/SPlot2d_ViewWindow.h b/src/SPlot2d/SPlot2d_ViewWindow.h new file mode 100644 index 000000000..a11b45a64 --- /dev/null +++ b/src/SPlot2d/SPlot2d_ViewWindow.h @@ -0,0 +1,46 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef SPLOT2D_VIEWWINDOW_H +#define SPLOT2D_VIEWWINDOW_H + +#ifdef WIN32 +#pragma warning( disable:4251 ) +#endif + +#include "SPlot2d.h" +#include "Plot2d_ViewWindow.h" + +class SPLOT2D_EXPORT SPlot2d_ViewWindow : public Plot2d_ViewWindow +{ + Q_OBJECT; + +public: + SPlot2d_ViewWindow( SUIT_Desktop*, Plot2d_Viewer* ); + virtual ~SPlot2d_ViewWindow(); + +protected: + virtual bool action( const int ); + +}; + +#ifdef WIN32 +#pragma warning( default:4251 ) +#endif + +#endif diff --git a/src/SPlot2d/SPlot2d_msg_en.po b/src/SPlot2d/resources/SPlot2d_msg_en.po similarity index 100% rename from src/SPlot2d/SPlot2d_msg_en.po rename to src/SPlot2d/resources/SPlot2d_msg_en.po diff --git a/src/STD/Makefile.am b/src/STD/Makefile.am new file mode 100755 index 000000000..742683632 --- /dev/null +++ b/src/STD/Makefile.am @@ -0,0 +1,77 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : STD +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libstd.la + +salomeinclude_HEADERS= \ + STD_Application.h \ + STD.h \ + STD_MDIDesktop.h \ + STD_SDIDesktop.h \ + STD_TabDesktop.h \ + STD_LoadStudiesDlg.h + +dist_libstd_la_SOURCES=\ + STD_Application.cxx \ + STD_MDIDesktop.cxx \ + STD_SDIDesktop.cxx \ + STD_TabDesktop.cxx \ + STD_LoadStudiesDlg.cxx + +MOC_FILES= \ + STD_Application_moc.cxx \ + STD_MDIDesktop_moc.cxx \ + STD_SDIDesktop_moc.cxx \ + STD_TabDesktop_moc.cxx \ + STD_LoadStudiesDlg_moc.cxx + +nodist_libstd_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA=\ + resources/config \ + resources/cut.png \ + resources/copy.png \ + resources/close.png \ + resources/cursor_rotate.png \ + resources/cursor_zoom.png \ + resources/help.png \ + resources/new.png \ + resources/open.png \ + resources/print.png \ + resources/paste.png \ + resources/redo.png \ + resources/reset.png \ + resources/save.png \ + resources/undo_arrow.png \ + resources/undo.png \ + resources/std.ini + +nodist_salomeres_DATA=\ + STD_images.qm \ + STD_msg_en.qm + +libstd_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx +libstd_la_LDFLAGS=$(QT_MT_LIBS) +libstd_la_LIBADD=../SUIT/libsuit.la diff --git a/src/STD/Makefile.in b/src/STD/Makefile.in deleted file mode 100755 index cfd6deca0..000000000 --- a/src/STD/Makefile.in +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : STD -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= STD_Application.h \ - STD.h \ - STD_MDIDesktop.h \ - STD_SDIDesktop.h \ - STD_TabDesktop.h \ - STD_CloseDlg.h \ - STD_LoadStudiesDlg.h - -# .po files to transform in .qm -PO_FILES = STD_images.po \ - STD_msg_en.po - -# Libraries targets -LIB = libstd.la - -LIB_SRC= STD_Application.cxx \ - STD_MDIDesktop.cxx \ - STD_SDIDesktop.cxx \ - STD_TabDesktop.cxx \ - STD_CloseDlg.cxx \ - STD_LoadStudiesDlg.cxx - -LIB_MOC = STD_Application.h \ - STD_MDIDesktop.h \ - STD_SDIDesktop.h \ - STD_TabDesktop.h \ - STD_CloseDlg.h \ - STD_LoadStudiesDlg.h - -RESOURCES_FILES = \ -config \ -cut.png \ -copy.png \ -close.png \ -cursor_rotate.png \ -cursor_zoom.png \ -help.png \ -new.png \ -open.png \ -print.png \ -paste.png \ -redo.png \ -reset.png \ -save.png \ -undo_arrow.png \ -undo.png \ -std.ini - -CPPFLAGS+=$(QT_INCLUDES) - -LDFLAGS+=$(QT_MT_LIBS) -LIBS+= -lsuit - -@CONCLUDE@ diff --git a/src/STD/STD_Application.cxx b/src/STD/STD_Application.cxx index 5a74b4785..177dd8295 100755 --- a/src/STD/STD_Application.cxx +++ b/src/STD/STD_Application.cxx @@ -20,8 +20,6 @@ #include "STD_MDIDesktop.h" -#include "STD_CloseDlg.h" - #include #include #include @@ -29,6 +27,7 @@ #include #include #include +#include #include #include @@ -41,6 +40,7 @@ #include #include #include +#include #include @@ -53,8 +53,9 @@ extern "C" STD_EXPORT SUIT_Application* createApplication() /*!Constructor.*/ STD_Application::STD_Application() : SUIT_Application(), -myEditEnabled( true ), -myActiveViewMgr( 0 ) + myActiveViewMgr( 0 ), + myExitConfirm( true ), + myEditEnabled( true ) { STD_MDIDesktop* desk = new STD_MDIDesktop(); @@ -64,6 +65,19 @@ myActiveViewMgr( 0 ) /*!Destructor.*/ STD_Application::~STD_Application() { + clearViewManagers(); +} + +/*! \retval requirement of exit confirmation*/ +bool STD_Application::exitConfirmation() const +{ + return myExitConfirm; +} + +/*! Set the requirement of exit confirmation*/ +void STD_Application::setExitConfirmation( const bool on ) +{ + myExitConfirm = on; } /*! \retval QString "StdApplication"*/ @@ -116,7 +130,8 @@ void STD_Application::onDesktopClosing( SUIT_Desktop*, QCloseEvent* e ) return; } - if ( !isPossibleToClose() ) + bool closePermanently; + if ( !isPossibleToClose( closePermanently ) ) { e->ignore(); return; @@ -186,13 +201,6 @@ void STD_Application::createActions() tr( "MEN_DESK_HELP_ABOUT" ), tr( "PRP_DESK_HELP_ABOUT" ), SHIFT+Key_A, desk, false, this, SLOT( onHelpAbout() ) ); - //SRN: BugID IPAL9021, add an action "Load" - createAction( FileLoadId, tr( "TOT_DESK_FILE_LOAD" ), - resMgr->loadPixmap( "STD", tr( "ICON_FILE_OPEN" ) ), - tr( "MEN_DESK_FILE_LOAD" ), tr( "PRP_DESK_FILE_LOAD" ), - CTRL+Key_L, desk, false, this, SLOT( onLoadDoc() ) ); - //SRN: BugID IPAL9021: End - QtxDockAction* da = new QtxDockAction( tr( "TOT_DOCK_WINDOWS" ), tr( "MEN_DOCK_WINDOWS" ), desk ); registerAction( ViewWindowsId, da ); da->setAutoPlace( false ); @@ -208,7 +216,6 @@ void STD_Application::createActions() createMenu( FileNewId, fileMenu, 0 ); createMenu( FileOpenId, fileMenu, 0 ); - createMenu( FileLoadId, fileMenu, 0 ); //SRN: BugID IPAL9021, add a menu item "Load" createMenu( FileCloseId, fileMenu, 0 ); createMenu( separator(), fileMenu, -1, 0 ); createMenu( FileSaveId, fileMenu, 0 ); @@ -222,8 +229,9 @@ void STD_Application::createActions() createMenu( EditPasteId, editMenu ); createMenu( separator(), editMenu ); - createMenu( ViewWindowsId, viewMenu ); - createMenu( ViewStatusBarId, viewMenu ); + createMenu( ViewWindowsId, viewMenu, 0 ); + createMenu( separator(), viewMenu, -1, 10 ); + createMenu( ViewStatusBarId, viewMenu, 10 ); createMenu( separator(), viewMenu ); createMenu( HelpAboutId, helpMenu ); @@ -322,11 +330,6 @@ bool STD_Application::onOpenDoc( const QString& aName ) return res; } -/*! called on loading the existent study */ -void STD_Application::onLoadDoc() -{ -} - /*! \retval true, if document was loaded successful, else false.*/ bool STD_Application::onLoadDoc( const QString& aName ) { @@ -374,7 +377,9 @@ void STD_Application::afterCloseDoc() /*!Close document, if it's possible.*/ void STD_Application::onCloseDoc( bool ask ) { - if ( ask && !isPossibleToClose() ) + bool closePermanently = true; + + if ( ask && !isPossibleToClose( closePermanently ) ) return; SUIT_Study* study = activeStudy(); @@ -382,7 +387,7 @@ void STD_Application::onCloseDoc( bool ask ) beforeCloseDoc( study ); if ( study ) - study->closeDocument(myClosePermanently); + study->closeDocument( closePermanently ); clearViewManagers(); @@ -416,42 +421,64 @@ void STD_Application::onCloseDoc( bool ask ) /*!Check the application on closing. * \retval true if possible, else false */ -bool STD_Application::isPossibleToClose() +bool STD_Application::isPossibleToClose( bool& closePermanently ) { - myClosePermanently = true; //SRN: BugID: IPAL9021 if ( activeStudy() ) { activeStudy()->abortAllOperations(); if ( activeStudy()->isModified() ) { QString sName = activeStudy()->studyName().stripWhiteSpace(); - QString msg = sName.isEmpty() ? tr( "INF_DOC_MODIFIED" ) : tr ( "INF_DOCUMENT_MODIFIED" ).arg( sName ); - - //SRN: BugID: IPAL9021: Begin - STD_CloseDlg dlg(desktop()); - switch( dlg.exec() ) - { - case 1: - if ( activeStudy()->isSaved() ) - onSaveDoc(); - else if ( !onSaveAsDoc() ) - return false; - break; - case 2: - break; - case 3: - myClosePermanently = false; - break; - case 4: - default: - return false; - } - //SRN: BugID: IPAL9021: End + return closeAction( closeChoice( sName ), closePermanently ); } } return true; } +/*! + \brief Show dialog box to propose possible user actions when study is closed. + \param docName study name + \return chosen action ID + \sa closeAction() +*/ +int STD_Application::closeChoice( const QString& docName ) +{ + SUIT_MsgDlg dlg( desktop(), tr( "CLOSE_DLG_CAPTION" ), tr ( "CLOSE_DLG_DESCRIPTION" ), + QMessageBox::standardIcon( QMessageBox::Information ) ); + dlg.addButton( tr ( "CLOSE_DLG_SAVE_CLOSE" ), CloseSave ); + dlg.addButton( tr ( "CLOSE_DLG_CLOSE" ), CloseDiscard ); + + return dlg.exec(); +} + +/*! + \brief Process user actions selected from the dialog box when study is closed. + \param choice chosen action ID + \param closePermanently "forced study closing" flag + \return operation status + \sa closeChoice() +*/ +bool STD_Application::closeAction( const int choice, bool& closePermanently ) +{ + bool res = true; + switch( choice ) + { + case CloseSave: + if ( activeStudy()->isSaved() ) + onSaveDoc(); + else if ( !onSaveAsDoc() ) + res = false; + break; + case CloseDiscard: + break; + case CloseCancel: + default: + res = false; + } + + return res; +} + /*!Save document if all ok, else error message.*/ void STD_Application::onSaveDoc() { @@ -525,10 +552,14 @@ bool STD_Application::onSaveAsDoc() /*!Closing session.*/ void STD_Application::onExit() { - int aAnswer = SUIT_MessageBox::info2( desktop(), tr( "INF_DESK_EXIT" ), tr( "QUE_DESK_EXIT" ), - tr( "BUT_OK" ), tr( "BUT_CANCEL" ), 1, 2, 2 ); - if ( aAnswer == 1 ) + if ( !exitConfirmation() || + SUIT_MessageBox::info2( desktop(), + tr( "INF_DESK_EXIT" ), + tr( "QUE_DESK_EXIT" ), + tr( "BUT_OK" ), + tr( "BUT_CANCEL" ), 1, 2, 2 ) == 1 ) { SUIT_Session::session()->closeSession(); + } } /*!Virtual slot. Not implemented here.*/ @@ -588,6 +619,8 @@ void STD_Application::updateDesktopTitle() /*!Update commands status.*/ void STD_Application::updateCommandsStatus() { + SUIT_Application::updateCommandsStatus(); + bool aHasStudy = activeStudy() != 0; bool aIsNeedToSave = false; if ( aHasStudy ) @@ -678,7 +711,8 @@ void STD_Application::removeViewManager( SUIT_ViewManager* vm ) emit viewManagerRemoved( vm ); vm->disconnectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) ); - vm->disconnect(); + disconnect( vm, SIGNAL( activated( SUIT_ViewManager* ) ), + this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) ); myViewMgrs.removeRef( vm ); if ( myActiveViewMgr == vm ) @@ -691,8 +725,11 @@ void STD_Application::clearViewManagers() ViewManagerList lst; viewManagers( lst ); - for ( QPtrListIterator it( lst ); it.current(); ++it ) - removeViewManager( it.current() ); + for ( QPtrListIterator it( lst ); it.current(); ++it ) { + QGuardedPtr vm = it.current(); + removeViewManager( vm ); + delete vm; + } } /*!\retval TRUE, if view manager \a vm, already in view manager list (\a myViewMgrs).*/ diff --git a/src/STD/STD_Application.h b/src/STD/STD_Application.h index b6ca7fc08..13ff29e64 100755 --- a/src/STD/STD_Application.h +++ b/src/STD/STD_Application.h @@ -52,7 +52,7 @@ public: virtual QString applicationName() const; - virtual bool isPossibleToClose(); + virtual bool isPossibleToClose( bool& ); virtual bool useFile( const QString& ); virtual void createEmptyStudy(); @@ -84,6 +84,9 @@ public: virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& ) {} + bool exitConfirmation() const; + void setExitConfirmation( const bool ); + signals: /*!emit that view manager added*/ void viewManagerAdded( SUIT_ViewManager* ); @@ -101,7 +104,6 @@ public slots: virtual void onOpenDoc(); virtual bool onOpenDoc( const QString& ); - virtual void onLoadDoc(); virtual bool onLoadDoc( const QString& ); virtual void onExit(); @@ -126,7 +128,7 @@ protected: MenuHelpId = 7 }; - enum { FileNewId, FileOpenId, FileLoadId, FileCloseId, + enum { FileNewId, FileOpenId, FileCloseId, FileSaveId, FileSaveAsId, FileExitId, ViewStatusBarId, ViewWindowsId, NewWindowId, EditCutId, EditCopyId, EditPasteId, @@ -134,6 +136,8 @@ protected: UserID }; + enum { CloseCancel, CloseSave, CloseDiscard }; + protected: virtual void createActions(); virtual void updateDesktopTitle(); @@ -153,13 +157,16 @@ protected: virtual void setActiveViewManager( SUIT_ViewManager* ); + virtual bool closeAction( const int, bool& ); + virtual int closeChoice( const QString& ); + private: ViewManagerList myViewMgrs; SUIT_ViewManager* myActiveViewMgr; private: + bool myExitConfirm; bool myEditEnabled; - bool myClosePermanently; }; #if defined WIN32 diff --git a/src/STD/resources/STD_msg_en.po b/src/STD/resources/STD_msg_en.po index eef69e683..c70c031cc 100755 --- a/src/STD/resources/STD_msg_en.po +++ b/src/STD/resources/STD_msg_en.po @@ -23,7 +23,7 @@ msgid "" msgstr "" "Project-Id-Version: example-Qt-message-extraction\n" "POT-Creation-Date: 1999-02-23 15:38+0200\n" -"PO-Revision-Date: 1999-02-23 15:38+0200\n" +"PO-Revision-Date: 2007-11-07 18:43+0300\n" "Last-Translator: \n" "Content-Type: text/plain; charset=iso-8859-1\n" @@ -192,7 +192,7 @@ msgid "PRP_DESK_VIEW_STDTOOLBAR" msgstr "Toggles standard toolbar on/off" msgid "QUE_DESK_EXIT" -msgstr "Do you really want to quit ?" +msgstr "Are you sure you want to quit SALOME?" msgid "TOT_DESK_FILE_NEW" msgstr "New document" @@ -345,7 +345,7 @@ msgid "STD_Application::INF_DOC_SAVING_FAILS" msgstr "Can't save file \"%1\".\nPossible reason is permission denied or disc full.\nTry to use another file name." msgid "CLOSE_DLG_SAVE_CLOSE" -msgstr "&Save&&Close" +msgstr "&Save && Close" msgid "CLOSE_DLG_CLOSE" msgstr "C&lose w/o saving" @@ -366,7 +366,7 @@ msgid "CLOSE_DLG_CAPTION" msgstr "Close active study" msgid "CLOSE_DLG_DESCRIPTION" -msgstr "Do you want to close or only unload the study" +msgstr "Study is modified. Do you want to save it?" msgid "DLG_LOAD_STUDY_CAPTION" msgstr "Load Study" diff --git a/src/SUIT/Makefile.am b/src/SUIT/Makefile.am new file mode 100755 index 000000000..84543711b --- /dev/null +++ b/src/SUIT/Makefile.am @@ -0,0 +1,123 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : suit +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libsuit.la + +salomeinclude_HEADERS= \ + SUIT.h \ + SUIT_ActionOperation.h \ + SUIT_Application.h \ + SUIT_Convertor.h \ + SUIT_DataObject.h \ + SUIT_DataObjectIterator.h \ + SUIT_DataObjectKey.h \ + SUIT_DataOwner.h \ + SUIT_Desktop.h \ + SUIT_ExceptionHandler.h \ + SUIT_FileDlg.h \ + SUIT_FileValidator.h \ + SUIT_MessageBox.h \ + SUIT_MsgDlg.h \ + SUIT_Operation.h \ + SUIT_OverrideCursor.h \ + SUIT_ParserSettings.h \ + SUIT_PopupClient.h \ + SUIT_ResourceMgr.h \ + SUIT_SelectionMgr.h \ + SUIT_Selector.h \ + SUIT_Session.h \ + SUIT_SmartPtr.h \ + SUIT_Study.h \ + SUIT_ToolButton.h \ + SUIT_Tools.h \ + SUIT_ViewManager.h \ + SUIT_ViewModel.h \ + SUIT_ViewWindow.h \ + SUIT_SelectionFilter.h \ + SUIT_Accel.h \ + SUIT_TreeSync.h + +dist_libsuit_la_SOURCES= \ + SUIT_ActionOperation.cxx \ + SUIT_Application.cxx \ + SUIT_DataObject.cxx \ + SUIT_DataObjectIterator.cxx \ + SUIT_DataObjectKey.cxx \ + SUIT_DataOwner.cxx \ + SUIT_Desktop.cxx \ + SUIT_ExceptionHandler.cxx \ + SUIT_FileDlg.cxx \ + SUIT_FileValidator.cxx \ + SUIT_MessageBox.cxx \ + SUIT_MsgDlg.cxx \ + SUIT_Operation.cxx \ + SUIT_OverrideCursor.cxx \ + SUIT_ParserSettings.cxx \ + SUIT_PopupClient.cxx \ + SUIT_ResourceMgr.cxx \ + SUIT_SelectionMgr.cxx \ + SUIT_Selector.cxx \ + SUIT_Session.cxx \ + SUIT_Study.cxx \ + SUIT_ToolButton.cxx \ + SUIT_Tools.cxx \ + SUIT_ViewManager.cxx \ + SUIT_ViewModel.cxx \ + SUIT_ViewWindow.cxx \ + SUIT_SelectionFilter.cxx \ + SUIT_Accel.cxx + +MOC_FILES= \ + SUIT_ActionOperation_moc.cxx \ + SUIT_Application_moc.cxx \ + SUIT_DataObject_moc.cxx \ + SUIT_Desktop_moc.cxx \ + SUIT_FileDlg_moc.cxx \ + SUIT_MsgDlg_moc.cxx \ + SUIT_Operation_moc.cxx \ + SUIT_PopupClient_moc.cxx \ + SUIT_Session_moc.cxx \ + SUIT_Study_moc.cxx \ + SUIT_ToolButton_moc.cxx \ + SUIT_ViewModel_moc.cxx \ + SUIT_ViewWindow_moc.cxx \ + SUIT_ViewManager_moc.cxx \ + SUIT_SelectionMgr_moc.cxx \ + SUIT_Selector_moc.cxx \ + SUIT_Accel_moc.cxx +nodist_libsuit_la_SOURCES=$(MOC_FILES) + +dist_salomeres_DATA = \ + resources/cascade.png \ + resources/htile.png \ + resources/vtile.png + +nodist_salomeres_DATA = \ + SUIT_images.qm \ + SUIT_msg_en.qm + +libsuit_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../Qtx +libsuit_la_LDFLAGS=$(QT_MT_LIBS) +libsuit_la_LIBADD=../Qtx/libqtx.la diff --git a/src/SUIT/Makefile.in b/src/SUIT/Makefile.in deleted file mode 100755 index bc25b7132..000000000 --- a/src/SUIT/Makefile.in +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : suit -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= SUIT.h \ - SUIT_ActionOperation.h \ - SUIT_Application.h \ - SUIT_Convertor.h \ - SUIT_DataObject.h \ - SUIT_DataObjectIterator.h \ - SUIT_DataObjectKey.h \ - SUIT_DataOwner.h \ - SUIT_Desktop.h \ - SUIT_ExceptionHandler.h \ - SUIT_FileDlg.h \ - SUIT_FileValidator.h \ - SUIT_MessageBox.h \ - SUIT_Operation.h \ - SUIT_OverrideCursor.h \ - SUIT_ParserSettings.h \ - SUIT_PopupClient.h \ - SUIT_ResourceMgr.h \ - SUIT_SelectionMgr.h \ - SUIT_Selector.h \ - SUIT_Session.h \ - SUIT_SmartPtr.h \ - SUIT_Study.h \ - SUIT_ToolButton.h \ - SUIT_Tools.h \ - SUIT_ViewManager.h \ - SUIT_ViewModel.h \ - SUIT_ViewWindow.h \ - SUIT_SelectionFilter.h \ - SUIT_Accel.h \ - SUIT_TreeSync.h - -# .po files to transform in .qm -PO_FILES = SUIT_images.po \ - SUIT_msg_en.po - -# Libraries targets -LIB = libsuit.la - -LIB_SRC= SUIT_ActionOperation.cxx \ - SUIT_Application.cxx \ - SUIT_DataObject.cxx \ - SUIT_DataObjectIterator.cxx \ - SUIT_DataObjectKey.cxx \ - SUIT_DataOwner.cxx \ - SUIT_Desktop.cxx \ - SUIT_ExceptionHandler.cxx \ - SUIT_FileDlg.cxx \ - SUIT_FileValidator.cxx \ - SUIT_MessageBox.cxx \ - SUIT_Operation.cxx \ - SUIT_OverrideCursor.cxx \ - SUIT_ParserSettings.cxx \ - SUIT_PopupClient.cxx \ - SUIT_ResourceMgr.cxx \ - SUIT_SelectionMgr.cxx \ - SUIT_Selector.cxx \ - SUIT_Session.cxx \ - SUIT_Study.cxx \ - SUIT_ToolButton.cxx \ - SUIT_Tools.cxx \ - SUIT_ViewManager.cxx \ - SUIT_ViewModel.cxx \ - SUIT_ViewWindow.cxx \ - SUIT_SelectionFilter.cxx \ - SUIT_Accel.cxx - -LIB_MOC = SUIT_ActionOperation.h \ - SUIT_Application.h \ - SUIT_DataObject.h \ - SUIT_Desktop.h \ - SUIT_FileDlg.h \ - SUIT_Operation.h \ - SUIT_PopupClient.h \ - SUIT_Session.h \ - SUIT_Study.h \ - SUIT_ToolButton.h \ - SUIT_ViewModel.h \ - SUIT_ViewWindow.h \ - SUIT_ViewManager.h \ - SUIT_SelectionMgr.h \ - SUIT_Selector.h \ - SUIT_Accel.h - -RESOURCES_FILES = \ - cascade.png \ - htile.png \ - vtile.png - -CPPFLAGS+=$(QT_INCLUDES) - -LDFLAGS+=$(QT_MT_LIBS) -lqtx - -@CONCLUDE@ diff --git a/src/SUIT/SUIT_Application.cxx b/src/SUIT/SUIT_Application.cxx index a4a21d862..e6400595c 100755 --- a/src/SUIT/SUIT_Application.cxx +++ b/src/SUIT/SUIT_Application.cxx @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -34,11 +35,11 @@ Default constructor */ SUIT_Application::SUIT_Application() -: QObject( 0 ), -myStudy( 0 ), -myDesktop( 0 ), -myStatusLabel( 0 ) -{ + : QObject( 0 ), + myStudy( 0 ), + myDesktop( 0 ), + myStatusLabel( 0 ) +{ } /*! @@ -46,8 +47,8 @@ myStatusLabel( 0 ) */ SUIT_Application::~SUIT_Application() { + setActiveStudy( 0 ); delete myStudy; - myStudy = 0; setDesktop( 0 ); } @@ -64,7 +65,7 @@ SUIT_Desktop* SUIT_Application::desktop() \return FALSE if application can not be closed (because of non saved data for example). This method called by SUIT_Session whin closing of application was requested. */ -bool SUIT_Application::isPossibleToClose() +bool SUIT_Application::isPossibleToClose( bool& ) { return true; } @@ -168,7 +169,7 @@ SUIT_ResourceMgr* SUIT_Application::resourceMgr() const \param msg - text of message \param msec - time in milliseconds, after that the status label will be cleared */ -void SUIT_Application::putInfo ( const QString& msg, const int msec ) +void SUIT_Application::putInfo( const QString& msg, const int msec ) { if ( !desktop() ) return; @@ -180,11 +181,36 @@ void SUIT_Application::putInfo ( const QString& msg, const int msec ) myStatusLabel->show(); } + QString prev = myStatusLabel->text(); + myStatusLabel->setText( msg ); if ( msec != -1 ) - QTimer::singleShot( msec <= 0 ? DEFAULT_MESSAGE_DELAY : msec, myStatusLabel, SLOT( clear() ) ); + QTimer::singleShot( msec <= 0 ? DEFAULT_MESSAGE_DELAY : msec, this, SLOT( onInfoClear() ) ); + + if ( prev != msg ) + emit infoChanged( msg ); +} + +/*! + Clear the information label in status bar after delay. +*/ +void SUIT_Application::onInfoClear() +{ + if ( !myStatusLabel ) + return; + + bool changed = !myStatusLabel->text().isEmpty(); + myStatusLabel->clear(); + if ( changed ) + emit infoChanged( QString::null ); } +/*! + Updates status of the registerd actions +*/ +void SUIT_Application::updateCommandsStatus() +{} + /*! Initialize with application arguments \param argc - number of application arguments @@ -221,8 +247,11 @@ void SUIT_Application::setDesktop( SUIT_Desktop* desk ) delete myDesktop; myDesktop = desk; - if ( myDesktop ) + if ( myDesktop ) { connect( myDesktop, SIGNAL( activated() ), this, SLOT( onDesktopActivated() ) ); + // Force desktop activation (NPAL16628) + QApplication::postEvent(myDesktop, new QEvent(QEvent::WindowActivate)); + } } /*! @@ -244,6 +273,12 @@ void SUIT_Application::setActiveStudy( SUIT_Study* study ) if ( myStudy == study ) return; + if(myStudy) + disconnect(myStudy, SIGNAL( studyModified( SUIT_Study* ) ), this, SLOT( updateCommandsStatus() ) ); + + if(study) + connect(study, SIGNAL( studyModified( SUIT_Study* ) ), this, SLOT( updateCommandsStatus() ) ); + myStudy = study; } @@ -601,3 +636,12 @@ void SUIT_Application::onDesktopActivated() { emit activated( this ); } + +/*! + SLOT: is used for Help browsing +*/ + +void SUIT_Application::onHelpContextModule (const QString& /*theComponentName*/, + const QString& /*theFileName*/) +{ +} diff --git a/src/SUIT/SUIT_Application.h b/src/SUIT/SUIT_Application.h index 72dc89363..14d4854ab 100755 --- a/src/SUIT/SUIT_Application.h +++ b/src/SUIT/SUIT_Application.h @@ -25,14 +25,19 @@ #include #include +class QLabel; +class QString; class QAction; +class QIconSet; class SUIT_Desktop; class SUIT_Convertor; class SUIT_ViewModel; class SUIT_ResourceMgr; -class QString; -class QIconSet; -class QLabel; + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \class QObject * \brief For more information see QT documentation. */ @@ -58,7 +63,7 @@ public: /*! Returns FALSE if application can not be closed (because of non saved data for example). This method called by SUIT_Session whin closing of application was requested. */ - virtual bool isPossibleToClose(); + virtual bool isPossibleToClose( bool& ); /*! Performs some finalization of life cycle of this application. For instance, the application can force its documents(s) to close. */ @@ -107,6 +112,14 @@ public: signals: void applicationClosed( SUIT_Application* ); void activated( SUIT_Application* ); + void infoChanged( QString ); + +public slots: + virtual void updateCommandsStatus(); + virtual void onHelpContextModule( const QString&, const QString& ); + +private slots: + void onInfoClear(); protected: SUIT_Application* startApplication( int, char** ) const; @@ -171,4 +184,8 @@ extern "C" #define APP_CREATE_NAME "createApplication" +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SUIT/SUIT_DataObjectKey.h b/src/SUIT/SUIT_DataObjectKey.h index 9f4227d48..053e1abe7 100755 --- a/src/SUIT/SUIT_DataObjectKey.h +++ b/src/SUIT/SUIT_DataObjectKey.h @@ -29,7 +29,7 @@ class SUIT_EXPORT SUIT_DataObjectKey { public: SUIT_DataObjectKey(); - ~SUIT_DataObjectKey(); + virtual ~SUIT_DataObjectKey(); virtual bool isLess( const SUIT_DataObjectKey* ) const = 0; virtual bool isEqual( const SUIT_DataObjectKey* ) const = 0; diff --git a/src/SUIT/SUIT_DataOwner.cxx b/src/SUIT/SUIT_DataOwner.cxx index 826bd89bf..a0aa525c4 100755 --- a/src/SUIT/SUIT_DataOwner.cxx +++ b/src/SUIT/SUIT_DataOwner.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + #include "SUIT_DataOwner.h" #ifndef WNT @@ -36,18 +37,35 @@ SUIT_DataOwner::~SUIT_DataOwner() { } -/*! operator== : compares two owners*/ +/*! Operator == compares two owners*/ bool operator==( const SUIT_DataOwnerPtr& p1, const SUIT_DataOwnerPtr& p2 ) { if ( !p1.isNull() && !p2.isNull() ) - return (p1->isEqual( *p2 ) && p2->isEqual( *p1 )); + return (p1->keyString() == p2->keyString()); return p1.isNull() && p2.isNull(); } +// *** jfa: The below function has been put here 14.02.2007 from branch BR_Dev_For_4_0 +// *** and also improved for better comparison of DataOwners with DataSubOwners. +// *** This comment is to be removed after merging with BR_Dev_For_4_0. +/*! Operator < allows to order suit data owners for map */ +bool operator<( const SUIT_DataOwnerPtr& p1, const SUIT_DataOwnerPtr& p2 ) +{ + if ( p1.isNull() && p2.isNull() ) + return false; + else if ( p1.isNull() ) + return true; + else if ( p2.isNull() ) + return false; + + return (p1->keyString() < p2->keyString()); +} +// *** end + /*! \class SUIT_DataOwnerPtrList implements value list with unique items (uniqueness is - provided by operator==()) + provided by operator==() and operator<()) */ /*! @@ -126,12 +144,12 @@ SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const std::list */ SUIT_DataOwnerPtrList::iterator SUIT_DataOwnerPtrList::append( const SUIT_DataOwnerPtr& x ) { - if( mySkipEqual && myMap.contains( x ) ) //contains uses SUIT_DataOwnerPtr::operator== + if ( mySkipEqual && myMap.contains( x ) ) //contains uses SUIT_DataOwnerPtr::operator== return myMap[ x ]; iterator it = QValueList::append( x ); - if( mySkipEqual ) + if ( mySkipEqual ) myMap.insert( x, it ); return it; @@ -156,11 +174,3 @@ uint SUIT_DataOwnerPtrList::remove(const SUIT_DataOwnerPtr& x ) myMap.remove(x); return QValueList::remove( x ); } - -/*! - Operator < allows to order suit data owners for map -*/ -bool operator<( const SUIT_DataOwnerPtr& p1, const SUIT_DataOwnerPtr& p2 ) -{ - return p1.get()clear(); } +/*! + Emits activated signal +*/ +void SUIT_Desktop::emitActivated() +{ + emit activated(); +} +/*! + Emits message signal +*/ +void SUIT_Desktop::emitMessage( const QString& theMessage ) +{ + emit message( theMessage ); +} diff --git a/src/SUIT/SUIT_Desktop.h b/src/SUIT/SUIT_Desktop.h index d63657956..e3acceb62 100755 --- a/src/SUIT/SUIT_Desktop.h +++ b/src/SUIT/SUIT_Desktop.h @@ -59,11 +59,15 @@ public: void logoRemove( const QString& ); void logoInsert( const QString&, const QPixmap&, const int = -1 ); + void emitActivated(); + void emitMessage( const QString& ); + signals: void activated(); void deactivated(); void windowActivated( SUIT_ViewWindow* ); void closing( SUIT_Desktop*, QCloseEvent* ); + void message( const QString& ); protected: virtual bool event( QEvent* ); diff --git a/src/SUIT/SUIT_MsgDlg.cxx b/src/SUIT/SUIT_MsgDlg.cxx new file mode 100644 index 000000000..b19372cb8 --- /dev/null +++ b/src/SUIT/SUIT_MsgDlg.cxx @@ -0,0 +1,224 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : SUIT_MsgDlg.cxx +// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) +// + +#include "SUIT_MsgDlg.h" + +#include +#include +#include + +/*! + \class SUIT_MsgDlg + \brief Information message dialog box with custom number of buttons. + + The class provides a functionality to display message box with the custom number + of buttons. Each button is identified by the unique non-zero number which can + be tested after dialog box finishes its execution. Pressing each button except + causes dialog box to finish execution with return status equal to the button + identifier. In addition, pressing "Cancel" button finishes dialog box execution + wih return status 0. + + It is also possible to display custom pixmap or icon at the left side of the + dialog box. Pass the required pixmap to the constructor or use method setPixmap(). + + The typical usage of the dialog box: + \code + SUIT_MsgDlg dlg( this, tr( "Warning!" ), + tr( "File %s exists. Overwrite?" ).arg( files[i] ), + QMessageBox::standardIcon( QMessageBox::Warning ) ); + dlg.addButton( "Yes", YesId ); + dlg.addButton( "No", NoId ); + dlg.addButton( "Yes to all", YesAllId ); + dlg.addButton( "No to all", NoAllId ); + int ret = dlg.exec(); + switch( ret ) { + case YesId: + // process one file + processOneFile(); + break; + case NoId: + // skip current file processing and proceed to the next file + break; + case YesAllId: + // process all files + processAllFiles(); + stopped = true; + break; + case NoAllId: + // skip all process all files + processAllFiles(); + break; + default: + // operation is cancelled + break; + } + \endcode + + \sa addButton(), setPixmap() +*/ + +/*! + \brief Constructor. + \param parent parent widget + \param title dialog box caption + \param msg dialog box message + \param icon dialog box icon +*/ +SUIT_MsgDlg::SUIT_MsgDlg( QWidget* parent, + const QString& title, + const QString& msg, + const QPixmap& icon ) +: QDialog ( parent, "SUIT_MsgDlg", true ) +{ + // title + setCaption( title ); + + // icon + myIconLab = new QLabel( this ); + myIconLab->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); + myIconLab->setScaledContents( false ); + myIconLab->setAlignment( Qt::AlignCenter ); + + if ( !icon.isNull() ) + myIconLab->setPixmap( icon ); + + // info message + myMsgLab = new QLabel( msg, this ); + myMsgLab->setTextFormat( Qt::RichText ); + myMsgLab->setAlignment( Qt::AlignCenter ); + + // Buttons + myButtonLayout = new QHBoxLayout(); + myButtonLayout->setMargin( 0 ); + myButtonLayout->setSpacing( 6 ); + + // + QPushButton* cancelBtn = new QPushButton( tr( "CANCEL" ), this ); + myButtonLayout->addSpacing( 20 ); + myButtonLayout->addStretch(); + myButtonLayout->addWidget( cancelBtn ); + + QGridLayout* layout = new QGridLayout( this ); + layout->setMargin( 11 ); + layout->setSpacing( 6 ); + + layout->addWidget( myIconLab, 0, 0 ); + layout->addWidget( myMsgLab, 0, 1 ); + layout->addMultiCellLayout( myButtonLayout, 1, 1, 0, 1 ); + + // signals and slots connections + connect( cancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); +} + +/*! + \brief Destructor. +*/ +SUIT_MsgDlg::~SUIT_MsgDlg() +{ +} + +/*! + \brief Add operation button to the dialog box. + + If the parameter \a id is equal to -1, then the + button identifier is generated automatically. + + \param btext button text + \param id button identifier + \return button identifier +*/ +int SUIT_MsgDlg::addButton( const QString& btext, const int id ) +{ + static int lastId = 0; + int bid = id == -1 ? --lastId : id; + + QPushButton* b = button( bid ); + if ( b ) { + myButtons.remove( b ); + delete b; + } + + QPushButton* newButton = new QPushButton( btext, this ); + + myButtonLayout->insertWidget( myButtons.count(), newButton ); + myButtons.insert( newButton, bid ); + connect( newButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); + + return bid; +} + +/*! + \brief Set icon to the dialog box + \param icon pixmap +*/ +void SUIT_MsgDlg::setPixmap( const QPixmap& icon ) +{ + myIconLab->setPixmap( icon ); +} + + +/*! + \brief Called when any dialog button (except \c Cancel) + is clicked. + + Closes the dialog and sets its result code to the identifier + of the button clicked by the user. +*/ +void SUIT_MsgDlg::accept() +{ + QPushButton* btn = ( QPushButton* )sender(); + done( myButtons[ btn ] ); +} + +/*! + \brief Search button with the specified identifier. + \param id button identifier + \return button or 0 if \a id is invalid +*/ +QPushButton* SUIT_MsgDlg::button( const int id ) const +{ + QPushButton* btn = 0; + for ( ButtonMap::ConstIterator it = myButtons.begin(); + it != myButtons.end() && !btn; ++it ) { + if ( it.data() == id ) + btn = it.key(); + } + return btn; +} + +/*! + \brief Get information icon label. + \return information icon label +*/ +QLabel* SUIT_MsgDlg::iconLabel() const +{ + return myIconLab; +} + +/*! + \brief Get information message label. + \return information message label +*/ +QLabel* SUIT_MsgDlg::messageLabel() const +{ + return myMsgLab; +} diff --git a/src/SUIT/SUIT_MsgDlg.h b/src/SUIT/SUIT_MsgDlg.h new file mode 100644 index 000000000..e7f0e816c --- /dev/null +++ b/src/SUIT/SUIT_MsgDlg.h @@ -0,0 +1,66 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : SUIT_MsgDlg.h +// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) +// + +#ifndef SUIT_MSGDLG_H +#define SUIT_MSGDLG_H + +#include "SUIT.h" + +#include +#include +#include + +class QLabel; +class QPushButton; +class QHBoxLayout; + +class SUIT_EXPORT SUIT_MsgDlg : public QDialog +{ + Q_OBJECT + +public: + SUIT_MsgDlg( QWidget*, const QString&, const QString&, const QPixmap& = QPixmap() ) ; + ~SUIT_MsgDlg(); + + int addButton( const QString&, const int = -1); + void setPixmap( const QPixmap& ); + +public slots: + void accept(); + +protected: + QPushButton* button( const int ) const; + QLabel* iconLabel() const; + QLabel* messageLabel() const; + +private: + typedef QMap ButtonMap; + +private: + ButtonMap myButtons; + QHBoxLayout* myButtonLayout; + QLabel* myIconLab; + QLabel* myMsgLab; +}; + +#endif // SUIT_MSGDLG_H + diff --git a/src/SUIT/SUIT_PopupClient.h b/src/SUIT/SUIT_PopupClient.h index 7d4023f3a..f65bc9f12 100644 --- a/src/SUIT/SUIT_PopupClient.h +++ b/src/SUIT/SUIT_PopupClient.h @@ -36,7 +36,7 @@ public: class Signal; SUIT_PopupClient(); - ~SUIT_PopupClient(); + virtual ~SUIT_PopupClient(); bool connectPopupRequest( QObject* reciever, const char* slot ); bool disconnectPopupRequest( QObject* reciever, const char* slot ); diff --git a/src/SUIT/SUIT_ResourceMgr.cxx b/src/SUIT/SUIT_ResourceMgr.cxx index 9a11288e3..b076babd3 100755 --- a/src/SUIT/SUIT_ResourceMgr.cxx +++ b/src/SUIT/SUIT_ResourceMgr.cxx @@ -20,6 +20,8 @@ #include #include +#include +#include /*! Constructor @@ -64,21 +66,39 @@ QString SUIT_ResourceMgr::loadDoc( const QString& prefix, const QString& id ) co return path( docSection, prefix, id ); } +#ifndef WIN32 #include +#endif /*! Returns the user file name for specified application */ QString SUIT_ResourceMgr::userFileName( const QString& appName, const bool for_load ) const { - QString pathName = QtxResourceMgr::userFileName( appName ); + QString pathName; + + // Try config file, given in arguments + for (int i = 1; i < qApp->argc(); i++) { + QRegExp rx ("--resources=(.+)"); + if ( rx.search( QString(qApp->argv()[i]) ) >= 0 && rx.capturedTexts().count() > 1 ) { + QString file = rx.capturedTexts()[1]; + QFileInfo fi (file); + pathName = fi.absFilePath(); + } + } + + if (!pathName.isEmpty()) + return pathName; + + // QtxResourceMgr::userFileName() + '.' + version() + pathName = QtxResourceMgr::userFileName( appName ); if ( !version().isEmpty() ) pathName += QString( "." ) + version(); - if( !QFileInfo( pathName ).exists() && for_load ) + if ( !QFileInfo( pathName ).exists() && for_load ) { QString newName = findAppropriateUserFile( pathName ); - if( !newName.isEmpty() ) + if ( !newName.isEmpty() ) pathName = newName; } @@ -104,7 +124,7 @@ QString SUIT_ResourceMgr::findAppropriateUserFile( const QString& fname ) const if( id<0 ) continue; - if( abs( id-id0 ) < abs( appr-id0 ) ) + if( appr < 0 || abs( id-id0 ) < abs( appr-id0 ) ) { appr = id; appr_file = d.absFilePath( *anIt ); diff --git a/src/SUIT/SUIT_SelectionFilter.h b/src/SUIT/SUIT_SelectionFilter.h index a26510108..bc63de032 100644 --- a/src/SUIT/SUIT_SelectionFilter.h +++ b/src/SUIT/SUIT_SelectionFilter.h @@ -28,7 +28,7 @@ class SUIT_EXPORT SUIT_SelectionFilter { public: SUIT_SelectionFilter(); - ~SUIT_SelectionFilter(); + virtual ~SUIT_SelectionFilter(); virtual bool isOk( const SUIT_DataOwner* ) const = 0; }; diff --git a/src/SUIT/SUIT_Session.cxx b/src/SUIT/SUIT_Session.cxx index 6d5f0669d..6ea095648 100755 --- a/src/SUIT/SUIT_Session.cxx +++ b/src/SUIT/SUIT_Session.cxx @@ -35,6 +35,9 @@ #include #endif +static bool SUIT_Session_IsPythonExecuted = false; +static QMutex SUIT_Session_PythonMutex; + SUIT_Session* SUIT_Session::mySession = 0; /*! Constructor.*/ @@ -44,7 +47,8 @@ SUIT_Session::SUIT_Session() myResMgr( 0 ), myHandler( 0 ), myActiveApp( 0 ), -myExitStatus( FROM_GUI ) +myExitStatus( NORMAL ), +myExitFlags ( 0 ) { SUIT_ASSERT( !mySession ) @@ -58,6 +62,10 @@ SUIT_Session::~SUIT_Session() { myAppList.clear(); + if (myResMgr) { + delete myResMgr; + myResMgr = 0; + } mySession = 0; } @@ -230,12 +238,13 @@ void SUIT_Session::onApplicationClosed( SUIT_Application* theApp ) /*! Destroys session by closing all applications. */ -void SUIT_Session::closeSession( int mode ) +void SUIT_Session::closeSession( int mode, int flags ) { while ( !myAppList.isEmpty() ) { SUIT_Application* app = myAppList.getFirst(); - if ( mode == ASK && !app->isPossibleToClose() ) + bool closePermanently; + if ( mode == ASK && !app->isPossibleToClose( closePermanently ) ) return; else if ( mode == SAVE ) { @@ -245,12 +254,26 @@ void SUIT_Session::closeSession( int mode ) } else if ( mode == DONT_SAVE ) { - myExitStatus = FROM_CORBA_SESSION; - //.... + myExitStatus = FORCED; } app->closeApplication(); } + myExitFlags = flags; +} + +/*! + Get session exit flags. + + By default, exit flags are set to 0. You can use pass any flags to the + closeSession() method if you need to process them later on application + quiting. + + \return exit flags +*/ +int SUIT_Session::exitFlags() const +{ + return myExitFlags; } /*! \retval return myHandler*/ @@ -319,7 +342,32 @@ SUIT_ResourceMgr* SUIT_Session::createResourceMgr( const QString& appName ) cons /*! Slot, called on activation of some application's desktop */ -void SUIT_Session::onApplicationActivated( SUIT_Application* app ) +void SUIT_Session::onApplicationActivated( SUIT_Application* app ) { myActiveApp = app; } + +/*! + \retval Return TRUE, if a command is currently executed in Python Console, + FALSE otherwise. +*/ +bool SUIT_Session::IsPythonExecuted() +{ + bool ret; + SUIT_Session_PythonMutex.lock(); + ret = SUIT_Session_IsPythonExecuted; + SUIT_Session_PythonMutex.unlock(); + return ret; +} + +/*! + Set value of boolean flag, being returned by method \a IsPythonExecuted(). + It is supposed to set the flag to TRUE when any python command starts + and reset it to FALSE when the command finishes. +*/ +void SUIT_Session::SetPythonExecuted(bool isPythonExecuted) +{ + SUIT_Session_PythonMutex.lock(); + SUIT_Session_IsPythonExecuted = isPythonExecuted; + SUIT_Session_PythonMutex.unlock(); +} diff --git a/src/SUIT/SUIT_Session.h b/src/SUIT/SUIT_Session.h index 08078ff74..7b16ea183 100755 --- a/src/SUIT/SUIT_Session.h +++ b/src/SUIT/SUIT_Session.h @@ -24,6 +24,7 @@ #include "SUIT_Application.h" #include "SUIT_ResourceMgr.h" +#include #include #include #include @@ -54,7 +55,7 @@ public: typedef LIB_HANDLE AppLib; enum { ASK = 0, SAVE, DONT_SAVE } CloseMode; - enum { FROM_GUI = 0, FROM_CORBA_SESSION } ExitStatus; + enum { NORMAL = 0, FORCED } ExitStatus; public: SUIT_Session(); @@ -69,10 +70,15 @@ public: SUIT_ResourceMgr* resourceMgr() const; - void closeSession( int mode = ASK ); + void closeSession( int mode = ASK, int flags = 0 ); + int exitFlags() const; SUIT_ExceptionHandler* handler() const; + // To lock GUI user actions during python command execution (PAL12651) + static bool IsPythonExecuted(); + static void SetPythonExecuted(bool isPythonExecuted); + signals: void applicationClosed( SUIT_Application* ); @@ -103,6 +109,7 @@ private: static SUIT_Session* mySession; int myExitStatus; + int myExitFlags; }; #endif diff --git a/src/SUIT/SUIT_Study.cxx b/src/SUIT/SUIT_Study.cxx index a3baef3ce..801d9ecb0 100755 --- a/src/SUIT/SUIT_Study.cxx +++ b/src/SUIT/SUIT_Study.cxx @@ -200,6 +200,15 @@ void SUIT_Study::setIsModified( const bool on ) myIsModified = on; } +/*! + Set study modified to \a on. + */ +void SUIT_Study::Modified() +{ + setIsModified( TRUE ); + sendChangesNotification(); +} + /*! Set root object. */ @@ -511,18 +520,12 @@ bool SUIT_Study::hasTransaction() const { return false; } - -/*! - * \brief Stores the study state -*/ -int SUIT_Study::storeState() -{ - return -1; -} /*! - * \brief Restores the study state -*/ + * \brief Restores the study state. + */ void SUIT_Study::restoreState(int savePoint) { + // Redefined in SalomeApp_Study. + // Called from SALOME_Session_i::restoreVisualState(CORBA::Long theSavePoint) } diff --git a/src/SUIT/SUIT_Study.h b/src/SUIT/SUIT_Study.h index 156c6bc74..15f78a351 100755 --- a/src/SUIT/SUIT_Study.h +++ b/src/SUIT/SUIT_Study.h @@ -50,6 +50,7 @@ public: virtual bool isSaved() const; virtual bool isModified() const; + virtual void Modified(); virtual void createDocument(); virtual void closeDocument( bool = true ); @@ -75,7 +76,6 @@ public: bool suspend( SUIT_Operation* ); bool resume( SUIT_Operation* ); - virtual int storeState(); virtual void restoreState(int savePoint); signals: diff --git a/src/SUIT/SUIT_TreeSync.h b/src/SUIT/SUIT_TreeSync.h index 602a8913b..61d8fde06 100644 --- a/src/SUIT/SUIT_TreeSync.h +++ b/src/SUIT/SUIT_TreeSync.h @@ -106,7 +106,7 @@ TrgItem synchronize( const SrcItem& r1, const TrgItem& r2, const TreeData& td ) if( td.isEqual( r1, r2 ) ) { // update items themselves - td.updateItem( r2 ); + td.updateItem( r1, r2 ); // iterate 'siblings' (direct children) QValueList< DiffItem< SrcItem, TrgItem > > d; @@ -135,7 +135,7 @@ TrgItem synchronize( const SrcItem& r1, const TrgItem& r2, const TreeData& td ) else { //to update - td.updateItem( item.myTrg ); + td.updateItem( item.mySrc, item.myTrg ); synchronize( item.mySrc, item.myTrg, td ); lastItem = item.myTrg; } diff --git a/src/SUIT/SUIT_ViewManager.cxx b/src/SUIT/SUIT_ViewManager.cxx index 619b9c488..9d2e7e186 100755 --- a/src/SUIT/SUIT_ViewManager.cxx +++ b/src/SUIT/SUIT_ViewManager.cxx @@ -23,12 +23,15 @@ #include "SUIT_Study.h" #include +#include #include #ifdef WNT #include #endif +QMap SUIT_ViewManager::_ViewMgrId; + /*!\class SUIT_ViewManager. * Class provide manipulation with view windows. */ @@ -39,17 +42,20 @@ SUIT_ViewManager::SUIT_ViewManager( SUIT_Study* theStudy, SUIT_ViewModel* theViewModel ) : QObject( 0 ), myDesktop( theDesktop ), -myTitle( "Default viewer" ), +myTitle( "Default: %M - viewer %V" ), myStudy( NULL ) { myViewModel = 0; myActiveView = 0; - setViewModel(theViewModel); - connect(theDesktop, SIGNAL(windowActivated(SUIT_ViewWindow*)), - this, SLOT(onWindowActivated(SUIT_ViewWindow*))); + setViewModel( theViewModel ); + + myId = useNewId( getType() ); + + connect( theDesktop, SIGNAL( windowActivated( SUIT_ViewWindow* ) ), + this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) ); myStudy = theStudy; - if( myStudy ) + if ( myStudy ) connect( myStudy, SIGNAL( destroyed() ), this, SLOT( onDeleteStudy() ) ); } @@ -63,6 +69,26 @@ SUIT_ViewManager::~SUIT_ViewManager() } } +int SUIT_ViewManager::useNewId( const QString& type ) +{ + if ( !_ViewMgrId.contains( type ) ) + _ViewMgrId.insert( type, 0 ); + + int id = _ViewMgrId[type]; + _ViewMgrId[type]++; + return id; +} + +void SUIT_ViewManager::setTitle( const QString& theTitle ) +{ + if ( myTitle == theTitle ) + return; + + myTitle = theTitle; + for ( uint i = 0; i < myViews.count(); i++ ) + setViewName( myViews[i] ); +} + /*!Sets view model \a theViewModel to view manager.*/ void SUIT_ViewManager::setViewModel(SUIT_ViewModel* theViewModel) { @@ -76,10 +102,31 @@ void SUIT_ViewManager::setViewModel(SUIT_ViewModel* theViewModel) } /*!Sets view name for view window \a theView.*/ -void SUIT_ViewManager::setViewName(SUIT_ViewWindow* theView) +void SUIT_ViewManager::setViewName( SUIT_ViewWindow* theView ) { - int aPos = myViews.find(theView); - theView->setCaption(myTitle + QString(":%1").arg(aPos+1)); + QString title = prepareTitle( getTitle(), myId + 1, myViews.find( theView ) + 1 ); + theView->setCaption( title ); +} + +QString SUIT_ViewManager::prepareTitle( const QString& title, const int mId, const int vId ) +{ + QString res = title; + QRegExp re( "%[%MV]" ); + int i = 0; + while ( ( i = re.search( res, i ) ) != -1 ) + { + QString rplc; + QString str = res.mid( i, re.matchedLength() ); + if ( str == QString( "%%" ) ) + rplc = QString( "%" ); + else if ( str == QString( "%M" ) ) + rplc = QString::number( mId ); + else if ( str == QString( "%V" ) ) + rplc = QString::number( vId ); + res.replace( i, re.matchedLength(), rplc ); + i += rplc.length(); + } + return res; } /*! Creates View, adds it into list of views and returns just created view window*/ @@ -131,7 +178,7 @@ bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView) } connect(theView, SIGNAL(closing(SUIT_ViewWindow*)), - this, SLOT(onDeleteView(SUIT_ViewWindow*))); + this, SLOT(onClosingView(SUIT_ViewWindow*))); connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)), this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*))); @@ -168,10 +215,31 @@ bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView) /*!Emit delete view. Remove view window \a theView from view manager. */ -void SUIT_ViewManager::onDeleteView(SUIT_ViewWindow* theView) +void SUIT_ViewManager::onClosingView( SUIT_ViewWindow* theView ) { - emit deleteView(theView); - removeView(theView); + closeView( theView ); +} + +/*! + Remove the view window \a theView from view manager and destroy it. +*/ +void SUIT_ViewManager::closeView( SUIT_ViewWindow* theView ) +{ + if ( !theView ) + return; + + QGuardedPtr view( theView ); + + view->hide(); + + if ( !view->testWFlags( WDestructiveClose ) ) + return; + + emit deleteView( view ); + removeView( view ); + + if ( view ) + delete view; } /*!Remove view window \a theView from view manager. @@ -188,6 +256,26 @@ void SUIT_ViewManager::removeView(SUIT_ViewWindow* theView) emit lastViewClosed(this); } +/*! + Set or clear flag Qt::WDestructiveClose for all views +*/ +void SUIT_ViewManager::setDestructiveClose( const bool on ) +{ + for ( uint i = 0; i < myViews.count(); i++ ) + myViews[i]->setDestructiveClose( on ); +} + +/*! + Returns 'true' if any of views (view windows) is visible. +*/ +bool SUIT_ViewManager::isVisible() const +{ + bool res = false; + for ( uint i = 0; i < myViews.count() && !res; i++ ) + res = myViews[i]->isVisibleTo( myViews[i]->parentWidget() ); + return res; +} + /*! Show or hide all views (view windows) */ @@ -223,17 +311,15 @@ void SUIT_ViewManager::onWindowActivated(SUIT_ViewWindow* view) */ void SUIT_ViewManager::closeAllViews() { - unsigned int aSize = myViews.size(); - for (uint i = 0; i < aSize; i++) { - if (myViews[i]) - myViews[i]->close(); - } + for ( uint i = 0; i < myViews.size(); i++ ) + delete myViews[i]; + myViews.clear(); } /*! *\retval QString - type of view model. */ -QString SUIT_ViewManager::getType() const +QString SUIT_ViewManager::getType() const { return (!myViewModel)? "": myViewModel->getType(); } diff --git a/src/SUIT/SUIT_ViewManager.h b/src/SUIT/SUIT_ViewManager.h index 8cacbe253..ced80a1c7 100755 --- a/src/SUIT/SUIT_ViewManager.h +++ b/src/SUIT/SUIT_ViewManager.h @@ -59,12 +59,16 @@ public: int getViewsCount() { return myViews.count(); } QPtrVector getViews() { return myViews; } - QString getTitle() const { return myTitle;} - void setTitle(QString theTitle) { myTitle = theTitle; } + QString getTitle() const { return myTitle; } + virtual void setTitle( const QString& ); SUIT_ViewWindow* createViewWindow(); + bool isVisible() const; virtual void setShown( const bool ); + virtual void setDestructiveClose( const bool ); + + int getId() const { return myId; } public slots: void createView(); @@ -85,8 +89,8 @@ signals: protected slots: void onWindowActivated(SUIT_ViewWindow*); - void onDeleteView(SUIT_ViewWindow* theView); - void onMousePressed(SUIT_ViewWindow* theView, QMouseEvent* theEvent); + void onClosingView( SUIT_ViewWindow* ); + void onMousePressed(SUIT_ViewWindow*, QMouseEvent* ); void onDeleteStudy(); private slots: @@ -101,8 +105,14 @@ protected: /*! Removes the View from internal Views Vector.*/ virtual void removeView(SUIT_ViewWindow* theView); + /*! Close the specified View.*/ + virtual void closeView(SUIT_ViewWindow* theView); + /*! Used to set unique name for the view.*/ virtual void setViewName(SUIT_ViewWindow* theView); + QString prepareTitle( const QString&, const int, const int ); + + static int useNewId( const QString& ); protected: SUIT_Desktop* myDesktop; @@ -110,8 +120,11 @@ protected: QPtrVector myViews; SUIT_ViewWindow* myActiveView; + int myId; QString myTitle; SUIT_Study* myStudy; + + static QMap _ViewMgrId; }; #ifdef WIN32 diff --git a/src/SUIT/SUIT_ViewWindow.cxx b/src/SUIT/SUIT_ViewWindow.cxx index 0df3081c3..faf064fb5 100755 --- a/src/SUIT/SUIT_ViewWindow.cxx +++ b/src/SUIT/SUIT_ViewWindow.cxx @@ -111,11 +111,22 @@ bool SUIT_ViewWindow::dumpViewToFormat( const QString& fileName, const QString& return dumpViewToFormat( dumpView(), fileName, format ); } +/*! + Set or clear flag Qt::WDestructiveClose +*/ +void SUIT_ViewWindow::setDestructiveClose( const bool on ) +{ + if ( on ) + setWFlags( WDestructiveClose ); + else + clearWFlags( WDestructiveClose ); +} + /*! Close event \a theEvent. */ void SUIT_ViewWindow::closeEvent(QCloseEvent* theEvent) { - QMainWindow::closeEvent( theEvent ); +// QMainWindow::closeEvent( theEvent ); emit closing( this ); } diff --git a/src/SUIT/SUIT_ViewWindow.h b/src/SUIT/SUIT_ViewWindow.h index 2e5eb7804..6a6a6f869 100755 --- a/src/SUIT/SUIT_ViewWindow.h +++ b/src/SUIT/SUIT_ViewWindow.h @@ -54,6 +54,8 @@ public: virtual QString getVisualParameters(); virtual void setVisualParameters( const QString& parameters ); + void setDestructiveClose( const bool ); + public slots: virtual void onDumpView(); diff --git a/src/SUITApp/Makefile.in b/src/SUITApp/Makefile.am similarity index 52% rename from src/SUITApp/Makefile.in rename to src/SUITApp/Makefile.am index 1265308b4..6e76029de 100644 --- a/src/SUITApp/Makefile.in +++ b/src/SUITApp/Makefile.am @@ -21,40 +21,37 @@ # Module : suitApp # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES = libSUITApp.la -@COMMENCE@ +salomeinclude_HEADERS= SUITApp_Application.h -# header files -EXPORT_HEADERS= SUITApp_Application.h +dist_libSUITApp_la_SOURCES= \ + SUITApp.cxx \ + SUITApp_Application.cxx -# .po files to transform in .qm -PO_FILES = SUITApp_msg_en.po +MOC_FILES=SUITApp_Application_moc.cxx +nodist_libSUITApp_la_SOURCES= $(MOC_FILES) -LIB_SRC= SUITApp.cxx \ - SUITApp_Application.cxx +nodist_salomeres_DATA= SUITApp_msg_en.qm -LIB_MOC = SUITApp_Application.h +libSUITApp_la_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) \ + -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx -# Libraries targets -LIB = libSUITApp.la +libSUITApp_la_LDFLAGS=$(QT_MT_LIBS) +libSUITApp_la_LIBADD= ../SUIT/libsuit.la ../Qtx/libqtx.la -# Executables targets -BIN = SUITApp -BIN_SRC = +if ENABLE_PYCONSOLE +libSUITApp_la_LDFLAGS+= -Xlinker -export-dynamic $(PYTHON_LIBS) +endif -CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) +# Executable +bin_PROGRAMS= SUITApp -LDFLAGS+=$(QT_MT_LIBS) - -LIBS+= -Xlinker -export-dynamic $(PYTHON_LIBS) -LIBS+= -lsuit -lqtx -LIBSFORBIN+= -lsuit -lqtx - -@CONCLUDE@ +dist_SUITApp_SOURCES=SUITApp.cxx +SUITApp_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) \ + -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx +SUITApp_LDADD= libSUITApp.la ../SUIT/libsuit.la ../Qtx/libqtx.la diff --git a/src/SUITApp/SUITApp.cxx b/src/SUITApp/SUITApp.cxx index f343c435e..db686afad 100644 --- a/src/SUITApp/SUITApp.cxx +++ b/src/SUITApp/SUITApp.cxx @@ -165,10 +165,6 @@ int main( int args, char* argv[] ) SUIT_ResourceMgr* resMgr = aSession->createResourceMgr( argList.first() ); if ( resMgr ) { resMgr->loadLanguage(); - QString splashIcon, splashInfo, splashTextColors; - resMgr->value( "splash", "image", splashIcon ); - resMgr->value( "splash", "info", splashInfo, false ); - resMgr->value( "splash", "text_colors", splashTextColors ); QString appName = QObject::tr( "APP_NAME" ).stripWhiteSpace(); QString appVersion = QObject::tr( "APP_VERSION" ).stripWhiteSpace(); if ( appVersion == "APP_VERSION" ) { @@ -177,10 +173,17 @@ int main( int args, char* argv[] ) else appVersion = ""; } + QString splashIcon; + resMgr->value( "splash", "image", splashIcon ); QPixmap px( splashIcon ); if ( !px.isNull() ) { splash = QtxSplash::splash( px ); - if ( !splashTextColors.isEmpty() ) { + int splashMargin; + if ( resMgr->value( "splash", "margin", splashMargin ) && splashMargin > 0 ) { + splash->setMargin( splashMargin ); + } + QString splashTextColors; + if ( resMgr->value( "splash", "text_colors", splashTextColors ) && !splashTextColors.isEmpty() ) { QStringList colors = QStringList::split( "|", splashTextColors ); QColor c1, c2; if ( colors.count() > 0 ) c1 = QColor( colors[0] ); @@ -196,7 +199,8 @@ int main( int args, char* argv[] ) QFont f = splash->font(); f.setBold( true ); splash->setFont( f ); - if ( !splashInfo.isEmpty() ) { + QString splashInfo; + if ( resMgr->value( "splash", "info", splashInfo, false ) && !splashInfo.isEmpty() ) { splashInfo.replace( QRegExp( "%A" ), appName ); splashInfo.replace( QRegExp( "%V" ), QObject::tr( "ABOUT_VERSION" ).arg( appVersion ) ); splashInfo.replace( QRegExp( "%L" ), QObject::tr( "ABOUT_LICENSE" ) ); diff --git a/src/SUITApp/SUITApp_Application.cxx b/src/SUITApp/SUITApp_Application.cxx index 4639f100d..bf32979de 100644 --- a/src/SUITApp/SUITApp_Application.cxx +++ b/src/SUITApp/SUITApp_Application.cxx @@ -18,6 +18,7 @@ // #include "SUITApp_Application.h" +#include "SUIT_Session.h" #include "SUIT_MessageBox.h" #include "SUIT_ExceptionHandler.h" @@ -68,6 +69,20 @@ myExceptHandler( hand ) */ bool SUITApp_Application::notify( QObject* receiver, QEvent* e ) { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) < 0x060101 + // Disable GUI user actions while python command is executed + if (SUIT_Session::IsPythonExecuted()) { + // Disable mouse and keyboard events + QEvent::Type aType = e->type(); + if (aType == QEvent::MouseButtonPress || aType == QEvent::MouseButtonRelease || + aType == QEvent::MouseButtonDblClick || aType == QEvent::MouseMove || + aType == QEvent::Wheel || aType == QEvent::ContextMenu || + aType == QEvent::KeyPress || aType == QEvent::KeyRelease || + aType == QEvent::Accel || aType == QEvent::AccelOverride) + return false; + } +#endif + return myExceptHandler ? myExceptHandler->handle( receiver, e ) : QApplication::notify( receiver, e ); } diff --git a/src/SUPERVGraph/Makefile.am b/src/SUPERVGraph/Makefile.am new file mode 100755 index 000000000..c82a4dca4 --- /dev/null +++ b/src/SUPERVGraph/Makefile.am @@ -0,0 +1,53 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libSUPERVGraph.la + +salomeinclude_HEADERS= \ + SUPERVGraph_ViewFrame.h \ + SUPERVGraph_ViewManager.h \ + SUPERVGraph_ViewModel.h \ + SUPERVGraph.h + +dist_libSUPERVGraph_la_SOURCES= \ + SUPERVGraph.cxx \ + SUPERVGraph_ViewFrame.cxx \ + SUPERVGraph_ViewManager.cxx \ + SUPERVGraph_ViewModel.cxx + +MOC_FILES= \ + SUPERVGraph_moc.cxx \ + SUPERVGraph_ViewFrame_moc.cxx \ + SUPERVGraph_ViewManager_moc.cxx \ + SUPERVGraph_ViewModel_moc.cxx +nodist_libSUPERVGraph_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA= \ + resources/view_pan.png \ + resources/view_reset.png + +nodist_salomeres_DATA= \ + SUPERVGraph_images.qm \ + SUPERVGraph_msg_en.qm + +libSUPERVGraph_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../OBJECT +libSUPERVGraph_la_LDFLAGS=$(QT_MT_LIBS) ../SUIT/libsuit.la diff --git a/src/SUPERVGraph/Makefile.in b/src/SUPERVGraph/Makefile.in deleted file mode 100755 index 334a2c9fb..000000000 --- a/src/SUPERVGraph/Makefile.in +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# source path -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:@srcdir@/resources - - -@COMMENCE@ - -EXPORT_HEADERS = SUPERVGraph_ViewFrame.h \ - SUPERVGraph_ViewManager.h \ - SUPERVGraph_ViewModel.h \ - SUPERVGraph.h - -# .po files to transmit in .qm -PO_FILES = SUPERVGraph_images.po \ - SUPERVGraph_msg_en.po - -# Libraries targets - -LIB = libSUPERVGraph.la -LIB_SRC = SUPERVGraph.cxx \ - SUPERVGraph_ViewFrame.cxx \ - SUPERVGraph_ViewManager.cxx \ - SUPERVGraph_ViewModel.cxx - -LIB_MOC = SUPERVGraph_moc.cxx \ - SUPERVGraph_ViewFrame_moc.cxx \ - SUPERVGraph_ViewManager_moc.cxx \ - SUPERVGraph_ViewModel_moc.cxx - -RESOURCES_FILES = view_pan.png \ - view_reset.png - -LIB_CLIENT_IDL = - -CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) -LDFLAGS+=$(QT_MT_LIBS) -lsuit - - -@CONCLUDE@ diff --git a/src/SUPERVGraph/SUPERVGraph_ViewFrame.h b/src/SUPERVGraph/SUPERVGraph_ViewFrame.h index f2d336449..2a5e7f03b 100755 --- a/src/SUPERVGraph/SUPERVGraph_ViewFrame.h +++ b/src/SUPERVGraph/SUPERVGraph_ViewFrame.h @@ -37,6 +37,10 @@ #include +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + class SUPERVGRAPH_EXPORT SUPERVGraph_View: public QWidget, public SUIT_PopupClient { Q_OBJECT; public: @@ -127,5 +131,10 @@ class SUPERVGRAPH_EXPORT SUPERVGraph_ViewFrame : public SUIT_ViewWindow { QToolBar* myToolBar; SUPERVGraph_View* myView; -}; +}; + +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SVTK/Makefile.in b/src/SVTK/Makefile.am similarity index 58% rename from src/SVTK/Makefile.in rename to src/SVTK/Makefile.am index f45b583aa..a1c1c484d 100755 --- a/src/SVTK/Makefile.in +++ b/src/SVTK/Makefile.am @@ -21,16 +21,11 @@ # Module : SVTK # $Header: -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES = libSVTK.la -@COMMENCE@ - -# header files -EXPORT_HEADERS= \ +salomeinclude_HEADERS= \ SVTK.h \ SVTK_Prs.h \ SVTK_Actor.h \ @@ -55,16 +50,11 @@ EXPORT_HEADERS= \ SVTK_SelectionEvent.h \ SVTK_SpaceMouse.h \ SVTK_Event.h \ - SVTK_ViewModelBase.h - -PO_FILES = \ - SVTK_msg_en.po \ - SVTK_images.po - -# Libraries targets -LIB = libSVTK.la + SVTK_ViewModelBase.h \ + SVTK_SetRotationPointDlg.h \ + SVTK_Extension.h -LIB_SRC= \ +dist_libSVTK_la_SOURCES= \ SVTK_Prs.cxx \ SVTK_Actor.cxx \ SALOME_Actor.cxx \ @@ -87,40 +77,58 @@ LIB_SRC= \ SVTK_RenderWindowInteractor.cxx \ SVTK_GenericRenderWindowInteractor.cxx \ SVTK_SpaceMouse.cxx \ - SVTK_Selector.cxx + SVTK_Selector.cxx \ + SVTK_SetRotationPointDlg.cxx \ + SVTK_Extension.cxx -LIB_MOC = \ - SVTK_GenericRenderWindowInteractor.h \ - SVTK_RenderWindowInteractor.h \ - SVTK_NonIsometricDlg.h \ - SVTK_UpdateRateDlg.h \ - SVTK_CubeAxesDlg.h \ - SVTK_FontWidget.h \ - SVTK_DialogBase.h \ - SVTK_ViewModelBase.h \ - SVTK_ViewManager.h \ - SVTK_ViewWindow.h \ - SVTK_MainWindow.h \ - SVTK_ViewModel.h \ - SVTK_View.h +EXTRA_DIST+= SVTK_SelectorDef.h SVTK_Trihedron.h + +MOC_FILES= \ + SVTK_GenericRenderWindowInteractor_moc.cxx \ + SVTK_RenderWindowInteractor_moc.cxx \ + SVTK_NonIsometricDlg_moc.cxx \ + 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 \ + SVTK_MainWindow_moc.cxx \ + SVTK_ViewModel_moc.cxx \ + SVTK_View_moc.cxx \ + SVTK_SetRotationPointDlg_moc.cxx +nodist_libSVTK_la_SOURCES= $(MOC_FILES) -BIN = SVTK +nodist_salomeres_DATA= \ + SVTK_msg_en.qm \ + SVTK_images.qm -CPPFLAGS+= \ +libSVTK_la_CPPFLAGS= \ $(QT_INCLUDES) \ - $(OCC_INCLUDES) \ + $(CAS_CPPFLAGS) \ $(VTK_INCLUDES) \ $(QWT_INCLUDES) \ - $(BOOST_CPPFLAGS) + $(BOOST_CPPFLAGS) \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../STD \ + -I$(srcdir)/../CAM -I$(srcdir)/../OBJECT -I$(srcdir)/../Prs \ + -I$(srcdir)/../VTKViewer -LDFLAGS+= \ +libSVTK_la_LDFLAGS= \ + $(VTK_LIBS) \ $(QT_MT_LIBS) \ - $(OCC_LIBS) \ - $(QWT_LIBS) \ - $(VTK_LIBS) + $(CAS_KERNEL) $(CAS_VIEWER) \ + $(QWT_LIBS) + +libSVTK_la_LIBADD= ../Qtx/libqtx.la ../SUIT/libsuit.la ../STD/libstd.la \ + ../CAM/libCAM.la ../OBJECT/libSalomeObject.la \ + ../Prs/libSalomePrs.la ../VTKViewer/libVTKViewer.la -LIBS+= -lqtx -lsuit -lstd -lCAM -lSalomeObject -lSalomePrs -lVTKViewer +# Executable +bin_PROGRAMS = SVTK -LDFLAGSFORBIN=$(LDFLAGS) $(LIBS) +dist_SVTK_SOURCES= SVTK.cxx -@CONCLUDE@ +SVTK_CPPFLAGS=$(libSVTK_la_CPPFLAGS) +SVTK_LDFLAGS=$(libSVTK_la_LDFLAGS) +SVTK_LDADD=libSVTK.la $(libSVTK_la_LIBADD) diff --git a/src/SVTK/SALOME_Actor.cxx b/src/SVTK/SALOME_Actor.cxx index 8bd1cbd43..b9597c30c 100644 --- a/src/SVTK/SALOME_Actor.cxx +++ b/src/SVTK/SALOME_Actor.cxx @@ -36,7 +36,6 @@ #include "VTKViewer_Transform.h" #include "VTKViewer_TransformFilter.h" -#include "VTKViewer_PassThroughFilter.h" #include "VTKViewer_GeometryFilter.h" #include "SVTK_RectPicker.h" @@ -58,6 +57,7 @@ #include #include +#include #include #include diff --git a/src/SVTK/SALOME_Actor.h b/src/SVTK/SALOME_Actor.h index 03c4ca7a7..a44acc9fd 100644 --- a/src/SVTK/SALOME_Actor.h +++ b/src/SVTK/SALOME_Actor.h @@ -57,6 +57,10 @@ class SVTK_InteractorStyle; extern int SALOME_POINT_SIZE; extern int SALOME_LINE_WIDTH; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + //! The class is a basic one for all SALOME VTK presentation. /*! It provide highlight and prehighlight capabilites, @@ -227,4 +231,8 @@ class SVTK_EXPORT SALOME_Actor : public VTKViewer_Actor vtkSmartPointer myOutline; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif // SALOME_ACTOR_H diff --git a/src/SVTK/SVTK_Actor.cxx b/src/SVTK/SVTK_Actor.cxx index 036926fb8..1d32a1c2b 100644 --- a/src/SVTK/SVTK_Actor.cxx +++ b/src/SVTK/SVTK_Actor.cxx @@ -56,6 +56,7 @@ SVTK_Actor myUnstructuredGrid(vtkUnstructuredGrid::New()) { myIsShaded = true; + myIsResolveCoincidentTopology = false; Visibility = Pickable = false; diff --git a/src/SVTK/SVTK_Actor.h b/src/SVTK/SVTK_Actor.h index bb7542da3..e0a8afc02 100644 --- a/src/SVTK/SVTK_Actor.h +++ b/src/SVTK/SVTK_Actor.h @@ -34,6 +34,10 @@ class vtkUnstructuredGrid; class SALOME_Actor; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + //! This class used for internal SVTK package purpose (highlight and prehighlight) class SVTK_EXPORT SVTK_Actor : public SVTK_DeviceActor { @@ -82,4 +86,8 @@ public: ~SVTK_Actor(); }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SVTK/SVTK_CubeAxesActor2D.h b/src/SVTK/SVTK_CubeAxesActor2D.h index b9583c642..445f6d71e 100644 --- a/src/SVTK/SVTK_CubeAxesActor2D.h +++ b/src/SVTK/SVTK_CubeAxesActor2D.h @@ -44,6 +44,10 @@ class VTKViewer_Transform; #include "SVTK.h" #include "VTKViewer.h" +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + #ifndef WNT class VTK_HYBRID_EXPORT SVTK_CubeAxesActor2D : public vtkCubeAxesActor2D #else @@ -106,4 +110,8 @@ private: void operator=(const SVTK_CubeAxesActor2D&); // Not implemented. }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SVTK/SVTK_DeviceActor.cxx b/src/SVTK/SVTK_DeviceActor.cxx index 279015efd..a3bb03773 100644 --- a/src/SVTK/SVTK_DeviceActor.cxx +++ b/src/SVTK/SVTK_DeviceActor.cxx @@ -31,7 +31,6 @@ #include "VTKViewer_Transform.h" #include "VTKViewer_TransformFilter.h" -#include "VTKViewer_PassThroughFilter.h" #include "VTKViewer_GeometryFilter.h" // VTK Includes @@ -44,6 +43,8 @@ #include #include +#include + using namespace std; vtkStandardNewMacro(SVTK_DeviceActor); @@ -61,7 +62,7 @@ SVTK_DeviceActor myProperty = vtkProperty::New(); myRepresentation = SVTK::Representation::Surface; - myIsResolveCoincidentTopology = false; + myIsResolveCoincidentTopology = true; vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, myPolygonOffsetUnits); @@ -74,7 +75,7 @@ SVTK_DeviceActor myTransformFilter = VTKViewer_TransformFilter::New(); for(int i = 0; i < 6; i++) - myPassFilter.push_back(VTKViewer_PassThroughFilter::New()); + myPassFilter.push_back(vtkPassThroughFilter::New()); } /*! @@ -139,8 +140,7 @@ SVTK_DeviceActor }else if(vtkPolyDataMapper* aMapper = dynamic_cast(theMapper)){ aMapper->SetInput(myPassFilter[anId]->GetPolyDataOutput()); } - }else - myPassFilter[ 0 ]->SetInput( NULL ); + } Superclass::SetMapper(theMapper); } @@ -249,8 +249,15 @@ SVTK_DeviceActor { if ( !myIsShrinkable ) return; + if ( vtkDataSet* aDataSet = myPassFilter[ 0 ]->GetOutput() ) - { + { + aDataSet->Update(); + int numCells=aDataSet->GetNumberOfCells(); + int numPts = aDataSet->GetNumberOfPoints(); + //It's impossible to use to apply "shrink" for "empty" dataset + if (numCells < 1 || numPts < 1) + return; myShrinkFilter->SetInput( aDataSet ); myPassFilter[ 1 ]->SetInput( myShrinkFilter->GetOutput() ); myIsShrunk = true; @@ -293,7 +300,6 @@ SVTK_DeviceActor myShrinkFilter->SetShrinkFactor(theValue); } - /*! Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on) param theMode - new mode @@ -307,13 +313,17 @@ SVTK_DeviceActor switch(myRepresentation){ case Points : case Surface : - myProperty->DeepCopy(GetProperty()); + myProperty->SetAmbient(GetProperty()->GetAmbient()); + myProperty->SetDiffuse(GetProperty()->GetDiffuse()); + myProperty->SetSpecular(GetProperty()->GetSpecular()); } switch(theMode){ case Points : case Surface : - GetProperty()->DeepCopy(myProperty); + GetProperty()->SetAmbient(myProperty->GetAmbient()); + GetProperty()->SetDiffuse(myProperty->GetDiffuse()); + GetProperty()->SetSpecular(myProperty->GetSpecular()); break; default: GetProperty()->SetAmbient(1.0); @@ -490,3 +500,8 @@ SVTK_DeviceActor factor = myPolygonOffsetFactor; units = myPolygonOffsetUnits; } + +vtkDataSetMapper* SVTK_DeviceActor::GetDataSetMapper() +{ + return myMapper; +} diff --git a/src/SVTK/SVTK_DeviceActor.h b/src/SVTK/SVTK_DeviceActor.h index c68829de9..47fc3e12d 100644 --- a/src/SVTK/SVTK_DeviceActor.h +++ b/src/SVTK/SVTK_DeviceActor.h @@ -39,13 +39,13 @@ class VTKViewer_Transform; class VTKViewer_TransformFilter; -class VTKViewer_PassThroughFilter; class VTKViewer_GeometryFilter; class vtkCell; class vtkDataSet; class vtkShrinkFilter; class vtkDataSetMapper; +class vtkPassThroughFilter; namespace SVTK { @@ -59,6 +59,9 @@ namespace SVTK } } +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor { @@ -172,6 +175,8 @@ class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor void Render(vtkRenderer *, vtkMapper *); + vtkDataSetMapper* GetDataSetMapper(); + protected: SVTK::Representation::Type myRepresentation; vtkProperty *myProperty; @@ -183,7 +188,7 @@ class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor VTKViewer_GeometryFilter *myGeomFilter; VTKViewer_TransformFilter *myTransformFilter; - std::vector myPassFilter; + std::vector myPassFilter; vtkShrinkFilter* myShrinkFilter; vtkDataSetMapper* myMapper; @@ -208,5 +213,8 @@ class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif #endif //SVTK_DEVICE_ACTOR_H diff --git a/src/SVTK/SVTK_Event.h b/src/SVTK/SVTK_Event.h index fa415ab83..00a9e2c0f 100644 --- a/src/SVTK/SVTK_Event.h +++ b/src/SVTK/SVTK_Event.h @@ -61,6 +61,14 @@ namespace SVTK StartGlobalPan, StartFitArea, + SetRotateGravity, + StartPointSelection, + SetRotateSelected, + + BBCenterChanged, + RotationPointChanged, + ChangeRotationPoint, + LastEvent }; } diff --git a/src/SVTK/SVTK_Extension.cxx b/src/SVTK/SVTK_Extension.cxx new file mode 100755 index 000000000..a26dac111 --- /dev/null +++ b/src/SVTK/SVTK_Extension.cxx @@ -0,0 +1,44 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2004 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.org +// +// +// +// File : SVTK_Extension.cxx +// Author : Sergey ANIKIN +// Module : SALOME + +#include "SVTK_Extension.h" + +#ifdef WIN32 +#include +#else +#include +#endif + +void* SVTK::getOpenGLExtension( const char* theExtension ) +{ +#ifdef WIN32 + return wglGetProcAddress( theExtension ); +#else + void* OpenGLLibrary = dlopen( "libGL.so", RTLD_LAZY ); + return dlsym( OpenGLLibrary, theExtension ); +#endif +} diff --git a/src/SVTK/SVTK_Extension.h b/src/SVTK/SVTK_Extension.h new file mode 100755 index 000000000..0b39e59f2 --- /dev/null +++ b/src/SVTK/SVTK_Extension.h @@ -0,0 +1,35 @@ +// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ +// +#ifndef SVTK_Extension_H +#define SVTK_Extension_H + +/*! + \file SVTK_Extension.h + Functions of loading OpenGL extensions. +*/ + +#include + +namespace SVTK +{ + SVTK_EXPORT void* getOpenGLExtension( const char* theExtension ); +} + + +#endif diff --git a/src/SVTK/SVTK_FontWidget.h b/src/SVTK/SVTK_FontWidget.h index ed70aa2a7..953072a94 100644 --- a/src/SVTK/SVTK_FontWidget.h +++ b/src/SVTK/SVTK_FontWidget.h @@ -27,6 +27,8 @@ #ifndef SVTK_FontWidget_H #define SVTK_FontWidget_H +#include "SVTK.h" + #include class QToolButton; @@ -39,7 +41,7 @@ class QColor; * Class : SVTK_FontWidget * Description : Dialog for specifynig font */ -class SVTK_FontWidget : public QHBox +class SVTK_EXPORT SVTK_FontWidget : public QHBox { Q_OBJECT diff --git a/src/SVTK/SVTK_GenericRenderWindowInteractor.h b/src/SVTK/SVTK_GenericRenderWindowInteractor.h index b47705d50..ff5b6cb71 100644 --- a/src/SVTK/SVTK_GenericRenderWindowInteractor.h +++ b/src/SVTK/SVTK_GenericRenderWindowInteractor.h @@ -41,6 +41,9 @@ class QWidget; class SVTK_Selector; class SVTK_Renderer; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif /*! \class QVTK_GenericRenderWindowInteractor @@ -123,4 +126,8 @@ class SVTK_EXPORT SVTK_GenericRenderWindowInteractor: public QVTK_GenericRenderW QWidget* myRenderWidget; //!< Keeps a pointer to QWidget, where vtkRenderWindow maps to. }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SVTK/SVTK_InteractorStyle.cxx b/src/SVTK/SVTK_InteractorStyle.cxx index 4f8dfaa60..1f662ca7b 100644 --- a/src/SVTK/SVTK_InteractorStyle.cxx +++ b/src/SVTK/SVTK_InteractorStyle.cxx @@ -36,6 +36,7 @@ #include "SVTK_Event.h" #include "SVTK_Selector.h" #include "SVTK_Functor.h" +#include "SVTK_Actor.h" #include "VTKViewer_Algorithm.h" #include "SVTK_Functor.h" @@ -47,11 +48,14 @@ #include #include #include -#include +#include #include #include #include #include +#include +#include +#include #include #include @@ -62,6 +66,8 @@ //VRV: porting on Qt 3.0.5 #include +#include + using namespace std; namespace @@ -75,44 +81,28 @@ namespace theInteractor->GetEventPosition(theX,theY); theY = theInteractor->GetSize()[1] - theY - 1; } - - //================================================================== - // function : GetFirstSALOMEActor - // purpose : - //================================================================== - struct THaveIO - { - bool - operator()(SALOME_Actor* theActor) - { - return theActor->hasIO(); - } - }; - - inline - SALOME_Actor* - GetFirstSALOMEActor(vtkPicker *thePicker) - { - return VTK::Find(thePicker->GetActors(),THaveIO()); - } } vtkStandardNewMacro(SVTK_InteractorStyle); + /*! Constructor */ SVTK_InteractorStyle ::SVTK_InteractorStyle(): mySelectionEvent(new SVTK_SelectionEvent()), - myPicker(vtkPicker::New()), + myPointPicker(vtkPointPicker::New()), myLastHighlitedActor(NULL), myLastPreHighlitedActor(NULL), myControllerIncrement(SVTK_ControllerIncrement::New()), - myControllerOnKeyDown(SVTK_ControllerOnKeyDown::New()) + myControllerOnKeyDown(SVTK_ControllerOnKeyDown::New()), + myHighlightRotationPointActor(SVTK_Actor::New()) { - myPicker->Delete(); + myPointPicker->Delete(); + + myPointPicker->SetTolerance(0.025); this->MotionFactor = 10.0; this->State = VTK_INTERACTOR_STYLE_CAMERA_NONE; @@ -131,6 +121,20 @@ SVTK_InteractorStyle // myControllerIncrement->Delete(); myControllerOnKeyDown->Delete(); + + myCurrRotationPointType = SVTK::SetRotateGravity; + myPrevRotationPointType = myCurrRotationPointType; + + myHighlightRotationPointActor->Delete(); + myHighlightRotationPointActor->Initialize(); + myHighlightRotationPointActor->PickableOff(); + myHighlightRotationPointActor->SetVisibility( false ); + + myHighlightRotationPointActor->GetProperty()->SetPointSize(SALOME_POINT_SIZE+2); + myHighlightRotationPointActor->GetProperty()->SetLineWidth(SALOME_LINE_WIDTH+2); + myHighlightRotationPointActor->GetProperty()->SetRepresentationToPoints(); + + myBBFirstCheck = true; } /*! @@ -205,7 +209,7 @@ void SVTK_InteractorStyle ::RotateXY(int dx, int dy) { - if(GetCurrentRenderer() == NULL) + /* if(GetCurrentRenderer() == NULL) return; int *size = GetCurrentRenderer()->GetRenderWindow()->GetSize(); @@ -222,6 +226,61 @@ SVTK_InteractorStyle GetCurrentRenderer()->ResetCameraClippingRange(); + this->Render();*/ + + if(GetCurrentRenderer() == NULL) + return; + + vtkCamera *cam = GetCurrentRenderer()->GetActiveCamera(); + + double viewFP[3], viewPos[3]; + cam->GetFocalPoint(viewFP); + cam->GetPosition(viewPos); + + if ( myCurrRotationPointType == SVTK::SetRotateGravity ) + { + vtkFloatingPointType aCenter[3]; + if ( ComputeBBCenter(GetCurrentRenderer(),aCenter) ) + { + myRotationPointX = aCenter[0]; + myRotationPointY = aCenter[1]; + myRotationPointZ = aCenter[2]; + } + } + + // Calculate corresponding transformation + vtkPerspectiveTransform* aTransform = vtkPerspectiveTransform::New(); + aTransform->Identity(); + aTransform->Translate(+myRotationPointX, +myRotationPointY, +myRotationPointZ); + + // Azimuth transformation + int *size = GetCurrentRenderer()->GetRenderWindow()->GetSize(); + double aDeltaAzimuth = -20.0 / size[0]; + + double rxf = double(dx) * aDeltaAzimuth * this->MotionFactor; + aTransform->RotateWXYZ(rxf, cam->GetViewUp()); + + // Elevation transformation + double aDeltaElevation = -20.0 / size[1]; + + double ryf = double(dy) * aDeltaElevation * this->MotionFactor; + vtkMatrix4x4* aMatrix = cam->GetViewTransformMatrix(); + const double anAxis[3] = {-aMatrix->GetElement(0,0), // mkr : 27.11.2006 : PAL14011 - Strange behaviour in rotation in VTK Viewer. + -aMatrix->GetElement(0,1), + -aMatrix->GetElement(0,2)}; + + aTransform->RotateWXYZ(ryf, anAxis); + + aTransform->Translate(-myRotationPointX, -myRotationPointY, -myRotationPointZ); + + // To apply the transformation + cam->SetPosition(aTransform->TransformPoint(viewPos)); + cam->SetFocalPoint(aTransform->TransformPoint(viewFP)); + + cam->OrthogonalizeViewUp(); + + GetCurrentRenderer()->ResetCameraClippingRange(); + this->Render(); } @@ -431,9 +490,53 @@ SVTK_InteractorStyle } else { if (ctrl) startOperation(VTK_INTERACTOR_STYLE_CAMERA_ZOOM); + else if ( myCurrRotationPointType == SVTK::StartPointSelection ) + { + SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY(); + + SALOME_Actor* anActor = GetSelector()->Pick(aSelectionEvent, GetCurrentRenderer()); + + if ( anActor ) + { + myPointPicker->Pick( aSelectionEvent->myX, + aSelectionEvent->myY, + 0.0, + GetCurrentRenderer() ); + int aVtkId = myPointPicker->GetPointId(); + if ( aVtkId >= 0 ) + { + int anObjId = anActor->GetNodeObjId( aVtkId ); + vtkFloatingPointType* aCoords = anActor->GetNodeCoord(anObjId); + + myCurrRotationPointType = SVTK::SetRotateSelected; + + // invoke event for update coordinates in SVTK_SetRotationPointDlg + InvokeEvent(SVTK::RotationPointChanged,(void*)aCoords); + } + else + { + // invoke event with no data (for SVTK_SetRotationPointDlg) + InvokeEvent(SVTK::RotationPointChanged,0); + myCurrRotationPointType = myPrevRotationPointType; + } + } + else + { + // invoke event with no data (for SVTK_SetRotationPointDlg) + InvokeEvent(SVTK::RotationPointChanged,0); + myCurrRotationPointType = myPrevRotationPointType; + } + + myHighlightRotationPointActor->SetVisibility( false ); + if(GetCurrentRenderer() != NULL) + GetCurrentRenderer()->RemoveActor( myHighlightRotationPointActor.GetPointer() ); + + GetRenderWidget()->setCursor(myDefCursor); + } else startOperation(VTK_INTERACTOR_STYLE_CAMERA_SELECT); } + return; } @@ -696,6 +799,26 @@ SVTK_InteractorStyle ForcedState = VTK_INTERACTOR_STYLE_CAMERA_ROTATE; } +/*! + Set rotation point selected by user +*/ +void +SVTK_InteractorStyle +::startPointSelection() +{ + myCurrRotationPointType = SVTK::StartPointSelection; + + if(GetCurrentRenderer() != NULL) { + GetCurrentRenderer()->AddActor( myHighlightRotationPointActor.GetPointer() ); + vtkFloatingPointType aColor[3]; + GetCurrentRenderer()->GetBackground( aColor ); + myHighlightRotationPointActor->GetProperty()->SetColor(1. - aColor[0], + 1. - aColor[1], + 1. - aColor[2]); + } + + setCursor(VTK_INTERACTOR_STYLE_CAMERA_NONE); +} /*! Starts Spin operation (e.g. through menu command) @@ -863,7 +986,10 @@ SVTK_InteractorStyle break; case VTK_INTERACTOR_STYLE_CAMERA_NONE: default: - GetRenderWidget()->setCursor(myDefCursor); + if ( myCurrRotationPointType == SVTK::StartPointSelection ) + GetRenderWidget()->setCursor(myHandCursor); + else + GetRenderWidget()->setCursor(myDefCursor); myCursorState = false; break; } @@ -942,51 +1068,54 @@ SVTK_InteractorStyle fitRect(x1, y1, x2, y2); } else { - if (myPoint == myOtherPoint) { - // process point selection - this->FindPokedRenderer(aSelectionEvent->myX, aSelectionEvent->myY); - Interactor->StartPickCallback(); - - myPicker->Pick(aSelectionEvent->myX, - aSelectionEvent->myY, - 0.0, - GetCurrentRenderer()); - // - SALOME_Actor* anActor = GetFirstSALOMEActor(myPicker.GetPointer()); - aSelectionEvent->myIsRectangle = false; - - if(!myShiftState) - GetSelector()->ClearIObjects(); - - if(anActor){ - anActor->Highlight( this, aSelectionEvent, true ); - }else{ - if(myLastHighlitedActor.GetPointer() && myLastHighlitedActor.GetPointer() != anActor) - myLastHighlitedActor->Highlight( this, aSelectionEvent, false ); - } - myLastHighlitedActor = anActor; - } - else { - //processing rectangle selection - Interactor->StartPickCallback(); - GetSelector()->StartPickCallback(); - aSelectionEvent->myIsRectangle = true; - - if(!myShiftState) - GetSelector()->ClearIObjects(); - - vtkActorCollection* aListActors = GetCurrentRenderer()->GetActors(); - aListActors->InitTraversal(); - while(vtkActor* aActor = aListActors->GetNextActor()){ - if(aActor->GetVisibility()){ - if(SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast(aActor)){ - if(aSActor->hasIO()){ - aSActor->Highlight( this, aSelectionEvent, true ); - } + if (myPoint == myOtherPoint) + { + // process point selection + this->FindPokedRenderer(aSelectionEvent->myX, aSelectionEvent->myY); + Interactor->StartPickCallback(); + + SALOME_Actor* anActor = GetSelector()->Pick(aSelectionEvent, GetCurrentRenderer()); + + aSelectionEvent->myIsRectangle = false; + + if(!myShiftState) + GetSelector()->ClearIObjects(); + + if(anActor) + { + anActor->Highlight( this, aSelectionEvent, true ); + } + else + { + if(myLastHighlitedActor.GetPointer() && myLastHighlitedActor.GetPointer() != anActor) + myLastHighlitedActor->Highlight( this, aSelectionEvent, false ); + myLastHighlitedActor = anActor; + } + } + else + { + //processing rectangle selection + Interactor->StartPickCallback(); + GetSelector()->StartPickCallback(); + aSelectionEvent->myIsRectangle = true; + + if(!myShiftState) + GetSelector()->ClearIObjects(); + + vtkActorCollection* aListActors = GetCurrentRenderer()->GetActors(); + aListActors->InitTraversal(); + while(vtkActor* aActor = aListActors->GetNextActor()) + { + if(aActor->GetVisibility()) + { + if(SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast(aActor)) + { + if(aSActor->hasIO()) + aSActor->Highlight( this, aSelectionEvent, true ); + } + } } - } } - } Interactor->EndPickCallback(); GetSelector()->EndPickCallback(); } @@ -1078,24 +1207,43 @@ SVTK_InteractorStyle ::onCursorMove(QPoint mousePos) { // processing highlighting - SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY(); + SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY(); this->FindPokedRenderer(aSelectionEvent->myX,aSelectionEvent->myY); bool anIsChanged = false; - myPicker->Pick(aSelectionEvent->myX, - aSelectionEvent->myY, - 0.0, - GetCurrentRenderer()); + SALOME_Actor *anActor = GetSelector()->Pick(aSelectionEvent, GetCurrentRenderer()); - SALOME_Actor *anActor = GetFirstSALOMEActor(myPicker.GetPointer()); - if (anActor){ - anIsChanged |= anActor->PreHighlight( this, aSelectionEvent, true ); + if ( myCurrRotationPointType == SVTK::StartPointSelection ) + { + myHighlightRotationPointActor->SetVisibility( false ); + + if ( anActor ) + { + myPointPicker->Pick( aSelectionEvent->myX, aSelectionEvent->myY, 0.0, GetCurrentRenderer() ); + int aVtkId = myPointPicker->GetPointId(); + if ( aVtkId >= 0 ) { + int anObjId = anActor->GetNodeObjId( aVtkId ); + + TColStd_IndexedMapOfInteger aMapIndex; + aMapIndex.Add( anObjId ); + myHighlightRotationPointActor->MapPoints( anActor, aMapIndex ); + + myHighlightRotationPointActor->SetVisibility( true ); + anIsChanged = true; + } + } } + else { + if (anActor){ + anIsChanged |= anActor->PreHighlight( this, aSelectionEvent, true ); + } - if(myLastPreHighlitedActor.GetPointer() && myLastPreHighlitedActor.GetPointer() != anActor) - anIsChanged |= myLastPreHighlitedActor->PreHighlight( this, aSelectionEvent, false ); + if(myLastPreHighlitedActor.GetPointer() && myLastPreHighlitedActor.GetPointer() != anActor) + anIsChanged |= myLastPreHighlitedActor->PreHighlight( this, aSelectionEvent, false ); + } + myLastPreHighlitedActor = anActor; if(anIsChanged) @@ -1225,6 +1373,11 @@ SVTK_InteractorStyle theInteractor->AddObserver( SVTK::StartRotate, EventCallbackCommand, Priority ); theInteractor->AddObserver( SVTK::StartGlobalPan, EventCallbackCommand, Priority ); theInteractor->AddObserver( SVTK::StartFitArea, EventCallbackCommand, Priority ); + + theInteractor->AddObserver( SVTK::SetRotateGravity, EventCallbackCommand, Priority ); + theInteractor->AddObserver( SVTK::StartPointSelection, EventCallbackCommand, Priority ); + + theInteractor->AddObserver( SVTK::ChangeRotationPoint, EventCallbackCommand, Priority ); } } @@ -1237,6 +1390,30 @@ SVTK_InteractorStyle { //vtkInteractorStyle::OnTimer(); this->Interactor->Render(); + // check if bounding box was changed + if ( GetCurrentRenderer() ) + { + vtkFloatingPointType aCurrBBCenter[3]; + if ( ComputeBBCenter(GetCurrentRenderer(),aCurrBBCenter) ) + { + if ( !myBBFirstCheck ) + { + if ( fabs(aCurrBBCenter[0]-myBBCenter[0]) > 1e-38 || + fabs(aCurrBBCenter[1]-myBBCenter[1]) > 1e-38 || + fabs(aCurrBBCenter[2]-myBBCenter[2]) > 1e-38 ) { + // bounding box was changed => send SVTK::RotationPointChanged event + // invoke event for update coordinates in SVTK_SetRotationPointDlg + InvokeEvent(SVTK::BBCenterChanged,(void*)aCurrBBCenter); + for ( int i =0; i < 3; i++) myBBCenter[i] = aCurrBBCenter[i]; + } + } + else + { + for ( int i =0; i < 3; i++) myBBCenter[i] = aCurrBBCenter[i]; + myBBFirstCheck = false; + } + } + } } /*! @@ -1299,6 +1476,8 @@ SVTK_InteractorStyle vtkObject* anObject = reinterpret_cast( clientData ); SVTK_InteractorStyle* self = dynamic_cast( anObject ); int aSpeedIncrement=self->ControllerIncrement()->Current(); + vtkFloatingPointType aCenter[3]; + vtkFloatingPointType* aSelectedPoint; if ( self ) { switch ( event ) { case SVTK::SpaceMouseMoveEvent : @@ -1372,6 +1551,40 @@ SVTK_InteractorStyle case SVTK::StartFitArea: self->startFitArea(); return; + + case SVTK::SetRotateGravity: + if ( self->myCurrRotationPointType == SVTK::StartPointSelection ) + { + self->myHighlightRotationPointActor->SetVisibility( false ); + if( self->GetCurrentRenderer() != NULL ) + self->GetCurrentRenderer()->RemoveActor( self->myHighlightRotationPointActor.GetPointer() ); + self->GetRenderWidget()->setCursor(self->myDefCursor); + } + self->myPrevRotationPointType = self->myCurrRotationPointType; + self->myCurrRotationPointType = SVTK::SetRotateGravity; + if ( ComputeBBCenter(self->GetCurrentRenderer(),aCenter) ) + // invoke event for update coordinates in SVTK_SetRotationPointDlg + self->InvokeEvent(SVTK::BBCenterChanged,(void*)aCenter); + return; + case SVTK::StartPointSelection: + self->startPointSelection(); + return; + + case SVTK::ChangeRotationPoint: + if ( self->myCurrRotationPointType == SVTK::StartPointSelection ) + { + self->myHighlightRotationPointActor->SetVisibility( false ); + if( self->GetCurrentRenderer() != NULL ) + self->GetCurrentRenderer()->RemoveActor( self->myHighlightRotationPointActor.GetPointer() ); + self->GetRenderWidget()->setCursor(self->myDefCursor); + } + self->myPrevRotationPointType = self->myCurrRotationPointType; + self->myCurrRotationPointType = SVTK::SetRotateSelected; + aSelectedPoint = (vtkFloatingPointType*)callData; + self->myRotationPointX = aSelectedPoint[0]; + self->myRotationPointY = aSelectedPoint[1]; + self->myRotationPointZ = aSelectedPoint[2]; + return; } } } diff --git a/src/SVTK/SVTK_InteractorStyle.h b/src/SVTK/SVTK_InteractorStyle.h index 064b6a2de..3ce8ba2f4 100644 --- a/src/SVTK/SVTK_InteractorStyle.h +++ b/src/SVTK/SVTK_InteractorStyle.h @@ -44,13 +44,18 @@ #include #include + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + // //! Control the value of increment in SALOME way. /*! This class controls of value of increment, for pan/rotate/zoom operations in SALOME way */ -class SVTK_ControllerIncrement : public vtkObject{ +class SVTK_EXPORT SVTK_ControllerIncrement : public vtkObject{ public: vtkTypeMacro(SVTK_ControllerIncrement, vtkObject); static SVTK_ControllerIncrement* New(); @@ -81,7 +86,7 @@ class SVTK_ControllerIncrement : public vtkObject{ This class controls the behaviour of KeyDown event in SALOME way */ -class SVTK_ControllerOnKeyDown : public vtkObject{ +class SVTK_EXPORT SVTK_ControllerOnKeyDown : public vtkObject{ public: vtkTypeMacro(SVTK_ControllerOnKeyDown, vtkObject); static SVTK_ControllerOnKeyDown* New(); @@ -99,12 +104,13 @@ class SVTK_ControllerOnKeyDown : public vtkObject{ }; class vtkCell; -class vtkPicker; +class vtkPointPicker; class SALOME_Actor; class SVTK_Selector; class SVTK_GenericRenderWindowInteractor; +class SVTK_Actor; #define VTK_INTERACTOR_STYLE_CAMERA_NONE 0 #define VTK_INTERACTOR_STYLE_CAMERA_ROTATE 1 @@ -114,6 +120,7 @@ class SVTK_GenericRenderWindowInteractor; #define VTK_INTERACTOR_STYLE_CAMERA_FIT 5 #define VTK_INTERACTOR_STYLE_CAMERA_SELECT 6 #define VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN 7 +#define VTK_INTERACTOR_STYLE_CAMERA_SELECT_ROTATION_POINT 8 //! Introduce SALOME way of user interaction /*! @@ -220,7 +227,7 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle SVTK_Selector* GetSelector(); - protected: + protected: SVTK_InteractorStyle(); ~SVTK_InteractorStyle(); @@ -273,6 +280,8 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle void startFitArea(); void startSpin(); + void startPointSelection(); + protected: void loadCursors(); void startOperation(int operation); @@ -319,7 +328,22 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle PSelectionEvent mySelectionEvent; - vtkSmartPointer myPicker; + unsigned long myCurrRotationPointType; + unsigned long myPrevRotationPointType; + + double myRotationPointX; + double myRotationPointY; + double myRotationPointZ; + + vtkSmartPointer myHighlightRotationPointActor; + vtkSmartPointer myPointPicker; + + vtkFloatingPointType myBBCenter[3]; + bool myBBFirstCheck; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SVTK/SVTK_MainWindow.cxx b/src/SVTK/SVTK_MainWindow.cxx index 2cb5d4379..045a05453 100644 --- a/src/SVTK/SVTK_MainWindow.cxx +++ b/src/SVTK/SVTK_MainWindow.cxx @@ -42,11 +42,13 @@ #include "SVTK_NonIsometricDlg.h" #include "SVTK_UpdateRateDlg.h" #include "SVTK_CubeAxesDlg.h" +#include "SVTK_SetRotationPointDlg.h" #include "SVTK_MainWindow.h" #include "SVTK_Event.h" #include "SVTK_Renderer.h" #include "SVTK_RenderWindowInteractor.h" +#include "SVTK_InteractorStyle.h" #include "SVTK_Selector.h" @@ -91,6 +93,7 @@ SVTK_MainWindow myUpdateRateDlg = new SVTK_UpdateRateDlg(myActionsMap[UpdateRate],this,"SVTK_UpdateRateDlg"); myNonIsometricDlg = new SVTK_NonIsometricDlg(myActionsMap[NonIsometric],this,"SVTK_NonIsometricDlg"); myCubeAxesDlg = new SVTK_CubeAxesDlg(myActionsMap[GraduatedAxes],this,"SVTK_CubeAxesDlg"); + mySetRotationPointDlg = new SVTK_SetRotationPointDlg(myActionsMap[ChangeRotationPointId],this,"SVTK_SetRotationPointDlg"); } /*! @@ -143,6 +146,9 @@ SVTK_MainWindow GetRenderer()->OnAdjustTrihedron(); GetInteractor()->update(); + + if ( (SVTK_InteractorStyle*)GetInteractorStyle() ) + ((SVTK_InteractorStyle*)GetInteractorStyle())->OnTimer(); } /*! @@ -312,7 +318,7 @@ SVTK_MainWindow /*! Redirect the request to SVTK_Renderer::GetTrihedronSize */ -int +vtkFloatingPointType SVTK_MainWindow ::GetTrihedronSize() { @@ -324,7 +330,7 @@ SVTK_MainWindow */ void SVTK_MainWindow -::SetTrihedronSize( const int theSize, const bool theRelative ) +::SetTrihedronSize( const vtkFloatingPointType theSize, const bool theRelative ) { GetRenderer()->SetTrihedronSize(theSize, theRelative); Repaint(); @@ -463,6 +469,15 @@ SVTK_MainWindow connect(anAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning())); myActionsMap[ GlobalPanId ] = anAction; + // Change rotation point + anAction = new QtxAction(tr("MNU_CHANGINGROTATIONPOINT_VIEW"), + theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ROTATION_POINT" ) ), + tr( "MNU_CHANGINGROTATIONPOINT_VIEW" ), 0, this); + anAction->setStatusTip(tr("DSC_CHANGINGROTATIONPOINT_VIEW")); + anAction->setToggleAction(true); + connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onChangeRotationPoint(bool))); + myActionsMap[ ChangeRotationPointId ] = anAction; + // Rotation anAction = new QtxAction(tr("MNU_ROTATE_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ROTATE" ) ), @@ -581,6 +596,8 @@ SVTK_MainWindow aPanningBtn->AddAction(myActionsMap[PanId]); aPanningBtn->AddAction(myActionsMap[GlobalPanId]); + myActionsMap[ChangeRotationPointId]->addTo(myToolBar); + myActionsMap[RotationId]->addTo(myToolBar); SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar); @@ -648,6 +665,52 @@ SVTK_MainWindow myEventDispatcher->InvokeEvent(SVTK::StartRotate,0); } +/*! + Change rotation point +*/ +void +SVTK_MainWindow +::onChangeRotationPoint(bool theIsActivate) +{ + if(theIsActivate){ + mySetRotationPointDlg->addObserver(); + if ( mySetRotationPointDlg->IsFirstShown() ) + activateSetRotationGravity(); + mySetRotationPointDlg->show(); + }else + mySetRotationPointDlg->hide(); +} + +/*! + Set the gravity center as a rotation point +*/ +void +SVTK_MainWindow +::activateSetRotationGravity() +{ + myEventDispatcher->InvokeEvent(SVTK::SetRotateGravity,0); +} + +/*! + Set the selected point as a rotation point +*/ +void +SVTK_MainWindow +::activateSetRotationSelected(void* theData) +{ + myEventDispatcher->InvokeEvent(SVTK::ChangeRotationPoint,theData); +} + +/*! + Set the point selected by user as a rotation point +*/ +void +SVTK_MainWindow +::activateStartPointSelection() +{ + myEventDispatcher->InvokeEvent(SVTK::StartPointSelection,0); +} + /*! Starts global panning transformation */ diff --git a/src/SVTK/SVTK_MainWindow.h b/src/SVTK/SVTK_MainWindow.h index 3d9637a40..1be95b652 100644 --- a/src/SVTK/SVTK_MainWindow.h +++ b/src/SVTK/SVTK_MainWindow.h @@ -46,6 +46,7 @@ class SVTK_NonIsometricDlg; class SVTK_UpdateRateDlg; class SVTK_CubeAxesActor2D; class SVTK_CubeAxesDlg; +class SVTK_SetRotationPointDlg; class VTKViewer_Trihedron; class VTKViewer_Transform; @@ -163,12 +164,12 @@ public: bool theIsUpdate = false); //! Redirect the request to #SVTK_Renderer::GetTrihedronSize - int + vtkFloatingPointType GetTrihedronSize(); //! Redirect the request to #SVTK_Renderer::SetTrihedronSize void - SetTrihedronSize(const int theSize, const bool theRelative = true); + SetTrihedronSize(const vtkFloatingPointType theSize, const bool theRelative = true); //! Redirect the request to #SVTK_Renderer::AdjustActors void @@ -207,6 +208,12 @@ public: void activatePanning(); void activateGlobalPanning(); + void onChangeRotationPoint(bool theIsActivate); + + void activateSetRotationGravity(); + void activateSetRotationSelected(void* theData); + void activateStartPointSelection(); + void onFrontView(); void onBackView(); void onTopView(); @@ -240,7 +247,8 @@ public: void SetEventDispatcher(vtkObject* theDispatcher); - enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, RotationId, + enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, + ChangeRotationPointId, RotationId, FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate}; typedef QMap TActionsMap; @@ -250,6 +258,7 @@ public: SVTK_NonIsometricDlg* myNonIsometricDlg; SVTK_UpdateRateDlg* myUpdateRateDlg; SVTK_CubeAxesDlg* myCubeAxesDlg; + SVTK_SetRotationPointDlg* mySetRotationPointDlg; vtkSmartPointer myEventDispatcher; TActionsMap myActionsMap; diff --git a/src/SVTK/SVTK_RectPicker.cxx b/src/SVTK/SVTK_RectPicker.cxx index 9aaad409e..fb5ced7f2 100644 --- a/src/SVTK/SVTK_RectPicker.cxx +++ b/src/SVTK/SVTK_RectPicker.cxx @@ -115,22 +115,29 @@ namespace // WorldToView() is called. This is expensive, so we get the matrix once // and handle the transformation ourselves. vtkMatrix4x4 *aMatrix = vtkMatrix4x4::New(); - aMatrix->DeepCopy(theRenderer->GetActiveCamera()-> - GetCompositePerspectiveTransformMatrix(1,0,1)); + aMatrix->DeepCopy( theRenderer->GetActiveCamera()-> + GetCompositePerspectiveTransformMatrix( theRenderer->GetTiledAspectRatio(), 0, 1 ) ); // We grab the z-buffer for the selection region all at once and probe the resulting array. float *aZPtr = theRenderer->GetRenderWindow()-> GetZbufferData(theSelection[0], theSelection[1], theSelection[2], theSelection[3]); //cout<<"theSelection = {"<VTK documentation */ @@ -117,6 +121,10 @@ class SVTK_EXPORT SVTK_RectPicker : public vtkAbstractPropPicker vtkRenderer*); }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SVTK/SVTK_RenderWindowInteractor.cxx b/src/SVTK/SVTK_RenderWindowInteractor.cxx index 920f93e99..647fbc554 100644 --- a/src/SVTK/SVTK_RenderWindowInteractor.cxx +++ b/src/SVTK/SVTK_RenderWindowInteractor.cxx @@ -88,13 +88,13 @@ void QVTK_RenderWindowInteractor ::Initialize(vtkGenericRenderWindowInteractor* theDevice) { - if(GetDevice()) - myDevice->SetRenderWindow(NULL); + if ( GetDevice() ) + myDevice->SetRenderWindow( NULL ); myDevice = theDevice; - if(theDevice) - theDevice->SetRenderWindow(getRenderWindow()); + if ( theDevice ) + theDevice->SetRenderWindow( getRenderWindow() ); } /*! @@ -103,9 +103,11 @@ QVTK_RenderWindowInteractor QVTK_RenderWindowInteractor ::~QVTK_RenderWindowInteractor() { - if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance()) - if(aSpaceMouse->isSpaceMouseOn()) - aSpaceMouse->close(x11Display()); +#ifndef WIN32 + SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance(); + if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() ) + aSpaceMouse->close( x11Display() ); +#endif } @@ -159,7 +161,7 @@ QVTK_RenderWindowInteractor { // Final initialization just before the widget is displayed GetDevice()->SetSize(width(),height()); - if(!GetDevice()->GetInitialized()){ + if(!GetDevice()->GetInitialized() && GetDevice()->GetRenderWindow()){ GetDevice()->Initialize(); GetDevice()->ConfigureEvent(); } @@ -368,14 +370,19 @@ QVTK_RenderWindowInteractor { QWidget::focusInEvent( event ); +#ifndef WIN32 // register set space mouse events receiver - if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance()){ - if(!aSpaceMouse->isSpaceMouseOn()) {// initialize 3D space mouse driver - aSpaceMouse->initialize(x11Display(),winId()); - }else{ - aSpaceMouse->setWindow(x11Display(),winId()); - } + SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance(); + + if ( aSpaceMouse ) + { + if ( !aSpaceMouse->isSpaceMouseOn() ) + // initialize 3D space mouse driver + aSpaceMouse->initialize( x11Display(), winId() ); + else + aSpaceMouse->setWindow( x11Display(), winId() ); } +#endif } /*! @@ -388,13 +395,27 @@ QVTK_RenderWindowInteractor { QWidget::focusOutEvent( event ); +#ifndef WIN32 // unregister set space mouse events receiver - if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance()){ - if(aSpaceMouse->isSpaceMouseOn()) - aSpaceMouse->setWindow(x11Display(),0); - } + SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance(); + if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() ) + aSpaceMouse->setWindow( x11Display(), 0 ); +#endif +} + + +#ifdef WIN32 + +/*! + To handle native Win32 events (from such devices as SpaceMouse) +*/ +bool QVTK_RenderWindowInteractor::winEvent( MSG* msg ) +{ + // TODO: Implement event handling for SpaceMouse + return QWidget::winEvent( msg ); } +#else /*! To handle native X11 events (from such devices as SpaceMouse) @@ -404,19 +425,22 @@ QVTK_RenderWindowInteractor ::x11Event( XEvent *xEvent ) { // handle 3d space mouse events - if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance()){ - if(aSpaceMouse->isSpaceMouseOn() && xEvent->type == ClientMessage){ + if ( SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance() ) + { + if ( aSpaceMouse->isSpaceMouseOn() && xEvent->type == ClientMessage ) + { SVTK_SpaceMouse::MoveEvent anEvent; int type = aSpaceMouse->translateEvent( x11Display(), xEvent, &anEvent, 1.0, 1.0 ); - switch( type ){ - case SVTK_SpaceMouse::SpaceMouseMove : - GetDevice()->InvokeEvent(SVTK::SpaceMouseMoveEvent, anEvent.data ); - break; - case SVTK_SpaceMouse::SpaceButtonPress : - GetDevice()->InvokeEvent( SVTK::SpaceMouseButtonEvent, &anEvent.button ); - break; - case SVTK_SpaceMouse::SpaceButtonRelease : - break; + switch ( type ) + { + case SVTK_SpaceMouse::SpaceMouseMove: + GetDevice()->InvokeEvent( SVTK::SpaceMouseMoveEvent, anEvent.data ); + break; + case SVTK_SpaceMouse::SpaceButtonPress: + GetDevice()->InvokeEvent( SVTK::SpaceMouseButtonEvent, &anEvent.button ); + break; + case SVTK_SpaceMouse::SpaceButtonRelease: + break; } return true; // stop handling the event } @@ -425,6 +449,8 @@ QVTK_RenderWindowInteractor return QWidget::x11Event( xEvent ); } +#endif + /*! Constructor */ diff --git a/src/SVTK/SVTK_RenderWindowInteractor.h b/src/SVTK/SVTK_RenderWindowInteractor.h index d91db66a6..dd6a52502 100644 --- a/src/SVTK/SVTK_RenderWindowInteractor.h +++ b/src/SVTK/SVTK_RenderWindowInteractor.h @@ -52,6 +52,10 @@ class vtkObject; class SVTK_Selector; class SVTK_Renderer; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \class QVTK_RenderWindowInteractor Implements Qt based vtkRenderWindowInteractor. @@ -116,8 +120,12 @@ class SVTK_EXPORT QVTK_RenderWindowInteractor: public QWidget virtual void focusInEvent( QFocusEvent* ); virtual void focusOutEvent( QFocusEvent* ); - //! To handle native X11 events (from such devices as SpaceMouse) + //! To handle native events (from such devices as SpaceMouse) +#ifdef WIN32 + virtual bool winEvent( MSG* ); +#else virtual bool x11Event( XEvent *e ); +#endif vtkSmartPointer myRenderWindow; vtkSmartPointer myDevice; @@ -249,5 +257,8 @@ class SVTK_EXPORT SVTK_RenderWindowInteractor: public QVTK_RenderWindowInteracto TInteractorStyles myInteractorStyles; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif #endif diff --git a/src/SVTK/SVTK_Renderer.cxx b/src/SVTK/SVTK_Renderer.cxx index 2ca7c7aef..cab5ca695 100644 --- a/src/SVTK/SVTK_Renderer.cxx +++ b/src/SVTK/SVTK_Renderer.cxx @@ -81,8 +81,6 @@ SVTK_Renderer myDevice->Delete(); myTransform->Delete(); - SetSelectionTolerance(); - myPointPicker->Delete(); myCellPicker->Delete(); @@ -112,7 +110,7 @@ SVTK_Renderer myEventCallbackCommand->Delete(); myTrihedron->AddToRender(GetDevice()); - GetDevice()->AddProp(GetCubeAxes()); + GetDevice()->AddViewProp(GetCubeAxes()); myBndBox[0] = myBndBox[2] = myBndBox[4] = 0; myBndBox[1] = myBndBox[3] = myBndBox[5] = myTrihedron->GetSize(); @@ -225,6 +223,7 @@ SVTK_Renderer { myInteractor = theInteractor; mySelector = theSelector; + SetSelectionTolerance(); } /*! @@ -348,13 +347,16 @@ SVTK_Renderer void SVTK_Renderer ::SetSelectionTolerance(const double& theTolNodes, - const double& theTolCell) + const double& theTolCell, + const double& theTolObjects) { myPointPicker->SetTolerance( theTolNodes ); myCellPicker->SetTolerance( theTolCell ); myPointRectPicker->SetTolerance( theTolNodes ); myCellRectPicker->SetTolerance( theTolCell ); + + mySelector->SetTolerance( theTolObjects ); } @@ -466,7 +468,7 @@ SVTK_Renderer */ void SVTK_Renderer -::SetTrihedronSize(int theSize, const bool theRelative) +::SetTrihedronSize(vtkFloatingPointType theSize, const bool theRelative) { if(myTrihedronSize != theSize || myIsTrihedronRelative != theRelative){ myTrihedronSize = theSize; @@ -478,7 +480,7 @@ SVTK_Renderer /*! \return size of the trihedron in percents from bounding box of the scene */ -int +vtkFloatingPointType SVTK_Renderer ::GetTrihedronSize() const { diff --git a/src/SVTK/SVTK_Renderer.h b/src/SVTK/SVTK_Renderer.h index c9908539d..5c24cefa1 100644 --- a/src/SVTK/SVTK_Renderer.h +++ b/src/SVTK/SVTK_Renderer.h @@ -52,6 +52,9 @@ class SVTK_CubeAxesActor2D; class VTKViewer_Actor; class SVTK_Selector; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif /*! \class SVTK_Renderer @@ -119,7 +122,8 @@ class SVTK_EXPORT SVTK_Renderer : public vtkObject //! Setup requested tolerance for the picking void SetSelectionTolerance(const double& theTolNodes = 0.025, - const double& theTolCell = 0.001); + const double& theTolCell = 0.001, + const double& theTolObjects = 0.025); //---------------------------------------------------------------------------- //! Adjust all intenal actors (trihedron and graduated rules) to the scene @@ -128,10 +132,10 @@ class SVTK_EXPORT SVTK_Renderer : public vtkObject //! Set size of the trihedron in percents from bounding box of the scene void - SetTrihedronSize(int theSize, const bool theRelative = true); + SetTrihedronSize(vtkFloatingPointType theSize, const bool theRelative = true); //! Get size of the trihedron in percents from bounding box of the scene - int + vtkFloatingPointType GetTrihedronSize() const; //! Shows if the size of the trihedron is relative @@ -243,9 +247,13 @@ class SVTK_EXPORT SVTK_Renderer : public vtkObject //---------------------------------------------------------------------------- vtkSmartPointer myCubeAxes; vtkSmartPointer myTrihedron; - int myTrihedronSize; + vtkFloatingPointType myTrihedronSize; bool myIsTrihedronRelative; vtkFloatingPointType myBndBox[6]; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/SVTK/SVTK_Selector.cxx b/src/SVTK/SVTK_Selector.cxx index 78c94989d..fe5a93047 100644 --- a/src/SVTK/SVTK_Selector.cxx +++ b/src/SVTK/SVTK_Selector.cxx @@ -35,6 +35,27 @@ #include #include +#include +#include + + +/*! + Find first SALOME_Actor from the end of actors collection +*/ +inline +SALOME_Actor* +GetLastSALOMEActor(vtkActorCollection* theCollection) +{ + if (theCollection) { + for (int i = theCollection->GetNumberOfItems() - 1; i >= 0; i--) { + if (SALOME_Actor* anActor = dynamic_cast(theCollection->GetItemAsObject(i))) + if (anActor->hasIO()) + return anActor; + } + } + return NULL; +} + /*! \return new SVTK_Selector @@ -50,9 +71,14 @@ SVTK_Selector Default constructor */ SVTK_SelectorDef -::SVTK_SelectorDef() +::SVTK_SelectorDef(): + myPicker(vtkPicker::New()), + myCellPicker(vtkCellPicker::New()) { mySelectionMode = ActorSelection; + + myPicker->Delete(); + myCellPicker->Delete(); } /*! @@ -280,16 +306,13 @@ SVTK_SelectorDef TMapIOSubIndex::const_iterator anIter = myMapIOSubIndex.find(theIO); if(anIter != myMapIOSubIndex.end()){ const TColStd_IndexedMapOfInteger& aMapIndex = anIter->second.myMap; - return aMapIndex.Contains(theIndex); + return aMapIndex.Contains( theIndex ) == Standard_True; } return false; } -static -bool -removeIndex(TColStd_IndexedMapOfInteger& theMapIndex, - const int theIndex) +static bool removeIndex(TColStd_IndexedMapOfInteger& theMapIndex, const int theIndex) { int anId = theMapIndex.FindIndex(theIndex); // i==0 if Index is not in the MapIndex if(anId){ @@ -308,7 +331,7 @@ removeIndex(TColStd_IndexedMapOfInteger& theMapIndex, theMapIndex = aNewMap; } } - return anId; + return anId != 0; } /*! @@ -402,18 +425,18 @@ SVTK_SelectorDef } TColStd_IndexedMapOfInteger& aMapIndex = anIter->second.myMap; - bool anIsConatains = aMapIndex.Contains(theIndex); - if(anIsConatains) - removeIndex(aMapIndex,theIndex); + bool anIsConatains = aMapIndex.Contains( theIndex ) == Standard_True; + if ( anIsConatains ) + removeIndex( aMapIndex, theIndex ); - if(!theIsModeShift) + if ( !theIsModeShift ) aMapIndex.Clear(); - if(!anIsConatains) + if ( !anIsConatains ) aMapIndex.Add( theIndex ); - if( aMapIndex.IsEmpty()) - myMapIOSubIndex.erase(theIO); + if ( aMapIndex.IsEmpty() ) + myMapIOSubIndex.erase( theIO ); return false; } @@ -518,3 +541,34 @@ SVTK_SelectorDef return Handle(VTKViewer_Filter)(); } +SALOME_Actor* +SVTK_SelectorDef +::Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const +{ + myCellPicker->Pick(theEvent->myX, + theEvent->myY, + 0.0, + theRenderer); + + vtkActorCollection* aListActors = myCellPicker->GetActors(); + SALOME_Actor* anActor = GetLastSALOMEActor(aListActors); + + if (! anActor) { + myPicker->Pick(theEvent->myX, + theEvent->myY, + 0.0, + theRenderer); + aListActors = myPicker->GetActors(); + anActor = GetLastSALOMEActor(aListActors); + } + + return anActor; +} + +void +SVTK_SelectorDef +::SetTolerance(const double& theTolerance) +{ + myPicker->SetTolerance(theTolerance); + myCellPicker->SetTolerance(theTolerance); +} diff --git a/src/SVTK/SVTK_Selector.h b/src/SVTK/SVTK_Selector.h index 44c1d9690..f72ba8adc 100644 --- a/src/SVTK/SVTK_Selector.h +++ b/src/SVTK/SVTK_Selector.h @@ -29,6 +29,7 @@ #ifndef SVTK_SELECTOR_H #define SVTK_SELECTOR_H +#include "SVTK.h" #include "SVTK_Selection.h" #include "SALOME_ListIO.hxx" #include "VTKViewer_Filter.h" @@ -41,6 +42,11 @@ class SALOME_Actor; +class SVTK_SelectionEvent; + +class vtkRenderer; + + //! Define an abstract interface for selection in SVTK package /*! The class implements selection functionality through storing corresponding @@ -49,7 +55,7 @@ class SALOME_Actor; \note Also, for each #SALOME_InteractiveObject it tries to keep corresponding refenrence to #SALOME_Actor */ -class SVTK_Selector: public vtkObject +class SVTK_EXPORT SVTK_Selector: public vtkObject { public: static SVTK_Selector* New(); @@ -204,6 +210,15 @@ public: virtual void EndPickCallback() = 0; + + //---------------------------------------------------------------------------- + virtual + SALOME_Actor* + Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const =0; + + virtual + void + SetTolerance(const double& theTolerance) = 0; }; diff --git a/src/SVTK/SVTK_SelectorDef.h b/src/SVTK/SVTK_SelectorDef.h index e20d764ec..634d7297b 100644 --- a/src/SVTK/SVTK_SelectorDef.h +++ b/src/SVTK/SVTK_SelectorDef.h @@ -43,6 +43,9 @@ class SALOME_Actor; class SVTK_Viewer; class SVTK_ViewWindow; +class vtkPicker; +class vtkCellPicker; + class SVTK_SelectorDef: public SVTK_Selector { public: @@ -165,6 +168,15 @@ public: void EndPickCallback(); + //---------------------------------------------------------------------------- + virtual + SALOME_Actor* + Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const; + + virtual + void + SetTolerance(const double& theTolerance); + private: int mySelectionMode; @@ -206,6 +218,9 @@ private: typedef std::map TFilters; TFilters myFilters; + + vtkSmartPointer myPicker; + vtkSmartPointer myCellPicker; }; #endif diff --git a/src/SVTK/SVTK_SetRotationPointDlg.cxx b/src/SVTK/SVTK_SetRotationPointDlg.cxx new file mode 100755 index 000000000..d98efaa21 --- /dev/null +++ b/src/SVTK/SVTK_SetRotationPointDlg.cxx @@ -0,0 +1,325 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// +// +// File : +// Author : +// Module : SALOME +// $Header$ + +#include "SVTK_SetRotationPointDlg.h" +#include "SVTK_MainWindow.h" +#include "SVTK_RenderWindowInteractor.h" +#include "SVTK_Event.h" +#include "SVTK_InteractorStyle.h" + +#include "VTKViewer_Utilities.h" + +#include "QtxAction.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace std; + +/*! + Constructor +*/ +SVTK_SetRotationPointDlg +::SVTK_SetRotationPointDlg(QtxAction* theAction, + SVTK_MainWindow* theParent, + const char* theName): + SVTK_DialogBase(theAction, + theParent, + theName), + myMainWindow(theParent), + myPriority(0.0), + myEventCallbackCommand(vtkCallbackCommand::New()), + myRWInteractor(theParent->GetInteractor()) +{ + setCaption(tr("DLG_TITLE")); + setSizeGripEnabled(TRUE); + + // Create layout for this dialog + QGridLayout* layoutDlg = new QGridLayout (this); + layoutDlg->setSpacing(6); + layoutDlg->setMargin(11); + + // Create check box "Use Bounding Box Center" + QHBox* aCheckBox = new QHBox(this); + + myIsBBCenter = new QCheckBox(tr("USE_BBCENTER"), aCheckBox); + myIsBBCenter->setChecked(true); + connect(myIsBBCenter, SIGNAL(stateChanged(int)), SLOT(onBBCenterChecked())); + + // Create croup button with radio buttons + myGroupSelButton = new QButtonGroup(2,Qt::Vertical,"",this); + myGroupSelButton->setMargin(11); + + // Create "Set to Origin" button + myToOrigin = new QPushButton(myGroupSelButton); + myToOrigin->setText(tr("LBL_TOORIGIN")); + connect(myToOrigin, SIGNAL(clicked()), this, SLOT(onToOrigin())); + + // Create "Select Point from View" button + mySelectPoint = new QPushButton(myGroupSelButton); + mySelectPoint->setText(tr("LBL_SELECTPOINT")); + mySelectPoint->setToggleButton(true); + connect(mySelectPoint, SIGNAL(clicked()), this, SLOT(onSelectPoint())); + + // Create croup box with grid layout + myGroupBoxCoord = new QGroupBox(this, "GroupBox"); + QHBoxLayout* aHBoxLayout = new QHBoxLayout(myGroupBoxCoord); + aHBoxLayout->setMargin(11); + aHBoxLayout->setSpacing(6); + + // "X" coordinate + QLabel* TextLabelX = new QLabel (tr("LBL_X"), myGroupBoxCoord, "TextLabelX"); + TextLabelX->setFixedWidth(15); + myX = new QLineEdit(myGroupBoxCoord); + myX->setValidator(new QDoubleValidator(myX)); + myX->setText(QString::number(0.0)); + connect(myX, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged())); + + // "Y" coordinate + QLabel* TextLabelY = new QLabel (tr("LBL_Y"), myGroupBoxCoord, "TextLabelY"); + TextLabelY->setFixedWidth(15); + myY = new QLineEdit(myGroupBoxCoord); + myY->setValidator(new QDoubleValidator(myY)); + myY->setText(QString::number(0.0)); + connect(myY, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged())); + + // "Z" coordinate + QLabel* TextLabelZ = new QLabel (tr("LBL_Z"), myGroupBoxCoord, "TextLabelZ"); + TextLabelZ->setFixedWidth(15); + myZ = new QLineEdit(myGroupBoxCoord); + myZ->setValidator(new QDoubleValidator(myZ)); + myZ->setText(QString::number(0.0)); + connect(myZ, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged())); + + // Layout widgets in the horizontal group box + aHBoxLayout->addWidget(TextLabelX); + aHBoxLayout->addWidget(myX); + aHBoxLayout->addWidget(TextLabelY); + aHBoxLayout->addWidget(myY); + aHBoxLayout->addWidget(TextLabelZ); + aHBoxLayout->addWidget(myZ); + + // "Close" button + QGroupBox* aGroupBox = new QGroupBox(this); + QHBoxLayout* aHBoxLayout2 = new QHBoxLayout(aGroupBox); + aHBoxLayout2->setMargin(11); + aHBoxLayout2->setSpacing(6); + + QPushButton* m_bClose = new QPushButton(tr("&Close"), aGroupBox, "m_bClose"); + m_bClose->setAutoDefault(TRUE); + m_bClose->setFixedSize(m_bClose->sizeHint()); + connect(m_bClose, SIGNAL(clicked()), this, SLOT(onClickClose())); + + // Layout buttons + aHBoxLayout2->addWidget(m_bClose); + + // Layout top level widgets + layoutDlg->addWidget(aCheckBox,0,0); + layoutDlg->addWidget(myGroupSelButton,1,0); + layoutDlg->addWidget(myGroupBoxCoord,2,0); + layoutDlg->addWidget(aGroupBox,3,0); + + setEnabled(myGroupSelButton,!myIsBBCenter->isChecked()); + setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked()); + + this->resize(400, this->sizeHint().height()); + + myEventCallbackCommand->Delete(); + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(SVTK_SetRotationPointDlg::ProcessEvents); + myIsObserverAdded = false; +} + +/* + * Destroys the object and frees any allocated resources + */ +SVTK_SetRotationPointDlg +::~SVTK_SetRotationPointDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +void +SVTK_SetRotationPointDlg +::addObserver() +{ + if ( !myIsObserverAdded ) { + vtkInteractorStyle* aIStyle = myRWInteractor->GetInteractorStyle(); + aIStyle->AddObserver(SVTK::BBCenterChanged, myEventCallbackCommand.GetPointer(), myPriority); + aIStyle->AddObserver(SVTK::RotationPointChanged, myEventCallbackCommand.GetPointer(), myPriority); + myIsObserverAdded = true; + } +} + +/*! + Return true if it is the first show for this dialog +*/ +bool +SVTK_SetRotationPointDlg +::IsFirstShown() +{ + return myIsBBCenter->isChecked() && myX->text().toDouble() == 0. + && myY->text().toDouble() == 0. && myZ->text().toDouble() == 0.; +} + +/*! + Processes events +*/ +void +SVTK_SetRotationPointDlg +::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* theCallData) +{ + SVTK_SetRotationPointDlg* self = reinterpret_cast(theClientData); + vtkFloatingPointType* aCoord = (vtkFloatingPointType*)theCallData; + + switch ( theEvent ) { + case SVTK::BBCenterChanged: + if ( self->myIsBBCenter->isChecked() + || + IsBBEmpty(self->myMainWindow->getRenderer()) ) + { + if ( aCoord ) + { + self->myX->setText( QString::number(aCoord[0]) ); + self->myY->setText( QString::number(aCoord[1]) ); + self->myZ->setText( QString::number(aCoord[2]) ); + } + } + break; + case SVTK::RotationPointChanged: + if ( aCoord ) + { + self->myX->setText( QString::number(aCoord[0]) ); + self->myY->setText( QString::number(aCoord[1]) ); + self->myZ->setText( QString::number(aCoord[2]) ); + } + if ( !self->myIsBBCenter->isChecked() ) + self->mySelectPoint->toggle(); + } +} + +void +SVTK_SetRotationPointDlg +::setEnabled(QGroupBox* theGrp, const bool theState) +{ + QObjectList aChildren(*theGrp->children()); + QObject* anObj; + for(anObj = aChildren.first(); anObj !=0; anObj = aChildren.next()) + { + if (anObj !=0 && anObj->inherits("QLineEdit")) + ((QLineEdit*)anObj)->setReadOnly(!theState); + if (anObj !=0 && anObj->inherits("QPushButton")) + ((QLineEdit*)anObj)->setEnabled(theState); + } + +} + +void +SVTK_SetRotationPointDlg +::onBBCenterChecked() +{ + setEnabled(myGroupSelButton,!myIsBBCenter->isChecked()); + setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked()); + + if ( myIsBBCenter->isChecked() ) + { + if ( mySelectPoint->state() == QButton::On ) + mySelectPoint->toggle(); + // activate mode : the rotation point is the center of the bounding box + // send the data to the SVTK_InteractorStyle: set the type of the rotation point + // calculate coordinates of the rotation point + myMainWindow->activateSetRotationGravity(); + } + else + { + QString aX = myX->text(); + myX->setText(QString::number(aX.toDouble()+1.)); + myX->setText(aX); + } +} + +void +SVTK_SetRotationPointDlg +::onToOrigin() +{ + if ( mySelectPoint->state() == QButton::On ) + mySelectPoint->toggle(); + myX->setText(QString::number(0.0)); + myY->setText(QString::number(0.0)); + myZ->setText(QString::number(0.0)); +} + +void +SVTK_SetRotationPointDlg +::onSelectPoint() +{ + if ( mySelectPoint->state() == QButton::On ) + myMainWindow->activateStartPointSelection(); + else + mySelectPoint->toggle(); +} + +void +SVTK_SetRotationPointDlg +::onCoordChanged() +{ + if ( !myIsBBCenter->isChecked() ) { + if ( mySelectPoint->state() == QButton::On + && + ( myX->hasFocus() || myY->hasFocus() || myZ->hasFocus() ) ) + mySelectPoint->toggle(); + vtkFloatingPointType aCenter[3] = {myX->text().toDouble(), + myY->text().toDouble(), + myZ->text().toDouble()}; + myMainWindow->activateSetRotationSelected((void*)aCenter); + } + else + myMainWindow->activateSetRotationGravity(); +} + +void +SVTK_SetRotationPointDlg +::onClickClose() +{ + reject(); +} + + diff --git a/src/SVTK/SVTK_SetRotationPointDlg.h b/src/SVTK/SVTK_SetRotationPointDlg.h new file mode 100755 index 000000000..a598affc7 --- /dev/null +++ b/src/SVTK/SVTK_SetRotationPointDlg.h @@ -0,0 +1,110 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// +// +// File : +// Author : +// Module : SALOME +// $Header$ + +#ifndef SVTK_SETROTATIONPOINTDLG_H +#define SVTK_SETROTATIONPOINTDLG_H + +#include "SVTK.h" + +#include "SVTK_DialogBase.h" + +#include + +class SVTK_MainWindow; +class SVTK_RenderWindowInteractor; + +class QtxAction; + +class QLineEdit; +class QPushButton; +class QGroupBox; +class QButtonGroup; +class QCheckBox; + +class vtkCallbackCommand; +class vtkObject; + +class SVTK_EXPORT SVTK_SetRotationPointDlg : public SVTK_DialogBase +{ + Q_OBJECT; + +public: + SVTK_SetRotationPointDlg(QtxAction* theAction, + SVTK_MainWindow* theParent, + const char* theName); + + ~SVTK_SetRotationPointDlg(); + + void addObserver(); + bool IsFirstShown(); + +protected: + SVTK_MainWindow *myMainWindow; + SVTK_RenderWindowInteractor* myRWInteractor; + bool myIsObserverAdded; + + QCheckBox* myIsBBCenter; + + QButtonGroup* myGroupSelButton; + QPushButton* myToOrigin; + QPushButton* mySelectPoint; + + QGroupBox* myGroupBoxCoord; + QLineEdit* myX; + QLineEdit* myY; + QLineEdit* myZ; + + void setEnabled(QGroupBox* theGrp, const bool theState); + + //---------------------------------------------------------------------------- + // Priority at which events are processed + vtkFloatingPointType myPriority; + + // Used to process events + vtkSmartPointer myEventCallbackCommand; + + // Description: + // Main process event method + static void ProcessEvents(vtkObject* object, + unsigned long event, + void* clientdata, + void* calldata); + +protected slots: + void onBBCenterChecked(); + + void onToOrigin(); + void onSelectPoint(); + + void onCoordChanged(); + + void onClickClose(); + +}; + +#endif // SVTK_SETROTATIONPOINTDLG_H diff --git a/src/SVTK/SVTK_SpaceMouse.cxx b/src/SVTK/SVTK_SpaceMouse.cxx index c6913f782..7d858a780 100644 --- a/src/SVTK/SVTK_SpaceMouse.cxx +++ b/src/SVTK/SVTK_SpaceMouse.cxx @@ -30,11 +30,13 @@ #include #include +#ifndef WIN32 #include #include #include #include #include +#endif #include "SVTK_SpaceMouse.h" @@ -55,10 +57,14 @@ SVTK_SpaceMouse* SVTK_SpaceMouse::getInstance() */ SVTK_SpaceMouse::SVTK_SpaceMouse() { +#ifndef WIN32 win = InputFocus; +#endif spaceMouseOn = 0; } +#ifndef WIN32 + /*! Initialization */ @@ -204,3 +210,4 @@ int SVTK_SpaceMouse::translateEvent( Display* display, XEvent* xEvent, MoveEvent return (!display); } +#endif diff --git a/src/SVTK/SVTK_SpaceMouse.h b/src/SVTK/SVTK_SpaceMouse.h index 3c675f71e..f920bf44a 100644 --- a/src/SVTK/SVTK_SpaceMouse.h +++ b/src/SVTK/SVTK_SpaceMouse.h @@ -29,11 +29,13 @@ #ifndef SVTK_SpaceMouse_h #define SVTK_SpaceMouse_h +#ifndef WIN32 extern "C" { #include #include } +#endif class SVTK_SpaceMouse { @@ -54,21 +56,25 @@ class SVTK_SpaceMouse bool isSpaceMouseOn() const { return spaceMouseOn != 0; } +#ifndef WIN32 int initialize ( Display*, Window ); int setWindow ( Display*, Window ); int translateEvent ( Display*, XEvent*, MoveEvent*, double, double ); int close ( Display* ); +#endif private: SVTK_SpaceMouse(); static SVTK_SpaceMouse* myInstance; +#ifndef WIN32 Atom XMotionEvent; Atom XButtonPressEvent; Atom XButtonReleaseEvent; Atom XCommandEvent; Window win; +#endif int spaceMouseOn; }; diff --git a/src/SVTK/SVTK_Trihedron.cxx b/src/SVTK/SVTK_Trihedron.cxx index ac0bbd4d8..45751cfec 100644 --- a/src/SVTK/SVTK_Trihedron.cxx +++ b/src/SVTK/SVTK_Trihedron.cxx @@ -46,9 +46,13 @@ SVTK_Trihedron int aCount = 0; while(vtkActor* aProp = aCollection->GetNextActor()) { if(aProp->GetVisibility()) - if(SALOME_Actor* anActor = SALOME_Actor::SafeDownCast(aProp)) + if(SALOME_Actor* anActor = SALOME_Actor::SafeDownCast(aProp)) { if(!anActor->IsInfinitive()) - aCount++; + aCount++; + } + else if ( !OwnActor( anActor ) ) { + aCount++; + } } return aCount; } diff --git a/src/SVTK/SVTK_View.cxx b/src/SVTK/SVTK_View.cxx index 882728b3a..34ea47300 100644 --- a/src/SVTK/SVTK_View.cxx +++ b/src/SVTK/SVTK_View.cxx @@ -259,9 +259,10 @@ SVTK_View void SVTK_View ::SetSelectionTolerance(const double& theTolNodes, - const double& theTolCell) + const double& theTolCell, + const double& theTolObjects) { - GetRenderer()->SetSelectionTolerance(theTolNodes,theTolCell); + GetRenderer()->SetSelectionTolerance(theTolNodes,theTolCell, theTolObjects); } /*! diff --git a/src/SVTK/SVTK_View.h b/src/SVTK/SVTK_View.h index 4c25de9bc..c7cc984b9 100644 --- a/src/SVTK/SVTK_View.h +++ b/src/SVTK/SVTK_View.h @@ -251,7 +251,8 @@ public: //! Redirect the request to #SVTK_Renderer::SetPreselectionProp void SetSelectionTolerance(const double& theTolNodes = 0.025, - const double& theTolCell = 0.001); + const double& theTolCell = 0.001, + const double& theTolObjects = 0.025); protected: int myDisplayMode; diff --git a/src/SVTK/SVTK_ViewManager.cxx b/src/SVTK/SVTK_ViewManager.cxx index 3465d1535..b7856fdc7 100644 --- a/src/SVTK/SVTK_ViewManager.cxx +++ b/src/SVTK/SVTK_ViewManager.cxx @@ -19,17 +19,15 @@ #include "SVTK_ViewManager.h" #include "SVTK_ViewModel.h" -int SVTK_ViewManager::_SVTKViewMgr_Id = 0; +#include /*! Constructor */ -SVTK_ViewManager::SVTK_ViewManager( SUIT_Study* study, - SUIT_Desktop* theDesktop ) -: SUIT_ViewManager( study, theDesktop ) +SVTK_ViewManager::SVTK_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop ) +: SUIT_ViewManager( study, theDesktop, new SVTK_Viewer() ) { - myId = ++_SVTKViewMgr_Id; - setViewModel( new SVTK_Viewer() ); + setTitle( VTKViewer_ViewManager::tr( "VTK_VIEW_TITLE" ) ); } /*! @@ -46,12 +44,3 @@ SUIT_Desktop* SVTK_ViewManager::getDesktop() { return myDesktop; } - -/*! - Sets default name of view -*/ -void SVTK_ViewManager::setViewName(SUIT_ViewWindow* theView) -{ - int aPos = myViews.find(theView); - theView->setCaption( tr( "VTK_VIEW_TITLE" ).arg( myId ).arg( aPos + 1 ) ); -} diff --git a/src/SVTK/SVTK_ViewManager.h b/src/SVTK/SVTK_ViewManager.h index eda062600..8ff4efcc9 100644 --- a/src/SVTK/SVTK_ViewManager.h +++ b/src/SVTK/SVTK_ViewManager.h @@ -37,13 +37,6 @@ public: virtual ~SVTK_ViewManager(); SUIT_Desktop* getDesktop(); - -protected: - void setViewName( SUIT_ViewWindow* theView ); - -private: - int myId; - static int _SVTKViewMgr_Id; }; #endif diff --git a/src/SVTK/SVTK_ViewModel.cxx b/src/SVTK/SVTK_ViewModel.cxx index 61cde9d5b..0624c7d47 100644 --- a/src/SVTK/SVTK_ViewModel.cxx +++ b/src/SVTK/SVTK_ViewModel.cxx @@ -127,7 +127,7 @@ createView( SUIT_Desktop* theDesktop ) /*! \return trihedron size */ -int SVTK_Viewer::trihedronSize() const +vtkFloatingPointType SVTK_Viewer::trihedronSize() const { return myTrihedronSize; } @@ -145,17 +145,17 @@ bool SVTK_Viewer::trihedronRelative() const \param theSize - new size \param theRelative - new relativeness */ -void SVTK_Viewer::setTrihedronSize( const int theSize, const bool theRelative ) +void SVTK_Viewer::setTrihedronSize( const vtkFloatingPointType theSize, const bool theRelative ) { myTrihedronSize = theSize; myTrihedronRelative = theRelative; if (SUIT_ViewManager* aViewManager = getViewManager()) { QPtrVector aViews = aViewManager->getViews(); - for (int i = 0; i < aViews.count(); i++) { - if (TViewWindow* aView = dynamic_cast(aViews.at(i))) { - aView->SetTrihedronSize(theSize, theRelative); - } + for ( uint i = 0; i < aViews.count(); i++ ) + { + if ( TViewWindow* aView = dynamic_cast(aViews.at( i )) ) + aView->SetTrihedronSize( theSize, theRelative ); } } } @@ -197,6 +197,7 @@ SVTK_Viewer if ( !aView->getMainWindow()->getToolBar()->isVisible() ){ thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) ); } + aView->RefreshDumpImage(); } } diff --git a/src/SVTK/SVTK_ViewModel.h b/src/SVTK/SVTK_ViewModel.h index 3c55105c1..ec61193b2 100644 --- a/src/SVTK/SVTK_ViewModel.h +++ b/src/SVTK/SVTK_ViewModel.h @@ -63,13 +63,13 @@ public: void setBackgroundColor( const QColor& ); //! Get size of trihedron of the viewer (see #SVTK_Renderer::SetTrihedronSize) - int trihedronSize() const; + vtkFloatingPointType trihedronSize() const; //! Shows if the size of trihedron relative (see #SVTK_Renderer::SetTrihedronSize) bool trihedronRelative() const; //! Set size of trihedron of the viewer (see #SVTK_Renderer::SetTrihedronSize) - void setTrihedronSize( const int, const bool = true ); + void setTrihedronSize( const vtkFloatingPointType, const bool = true ); public: void enableSelection(bool isEnabled); @@ -117,7 +117,7 @@ protected slots: private: QColor myBgColor; - int myTrihedronSize; + vtkFloatingPointType myTrihedronSize; bool myTrihedronRelative; bool mySelectionEnabled; bool myMultiSelectionEnabled; diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index 3fee43d8e..56317d592 100755 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -29,6 +29,7 @@ #include #include #include +#include #include "QtxAction.h" @@ -61,6 +62,31 @@ #include "VTKViewer_Algorithm.h" #include "SVTK_Functor.h" + +namespace SVTK +{ + int convertAction( const int accelAction ) + { + switch ( accelAction ) { + case SUIT_Accel::PanLeft : return SVTK::PanLeftEvent; + case SUIT_Accel::PanRight : return SVTK::PanRightEvent; + case SUIT_Accel::PanUp : return SVTK::PanUpEvent; + case SUIT_Accel::PanDown : return SVTK::PanDownEvent; + case SUIT_Accel::ZoomIn : return SVTK::ZoomInEvent; + case SUIT_Accel::ZoomOut : return SVTK::ZoomOutEvent; + case SUIT_Accel::RotateLeft : return SVTK::RotateLeftEvent; + case SUIT_Accel::RotateRight : return SVTK::RotateRightEvent; + case SUIT_Accel::RotateUp : return SVTK::RotateUpEvent; + case SUIT_Accel::RotateDown : return SVTK::RotateDownEvent; + } + return accelAction; + } +} + + + + + /*! Constructor */ @@ -68,7 +94,8 @@ SVTK_ViewWindow ::SVTK_ViewWindow(SUIT_Desktop* theDesktop): SUIT_ViewWindow(theDesktop), myMainWindow(NULL), - myView(NULL) + myView(NULL), + myDumpImage(QImage()) {} /*! @@ -442,6 +469,7 @@ SVTK_ViewWindow ::setBackgroundColor( const QColor& color ) { myMainWindow->SetBackgroundColor( color ); + SUIT_ViewWindow::setBackgroundColor( color ); } /*! @@ -547,7 +575,7 @@ SVTK_ViewWindow /*! \return trihedron size */ -int +vtkFloatingPointType SVTK_ViewWindow ::GetTrihedronSize() const { @@ -561,7 +589,7 @@ SVTK_ViewWindow */ void SVTK_ViewWindow -::SetTrihedronSize(const int theSize, const bool theRelative) +::SetTrihedronSize(const vtkFloatingPointType theSize, const bool theRelative) { myMainWindow->SetTrihedronSize(theSize, theRelative); } @@ -684,8 +712,59 @@ SVTK_ViewWindow QImage SVTK_ViewWindow ::dumpView() +{ + if ( myMainWindow->getToolBar()->hasMouse() || myDumpImage.isNull() ) + return myMainWindow->dumpView(); + + return myDumpImage; +} + +QString SVTK_ViewWindow::filter() const { - return myMainWindow->dumpView(); + return tr( "SVTK_IMAGE_FILES" ); +} + +bool SVTK_ViewWindow::dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format ) +{ + if ( format != "PS" && format != "EPS" && format != "PDF" ) + return SUIT_ViewWindow::dumpViewToFormat( img, fileName, format ); + + QApplication::setOverrideCursor( Qt::waitCursor ); + + vtkGL2PSExporter *anExporter = vtkGL2PSExporter::New(); + anExporter->SetRenderWindow(getRenderWindow()); + + if ( format == "PS" ) { + anExporter->SetFileFormatToPS(); + anExporter->CompressOff(); + } + + if ( format == "EPS" ) { + anExporter->SetFileFormatToEPS(); + anExporter->CompressOff(); + } + + if ( format == "PDF" ) { + anExporter->SetFileFormatToPDF(); + } + + QString aFilePrefix(fileName); + QString anExtension(SUIT_Tools::extension(fileName)); + aFilePrefix.truncate(aFilePrefix.length() - 1 - anExtension.length()); + anExporter->SetFilePrefix(aFilePrefix.latin1()); + anExporter->Write(); + anExporter->Delete(); + + QApplication::restoreOverrideCursor(); + return true; +} + +/*! + \refresh QImage, containing all scene rendering in window +*/ +void SVTK_ViewWindow::RefreshDumpImage() +{ + myDumpImage = myMainWindow->dumpView(); } /*! @@ -720,26 +799,10 @@ SVTK_ViewWindow void SVTK_ViewWindow ::SetSelectionTolerance(const double& theTolNodes, - const double& theTolItems) + const double& theTolItems, + const double& theTolObjects) { - myView->SetSelectionTolerance(theTolNodes,theTolItems); -} - -int convertAction( const int accelAction ) -{ - switch ( accelAction ) { - case SUIT_Accel::PanLeft : return SVTK::PanLeftEvent; - case SUIT_Accel::PanRight : return SVTK::PanRightEvent; - case SUIT_Accel::PanUp : return SVTK::PanUpEvent; - case SUIT_Accel::PanDown : return SVTK::PanDownEvent; - case SUIT_Accel::ZoomIn : return SVTK::ZoomInEvent; - case SUIT_Accel::ZoomOut : return SVTK::ZoomOutEvent; - case SUIT_Accel::RotateLeft : return SVTK::RotateLeftEvent; - case SUIT_Accel::RotateRight : return SVTK::RotateRightEvent; - case SUIT_Accel::RotateUp : return SVTK::RotateUpEvent; - case SUIT_Accel::RotateDown : return SVTK::RotateDownEvent; - } - return accelAction; + myView->SetSelectionTolerance(theTolNodes,theTolItems, theTolObjects); } /*! @@ -755,7 +818,7 @@ SVTK_ViewWindow if ( accelAction == SUIT_Accel::ZoomFit ) onFitAll(); else { - int anEvent = convertAction( accelAction ); + int anEvent = SVTK::convertAction( accelAction ); myMainWindow->InvokeEvent( anEvent, 0 ); } return true; diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h index 7a592578b..dca18f085 100755 --- a/src/SVTK/SVTK_ViewWindow.h +++ b/src/SVTK/SVTK_ViewWindow.h @@ -28,6 +28,8 @@ #include "SUIT_ViewWindow.h" #include "SALOME_InteractiveObject.hxx" +#include + class SUIT_Desktop; class VTKViewer_Actor; @@ -48,6 +50,12 @@ class vtkRenderer; class vtkRenderWindow; class vtkRenderWindowInteractor; +namespace SVTK +{ + SVTK_EXPORT + int convertAction( const int ); +} + //! Define a container for SALOME VTK view window class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow { @@ -60,6 +68,8 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow virtual ~SVTK_ViewWindow(); + virtual QImage dumpView(); + //! To initialize #SVTK_ViewWindow instance virtual void @@ -213,13 +223,13 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow GetCubeAxes(); //! Redirect the request to #SVTK_Renderer::GetTrihedronSize - int + vtkFloatingPointType GetTrihedronSize() const; //! Redirect the request to #SVTK_Renderer::SetTrihedronSize virtual void - SetTrihedronSize( const int, const bool = true ); + SetTrihedronSize( const vtkFloatingPointType, const bool = true ); //! Redirect the request to #SVTK_Renderer::SetSelectionProp virtual @@ -241,7 +251,8 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow virtual void SetSelectionTolerance(const double& theTolNodes = 0.025, - const double& theTolCell = 0.001); + const double& theTolCell = 0.001, + const double& theTolObjects = 0.025); //! Methods to save/restore visual parameters of a view (pan, zoom, etc.) virtual @@ -255,6 +266,9 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow virtual bool eventFilter( QObject*, QEvent* ); + + virtual + void RefreshDumpImage(); public slots: virtual @@ -342,14 +356,19 @@ protected: void doSetVisualParameters( const QString& ); - QImage dumpView(); + virtual QString filter() const; + virtual bool dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format ); + virtual bool action( const int ); - + SVTK_View* myView; SVTK_MainWindow* myMainWindow; SVTK_ViewModelBase* myModel; QString myVisualParams; // used for delayed setting of view parameters + +private: + QImage myDumpImage; }; #ifdef WIN32 diff --git a/src/SVTK/resources/SVTK_msg_en.po b/src/SVTK/resources/SVTK_msg_en.po index 1e28bfdbd..6e5f620d3 100755 --- a/src/SVTK/resources/SVTK_msg_en.po +++ b/src/SVTK/resources/SVTK_msg_en.po @@ -113,6 +113,12 @@ msgstr "Rotation of the point of view around the scene center" msgid "MNU_ROTATE_VIEW" msgstr "Rotation" +msgid "DSC_CHANGINGROTATIONPOINT_VIEW" +msgstr "Change the point, around which the rotation is performed" + +msgid "MNU_CHANGINGROTATIONPOINT_VIEW" +msgstr "Change Rotation Point" + msgid "DSC_DUMP_VIEW" msgstr "Saves the active view in the image file" @@ -182,6 +188,39 @@ msgstr "Scaling" msgid "SVTK_MainWindow::DSC_SVTK_SCALING" msgstr "Scaling" +msgid "SVTK_SetRotationPointDlg::DLG_TITLE" +msgstr "Set Rotation Point" + +msgid "SVTK_SetRotationPointDlg::USE_BBCENTER" +msgstr "Use Bounding Box Center" + +msgid "SVTK_SetRotationPointDlg::LBL_TOORIGIN" +msgstr "Set to Origin" + +msgid "SVTK_SetRotationPointDlg::LBL_SELECTPOINT" +msgstr "Select Point from View" + +msgid "SVTK_SetRotationPointDlg::LBL_CENTER_OF_BOUNDING_BOX" +msgstr "Center of bounding box" + +msgid "SVTK_SetRotationPointDlg::LBL_ORIGIN" +msgstr "Origin of the coordinate system" + +msgid "SVTK_SetRotationPointDlg::LBL_SELECTED_POINT" +msgstr "Selected point" + +msgid "SVTK_SetRotationPointDlg::LBL_X" +msgstr "X :" + +msgid "SVTK_SetRotationPointDlg::LBL_Y" +msgstr "Y :" + +msgid "SVTK_SetRotationPointDlg::LBL_Z" +msgstr "Z :" + +msgid "SVTK_SetRotationPointDlg::RBUTTONGROUP_TITLE" +msgstr "The rotation point type" + msgid "SVTK_FontWidget::ARIAL" msgstr "Arial" @@ -275,3 +314,5 @@ msgstr "Current Update Rate, FPS" msgid "SVTK_UpdateRateDlg::NUMBER_CELLS" msgstr "Number of Cells, -" +msgid "SVTK_IMAGE_FILES" +msgstr "Images Files (*.bmp *.png *.jpg *.jpeg *.pdf *.ps *.eps)"" \ No newline at end of file diff --git a/src/SalomeApp/Makefile.am b/src/SalomeApp/Makefile.am new file mode 100755 index 000000000..7ced4827f --- /dev/null +++ b/src/SalomeApp/Makefile.am @@ -0,0 +1,110 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : SalomeApp +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +if CPPUNIT_IS_OK +if GUI_ENABLE_CORBA + SUBDIRS=Test +endif +endif + +lib_LTLIBRARIES= libSalomeApp.la + +salomeinclude_HEADERS= \ + SalomeApp.h \ + SalomeApp_Application.h \ + SalomeApp_DataModel.h \ + SalomeApp_DataObject.h \ + SalomeApp_Module.h \ + SalomeApp_Study.h \ + SalomeApp_ExceptionHandler.h \ + SalomeApp_EventFilter.h \ + SalomeApp_Tools.h \ + SalomeApp_ImportOperation.h \ + SalomeApp_Filter.h \ + SalomeApp_TypeFilter.h \ + SalomeApp_StudyPropertiesDlg.h \ + SalomeApp_CheckFileDlg.h \ + SalomeApp_VisualState.h \ + SalomeApp_ExitDlg.h + +dist_libSalomeApp_la_SOURCES= \ + SalomeApp_Module.cxx \ + SalomeApp_Application.cxx \ + SalomeApp_DataModel.cxx \ + SalomeApp_DataObject.cxx \ + SalomeApp_Study.cxx \ + SalomeApp_ExceptionHandler.cxx \ + SalomeApp_EventFilter.cxx \ + SalomeApp_PyInterp.cxx \ + SalomeApp_Tools.cxx \ + SalomeApp_ImportOperation.cxx \ + SalomeApp_Filter.cxx \ + SalomeApp_TypeFilter.cxx \ + SalomeApp_StudyPropertiesDlg.cxx \ + SalomeApp_ListView.cxx \ + SalomeApp_CheckFileDlg.cxx \ + SalomeApp_VisualState.cxx \ + SalomeApp_ExitDlg.cxx + +MOC_FILES= \ + SalomeApp_Application_moc.cxx \ + SalomeApp_DataModel_moc.cxx \ + SalomeApp_Module_moc.cxx \ + SalomeApp_Study_moc.cxx \ + SalomeApp_StudyPropertiesDlg_moc.cxx \ + SalomeApp_ListView_moc.cxx \ + SalomeApp_CheckFileDlg_moc.cxx \ + SalomeApp_ExitDlg_moc.cxx + +nodist_libSalomeApp_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA= \ + resources/SalomeApp.ini \ + resources/SalomeApp.xml + +nodist_salomeres_DATA= \ + SalomeApp_images.qm \ + SalomeApp_msg_en.qm + +libSalomeApp_la_CPPFLAGS=$(PYTHON_INCLUDES) $(QT_INCLUDES) $(QWT_INCLUDES) \ + $(CAS_CPPFLAGS) $(VTK_INCLUDES) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ \ + -I$(srcdir)/../LightApp -I$(srcdir)/../CAM -I$(srcdir)/../Qtx \ + -I$(srcdir)/../SUIT -I$(srcdir)/../OBJECT -I$(srcdir)/../SVTK \ + -I$(srcdir)/../STD -I$(srcdir)/../VTKViewer -I$(srcdir)/../ObjBrowser \ + -I$(srcdir)/../PythonConsole -I$(srcdir)/../TOOLSGUI \ + -I$(srcdir)/../PyInterp -I$(srcdir)/../Session -I$(top_builddir)/idl \ + -I$(srcdir)/../Event \ + -I$(srcdir)/../CASCatch \ + -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @LIBXML_INCLUDES@ +libSalomeApp_la_LDFLAGS=$(PYTHON_LIBS) $(QT_MT_LIBS) +libSalomeApp_la_LIBADD= $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSalomeDSClient \ + ../SUIT/libsuit.la ../STD/libstd.la ../CAM/libCAM.la ../ObjBrowser/libObjBrowser.la \ + ../Prs/libSalomePrs.la ../SPlot2d/libSPlot2d.la ../GLViewer/libGLViewer.la \ + ../OCCViewer/libOCCViewer.la ../VTKViewer/libVTKViewer.la ../OBJECT/libSalomeObject.la \ + ../SVTK/libSVTK.la ../SOCC/libSOCC.la ../PyInterp/libPyInterp.la \ + ../PythonConsole/libPythonConsole.la ../LogWindow/libLogWindow.la \ + ../LightApp/libLightApp.la ../TOOLSGUI/libToolsGUI.la ../CASCatch/libCASCatch.la $(CAS_KERNEL) + +EXTRA_DIST+=SalomeApp_PyInterp.h diff --git a/src/SalomeApp/Makefile.in b/src/SalomeApp/Makefile.in deleted file mode 100755 index ed377dfaf..000000000 --- a/src/SalomeApp/Makefile.in +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : SalomeApp -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= SalomeApp.h \ - SalomeApp_Application.h \ - SalomeApp_DataModel.h \ - SalomeApp_DataObject.h \ - SalomeApp_Module.h \ - SalomeApp_Study.h \ - SalomeApp_ExceptionHandler.h \ - SalomeApp_EventFilter.h \ - SalomeApp_Tools.h \ - SalomeApp_ImportOperation.h \ - SalomeApp_Filter.h \ - SalomeApp_TypeFilter.h \ - SalomeApp_StudyPropertiesDlg.h \ - SalomeApp_CheckFileDlg.h \ - SalomeApp_VisualState.h - -# .po files to transform in .qm -PO_FILES = SalomeApp_images.po \ - SalomeApp_msg_en.po - -# Libraries targets -LIB = libSalomeApp.la - -LIB_SRC= SalomeApp_Module.cxx \ - SalomeApp_Application.cxx \ - SalomeApp_DataModel.cxx \ - SalomeApp_DataObject.cxx \ - SalomeApp_Study.cxx \ - SalomeApp_ExceptionHandler.cxx \ - SalomeApp_EventFilter.cxx \ - SalomeApp_PyInterp.cxx \ - SalomeApp_Tools.cxx \ - SalomeApp_ImportOperation.cxx \ - SalomeApp_Filter.cxx \ - SalomeApp_TypeFilter.cxx \ - SalomeApp_StudyPropertiesDlg.cxx \ - SalomeApp_ListView.cxx \ - SalomeApp_CheckFileDlg.cxx \ - SalomeApp_VisualState.cxx - -LIB_MOC = SalomeApp_Application.h \ - SalomeApp_DataModel.h \ - SalomeApp_Module.h \ - SalomeApp_Study.h \ - SalomeApp_StudyPropertiesDlg.h \ - SalomeApp_ListView.h \ - SalomeApp_CheckFileDlg.h - -LIB_CLIENT_IDL = SALOMEDS.idl \ - SALOME_Exception.idl \ - SALOME_GenericObj.idl - -RESOURCES_FILES = SalomeApp.ini \ - SalomeApp.xml - -CPPFLAGS+=$(PYTHON_INCLUDES) $(QT_INCLUDES) $(QWT_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(BOOST_CPPFLAGS) $(KERNEL_CXXFLAGS) - -LDFLAGS+=$(PYTHON_LIBS) $(QT_MT_LIBS) -LIBS+= -lsuit -lstd -lCAM -lObjBrowser -lSalomePrs $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSalomeDSClient $(CAS_KERNEL) -lSPlot2d -lGLViewer -lOCCViewer -lVTKViewer -lSalomeObject -lSVTK -lSOCC -lPyInterp -lPythonConsole -lLogWindow -lLightApp -lSalomeContainer -lToolsGUI - -@CONCLUDE@ - - - - - diff --git a/src/SalomeApp/SalomeApp_Application.cxx b/src/SalomeApp/SalomeApp_Application.cxx index 5e73de8a6..802d7d7b0 100644 --- a/src/SalomeApp/SalomeApp_Application.cxx +++ b/src/SalomeApp/SalomeApp_Application.cxx @@ -30,6 +30,7 @@ #include "SalomeApp_DataObject.h" #include "SalomeApp_EventFilter.h" #include "SalomeApp_VisualState.h" +#include "SalomeApp_ExitDlg.h" #include "SalomeApp_StudyPropertiesDlg.h" @@ -43,6 +44,7 @@ #include #include +#include #include @@ -61,7 +63,6 @@ #include #include -#include #include #include #include @@ -69,6 +70,7 @@ #include #include #include +#include #include "SALOMEDSClient_ClientFactory.hxx" #include "SALOMEDSClient_IParameters.hxx" @@ -81,6 +83,51 @@ #include +#include +/*!Internal class that updates object browser item properties */ +class SalomeApp_Updater : public OB_Updater +{ +public: + SalomeApp_Updater() : OB_Updater(){}; + virtual ~SalomeApp_Updater(){}; + virtual void update( SUIT_DataObject* theObj, OB_ListItem* theItem ); +}; + +void SalomeApp_Updater::update( SUIT_DataObject* theObj, OB_ListItem* theItem ) +{ + if( !theObj || !theItem ) + return; + + SalomeApp_DataObject* SAObj = dynamic_cast( theObj ); + if( !SAObj ) + return; + + _PTR(SObject) SObj = SAObj->object(); + if( !SObj ) + return; + _PTR( GenericAttribute ) anAttr; + + // Selectable + if ( SObj->FindAttribute( anAttr, "AttributeSelectable" ) ) + { + _PTR(AttributeSelectable) aAttrSel = anAttr; + theItem->setSelectable( aAttrSel->IsSelectable() ); + } + // Expandable + if ( SObj->FindAttribute(anAttr, "AttributeExpandable") ) + { + _PTR(AttributeExpandable) aAttrExpand = anAttr; + theItem->setExpandable( aAttrExpand->IsExpandable() ); + } + // Opened + //this attribute is not supported in the version of SALOME 3.x + //if ( SObj->FindAttribute(anAttr, "AttributeOpened") ) + //{ + // _PTR(AttributeOpened) aAttrOpen = anAttr; + // theItem->setOpen( aAttrOpen->IsOpened() ); + //} +} + /*!Create new instance of SalomeApp_Application.*/ extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication() { @@ -91,6 +138,8 @@ extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication() SalomeApp_Application::SalomeApp_Application() : LightApp_Application() { + connect( desktop(), SIGNAL( message( const QString& ) ), + this, SLOT( onDesktopMessage( const QString& ) ) ); } /*!Destructor. @@ -108,6 +157,66 @@ void SalomeApp_Application::start() LightApp_Application::start(); SalomeApp_EventFilter::Init(); + + static bool isFirst = true; + if ( isFirst ) { + isFirst = false; + + QString hdffile; + QStringList pyfiles; + + for (int i = 1; i < qApp->argc(); i++) { + QRegExp rxs ("--study-hdf=(.+)"); + if ( rxs.search( QString(qApp->argv()[i]) ) >= 0 && rxs.capturedTexts().count() > 1 ) { + QString file = rxs.capturedTexts()[1]; + QFileInfo fi ( file ); + QString extension = fi.extension( false ).lower(); + if ( extension == "hdf" && fi.exists() ) + hdffile = fi.absFilePath(); + } + else { + QRegExp rxp ("--pyscript=(.+)"); + if ( rxp.search( QString(qApp->argv()[i]) ) >= 0 && rxp.capturedTexts().count() > 1 ) { + QStringList files = QStringList::split(",",rxp.capturedTexts()[1],false); + pyfiles += files; + } + } + } + + if ( !hdffile.isEmpty() ) // open hdf file given as parameter + onOpenDoc( hdffile ); + else if ( pyfiles.count() > 0 ) // create new study + onNewDoc(); + + // import/execute python scripts + if ( pyfiles.count() > 0 && activeStudy() ) { + SalomeApp_Study* appStudy = dynamic_cast( activeStudy() ); + if ( appStudy ) { + _PTR(Study) aStudy = appStudy->studyDS(); + if ( !aStudy->GetProperties()->IsLocked() ) { + for (uint j = 0; j < pyfiles.count(); j++ ) { + QFileInfo fi ( pyfiles[j] ); + PythonConsole* pyConsole = pythonConsole(); + if ( pyConsole ) { + QString extension = fi.extension( false ).lower(); + if ( fi.exists() ) { + // execute python script + QString command = QString( "execfile(\"%1\")" ).arg( fi.absFilePath() ); + pyConsole->exec( command ); + } + else { + // import python module + QString command = QString( "import %1" ).arg( pyfiles[j] ); + if ( extension == "py" ) + command = QString( "import %1" ).arg( fi.baseName( true ) ); + pyConsole->exec( command ); + } + } + } + } + } + } + } } /*!Create actions:*/ @@ -148,12 +257,22 @@ void SalomeApp_Application::createActions() tr( "MEN_DESK_REGISTRY_DISPLAY" ), tr( "PRP_DESK_REGISTRY_DISPLAY" ), /*SHIFT+Key_D*/0, desk, false, this, SLOT( onRegDisplay() ) ); + //SRN: BugID IPAL9021, add an action "Load" + createAction( FileLoadId, tr( "TOT_DESK_FILE_LOAD" ), + resourceMgr()->loadPixmap( "STD", tr( "ICON_FILE_OPEN" ) ), + tr( "MEN_DESK_FILE_LOAD" ), tr( "PRP_DESK_FILE_LOAD" ), + CTRL+Key_L, desk, false, this, SLOT( onLoadDoc() ) ); + //SRN: BugID IPAL9021: End + + int fileMenu = createMenu( tr( "MEN_DESK_FILE" ), -1 ); // "Save GUI State" command is renamed to "Save VISU State" and // creation of menu item is moved to VISU // createMenu( SaveGUIStateId, fileMenu, 10, -1 ); + createMenu( FileLoadId, fileMenu, 0 ); //SRN: BugID IPAL9021, add a menu item "Load" + createMenu( DumpStudyId, fileMenu, 10, -1 ); createMenu( separator(), fileMenu, -1, 15, -1 ); createMenu( LoadScriptId, fileMenu, 10, -1 ); @@ -299,7 +418,11 @@ void SalomeApp_Application::onLoadDoc() return; name = studyname; +#ifndef WNT + //this code replace marker of windows drive and path become invalid therefore + // defines placed there name.replace( QRegExp(":"), "/" ); +#endif if( LightApp_Application::onLoadDoc( name ) ) { @@ -309,6 +432,23 @@ void SalomeApp_Application::onLoadDoc() } } +/*! + \brief Close application. +*/ +void SalomeApp_Application::onExit() +{ + bool killServers = false; + bool result = true; + + if ( exitConfirmation() ) { + SalomeApp_ExitDlg dlg( desktop() ); + result = dlg.exec() == QDialog::Accepted; + killServers = dlg.isServersShutdown(); + } + + if ( result ) + SUIT_Session::session()->closeSession( SUIT_Session::ASK, killServers ); +} /*!SLOT. Load document with \a aName.*/ bool SalomeApp_Application::onLoadDoc( const QString& aName ) @@ -377,6 +517,29 @@ void SalomeApp_Application::onPaste() } } +/*! Check if the study is locked */ +void SalomeApp_Application::onCloseDoc( bool ask ) +{ + SalomeApp_Study* study = dynamic_cast(activeStudy()); + + if (study != NULL) { + _PTR(Study) stdDS = study->studyDS(); + if(stdDS && stdDS->IsStudyLocked()) { + if ( SUIT_MessageBox::warn2( desktop(), + QObject::tr( "WRN_WARNING" ), + QObject::tr( "CLOSE_LOCKED_STUDY" ), + QObject::tr( "BUT_YES" ), + QObject::tr( "BUT_NO" ), + SUIT_YES, + SUIT_NO, + SUIT_NO ) == SUIT_NO ) return; + + } + } + + LightApp_Application::onCloseDoc( ask ); +} + /*!Sets enable or disable some actions on selection changed.*/ void SalomeApp_Application::onSelectionChanged() { @@ -539,8 +702,27 @@ void SalomeApp_Application::onDumpStudy( ) fd->setFilters( aFilters ); fd->myPublishChk->setChecked( true ); fd->mySaveGUIChk->setChecked( true ); - fd->exec(); - QString aFileName = fd->selectedFile(); + QString aFileName; + while (1) { + fd->exec(); + fd->raise(); + aFileName = fd->selectedFile(); + if (!aFileName.isEmpty()) { + if ( (aFileName.find('-', 0) == -1) && (aFileName.find('!', 0) == -1) && (aFileName.find('?', 0) == -1) && + (aFileName.find('#', 0) == -1) && (aFileName.find('*', 0) == -1) && (aFileName.find('&', 0) == -1)) { + break; + } + else { + SUIT_MessageBox::warn1 ( desktop(), + QObject::tr("WRN_WARNING"), + tr("WRN_FILE_NAME_BAD"), + QObject::tr("BUT_OK") ); + } + } + else { + break; + } + } bool toPublish = fd->myPublishChk->isChecked(); bool toSaveGUI = fd->mySaveGUIChk->isChecked(); delete fd; @@ -629,6 +811,7 @@ QWidget* SalomeApp_Application::createWindow( const int flag ) if ( flag == WT_ObjectBrowser ) { OB_Browser* ob = (OB_Browser*)wid; + ob->setUpdater( new SalomeApp_Updater() ); connect( ob->listView(), SIGNAL( doubleClicked( QListViewItem* ) ), this, SLOT( onDblClick( QListViewItem* ) ) ); bool autoSize = resMgr->booleanValue( "ObjectBrowser", "auto_size", false ), autoSizeFirst = resMgr->booleanValue( "ObjectBrowser", "auto_size_first", true ); @@ -705,6 +888,80 @@ void SalomeApp_Application::updateDesktopTitle() { desktop()->setCaption( aTitle ); } +/*! + \brief Show dialog box to propose possible user actions when study is closed. + \param docName study name + \return chosen action ID + \sa closeAction() +*/ +int SalomeApp_Application::closeChoice( const QString& docName ) +{ + SUIT_MsgDlg dlg( desktop(), tr( "APPCLOSE_CAPTION" ), tr ( "APPCLOSE_DESCRIPTION" ), + QMessageBox::standardIcon( QMessageBox::Information ) ); + dlg.addButton( tr ( "APPCLOSE_SAVE" ), CloseSave ); + dlg.addButton( tr ( "APPCLOSE_CLOSE" ), CloseDiscard ); + dlg.addButton( tr ( "APPCLOSE_UNLOAD" ), CloseUnload ); + + return dlg.exec(); +} + +/*! + \brief Process user actions selected from the dialog box when study is closed. + \param choice chosen action ID + \param closePermanently "forced study closing" flag + \return operation status + \sa closeChoice() +*/ +bool SalomeApp_Application::closeAction( const int choice, bool& closePermanently ) +{ + bool res = true; + switch( choice ) + { + case CloseSave: + if ( activeStudy()->isSaved() ) + onSaveDoc(); + else if ( !onSaveAsDoc() ) + res = false; + break; + case CloseDiscard: + break; + case CloseUnload: + closePermanently = false; + break; + case CloseCancel: + default: + res = false; + } + return res; +} + +/*! + \brief Get module activation actions + \return map where + - action_id is unique non-zero action identifier + - action_name is action title + \sa moduleActionSelected() +*/ +QMap SalomeApp_Application::activateModuleActions() const +{ + QMap opmap = LightApp_Application::activateModuleActions(); + opmap.insert( LoadStudyId, tr( "ACTIVATE_MODULE_OP_LOAD" ) ); + return opmap; +} + +/*! + \brief Process module activation action. + \param id action identifier + \sa activateModuleActions() +*/ +void SalomeApp_Application::moduleActionSelected( const int id ) +{ + if ( id == LoadStudyId ) + onLoadDoc(); + else + LightApp_Application::moduleActionSelected( id ); +} + /*!Gets CORBA::ORB_var*/ CORBA::ORB_var SalomeApp_Application::orb() { @@ -742,7 +999,10 @@ QString SalomeApp_Application::defaultEngineIOR() QString anIOR( "" ); CORBA::Object_ptr anEngine = namingService()->Resolve( "/SalomeAppEngine" ); if ( !CORBA::is_nil( anEngine ) ) - anIOR = orb()->object_to_string( anEngine ); + { + CORBA::String_var objStr = orb()->object_to_string( anEngine ); + anIOR = QString( objStr.in() ); + } return anIOR; } @@ -834,7 +1094,8 @@ void SalomeApp_Application::contextMenuPopup( const QString& type, QPopupMenu* t CAM_Module* currentModule = activeModule(); if (currentModule && currentModule->moduleName() == aModuleTitle) return; - thePopup->insertItem( tr( "MEN_OPENWITH" ), this, SLOT( onOpenWith() ) ); + if ( !aModuleTitle.isEmpty() ) + thePopup->insertItem( tr( "MEN_OPENWITH" ).arg( aModuleTitle ), this, SLOT( onOpenWith() ) ); } /*!Update obect browser: @@ -1103,3 +1364,21 @@ void SalomeApp_Application::updateSavePointDataObjects( SalomeApp_Study* study ) delete it.data(); } +/*! Check data object */ +bool SalomeApp_Application::checkDataObject(LightApp_DataObject* theObj) +{ + if (theObj) + return true; + + return false; +} + +/*! Process standard messages from desktop */ +void SalomeApp_Application::onDesktopMessage( const QString& message ) +{ + // update object browser + if ( message.lower() == "updateobjectbrowser" || + message.lower() == "updateobjbrowser" ) + updateObjectBrowser(); +} + diff --git a/src/SalomeApp/SalomeApp_Application.h b/src/SalomeApp/SalomeApp_Application.h index fbe0a8463..373e13b1d 100644 --- a/src/SalomeApp/SalomeApp_Application.h +++ b/src/SalomeApp/SalomeApp_Application.h @@ -31,6 +31,8 @@ #include "SalomeApp.h" #include +#include + #include #include @@ -67,7 +69,11 @@ class SALOMEAPP_EXPORT SalomeApp_Application : public LightApp_Application public: enum { MenuToolsId = 5 }; enum { DumpStudyId = LightApp_Application::UserID, LoadScriptId, PropertiesId, - CatalogGenId, RegDisplayId, SaveGUIStateId, UserID }; + CatalogGenId, RegDisplayId, SaveGUIStateId, FileLoadId, UserID }; + +protected: + enum { CloseUnload = CloseDiscard + 1 }; + enum { LoadStudyId = OpenStudyId + 1 }; public: SalomeApp_Application(); @@ -81,6 +87,8 @@ public: virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& ); + virtual bool checkDataObject(LightApp_DataObject* theObj); + static CORBA::ORB_var orb(); static SALOMEDSClient_StudyManager* studyMgr(); static SALOME_NamingService* namingService(); @@ -94,13 +102,16 @@ public slots: virtual bool onOpenDoc( const QString& ); virtual void onLoadDoc(); virtual bool onLoadDoc( const QString& ); + virtual void onExit(); virtual void onCopy(); virtual void onPaste(); void onSaveGUIState();// called from VISU + virtual void onCloseDoc( bool ask = true); protected slots: void onStudySaved( SUIT_Study* ); void onStudyOpened( SUIT_Study* ); + void onDesktopMessage( const QString& ); protected: virtual void createActions(); @@ -112,6 +123,12 @@ protected: virtual void createPreferences( LightApp_Preferences* ); virtual void updateDesktopTitle(); + + virtual bool closeAction( const int, bool& ); + virtual int closeChoice( const QString& ); + + virtual QMap activateModuleActions() const; + virtual void moduleActionSelected( const int ); private slots: void onDeleteInvalidReferences(); @@ -127,6 +144,7 @@ private slots: void onCatalogGen(); void onRegDisplay(); void onOpenWith(); + }; #ifdef WIN32 diff --git a/src/SalomeApp/SalomeApp_DataModel.cxx b/src/SalomeApp/SalomeApp_DataModel.cxx index d899ad63d..742a75e35 100644 --- a/src/SalomeApp/SalomeApp_DataModel.cxx +++ b/src/SalomeApp/SalomeApp_DataModel.cxx @@ -38,8 +38,6 @@ #include #include -#include "SALOMEDS_Tool.hxx" - #include #include CORBA_SERVER_HEADER(SALOME_Exception) @@ -64,7 +62,7 @@ public: void children( const suitPtr&, QValueList& ) const; suitPtr parent( const suitPtr& ) const; bool isCorrect( const kerPtr& ) const; - void updateItem( const suitPtr& ) const; + void updateItem( const kerPtr&, const suitPtr& ) const; private: _PTR( Study ) myStudy; @@ -87,7 +85,14 @@ bool SalomeApp_DataModelSync::isCorrect( const kerPtr& so ) const { kerPtr refObj; QString name = so->GetName().c_str(); - bool res = so && ( so->GetName().size() || so->ReferencedObject( refObj ) ); + _PTR( GenericAttribute ) anAttr; + bool isDraw = true; + if ( so->FindAttribute(anAttr, "AttributeDrawable") ) + { + _PTR(AttributeDrawable) aAttrDraw = anAttr; + isDraw = aAttrDraw->IsDrawable(); + } + bool res = so && ( so->GetName().size() || so->ReferencedObject( refObj ) ) && isDraw; return res; } @@ -221,7 +226,7 @@ suitPtr SalomeApp_DataModelSync::parent( const suitPtr& p ) const Updates SUIT object \param p - SUIT object */ -void SalomeApp_DataModelSync::updateItem( const suitPtr& ) const +void SalomeApp_DataModelSync::updateItem( const kerPtr& obj, const suitPtr& ) const { } @@ -333,7 +338,7 @@ SUIT_DataObject* SalomeApp_DataModel::synchronize( const _PTR( SComponent )& sob { if( !study || !study->root() || !sobj ) return 0; - + DataObjectList ch; study->root()->children( ch ); DataObjectList::const_iterator anIt = ch.begin(), aLast = ch.end(); SUIT_DataObject* suitObj = 0; diff --git a/src/SalomeApp/SalomeApp_DataObject.cxx b/src/SalomeApp/SalomeApp_DataObject.cxx index d3a4b5c9d..dd9ff8960 100644 --- a/src/SalomeApp/SalomeApp_DataObject.cxx +++ b/src/SalomeApp/SalomeApp_DataObject.cxx @@ -134,7 +134,9 @@ QString SalomeApp_DataObject::text( const int id ) const #else if ( componentObject() != (SUIT_DataObject*)this ) #endif - txt = value( referencedObject() ); + txt = value( object() ); + if ( txt.isEmpty() ) + txt = value( referencedObject() ); break; case CT_Entry: txt = entry( object() ); @@ -186,6 +188,17 @@ QColor SalomeApp_DataObject::color( const ColorRole cr ) const else clr = QColor( 200, 200, 200 ); } + else if ( myObject ) + { + _PTR(GenericAttribute) anAttr; + if( myObject->FindAttribute ( anAttr, "AttributeTextHighlightColor") ) + { + _PTR(AttributeTextHighlightColor) aHighColAttr = anAttr; + clr = QColor( (int)(aHighColAttr->TextHighlightColor().R), + (int)(aHighColAttr->TextHighlightColor().G), + (int)(aHighColAttr->TextHighlightColor().B)); + } + } break; case HighlightedText: if ( isReference() ) diff --git a/src/SalomeApp/SalomeApp_Displayer.cxx b/src/SalomeApp/SalomeApp_Displayer.cxx deleted file mode 100644 index 55ac92ba5..000000000 --- a/src/SalomeApp/SalomeApp_Displayer.cxx +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include "SalomeApp_Displayer.h" -#include "SalomeApp_Application.h" - -#include - -#include -#include -#include -#include -#include - -#include - -/*! - Default constructor -*/ -SalomeApp_Displayer::SalomeApp_Displayer() -{ -} - -/*! - Destructor -*/ -SalomeApp_Displayer::~SalomeApp_Displayer() -{ -} - -/*! - Displays object in view - \param entry - object entry - \param updateViewer - is it necessary to update viewer - \param theViewFrame - view -*/ -void SalomeApp_Displayer::Display( const QString& entry, const bool updateViewer, SALOME_View* theViewFrame ) -{ - SALOME_View* vf = theViewFrame ? theViewFrame : GetActiveView(); - if ( vf ) - { - SALOME_Prs* prs = buildPresentation( entry, vf ); - - if ( prs ) - { - vf->BeforeDisplay( this ); - vf->Display( prs ); - vf->AfterDisplay( this ); - - if ( updateViewer ) - vf->Repaint(); - - delete prs; // delete presentation because displayer is its owner - } - } -} - -/*! - Redisplays object in view - \param entry - object entry - \param updateViewer - is it necessary to update viewer -*/ -void SalomeApp_Displayer::Redisplay( const QString& entry, const bool updateViewer ) -{ - // Remove the object permanently ( == true) - SUIT_Session* ses = SUIT_Session::session(); - SUIT_Application* app = ses->activeApplication(); - if ( app ) - { - SUIT_Desktop* desk = app->desktop(); - QPtrList wnds = desk->windows(); - SUIT_ViewWindow* wnd; - for ( wnd = wnds.first(); wnd; wnd = wnds.next() ) - { - SUIT_ViewManager* vman = wnd->getViewManager(); - if( !vman ) - continue; - - SUIT_ViewModel* vmodel = vman->getViewModel(); - if( !vmodel ) - continue; - - SALOME_View* view = dynamic_cast(vmodel); - if( view && ( IsDisplayed( entry, view ) || view == GetActiveView() ) ) - { - Erase( entry, true, false, view ); - Display( entry, updateViewer, view ); - } - } - } -} - -/*! - Erases object in view - \param entry - object entry - \param forced - deletes object from viewer (otherwise it will be erased, but cached) - \param updateViewer - is it necessary to update viewer - \param theViewFrame - view -*/ -void SalomeApp_Displayer::Erase( const QString& entry, const bool forced, - const bool updateViewer, SALOME_View* theViewFrame ) -{ - SALOME_View* vf = theViewFrame ? theViewFrame : GetActiveView(); - - if ( vf ) { - SALOME_Prs* prs = vf->CreatePrs( entry.latin1() ); - if ( prs ) { - vf->Erase( prs, forced ); - if ( updateViewer ) - vf->Repaint(); - delete prs; // delete presentation because displayer is its owner - } - } -} - -/*! - Erases all objects in view - \param forced - deletes objects from viewer - \param updateViewer - is it necessary to update viewer - \param theViewFrame - view -*/ -void SalomeApp_Displayer::EraseAll( const bool forced, const bool updateViewer, SALOME_View* theViewFrame ) const -{ - SALOME_View* vf = theViewFrame ? theViewFrame : GetActiveView(); - - if ( vf ) { - vf->EraseAll( forced ); - if ( updateViewer ) - vf->Repaint(); - } -} - -/*! - \return true if object is displayed in viewer - \param entry - object entry - \param theViewFrame - view -*/ -bool SalomeApp_Displayer::IsDisplayed( const QString& entry, SALOME_View* theViewFrame ) const -{ - SALOME_View* vf = theViewFrame ? theViewFrame : GetActiveView(); - if( vf ) - { - Handle( SALOME_InteractiveObject ) temp = new SALOME_InteractiveObject(); - temp->setEntry( entry.latin1() ); - return vf->isVisible( temp ); - } - else - return false; -} - -/*! - Updates active view -*/ -void SalomeApp_Displayer::UpdateViewer() const -{ - SALOME_View* vf = GetActiveView(); - if ( vf ) - vf->Repaint(); -} - -/*! - \return presentation of object, built with help of CreatePrs method - \param entry - object entry - \param theViewFrame - view - \sa CreatePrs() -*/ -SALOME_Prs* SalomeApp_Displayer::buildPresentation( const QString& entry, SALOME_View* theViewFrame ) -{ - SALOME_Prs* prs = 0; - - SALOME_View* vf = theViewFrame ? theViewFrame : GetActiveView(); - - if ( vf ) - prs = vf->CreatePrs( entry.latin1() ); - - return prs; -} - -/*! - \return active view -*/ -SALOME_View* SalomeApp_Displayer::GetActiveView() -{ - SUIT_Session* session = SUIT_Session::session(); - if ( SUIT_Application* app = session->activeApplication() ) { - if ( SalomeApp_Application* sApp = dynamic_cast( app ) ) { - if( SUIT_ViewManager* vman = sApp->activeViewManager() ) { - if ( SUIT_ViewModel* vmod = vman->getViewModel() ) - return dynamic_cast( vmod ); - } - } - } - return 0; -} diff --git a/src/SalomeApp/SalomeApp_ExceptionHandler.cxx b/src/SalomeApp/SalomeApp_ExceptionHandler.cxx index b22ab38d8..dc6436411 100644 --- a/src/SalomeApp/SalomeApp_ExceptionHandler.cxx +++ b/src/SalomeApp/SalomeApp_ExceptionHandler.cxx @@ -26,24 +26,47 @@ #include +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + #include + #include +#else + #include "CASCatch.hxx" +#endif + /*!Constructor. Initialize by \a floatSignal.*/ SalomeApp_ExceptionHandler::SalomeApp_ExceptionHandler( const bool floatSignal ) : SUIT_ExceptionHandler() { - OSD::SetSignal( floatSignal ); + // JFA 2006-09-28: PAL10867: suppress signal catching, + // if environment variable DISABLE_SIGNALS_CATCHING is set to 1. + // Commonly this is used with "noexcepthandler" option. + char* envNoCatchSignals = getenv("NOT_INTERCEPT_SIGNALS"); + if (!envNoCatchSignals || !atoi(envNoCatchSignals)) + { + OSD::SetSignal( floatSignal ); + } } /*!Try to call SUIT_ExceptionHandler::internalHandle(o, e), catch if failure.*/ bool SalomeApp_ExceptionHandler::handleSignals( QObject* o, QEvent* e ) { - CASCatch_TRY { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + try { + OCC_CATCH_SIGNALS; +#else + CASCatch_TRY { +#endif SUIT_ExceptionHandler::internalHandle( o, e ); } +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + catch(Standard_Failure) { +#else CASCatch_CATCH(Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); +#endif + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); throw Standard_Failure( aFail->GetMessageString() ); } - + return true; } @@ -75,13 +98,14 @@ bool SalomeApp_ExceptionHandler::handle( QObject* o, QEvent* e ) } /*!Create new SUIT_ExceptionHandler*/ + extern "C" SALOMEAPP_EXPORT SUIT_ExceptionHandler* getExceptionHandler() { // MSV 2006-04-26: work around PAL12004 "VTK window => SIGFPE Arithmetic Exception Detected" // We disable FPE signal as it was in earlier versions of SALOME. It is enabled // only in debug mode if the environment variable DISABLE_FPE is not set to 1. bool raiseFPE; -#ifdef _DEBUG_ +#if defined(_DEBUG_) | defined(_DEBUG) //the Last for WNT default settings raiseFPE = true; char* envDisableFPE = getenv("DISABLE_FPE"); if (envDisableFPE && atoi(envDisableFPE)) @@ -89,5 +113,6 @@ extern "C" SALOMEAPP_EXPORT SUIT_ExceptionHandler* getExceptionHandler() #else raiseFPE = false; #endif + return new SalomeApp_ExceptionHandler( raiseFPE ); } diff --git a/src/STD/STD_CloseDlg.cxx b/src/SalomeApp/SalomeApp_ExitDlg.cxx similarity index 53% rename from src/STD/STD_CloseDlg.cxx rename to src/SalomeApp/SalomeApp_ExitDlg.cxx index ff09c551a..f01d581c9 100644 --- a/src/STD/STD_CloseDlg.cxx +++ b/src/SalomeApp/SalomeApp_ExitDlg.cxx @@ -16,85 +16,89 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include "STD_CloseDlg.h" +// File: SalomeApp_ExitDlg.cxx +// Author: Margarita KARPUNINA, Open CASCADE S.A.S. +// + +#include "SalomeApp_ExitDlg.h" #include #include #include #include -#include - -#ifndef WNT -using namespace std; -#endif +#include /*! - * \brief creates a Close dialog box + * \brief creates a Exit dialog box * \param parent a parent widget * \param modal bool argument, if true the dialog box is a modal dialog box * \param f style flags */ - -STD_CloseDlg::STD_CloseDlg( QWidget* parent, bool modal, WFlags f ) -: QDialog( parent, "", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) +SalomeApp_ExitDlg::SalomeApp_ExitDlg( QWidget* parent ) + : QDialog( parent, "SalomeApp_ExitDlg", true ) { setSizeGripEnabled( true ); - setCaption( tr( "CLOSE_DLG_CAPTION" ) ); + setCaption( tr( "INF_DESK_EXIT" ) ); QVBoxLayout* m_vbL = new QVBoxLayout( this ); m_vbL->setMargin( 11 ); m_vbL->setSpacing( 6 ); QLabel* m_lIcon = new QLabel( this, "m_lDescr" ); - QPixmap pm = QMessageBox::standardIcon( QMessageBox::Warning ); + QPixmap pm = QMessageBox::standardIcon( QMessageBox::Question ); m_lIcon->setPixmap( pm ); m_lIcon->setScaledContents( false ); m_lIcon->setAlignment( Qt::AlignCenter ); QLabel* m_lDescr = new QLabel (this, "m_lDescr"); - m_lDescr->setText ( tr ("CLOSE_DLG_DESCRIPTION") ); - m_lDescr->setAlignment( Qt::AlignCenter ); - m_lDescr->setMinimumHeight( m_lDescr->sizeHint().height()*5 ); + m_lDescr->setText ( tr ("QUE_DESK_EXIT") ); m_lDescr->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); + myServersShutdown = new QCheckBox( tr("SHUTDOWN_SERVERS"), this ); + myServersShutdown->setChecked(true); + + QVBoxLayout* m_vl1 = new QVBoxLayout(); + m_vl1->setMargin( 10 ); m_vl1->setSpacing( 16 ); + m_vl1->addWidget( m_lDescr ); + m_vl1->addWidget( myServersShutdown ); + QHBoxLayout* m_hl1 = new QHBoxLayout(); m_hl1->setMargin( 0 ); m_hl1->setSpacing( 6 ); m_hl1->addWidget( m_lIcon ); - m_hl1->addWidget( m_lDescr ); + m_hl1->addStretch(); + m_hl1->addLayout( m_vl1 ); + m_hl1->addStretch(); - m_pb1 = new QPushButton( tr ("CLOSE_DLG_SAVE_CLOSE"), this ); - m_pb2 = new QPushButton( tr ("CLOSE_DLG_CLOSE"), this ); - m_pb3 = new QPushButton( tr ("CLOSE_DLG_UNLOAD"), this ); - m_pb4 = new QPushButton( tr ("BUT_CANCEL"), this ); + QPushButton* m_pbOk = new QPushButton( tr( "BUT_OK" ), this ); + QPushButton* m_pbCancel = new QPushButton( tr( "BUT_CANCEL" ), this ); QGridLayout* m_hl2 = new QGridLayout(); m_hl2->setMargin( 0 ); m_hl2->setSpacing( 6 ); - m_hl2->addWidget( m_pb1, 0, 0 ); - m_hl2->addWidget( m_pb2, 0, 1 ); - m_hl2->addWidget( m_pb3, 0, 2 ); - m_hl2->addColSpacing( 3, 10 ); - m_hl2->setColStretch( 3, 5 ); - m_hl2->addWidget( m_pb4, 0, 4 ); + m_hl2->addWidget( m_pbOk, 0, 0 ); + m_hl2->setColStretch( 1, 5 ); + m_hl2->addWidget( m_pbCancel, 0, 2 ); + m_vbL->addStretch(); m_vbL->addLayout( m_hl1 ); + m_vbL->addStretch(); m_vbL->addLayout( m_hl2 ); - connect( m_pb1, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( m_pb2, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( m_pb3, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( m_pb4, SIGNAL( clicked() ), this, SLOT( reject() ) ); + connect( m_pbOk, SIGNAL( clicked() ), this, SLOT( accept() ) ); + connect( m_pbCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); +} + +/*! + * \brief Destructor + */ +SalomeApp_ExitDlg::~SalomeApp_ExitDlg() +{ } /*! - * \brief reaction on clicked(pressed) button + * \brief get the check box status */ -void STD_CloseDlg::onButtonClicked() +bool SalomeApp_ExitDlg::isServersShutdown() { - QPushButton* btn = ( QPushButton* )sender(); - if ( btn == m_pb1 ) - done( 1 ); - if ( btn == m_pb2 ) - done( 2 ); - if ( btn == m_pb3 ) - done( 3 ); + return myServersShutdown->isChecked(); } + diff --git a/src/STD/STD_CloseDlg.h b/src/SalomeApp/SalomeApp_ExitDlg.h similarity index 53% rename from src/STD/STD_CloseDlg.h rename to src/SalomeApp/SalomeApp_ExitDlg.h index 6975e88f4..e046291e1 100644 --- a/src/STD/STD_CloseDlg.h +++ b/src/SalomeApp/SalomeApp_ExitDlg.h @@ -16,47 +16,33 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#ifndef STD_CloseDlg_H -#define STD_CloseDlg_H +// File: SalomeApp_ExitDlg.h +// Author: Margarita KARPUNINA, Open CASCADE S.A.S. +// + +#ifndef SALOMEAPP_EXITDLG_H +#define SALOMEAPP_EXITDLG_H #include -/*! \class QDialog - * \brief For more information see QT documentation. - */ -/*!\class STD_CloseDlg - * \brief Describes a dialog box shown on closing the active study +class QCheckBox; + +/*!\class SalomeApp_ExitDlg + * \brief Describes a dialog box shown on question about quit application */ -class STD_CloseDlg: public QDialog +class SalomeApp_ExitDlg: public QDialog { Q_OBJECT public: - STD_CloseDlg ( QWidget * parent = 0, bool modal = FALSE, WFlags f = 0 ) ; - ~STD_CloseDlg ( ) { }; + SalomeApp_ExitDlg( QWidget* ) ; + ~SalomeApp_ExitDlg(); -private slots: - void onButtonClicked(); + bool isServersShutdown(); private: - /*!\var m_pb1 - * \brief Private, stores a dialog button 1 - */ - QPushButton* m_pb1; - /*!\var m_pb2 - * \brief Private, stores a dialog button 2 - */ - QPushButton* m_pb2; - /*!\var m_pb3 - * \brief Private, stores a dialog button 3 - */ - QPushButton* m_pb3; - - /*!\var m_pb4 - * \brief Private, stores a dialog button 4 - */ - QPushButton* m_pb4; + QCheckBox* myServersShutdown; }; -#endif +#endif // SALOMEAPP_EXITDLG_H diff --git a/src/SalomeApp/SalomeApp_Module.h b/src/SalomeApp/SalomeApp_Module.h index 07f4c0620..87ca5aad7 100644 --- a/src/SalomeApp/SalomeApp_Module.h +++ b/src/SalomeApp/SalomeApp_Module.h @@ -59,10 +59,10 @@ public: virtual void storeVisualParameters(int savePoint); virtual void restoreVisualParameters(int savePoint); + virtual LightApp_Selection* createSelection() const; protected: virtual CAM_DataModel* createDataModel(); - virtual LightApp_Selection* createSelection() const; virtual void extractContainers( const SALOME_ListIO&, SALOME_ListIO& ) const; }; diff --git a/src/SalomeApp/SalomeApp_Study.cxx b/src/SalomeApp/SalomeApp_Study.cxx index 6cbc7b34d..aeee814b6 100644 --- a/src/SalomeApp/SalomeApp_Study.cxx +++ b/src/SalomeApp/SalomeApp_Study.cxx @@ -36,7 +36,7 @@ #include #include "utilities.h" -#include +#include #include #include @@ -204,7 +204,7 @@ bool SalomeApp_Study::loadDocument( const QString& theStudyName ) */ bool SalomeApp_Study::saveDocumentAs( const QString& theFileName ) { - bool store = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", true ); + bool store = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", false ); if ( store ) SalomeApp_VisualState( (SalomeApp_Application*)application() ).storeState(); @@ -288,7 +288,9 @@ void SalomeApp_Study::closeDocument(bool permanently) _PTR(Study) studyPtr = studyDS(); if ( studyPtr ) { - if(permanently) SalomeApp_Application::studyMgr()->Close( studyPtr ); + if(permanently) { + SalomeApp_Application::studyMgr()->Close( studyPtr ); + } SALOMEDSClient_Study* aStudy = 0; setStudyDS( _PTR(Study)(aStudy) ); } @@ -306,6 +308,16 @@ bool SalomeApp_Study::isModified() const return isAnyChanged; } +/*! + Set study modified to \a on. + */ +void SalomeApp_Study::Modified() +{ + if(_PTR(Study) aStudy = studyDS()) + aStudy->Modified(); + LightApp_Study::Modified(); +} + /*! \return if data model is saved */ @@ -725,6 +737,15 @@ std::string SalomeApp_Study::getVisualComponentName() return "Interface Applicative"; } +/*! + * \brief Restores the study state + */ +void SalomeApp_Study::restoreState(int savePoint) +{ + SalomeApp_VisualState((SalomeApp_Application*)application()).restoreState(savePoint); +} + + /*! Slot: called on change of a root of a data model. Redefined from CAM_Study */ diff --git a/src/SalomeApp/SalomeApp_Study.h b/src/SalomeApp/SalomeApp_Study.h index ef5c127fd..516df81d8 100644 --- a/src/SalomeApp/SalomeApp_Study.h +++ b/src/SalomeApp/SalomeApp_Study.h @@ -51,6 +51,7 @@ public: virtual bool isSaved() const; virtual bool isModified() const; + virtual void Modified(); virtual void addComponent ( const CAM_DataModel* dm); @@ -73,6 +74,8 @@ public: void setNameOfSavePoint(int savePoint, const QString& nameOfSavePoint); virtual std::string getVisualComponentName(); + virtual void restoreState(int savePoint); + protected: virtual void saveModuleData ( QString theModuleName, QStringList theListOfFiles ); virtual void openModuleData ( QString theModuleName, QStringList& theListOfFiles ); diff --git a/src/SalomeApp/SalomeApp_VisualState.cxx b/src/SalomeApp/SalomeApp_VisualState.cxx index dab9a907e..08afaedda 100644 --- a/src/SalomeApp/SalomeApp_VisualState.cxx +++ b/src/SalomeApp/SalomeApp_VisualState.cxx @@ -217,13 +217,13 @@ void SalomeApp_VisualState::restoreState(int savePoint) //Resize the views, set their captions and apply visual parameters. QPtrVector views = vm->getViews(); - for (int i = 0, j = 0; iisVisible() ) + while ( !vm->isVisible() ) qApp->processEvents(); viewWin->setCaption(ip->getValue(viewerEntry, j).c_str()); diff --git a/src/SalomeApp/Test/Makefile.in b/src/SalomeApp/Test/Makefile.am similarity index 65% rename from src/SalomeApp/Test/Makefile.in rename to src/SalomeApp/Test/Makefile.am index 4754fe72a..3971f30d0 100644 --- a/src/SalomeApp/Test/Makefile.in +++ b/src/SalomeApp/Test/Makefile.am @@ -25,41 +25,23 @@ # Author : Sergey RUIN # Module : SALOME -top_srcdir=@top_srcdir@ -top_builddir=../../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES= libSalomeAppTest.la -@COMMENCE@ +salomeinclude_HEADERS= SalomeAppTest.hxx -# header files -EXPORT_HEADERS= SalomeAppTest.hxx +dist_libSalomeAppTest_la_SOURCES= SalomeAppTest.cxx -EXPORT_PYSCRIPTS = TestSalomeApp.py +libSalomeAppTest_la_CXXFLAGS= @CPPUNIT_INCLUDES@ $(KERNEL_CXXFLAGS) +libSalomeAppTest_la_LIBADD= @CPPUNIT_LIBS@ -# Libraries targets +bin_PROGRAMS= TestSalomeApp -LIB = libSalomeAppTest.la -LIB_SRC = SalomeAppTest.cxx -LIB_CLIENT_IDL = +TestSalomeApp_SOURCES= TestSalomeApp.cxx -# Executables targets - -BIN = TestSalomeApp -BIN_SRC = -BIN_CLIENT_IDL = - - -CXXFLAGS += $ @CPPUNIT_INCLUDES@ $(KERNEL_CXXFLAGS) -CPPFLAGS += $ @CPPUNIT_INCLUDES@ $(KERNEL_CXXFLAGS) - -LIBS= @LIBS@ @CPPUNIT_LIBS@ - -LDFLAGS+= - -LDFLAGSFORBIN+= $(LDFLAGS) -lSalomeAppTest +TestSalomeApp_CXXFLAGS= $(libSalomeAppTest_la_CXXFLAGS) +TestSalomeApp_LDADD= $(libSalomeAppTest_la_LIBADD) libSalomeAppTest.la +dist_salomescript_PYTHON = TestSalomeApp.py UNIT_TEST_PROG = TestSalomeApp - -@CONCLUDE@ diff --git a/src/SalomeApp/resources/SalomeApp.ini b/src/SalomeApp/resources/SalomeApp.ini index 305c929d7..d89841c14 100644 --- a/src/SalomeApp/resources/SalomeApp.ini +++ b/src/SalomeApp/resources/SalomeApp.ini @@ -5,18 +5,18 @@ language = en modules = GEOM,SMESH,VISU [resources] -SUIT = $(SUITRoot)/resources -STD = $(SUITRoot)/resources -Plot2d = $(SUITRoot)/resources -GLViewer = $(SUITRoot)/resources -OCCViewer = $(SUITRoot)/resources -VTKViewer = $(SUITRoot)/resources -SVTK = $(SUITRoot)/resources -LightApp = $(SUITRoot)/resources -SalomeApp = $(SUITRoot)/resources -GEOM = $(GEOM_ROOT_DIR)/share/salome/resources -SMESH = $(SMESH_ROOT_DIR)/share/salome/resources -VISU = $(VISU_ROOT_DIR)/share/salome/resources +SUIT = $(GUI_ROOT_DIR)/share/salome/resources/gui +STD = $(GUI_ROOT_DIR)/share/salome/resources/gui +Plot2d = $(GUI_ROOT_DIR)/share/salome/resources/gui +GLViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui +OCCViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui +VTKViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui +SVTK = $(GUI_ROOT_DIR)/share/salome/resources/gui +LightApp = $(GUI_ROOT_DIR)/share/salome/resources/gui +SalomeApp = $(GUI_ROOT_DIR)/share/salome/resources/gui +GEOM = $(GEOM_ROOT_DIR)/share/salome/resources/geom +SMESH = $(SMESH_ROOT_DIR)/share/salome/resources/smesh +VISU = $(VISU_ROOT_DIR)/share/salome/resources/visu [GEOM] name = Geometry diff --git a/src/SalomeApp/resources/SalomeApp.xml b/src/SalomeApp/resources/SalomeApp.xml index f6cfb540c..b4da14ade 100644 --- a/src/SalomeApp/resources/SalomeApp.xml +++ b/src/SalomeApp/resources/SalomeApp.xml @@ -10,6 +10,7 @@ + @@ -23,33 +24,41 @@

- + - - + + +
- - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + +
- +
@@ -102,6 +111,12 @@
+
+ + + + +
@@ -113,6 +128,7 @@
+
diff --git a/src/SalomeApp/resources/SalomeApp_msg_en.po b/src/SalomeApp/resources/SalomeApp_msg_en.po index ae12d309a..d6a6d6d90 100644 --- a/src/SalomeApp/resources/SalomeApp_msg_en.po +++ b/src/SalomeApp/resources/SalomeApp_msg_en.po @@ -16,10 +16,9 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File: CATHAREGUI_msg_en.po +// File: SalomeApp_msg_en.po // Created: 10/25/2004 12:46:36 PM // Author: Sergey LITONIN -// Copyright (C) CEA 2004 msgid "" msgstr "" @@ -118,7 +117,7 @@ msgid "SalomeApp_Application::PREF_TAB_OBJBROWSER" msgstr "Object browser" msgid "SalomeApp_Application::MEN_OPENWITH" -msgstr "Activate Module" +msgstr "Activate %1 Module" msgid "SalomeApp_Application::MEN_DELETE_INVALID_REFERENCE" msgstr "Delete Invalid Reference" @@ -222,6 +221,9 @@ msgstr "Publish in study" msgid "SalomeApp_Application::WRN_DUMP_STUDY_FAILED" msgstr "Dump study failed" +msgid "SalomeApp_Application::WRN_FILE_NAME_BAD" +msgstr "Please enter correct file name" + msgid "SAVE_POINT_OBJECT_TOOLTIP" msgstr "Saved GUI state: %1" @@ -234,6 +236,9 @@ msgstr "Persistent GUI states" msgid "SAVE_POINT_ROOT_NAME" msgstr "GUI states" +msgid "CLOSE_LOCKED_STUDY" +msgstr "Close locked study?" + //======================================================================================= msgid "SalomeApp_Application::MEN_RESTORE_VS" @@ -244,3 +249,24 @@ msgstr "Rename" msgid "SalomeApp_Application::MEN_DELETE_VS" msgstr "Delete" + +msgid "SalomeApp_Application::APPCLOSE_CAPTION" +msgstr "Close study" + +msgid "SalomeApp_Application::APPCLOSE_DESCRIPTION" +msgstr "Do you want to save or unload study before closing?" + +msgid "SalomeApp_Application::APPCLOSE_CLOSE" +msgstr "&Close w/o saving" + +msgid "SalomeApp_Application::APPCLOSE_SAVE" +msgstr "&Save && Close" + +msgid "SalomeApp_Application::APPCLOSE_UNLOAD" +msgstr "&Unload" + +msgid "SalomeApp_ExitDlg::SHUTDOWN_SERVERS" +msgstr "Shutdown standalone servers" + +msgid "SalomeApp_Application::ACTIVATE_MODULE_OP_LOAD" +msgstr "&Load..." diff --git a/src/Session/InquireServersQThread.h b/src/Session/InquireServersQThread.h index a49f2b7d9..2eca8fe32 100755 --- a/src/Session/InquireServersQThread.h +++ b/src/Session/InquireServersQThread.h @@ -24,17 +24,13 @@ #include #include -#ifdef WNT -#include -#else -#define SALOME_WNT_EXPORT -#endif +#include /*! \class InquireEvent Contains QCustomEvents for posting to InquireServersQThread */ -class SALOME_WNT_EXPORT InquireEvent : public QCustomEvent +class SESSION_EXPORT InquireEvent : public QCustomEvent { public: @@ -51,7 +47,7 @@ public: class InquireServersGUI; -class SALOME_WNT_EXPORT InquireServersQThread : public QThread +class SESSION_EXPORT InquireServersQThread : public QThread { public: InquireServersQThread( InquireServersGUI* r ); @@ -96,7 +92,7 @@ private: class QLabel; class QFrame; class QProgressBar; -class SALOME_WNT_EXPORT InquireServersGUI : public QVBox +class SESSION_EXPORT InquireServersGUI : public QVBox { Q_OBJECT diff --git a/src/Session/Makefile.am b/src/Session/Makefile.am new file mode 100755 index 000000000..8d76b4f2c --- /dev/null +++ b/src/Session/Makefile.am @@ -0,0 +1,77 @@ +# SALOME Session : implementation of Session.idl +# +# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# +# +# File : Makefile.in +# Author : Paul RASCLE, EDF +# Module : SALOME +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libSalomeSession.la + +salomeinclude_HEADERS= \ + Session_Session_i.hxx \ + Session_ServerLauncher.hxx \ + Session_ServerThread.hxx \ + Session_ServerCheck.hxx \ + SalomeApp_Engine_i.hxx + +# Libraries targets + +dist_libSalomeSession_la_SOURCES= \ + Session_Session_i.cxx \ + Session_ServerThread.cxx \ + Session_ServerLauncher.cxx \ + Session_ServerCheck.cxx \ + SalomeApp_Engine_i.cxx + +libSalomeSession_la_CPPFLAGS= $(QT_MT_INCLUDES) $(PYTHON_INCLUDES) \ + $(HDF5_INCLUDES) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ $(CAS_CPPFLAGS) \ + @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ \ + -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../Event \ + @LIBXML_INCLUDES@ + +libSalomeSession_la_LDFLAGS= $(QT_MT_LIBS) $(KERNEL_LDFLAGS) -lSalomeNS \ + -lSalomeLifeCycleCORBA -lOpUtil -lSALOMELocalTrace -lSalomeCatalog \ + -lSalomeDSClient $(CAS_KERNEL) -lwith_loggerTraceCollector \ + ../SUIT/libsuit.la ../Event/libEvent.la ../../idl/libSalomeIDLGUI.la + +# Executable +bin_PROGRAMS= SALOME_Session_Server + +dist_SALOME_Session_Server_SOURCES= SALOME_Session_Server.cxx + +SALOME_Session_Server_CPPFLAGS= $(libSalomeSession_la_CPPFLAGS) +SALOME_Session_Server_LDADD= $(libSalomeSession_la_LDFLAGS) $(OMNIORB_LIBS) \ + $(HDF5_LIBS) -lSalomeContainer -lSalomeResourcesManager -lTOOLSDS \ + -lSalomeHDFPersist -lSalomeDSImpl -lSalomeGenericObj -lRegistry \ + -lSalomeNotification -lSALOMEBasics -lSalomeLauncher ../Qtx/libqtx.la \ + $(top_builddir)/idl/libSalomeIDLGUI.la \ + libSalomeSession.la + +lib-hook: + ln -sf $(top_builddir)/bin/salome/styles styles + +# ../SalomeApp/libSalomeApp.la diff --git a/src/Session/Makefile.in b/src/Session/Makefile.in deleted file mode 100755 index 6379a1395..000000000 --- a/src/Session/Makefile.in +++ /dev/null @@ -1,69 +0,0 @@ -# SALOME Session : implementation of Session.idl -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# -# -# File : Makefile.in -# Author : Paul RASCLE, EDF -# Module : SALOME -# $Header$ - -# source path -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -EXPORT_HEADERS= Session_Session_i.hxx \ - Session_ServerLauncher.hxx \ - Session_ServerThread.hxx \ - Session_ServerCheck.hxx \ - SalomeApp_Engine_i.hxx - -# Libraries targets -LIB = libSalomeSession.la - -LIB_SRC=Session_Session_i.cxx \ - Session_ServerThread.cxx \ - Session_ServerLauncher.cxx \ - Session_ServerCheck.cxx \ - SalomeApp_Engine_i.cxx \ - -LIB_MOC = - -# Executables targets -BIN = SALOME_Session_Server -BIN_SRC = -LIB_SERVER_IDL = SALOME_Session.idl SalomeApp_Engine.idl -BIN_SERVER_IDL = -BIN_CLIENT_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Component.idl SALOME_Registry.idl SALOME_ModuleCatalog.idl SALOME_Exception.idl SALOME_GenericObj.idl - -CPPFLAGS += $(QT_MT_INCLUDES) $(PYTHON_INCLUDES) $(HDF5_INCLUDES) $(BOOST_CPPFLAGS) $(KERNEL_CXXFLAGS) -I$(OCC_INCLUDES) -CXXFLAGS += $(OCC_CXXFLAGS) $(BOOST_CPPFLAGS) -LDFLAGS += $(QT_MT_LIBS) $(KERNEL_LDFLAGS) -lSalomeNS -lsuit -lSalomeLifeCycleCORBA -lOpUtil -lSALOMELocalTrace -lwith_loggerTraceCollector -lEvent -lSalomeCatalog -lSalomeDSClient $(CAS_KERNEL) - -LDFLAGSFORBIN= $(LDFLAGS) $(OMNIORB_LIBS) $(HDF5_LIBS) -lqtx -lSalomeContainer -lSalomeResourcesManager -lTOOLSDS -lSalomeHDFPersist -lSalomeDSImpl -lSalomeGenericObj -lRegistry -lSalomeNotification -lSALOMEBasics - -@CONCLUDE@ - diff --git a/src/Session/SALOME_Session.hxx b/src/Session/SALOME_Session.hxx new file mode 100755 index 000000000..a52f3896f --- /dev/null +++ b/src/Session/SALOME_Session.hxx @@ -0,0 +1,47 @@ +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : SALOME_Session.hxx +// Author : Alexander A. BORODIN +// Module : GUI + +#ifndef _SALOME_Session_HXX_ +#define _SALOME_Session_HXX_ + +#ifdef WNT + #if defined SESSION_EXPORTS + #if defined WIN32 + #define SESSION_EXPORT __declspec( dllexport ) + #else + #define SESSION_EXPORT + #endif + #else + #if defined WIN32 + #define SESSION_EXPORT __declspec( dllimport ) + #else + #define SESSION_EXPORT + #endif + #endif +#else + #define SESSION_EXPORT +#endif + +#endif diff --git a/src/Session/SALOME_Session_Server.cxx b/src/Session/SALOME_Session_Server.cxx index 21ceec290..daa2dbb18 100755 --- a/src/Session/SALOME_Session_Server.cxx +++ b/src/Session/SALOME_Session_Server.cxx @@ -31,9 +31,16 @@ #include "SALOME_NamingService.hxx" #include "SALOMETraceCollector.hxx" +#include "SALOME_ModuleCatalog_impl.hxx" +#include "OpUtil.hxx" +#include "RegistryService.hxx" +#include "ConnectionManager_i.hxx" + #include #ifndef WNT #include +#include +#include #endif #include @@ -165,6 +172,7 @@ public: { if ( myExtAppName.isNull() || myExtAppVersion.isNull() ) { SALOME_ResourceMgr resMgr( "SalomeApp", QString( "%1Config" ) ); + resMgr.loadLanguage( "LightApp", "en" ); resMgr.loadLanguage( "SalomeApp", "en" ); myExtAppName = QObject::tr( "APP_NAME" ).stripWhiteSpace(); @@ -189,28 +197,30 @@ protected: virtual int userFileId( const QString& _fname ) const { - QRegExp exp( "\\.SalomeApprc\\.([a-zA-Z0-9.]+)$" ); - QRegExp vers_exp( "^([0-9]+)([A-Za-z]?)([0-9]*)$" ); - - QString fname = QFileInfo( _fname ).fileName(); - if( exp.exactMatch( fname ) ) - { - QStringList vers = QStringList::split( ".", exp.cap( 1 ) ); - int major=0, minor=0; - major = vers[0].toInt(); - minor = vers[1].toInt(); - if( vers_exp.search( vers[2] )==-1 ) - return -1; - int release = 0, dev1 = 0, dev2 = 0; - release = vers_exp.cap( 1 ).toInt(); - dev1 = vers_exp.cap( 2 )[ 0 ].latin1(); - dev2 = vers_exp.cap( 3 ).toInt(); - - int dev = dev1*100+dev2, id = major; - id*=100; id+=minor; - id*=100; id+=release; - id*=10000; id+=dev; - return id; + if ( !myExtAppName.isEmpty() ) { + QRegExp exp( QString( "\\.%1rc\\.([a-zA-Z0-9.]+)$" ).arg( myExtAppName ) ); + QRegExp vers_exp( "^([0-9]+)([A-Za-z]?)([0-9]*)$" ); + + QString fname = QFileInfo( _fname ).fileName(); + if( exp.exactMatch( fname ) ) { + QStringList vers = QStringList::split( ".", exp.cap( 1 ) ); + int major=0, minor=0; + major = vers[0].toInt(); + minor = vers[1].toInt(); + if( vers_exp.search( vers[2] )==-1 ) + return -1; + int release = 0, dev1 = 0, dev2 = 0; + release = vers_exp.cap( 1 ).toInt(); + dev1 = vers_exp.cap( 2 )[ 0 ].latin1(); + dev2 = vers_exp.cap( 3 ).toInt(); + + int dev = dev1*100+dev2, id = major; + id*=100; id+=minor; + id*=100; id+=release; + id*=10000; + if ( dev > 0 ) id+=dev-10000; + return id; + } } return -1; @@ -246,6 +256,20 @@ public: virtual bool notify( QObject* receiver, QEvent* e ) { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) < 0x060101 + // Disable GUI user actions while python command is executed + if (SUIT_Session::IsPythonExecuted()) { + // Disable mouse and keyboard events + QEvent::Type aType = e->type(); + if (aType == QEvent::MouseButtonPress || aType == QEvent::MouseButtonRelease || + aType == QEvent::MouseButtonDblClick || aType == QEvent::MouseMove || + aType == QEvent::Wheel || aType == QEvent::ContextMenu || + aType == QEvent::KeyPress || aType == QEvent::KeyRelease || + aType == QEvent::Accel || aType == QEvent::AccelOverride) + return false; + } +#endif + return myHandler ? myHandler->handle( receiver, e ) : QApplication::notify( receiver, e ); } @@ -286,6 +310,127 @@ bool isFound( const char* str, int argc, char** argv ) return false; } +void killOmniNames() +{ + QString fileName( ::getenv ("OMNIORB_CONFIG") ); + QString portNumber; + if ( !fileName.isEmpty() ) + { + QFile aFile( fileName ); + if ( aFile.open(IO_ReadOnly) ) { + QRegExp re("InitRef = .*:([0-9]+)$"); + QTextStream stream ( &aFile ); + while ( !stream.atEnd() ) { + QString textLine = stream.readLine(); + if ( re.search( textLine ) > -1 ) + portNumber = re.cap(1); + } + aFile.close(); + } + } + + if ( !portNumber.isEmpty() ) + { + QString cmd ; + cmd = QString( "ps -eo pid,command | grep -v grep | grep -E \"omniNames.*%1\" | awk '{cmd=sprintf(\"kill -9 %s\",$1); system(cmd)}'" ).arg( portNumber ); + system ( cmd.latin1() ); + } + + /////////////////// NPAL 18309 (Kill Notifd) //////////////////////////// + if ( !portNumber.isEmpty() ) + { + QString cmd = QString("import pickle, os; "); + cmd += QString("from killSalomeWithPort import getPiDict; "); + cmd += QString("filedict=getPiDict(%1); ").arg(portNumber); + cmd += QString("f=open(filedict, 'r'); "); + cmd += QString("pids=pickle.load(f); "); + cmd += QString("m={}; "); + cmd += QString("[ m.update(i) for i in pids ]; "); + cmd += QString("pids=filter(lambda a: 'notifd' in m[a], m.keys()); "); + cmd += QString("[ os.kill(pid, 9) for pid in pids ]; "); + cmd += QString("os.remove(filedict); "); + cmd = QString("python -c \"%1\" > /dev/null").arg(cmd); + system( cmd.latin1() ); + } + +} + +// shutdown standalone servers +void shutdownServers( SALOME_NamingService* theNS ) +{ + // get each Container from NamingService => shutdown it + // (the order is inverse to the order of servers initialization) + + CORBA::Object_var objS = theNS->Resolve("/Kernel/Session"); + SALOME::Session_var session = SALOME::Session::_narrow(objS); + if (!CORBA::is_nil(session)) { + session->ping(); + + string hostname = GetHostname(); + //string containerName = "/Containers/" + hostname; + + // 1) SuperVisionContainer + //string containerNameSV = containerName + "/SuperVisionContainer"; + //CORBA::Object_var objSV = theNS->Resolve(containerNameSV.c_str()); + //Engines::Container_var SVcontainer = Engines::Container::_narrow(objSV) ; + //if ( !CORBA::is_nil(SVcontainer) && ( session->getPID() != SVcontainer->getPID() ) ) + // SVcontainer->Shutdown(); + + // 2) FactoryServerPy + //string containerNameFSP = containerName + "/FactoryServerPy"; + //CORBA::Object_var objFSP = theNS->Resolve(containerNameFSP.c_str()); + //Engines::Container_var FSPcontainer = Engines::Container::_narrow(objFSP) ; + //if ( !CORBA::is_nil(FSPcontainer) && ( session->getPID() != FSPcontainer->getPID() ) ) + // FSPcontainer->Shutdown(); + + // 3) FactoryServer + //string containerNameFS = containerName + "/FactoryServer"; + //CORBA::Object_var objFS = theNS->Resolve(containerNameFS.c_str()); + //Engines::Container_var FScontainer = Engines::Container::_narrow(objFS) ; + //if ( !CORBA::is_nil(FScontainer) && ( session->getPID() != FScontainer->getPID() ) ) + // FScontainer->Shutdown(); + + // 4) ContainerManager + //CORBA::Object_var objCM=theNS->Resolve("/ContainerManager"); + //Engines::ContainerManager_var contMan=Engines::ContainerManager::_narrow(objCM); + //if ( !CORBA::is_nil(contMan) && ( session->getPID() != contMan->getPID() ) ) + // contMan->ShutdownWithExit(); + + // 4) SalomeLauncher + CORBA::Object_var objSL = theNS->Resolve("/SalomeLauncher"); + Engines::SalomeLauncher_var launcher = Engines::SalomeLauncher::_narrow(objSL); + if (!CORBA::is_nil(launcher) && (session->getPID() != launcher->getPID())) + launcher->Shutdown(); + + // 5) ConnectionManager + CORBA::Object_var objCnM=theNS->Resolve("/ConnectionManager"); + Engines::ConnectionManager_var connMan=Engines::ConnectionManager::_narrow(objCnM); + if ( !CORBA::is_nil(connMan) && ( session->getPID() != connMan->getPID() ) ) + connMan->ShutdownWithExit(); + + // 6) SALOMEDS + CORBA::Object_var objSDS = theNS->Resolve("/myStudyManager"); + SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow(objSDS) ; + if ( !CORBA::is_nil(studyManager) && ( session->getPID() != studyManager->getPID() ) ) + studyManager->Shutdown(); + + // 7) ModuleCatalog + CORBA::Object_var objMC=theNS->Resolve("/Kernel/ModulCatalog"); + SALOME_ModuleCatalog::ModuleCatalog_var catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(objMC); + if ( !CORBA::is_nil(catalog) && ( session->getPID() != catalog->getPID() ) ) + catalog->shutdown(); + + // 8) Registry + CORBA::Object_var objR = theNS->Resolve("/Registry"); + Registry::Components_var registry = Registry::Components::_narrow(objR); + if ( !CORBA::is_nil(registry) && ( session->getPID() != registry->getPID() ) ) + registry->Shutdown(); + + // 9) Kill OmniNames + //killOmniNames(); + } +} + // ---------------------------- MAIN ----------------------- int main( int argc, char **argv ) { @@ -314,19 +459,22 @@ int main( int argc, char **argv ) resMgr.setCurrentFormat( "xml" ); resMgr.loadLanguage( "LightApp", "en" ); // ...get splash preferences - QString splashIcon, splashInfo, splashTextColors, splashProgressColors; - resMgr.value( "splash", "image", splashIcon ); - resMgr.value( "splash", "info", splashInfo, false ); - resMgr.value( "splash", "text_colors", splashTextColors ); - resMgr.value( "splash", "progress_colors", splashProgressColors ); + QString splashIcon; + resMgr.value( "splash", "image", splashIcon ); QPixmap px( splashIcon ); if ( px.isNull() ) // try to get splash pixmap from resources px = resMgr.loadPixmap( "LightApp", QObject::tr( "ABOUT_SPLASH" ) ); if ( !px.isNull() ) { // ...set splash pixmap splash = QtxSplash::splash( px ); + // ... set margin + int splashMargin; + if ( resMgr.value( "splash", "margin", splashMargin ) && splashMargin > 0 ) { + splash->setMargin( splashMargin ); + } // ...set splash text colors - if ( !splashTextColors.isEmpty() ) { + QString splashTextColors; + if ( resMgr.value( "splash", "text_colors", splashTextColors ) && !splashTextColors.isEmpty() ) { QStringList colors = QStringList::split( "|", splashTextColors ); QColor c1, c2; if ( colors.count() > 0 ) c1 = QColor( colors[0] ); @@ -337,7 +485,8 @@ int main( int argc, char **argv ) splash->setTextColors( Qt::white, Qt::black ); } // ...set splash progress colors - if ( !splashProgressColors.isEmpty() ) { + QString splashProgressColors; + if ( resMgr.value( "splash", "progress_colors", splashProgressColors ) && !splashProgressColors.isEmpty() ) { QStringList colors = QStringList::split( "|", splashProgressColors ); QColor c1, c2; int gradType = QtxSplash::Vertical; @@ -351,7 +500,8 @@ int main( int argc, char **argv ) f.setBold( true ); splash->setFont( f ); // ...show splash initial status - if ( !splashInfo.isEmpty() ) { + QString splashInfo; + if ( resMgr.value( "splash", "info", splashInfo, false ) && !splashInfo.isEmpty() ) { splashInfo.replace( QRegExp( "%A" ), QObject::tr( "APP_NAME" ) ); splashInfo.replace( QRegExp( "%V" ), QObject::tr( "ABOUT_VERSION" ).arg( salomeVersion() ) ); splashInfo.replace( QRegExp( "%L" ), QObject::tr( "ABOUT_LICENSE" ) ); @@ -408,7 +558,7 @@ int main( int argc, char **argv ) PortableServer::POAManager_var pman = poa->the_POAManager(); pman->activate() ; - INFOS( "pman->activate()" ); + MESSAGE( "pman->activate()" ); _NS = new SALOME_NamingService( orb ); @@ -474,6 +624,7 @@ int main( int argc, char **argv ) _GUIMutex.unlock(); } + bool shutdown = false; if ( !result ) { // Launch GUI activator if ( isGUI ) { @@ -482,7 +633,7 @@ int main( int argc, char **argv ) SALOME::Session_var session = SALOME::Session::_narrow( obj ) ; ASSERT ( ! CORBA::is_nil( session ) ); // ...create GUI launcher - INFOS( "Session activated, Launch IAPP..." ); + MESSAGE( "Session activated, Launch IAPP..." ); guiThread = new GetInterfaceThread( session ); } @@ -501,7 +652,7 @@ int main( int argc, char **argv ) aGUISession = new SALOME_Session(); // Load SalomeApp dynamic library - INFOS( "creation SUIT_Application" ); + MESSAGE( "creation SUIT_Application" ); SUIT_Application* aGUIApp = aGUISession->startApplication( "SalomeApp", 0, 0 ); if ( aGUIApp ) { @@ -520,8 +671,10 @@ int main( int argc, char **argv ) delete splash; splash = 0; - if ( result == SUIT_Session::FROM_GUI ) // desktop is closed by user from GUI + if ( result == SUIT_Session::NORMAL ) { // desktop is closed by user from GUI + shutdown = aGUISession->exitFlags(); break; + } } delete aGUISession; @@ -535,6 +688,9 @@ int main( int argc, char **argv ) // unlock Session mutex _SessionMutex.unlock(); + if ( shutdown ) + shutdownServers( _NS ); + if ( myServerLauncher ) myServerLauncher->KillAll(); // kill embedded servers @@ -543,8 +699,26 @@ int main( int argc, char **argv ) delete myServerLauncher; delete _NS; - LocalTraceBufferPool *bp1 = LocalTraceBufferPool::instance(); - LocalTraceBufferPool::deleteInstance(bp1); + PyGILState_STATE gstate = PyGILState_Ensure(); + Py_Finalize(); + + try + { + orb->destroy(); + } + catch(...) + { + ////////////////////////////////////////////////////////////// + // VSR: silently skip exception: + // CORBA.BAD_INV_ORDER.BAD_INV_ORDER_ORBHasShutdown + // exception is raised when orb->destroy() is called and + // cpp continer is launched in the embedded mode + ////////////////////////////////////////////////////////////// + // std::cerr << "Caught unexpected exception on destroy : ignored !!" << std::endl; + } + + if ( shutdown ) + killOmniNames(); return result; } diff --git a/src/Session/SalomeApp_Engine_i.hxx b/src/Session/SalomeApp_Engine_i.hxx index c37689369..abadbdd67 100755 --- a/src/Session/SalomeApp_Engine_i.hxx +++ b/src/Session/SalomeApp_Engine_i.hxx @@ -29,6 +29,8 @@ #ifndef _SALOMEAPP_ENGINE_I_HXX_ #define _SALOMEAPP_ENGINE_I_HXX_ +#include + #include "SALOME_Component_i.hxx" #include @@ -37,13 +39,7 @@ #include #include CORBA_SERVER_HEADER(SalomeApp_Engine) -#ifdef WNT -#include -#else -#define SALOME_WNT_EXPORT -#endif - -class SALOME_WNT_EXPORT SalomeApp_Engine_i: public POA_SalomeApp::Engine, +class SESSION_EXPORT SalomeApp_Engine_i: public POA_SalomeApp::Engine, public Engines_Component_i { public: diff --git a/src/Session/Session_ServerCheck.cxx b/src/Session/Session_ServerCheck.cxx index c7b67a7a3..3642f0407 100644 --- a/src/Session/Session_ServerCheck.cxx +++ b/src/Session/Session_ServerCheck.cxx @@ -39,7 +39,7 @@ const int __DEFAULT__ATTEMPTS__ = 300; // number of checks attemtps // can be overrided by CSF_RepeatServerRequest // environment variable -const int __DEFAULT__DELAY__ = 100000; // delay between attempts (microseconds) +const int __DEFAULT__DELAY__ = 50000; // delay between attempts (microseconds) // can be overrided by CSF_DelayServerRequest // environment variable @@ -135,7 +135,7 @@ void Session_ServerCheck::run() bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for naming service..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); CORBA::Object_var obj = orb->resolve_initial_references( "NameService" ); @@ -157,13 +157,13 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for naming service...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); // 2. Check registry server bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for registry server..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); SALOME_NamingService &NS = *SINGLETON_::Instance(); @@ -205,13 +205,13 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for registry server...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); // 3. Check data server bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for study server..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); SALOME_NamingService &NS = *SINGLETON_::Instance(); @@ -253,13 +253,13 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for study server...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); // 4. Check module catalogue server bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for module catalogue server..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); SALOME_NamingService &NS = *SINGLETON_::Instance(); @@ -301,13 +301,13 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for module catalogue server...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); // 5. Check data server bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for session server..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); SALOME_NamingService &NS = *SINGLETON_::Instance(); @@ -349,14 +349,14 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for session server...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); // 6. Check C++ container if ( myCheckCppContainer ) { bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for C++ container..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); SALOME_NamingService &NS = *SINGLETON_::Instance(); @@ -399,7 +399,7 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for C++ container...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); } // 7. Check Python container @@ -407,7 +407,7 @@ void Session_ServerCheck::run() bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for Python container..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); SALOME_NamingService &NS = *SINGLETON_::Instance(); @@ -450,7 +450,7 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for Python container...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); } // 8. Check supervision container @@ -458,7 +458,7 @@ void Session_ServerCheck::run() bOk = false; for ( i = 0; i < myAttempts ; i++ ) { QtxSplash::setStatus( info.arg( "Waiting for Supervision container..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 500000 : myDelay ); + QThread::usleep( i == 0 ? 50000 : myDelay ); try { CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); SALOME_NamingService &NS = *SINGLETON_::Instance(); @@ -501,7 +501,7 @@ void Session_ServerCheck::run() return; } QtxSplash::setStatus( info.arg( "Waiting for Supervision container...OK" ), ++current * myAttempts ); - QThread::usleep( 300000 ); + QThread::usleep( 30000 ); } // clear splash status splash->setProgress( 0, 0 ); diff --git a/src/Session/Session_ServerCheck.hxx b/src/Session/Session_ServerCheck.hxx index 0f84abe18..8de6a6d41 100644 --- a/src/Session/Session_ServerCheck.hxx +++ b/src/Session/Session_ServerCheck.hxx @@ -22,11 +22,7 @@ #if !defined(SESSION_SERVERCHECK_HXX) #define SESSION_SERVERCHECK_HXX -#ifdef WNT -#include -#else -#define SALOME_WNT_EXPORT -#endif +#include #include #include @@ -37,7 +33,7 @@ class QWaitCondition; /*! Class Session_ServerCheck : check SALOME servers */ -class SALOME_WNT_EXPORT Session_ServerCheck : public QThread +class SESSION_EXPORT Session_ServerCheck : public QThread { public: // constructor diff --git a/src/Session/Session_ServerLauncher.cxx b/src/Session/Session_ServerLauncher.cxx index d4b055416..c13c71a7a 100755 --- a/src/Session/Session_ServerLauncher.cxx +++ b/src/Session/Session_ServerLauncher.cxx @@ -96,7 +96,7 @@ void Session_ServerLauncher::run() _ServerLaunch->wakeAll(); // run ORB - _orb->run(); // this thread waits, during omniORB process events + //_orb->run(); // No need to call orb->run() : it waits on a lock. Qt is already waiting in the mainloop. } /*! @@ -190,20 +190,22 @@ void Session_ServerLauncher::ActivateAll() { for (int i=0; iInit(); + free( argv[0] ); + delete[] argv; } // Always launch Session Server - std::cout << "*** activating [ SESSION ] " << std::endl; + MESSAGE("*** activating [ SESSION ] "); int argc=1; char** argv = new char*[argc]; @@ -211,8 +213,8 @@ void Session_ServerLauncher::ActivateAll() Session_SessionThread* aServerThread = new Session_SessionThread(argc, argv, _orb,_root_poa,_SessionMutex,_SessionStarted); _serverThreads.push_front(aServerThread); - aServerThread->Init(); + delete[] argv; } /*! diff --git a/src/Session/Session_ServerLauncher.hxx b/src/Session/Session_ServerLauncher.hxx index b81534782..b3773adf1 100755 --- a/src/Session/Session_ServerLauncher.hxx +++ b/src/Session/Session_ServerLauncher.hxx @@ -29,6 +29,8 @@ #ifndef _SESSION_SERVERLAUNCHER_HXX_ #define _SESSION_SERVERLAUNCHER_HXX_ +#include + #include "Session_ServerThread.hxx" #include @@ -38,16 +40,9 @@ #include #include - -#ifdef WNT -#include -#else -#define SALOME_WNT_EXPORT -#endif - using namespace std; -class ServArg +class SESSION_EXPORT ServArg { public: int _servType; @@ -60,7 +55,7 @@ inline ServArg::ServArg(int servType, int firstArg, int lastArg): _servType(servType),_firstArg(firstArg),_lastArg(lastArg) {} -class SALOME_WNT_EXPORT Session_ServerLauncher: public QThread +class SESSION_EXPORT Session_ServerLauncher: public QThread { public: Session_ServerLauncher(); diff --git a/src/Session/Session_ServerThread.cxx b/src/Session/Session_ServerThread.cxx index d9ef4f806..c29a4807d 100755 --- a/src/Session/Session_ServerThread.cxx +++ b/src/Session/Session_ServerThread.cxx @@ -1,22 +1,22 @@ // SALOME Session : implementation of Session_ServerThread.cxx // // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// +// 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 // // @@ -33,7 +33,7 @@ #include "Session_ServerThread.hxx" #include "SALOME_Container_i.hxx" -#include "SALOME_ContainerManager.hxx" +#include "SALOME_Launcher.hxx" #include #include #include "SALOME_ModuleCatalog_impl.hxx" @@ -55,14 +55,14 @@ using namespace std; const int Session_ServerThread::NB_SRV_TYP = 7; const char* Session_ServerThread::_serverTypes[NB_SRV_TYP] = {"Container", - "ModuleCatalog", - "Registry", - "SALOMEDS", - "Session", - "SalomeAppEngine", + "ModuleCatalog", + "Registry", + "SALOMEDS", + "Session", + "SalomeAppEngine", "ContainerManager"}; -/*! +/*! default constructor not for use */ Session_ServerThread::Session_ServerThread() @@ -70,17 +70,21 @@ Session_ServerThread::Session_ServerThread() ASSERT(0); // must not be called } -/*! +/*! constructor */ Session_ServerThread::Session_ServerThread(int argc, - char ** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa) + char ** argv, + CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa) { //MESSAGE("Session_ServerThread Constructor " << argv[0]); _argc = argc; - _argv = argv; + _argv = new char*[ _argc + 1 ]; + _argv[_argc] = 0; + for (int i = 0; i < _argc; i++ ) + _argv[i] = strdup( argv[i] ); + _orb = CORBA::ORB::_duplicate(orb); _root_poa = PortableServer::POA::_duplicate(poa); _servType =-1; @@ -88,21 +92,25 @@ Session_ServerThread::Session_ServerThread(int argc, // multi thread coherence problems } -/*! - destructor +/*! + destructor */ Session_ServerThread::~Session_ServerThread() { //MESSAGE("~Session_ServerThread "<< _argv[0]); + delete _NS; + for (int i = 0; i <_argc ; i++ ) + free( _argv[i] ); + delete[] _argv; } -/*! +/*! run the thread : activate one servant, the servant type is given by argument _argv[0] */ void Session_ServerThread::Init() { - MESSAGE("Session_ServerThread::Init "<< _argv[0]); + MESSAGE("Session_ServerThread::Init "<< _argv[0]); for (int i=0; i<_argc; i++) SCRUTE(_argv[i]); #ifndef WNT @@ -112,82 +120,83 @@ void Session_ServerThread::Init() #endif if (strcmp(_argv[0],_serverTypes[i])==0) { - _servType = i; - MESSAGE("Server Thread type : "<<_serverTypes[i]); - switch (_servType) - { - case 0: // Container - { - NamingService_WaitForServerReadiness(_NS,"/Registry"); - NamingService_WaitForServerReadiness(_NS,"/ContainerManager"); - ActivateContainer(_argc, _argv); - break; - } - case 1: // ModuleCatalog - { - NamingService_WaitForServerReadiness(_NS,"/Registry"); - ActivateModuleCatalog(_argc, _argv); - break; - } - case 2: // Registry - { - NamingService_WaitForServerReadiness(_NS,""); - ActivateRegistry(_argc, _argv); - break; - } - case 3: // SALOMEDS - { - NamingService_WaitForServerReadiness(_NS,"/Kernel/ModulCatalog"); - ActivateSALOMEDS(_argc, _argv); - break; - } - case 4: // Session - { - NamingService_WaitForServerReadiness(_NS,"/myStudyManager"); - string containerName = "/Containers/"; - containerName = containerName + GetHostname(); - containerName = containerName + "/FactoryServer"; - NamingService_WaitForServerReadiness(_NS,containerName); - ActivateSession(_argc, _argv); - break; - } - case 5: // SalomeApp_Engine - { - NamingService_WaitForServerReadiness(_NS,"/myStudyManager"); - ActivateEngine(_argc, _argv); - break; - } - case 6: // Container Manager - { - NamingService_WaitForServerReadiness(_NS,""); - ActivateContainerManager(_argc, _argv); - break; - } - default: - { - ASSERT(0); - break; - } - } + _servType = i; + MESSAGE("Server Thread type : "<<_serverTypes[i]); + switch (_servType) + { + case 0: // Container + { + NamingService_WaitForServerReadiness(_NS,"/Registry"); + NamingService_WaitForServerReadiness(_NS,"/ContainerManager"); + ActivateContainer(_argc, _argv); + break; + } + case 1: // ModuleCatalog + { + NamingService_WaitForServerReadiness(_NS,"/Registry"); + ActivateModuleCatalog(_argc, _argv); + break; + } + case 2: // Registry + { + NamingService_WaitForServerReadiness(_NS,""); + ActivateRegistry(_argc, _argv); + break; + } + case 3: // SALOMEDS + { + NamingService_WaitForServerReadiness(_NS,"/Kernel/ModulCatalog"); + ActivateSALOMEDS(_argc, _argv); + break; + } + case 4: // Session + { + NamingService_WaitForServerReadiness(_NS,"/myStudyManager"); + string containerName = "/Containers/"; + containerName = containerName + GetHostname(); + containerName = containerName + "/FactoryServer"; + NamingService_WaitForServerReadiness(_NS,containerName); + ActivateSession(_argc, _argv); + break; + } + case 5: // SalomeApp_Engine + { + NamingService_WaitForServerReadiness(_NS,"/myStudyManager"); + ActivateEngine(_argc, _argv); + break; + } + case 6: // Container Manager + { + NamingService_WaitForServerReadiness(_NS,""); + ActivateContainerManager(_argc, _argv); + break; + } + default: + { + ASSERT(0); + break; + } + } } } void Session_ServerThread::ActivateModuleCatalog(int argc, - char ** argv) + char ** argv) { try { - INFOS("ModuleCatalog thread started"); + MESSAGE("ModuleCatalog thread started"); // allocation on heap to allow destruction by POA SALOME_ModuleCatalogImpl* Catalogue_i - = new SALOME_ModuleCatalogImpl(argc, argv); + = new SALOME_ModuleCatalogImpl(argc, argv); // Tell the POA that the objects are ready to accept requests. - _root_poa->activate_object (Catalogue_i); + PortableServer::ObjectId_var id= _root_poa->activate_object (Catalogue_i); + Catalogue_i->_remove_ref(); - CORBA::Object_ptr myCata = Catalogue_i->_this(); + CORBA::Object_var myCata = Catalogue_i->_this(); _NS->Register(myCata ,"/Kernel/ModulCatalog"); } catch(CORBA::SystemException&) @@ -205,21 +214,21 @@ void Session_ServerThread::ActivateModuleCatalog(int argc, INFOS( " line: " << fe.line() ); INFOS( " mesg: " << fe.errmsg() ); } - catch(...) + catch(...) { INFOS( "Caught unknown exception." ); } } void Session_ServerThread::ActivateSALOMEDS(int argc, - char ** argv) + char ** argv) { try { - INFOS("SALOMEDS thread started"); + MESSAGE("SALOMEDS thread started"); // We allocate the objects on the heap. Since these are reference // counted objects, they will be deleted by the POA when they are no - // longer needed. + // longer needed. ClientFactory::createStudyManager(_orb,_root_poa); } @@ -238,17 +247,17 @@ void Session_ServerThread::ActivateSALOMEDS(int argc, INFOS( " line: " << fe.line() ); INFOS( " mesg: " << fe.errmsg() ); } - catch(...) + catch(...) { INFOS( "Caught unknown exception." ); } } void Session_ServerThread::ActivateRegistry(int argc, - char ** argv) + char ** argv) { - INFOS("Registry thread started"); - SCRUTE(argc); + MESSAGE("Registry thread started"); + SCRUTE(argc); if( argc<3 ) { INFOS("you must provide the Salome session name when you call SALOME_Registry_Server"); @@ -260,10 +269,10 @@ void Session_ServerThread::ActivateRegistry(int argc, for ( k=1 ; k0); @@ -273,22 +282,23 @@ void Session_ServerThread::ActivateRegistry(int argc, { RegistryService *ptrRegistry = SINGLETON_::Instance(); ptrRegistry->SessionName( ptrSessionName ); + ptrRegistry->SetOrb(_orb); varComponents = ptrRegistry->_this(); // The RegistryService must not already exist. - + try - { - CORBA::Object_var pipo = _NS->Resolve( registryName ); - if (CORBA::is_nil(pipo) ) throw ServiceUnreachable(); - INFOS("RegistryService servant already existing" ); - ASSERT(0); - } - catch( const ServiceUnreachable &ex ) - { - } - catch( const CORBA::Exception &exx ) - { - } + { + CORBA::Object_var pipo = _NS->Resolve( registryName ); + if (CORBA::is_nil(pipo) ) throw ServiceUnreachable(); + INFOS("RegistryService servant already existing" ); + ASSERT(0); + } + catch( const ServiceUnreachable &/*ex*/ ) + { + } + catch( const CORBA::Exception &/*exx*/ ) + { + } string absoluteName = string("/") + registryName; _NS->Register( varComponents , absoluteName.c_str() ); MESSAGE("On attend les requetes des clients"); @@ -301,14 +311,13 @@ void Session_ServerThread::ActivateRegistry(int argc, } void Session_ServerThread::ActivateContainerManager(int argc, - char ** argv) + char ** argv) { try { PortableServer::POA_var root_poa=PortableServer::POA::_the_root_poa(); - cout << "ActivateContainerManager ......!!!! " << endl; - SALOME_ContainerManager * myContainer - = new SALOME_ContainerManager(_orb); + cout << "ActivateSalomeLauncher ......!!!! " << endl; + SALOME_Launcher * myContainer = new SALOME_Launcher(_orb,root_poa); } catch(CORBA::SystemException&) { @@ -333,66 +342,66 @@ void Session_ServerThread::ActivateContainerManager(int argc, } void Session_ServerThread::ActivateContainer(int argc, - char ** argv) + char ** argv) { try { - INFOS("Container thread started"); + MESSAGE("Container thread started"); // get or create the child POA PortableServer::POA_var factory_poa; try - { - factory_poa = _root_poa->find_POA("factory_poa",0); - // 0 = no activation (already done if exists) - } + { + factory_poa = _root_poa->find_POA("factory_poa",0); + // 0 = no activation (already done if exists) + } catch (PortableServer::POA::AdapterNonExistent&) - { - INFOS("factory_poa does not exists, create..."); - // define policy objects - PortableServer::ImplicitActivationPolicy_var implicitActivation = - _root_poa->create_implicit_activation_policy( - PortableServer::NO_IMPLICIT_ACTIVATION); - // default = NO_IMPLICIT_ACTIVATION - PortableServer::ThreadPolicy_var threadPolicy = - _root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL); - // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL - - // create policy list - CORBA::PolicyList policyList; - policyList.length(2); - policyList[0] = PortableServer::ImplicitActivationPolicy:: - _duplicate(implicitActivation); - policyList[1] = PortableServer::ThreadPolicy:: - _duplicate(threadPolicy); - - PortableServer::POAManager_var nil_mgr - = PortableServer::POAManager::_nil(); - factory_poa = _root_poa->create_POA("factory_poa", - nil_mgr, - policyList); - //with nil_mgr instead of pman, - //a new POA manager is created with the new POA - - // destroy policy objects - implicitActivation->destroy(); - threadPolicy->destroy(); - - // obtain the factory poa manager - PortableServer::POAManager_var pmanfac = factory_poa->the_POAManager(); - pmanfac->activate(); - MESSAGE("pmanfac->activate()"); - } - + { + MESSAGE("factory_poa does not exists, create..."); + // define policy objects + PortableServer::ImplicitActivationPolicy_var implicitActivation = + _root_poa->create_implicit_activation_policy( + PortableServer::NO_IMPLICIT_ACTIVATION); + // default = NO_IMPLICIT_ACTIVATION + PortableServer::ThreadPolicy_var threadPolicy = + _root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL); + // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL + + // create policy list + CORBA::PolicyList policyList; + policyList.length(2); + policyList[0] = PortableServer::ImplicitActivationPolicy:: + _duplicate(implicitActivation); + policyList[1] = PortableServer::ThreadPolicy:: + _duplicate(threadPolicy); + + PortableServer::POAManager_var nil_mgr + = PortableServer::POAManager::_nil(); + factory_poa = _root_poa->create_POA("factory_poa", + nil_mgr, + policyList); + //with nil_mgr instead of pman, + //a new POA manager is created with the new POA + + // destroy policy objects + implicitActivation->destroy(); + threadPolicy->destroy(); + + // obtain the factory poa manager + PortableServer::POAManager_var pmanfac = factory_poa->the_POAManager(); + pmanfac->activate(); + MESSAGE("pmanfac->activate()"); + } + char *containerName = ""; - if (argc >1) - { - containerName = argv[1]; - } - - Engines_Container_i * myContainer - = new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false); + if (argc >1) + { + containerName = argv[1]; + } + + Engines_Container_i * myContainer + = new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false); } catch(CORBA::SystemException&) { @@ -418,86 +427,88 @@ void Session_ServerThread::ActivateContainer(int argc, void Session_ServerThread::ActivateEngine(int /*argc*/, char ** /*argv*/) { - try - { - INFOS("SalomeApp_Engine thread started"); - SalomeApp_Engine_i* anEngine = new SalomeApp_Engine_i(); - /*PortableServer::ObjectId_var id = */_root_poa->activate_object( anEngine ); - INFOS("poa->activate_object( SalomeApp_Engine )"); - - CORBA::Object_ptr obj = anEngine->_this(); - _NS->Register( obj ,"/SalomeAppEngine"); + try + { + MESSAGE("SalomeApp_Engine thread started"); + SalomeApp_Engine_i* anEngine = new SalomeApp_Engine_i(); + PortableServer::ObjectId_var id =_root_poa->activate_object( anEngine ); + MESSAGE("poa->activate_object( SalomeApp_Engine )"); - } - catch (CORBA::SystemException&) - { - INFOS("Caught CORBA::SystemException."); - } - catch (CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch (...) - { - INFOS("Caught unknown exception."); - } + CORBA::Object_var obj = anEngine->_this(); + anEngine->_remove_ref(); + _NS->Register( obj ,"/SalomeAppEngine"); + + } + catch (CORBA::SystemException&) + { + INFOS("Caught CORBA::SystemException."); + } + catch (CORBA::Exception&) + { + INFOS("Caught CORBA::Exception."); + } + catch (...) + { + INFOS("Caught unknown exception."); + } } void Session_ServerThread::ActivateSession(int argc, - char ** argv) + char ** argv) { MESSAGE("Session_ServerThread::ActivateSession() not implemented!"); } -/*! - constructor +/*! + constructor */ Session_SessionThread::Session_SessionThread(int argc, - char** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - QMutex* GUIMutex, - QWaitCondition* GUILauncher) -: Session_ServerThread(argc, argv, orb, poa), - _GUIMutex( GUIMutex ), - _GUILauncher( GUILauncher ) + char** argv, + CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + QMutex* GUIMutex, + QWaitCondition* GUILauncher) + : Session_ServerThread(argc, argv, orb, poa), + _GUIMutex( GUIMutex ), + _GUILauncher( GUILauncher ) { } -/*! - destructor +/*! + destructor */ Session_SessionThread::~Session_SessionThread() { } void Session_SessionThread::ActivateSession(int argc, - char ** argv) + char ** argv) { - try - { - INFOS("Session thread started"); - SALOME_Session_i * mySALOME_Session - = new SALOME_Session_i(argc, argv, _orb, _root_poa, _GUIMutex, _GUILauncher) ; - PortableServer::ObjectId_var mySALOME_Sessionid - = _root_poa->activate_object(mySALOME_Session); - INFOS("poa->activate_object(mySALOME_Session)"); - - CORBA::Object_var obj = mySALOME_Session->_this(); - CORBA::String_var sior(_orb->object_to_string(obj)); - - mySALOME_Session->NSregister(); - } - catch (CORBA::SystemException&) - { - INFOS("Caught CORBA::SystemException."); - } - catch (CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch (...) - { - INFOS("Caught unknown exception."); - } + try + { + MESSAGE("Session thread started"); + SALOME_Session_i * mySALOME_Session + = new SALOME_Session_i(argc, argv, _orb, _root_poa, _GUIMutex, _GUILauncher) ; + PortableServer::ObjectId_var mySALOME_Sessionid + = _root_poa->activate_object(mySALOME_Session); + MESSAGE("poa->activate_object(mySALOME_Session)"); + + CORBA::Object_var obj = mySALOME_Session->_this(); + CORBA::String_var sior(_orb->object_to_string(obj)); + mySALOME_Session->_remove_ref(); + + mySALOME_Session->NSregister(); + } + catch (CORBA::SystemException&) + { + INFOS("Caught CORBA::SystemException."); + } + catch (CORBA::Exception&) + { + INFOS("Caught CORBA::Exception."); + } + catch (...) + { + INFOS("Caught unknown exception."); + } } diff --git a/src/Session/Session_ServerThread.hxx b/src/Session/Session_ServerThread.hxx index 8c2e417da..04ded4d2e 100755 --- a/src/Session/Session_ServerThread.hxx +++ b/src/Session/Session_ServerThread.hxx @@ -29,6 +29,8 @@ #ifndef _SESSION_SERVERTHREAD_HXX_ #define _SESSION_SERVERTHREAD_HXX_ +#include + #include #include @@ -40,7 +42,7 @@ using namespace std; void WaitForServerReadiness(string serverName); -class Session_ServerThread +class SESSION_EXPORT Session_ServerThread { public: static const int NB_SRV_TYP; @@ -71,7 +73,7 @@ protected: }; -class Session_SessionThread : public Session_ServerThread +class SESSION_EXPORT Session_SessionThread : public Session_ServerThread { public: Session_SessionThread() {} diff --git a/src/Session/Session_Session_i.cxx b/src/Session/Session_Session_i.cxx index ee239674e..92da744bc 100755 --- a/src/Session/Session_Session_i.cxx +++ b/src/Session/Session_Session_i.cxx @@ -35,6 +35,7 @@ #include "SUIT_Session.h" #include "SUIT_Application.h" +#include "SUIT_Desktop.h" #include @@ -63,6 +64,7 @@ SALOME_Session_i::SALOME_Session_i(int argc, _poa = PortableServer::POA::_duplicate(poa) ; _GUIMutex = GUIMutex; _GUILauncher = GUILauncher; + _NS = new SALOME_NamingService(_orb); //MESSAGE("constructor end"); } @@ -86,6 +88,7 @@ Engines::Component_ptr SALOME_Session_i::GetComponent(const char* theLibraryName */ SALOME_Session_i::~SALOME_Session_i() { + delete _NS; //MESSAGE("destructor end"); } @@ -95,10 +98,10 @@ SALOME_Session_i::~SALOME_Session_i() */ void SALOME_Session_i::NSregister() { - SALOME::Session_ptr pSession = SALOME::Session::_narrow(_this()); + CORBA::Object_var obref=_this(); + SALOME::Session_var pSession = SALOME::Session::_narrow(obref); try { - _NS = new SALOME_NamingService(_orb); _NS->Register(pSession, "/Kernel/Session"); } catch (ServiceUnreachable&) @@ -221,3 +224,30 @@ bool SALOME_Session_i::restoreVisualState(CORBA::Long theSavePoint) return false; } + +void SALOME_Session_i::emitMessage(const char* theMessage) +{ + class TEvent: public SALOME_Event { + public: + TEvent(const char * msg) { + _msg = msg; + } + virtual void Execute() { + SUIT_Session::session()->activeApplication()->desktop()->emitMessage(_msg); + } + private: + const char* _msg; + }; + if ( SUIT_Session::session() ) { + if ( SUIT_Session::session()->activeApplication() ) { + if ( SUIT_Session::session()->activeApplication()->desktop() ) { + ProcessVoidEvent( new TEvent(theMessage) ); + } + } + } +} + +void SALOME_Session_i::emitMessageOneWay(const char* theMessage) +{ + emitMessage(theMessage); +} diff --git a/src/Session/Session_Session_i.hxx b/src/Session/Session_Session_i.hxx index 18d2caf84..58f5fdb31 100755 --- a/src/Session/Session_Session_i.hxx +++ b/src/Session/Session_Session_i.hxx @@ -29,6 +29,8 @@ #ifndef _SESSION_SESSION_I_HXX_ #define _SESSION_SESSION_I_HXX_ +#include + #include #include @@ -36,8 +38,8 @@ #include CORBA_SERVER_HEADER(SALOME_Session) class SALOME_NamingService; -class SALOME_Session_i: public virtual POA_SALOME::Session, - public virtual PortableServer::RefCountServantBase +class SESSION_EXPORT SALOME_Session_i: public virtual POA_SALOME::Session, + public virtual PortableServer::ServantBase { public: SALOME_Session_i(int argc, @@ -64,12 +66,17 @@ public: void NSregister(); CORBA::Long GetActiveStudyId(); - + void ping(){}; + CORBA::Long getPID() { return (CORBA::Long)getpid(); }; //! Restors a visual state of the study at theSavePoint bool restoreVisualState(CORBA::Long theSavePoint); + //! Emit a qt signal from the session GUI desktop window. + void emitMessage(const char* theMessage); + void emitMessageOneWay(const char* theMessage); + protected: //! Naming service interface diff --git a/src/Session/runSession b/src/Session/runSession deleted file mode 100755 index cbb98a2da..000000000 --- a/src/Session/runSession +++ /dev/null @@ -1,27 +0,0 @@ -export SALOME_HOME_DIR=`pwd` -export ORB_HOME_DIR=${HOME}/public/omni - -# OCAF -export CSF_PluginDefaults=${SALOME_HOME_DIR}/../resources -export CSF_ResourcesDefaults=${SALOME_HOME_DIR}/../resources - -export CSF_SALOMEGUIResources=${SALOME_HOME_DIR}/../SALOME/resources -export CSF_SALOMEGUILanguage=en -export CSF_QADResources=${SALOME_HOME_DIR}/../SALOME/resources -export CSF_QADLanguage=en - -export CSF_CatalogueResources=${SALOME_HOME_DIR}/../resources - -export CSF_GeometryResources=${SALOME_HOME_DIR}/../GEOM/resources - -export CSF_MeshResources=${SALOME_HOME_DIR}/../MESH/resources - -export CSF_PATHComponents=${SALOME_HOME_DIR}/../lib - -export LD_LIBRARY_PATH=${SALOME_HOME_DIR}/../lib/:${LD_LIBRARY_PATH} - -runNS.sh -geom& -mesh& -SALOME_Session_Server - diff --git a/src/ObjBrowser/Makefile.in b/src/Style/Makefile.am old mode 100755 new mode 100644 similarity index 63% rename from src/ObjBrowser/Makefile.in rename to src/Style/Makefile.am index 71ff8fefd..aee0db5be --- a/src/ObjBrowser/Makefile.in +++ b/src/Style/Makefile.am @@ -18,43 +18,24 @@ # # File : Makefile.in # Author : Vladimir Klyachin (OCN) -# Module : ObjectBrowser -# $Header$ +# Module : SalomeApp -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources +include $(top_srcdir)/adm_local/unix/make_common_starter.am - -@COMMENCE@ - -# header files -EXPORT_HEADERS= OB.h \ - OB_Browser.h \ - OB_ListItem.h \ - OB_ListView.h \ - OB_Filter.h - # Libraries targets -LIB = libObjBrowser.la - -LIB_SRC= OB_Browser.cxx \ - OB_ListItem.cxx \ - OB_ListView.cxx \ - OB_Filter.cxx - -LIB_MOC = OB_Browser.h \ - OB_ListView.h +lib_LTLIBRARIES = libSalomeStyle.la -# .po files to transform in .qm -PO_FILES = OB_msg_en.po +libSalomeStyle_la_SOURCES = SalomeStyle.cxx -CPPFLAGS+=$(QT_INCLUDES) +libSalomeStyle_la_CPPFLAGS=$(QT_INCLUDES) -LDFLAGS+=$(QT_MT_LIBS) -LIBS+= -lsuit +libSalomeStyle_la_LDFLAGS=$(QT_MT_LIBS) -@CONCLUDE@ +EXTRA_DIST+=SalomeStyle.h +install-exec-hook: + mkdir -p $(bindir)/styles + (cd $(bindir)/styles; ln -sf ../../../lib@LIB_LOCATION_SUFFIX@/salome/libSalomeStyle.so libSalomeStyle.so;) +uninstall-hook: + rm -f $(bindir)/styles/libSalomeStyle.so diff --git a/src/Style/Makefile.in b/src/Style/Makefile.in deleted file mode 100644 index 6de6bc78d..000000000 --- a/src/Style/Makefile.in +++ /dev/null @@ -1,79 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : SalomeApp - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= - -# .po files to transform in .qm -PO_FILES = - -# Libraries targets -LIB = libSalomeStyle.la - -LIB_SRC= SalomeStyle.cxx - -LIB_MOC = - -LIB_CLIENT_IDL = - -RESOURCES_FILES = - -CPPFLAGS+=$(QT_INCLUDES) - -LDFLAGS+=$(QT_MT_LIBS) -LIBS+= - -# create $(top_builddir)/src/Session/styles directory and copy libSalomeStyle.so there -LIB_PLUGINDIR = $(top_builddir)/src/Session/styles -LIB_PLUGINLIB = $(patsubst %.la, $(LIB_PLUGINDIR)/%.so, $(filter %.la, $(LIB))) - -lib: $(LIB) $(LIB_PLUGINDIR) $(LIB_PLUGINLIB) - -$(LIB_PLUGINDIR): - mkdir -p $@ - -$(LIB_PLUGINLIB): $(LIB_PLUGINDIR)/%.so: .libs/%.so - -$(RM) $@ - ln -sf $(CURDIR)/$< $@ || true - -# do the same in install step -INSTALL_PLUGINDIR = $(bindir)/styles -INSTALL_COPYLIB = $(patsubst %.la, $(INSTALL_PLUGINDIR)/%.so, $(filter %.la, $(LIB))) - -install: $(INSTALL_PLUGINDIR) $(INSTALL_COPYLIB) - -$(INSTALL_PLUGINDIR): - mkdir -p $@ - -$(INSTALL_COPYLIB): - (cd $(bindir)/styles; ln -sf $(patsubst %.la, ../../../lib@LIB_LOCATION_SUFFIX@/salome/%.so, $(filter %.la, $(LIB))) $@) || true - -@CONCLUDE@ - diff --git a/src/Style/SalomeStyle.cxx b/src/Style/SalomeStyle.cxx index d35196cf5..371e261f4 100644 --- a/src/Style/SalomeStyle.cxx +++ b/src/Style/SalomeStyle.cxx @@ -483,22 +483,25 @@ void SalomeStyle::drawPrimitive( PrimitiveElement pe, QPainter* p, const QRect& int textW = flags & Style_Horizontal ? rt.height() : rt.width(); int textH = flags & Style_Horizontal ? rt.width() : rt.height(); - QString title = titleText( wnd->caption(), textW, p->fontMetrics() ); - - if ( wnd ) + QFont old_font = p->font(), f = old_font; + + QString title = titleText( wnd->caption(), textW, textH, f ); + p->setFont( f ); + if ( wnd ) { - QColorGroup cgroup = wnd->isActiveWindow() ? wnd->palette().active() : wnd->palette().inactive(); - p->setPen( cgroup.highlightedText() ); + QColorGroup cgroup = wnd->isActiveWindow() ? wnd->palette().active() : wnd->palette().inactive(); + p->setPen( cgroup.highlightedText() ); - if ( flags & Style_Horizontal ) + if ( flags & Style_Horizontal ) { - p->rotate( 270.0 ); - p->translate( -(rt.height()+rt.y()), (rt.width()-rt.x()) ); - p->drawText( 0, 0, title ); - } + p->rotate( 270.0 ); + p->translate( -(rt.height()+rt.y()), (rt.width()-rt.x()) ); + p->drawText( 0, 0, title ); + } else - p->drawText( 2, 2, textW, textH, AlignLeft, title ); - } + p->drawText( 2, 2, textW, textH, AlignLeft, title ); + } + p->setFont( old_font ); } break; } @@ -1279,10 +1282,17 @@ int SalomeStyle::pixelMetric( PixelMetric pm, const QWidget* widget ) const \param w - possible width \param fm - font metrics */ -QString SalomeStyle::titleText( const QString& txt, const int W, const QFontMetrics& fm ) const +QString SalomeStyle::titleText( const QString& txt, const int W, const int H, QFont& f ) const { QString res = txt.stripWhiteSpace(); + QFontMetrics fm( f ); + while( fm.height() > H && f.pointSize()>1 ) + { + f.setPointSize( f.pointSize()-1 ); + fm = QFontMetrics( f ); + } + if ( fm.width( res ) > W ) { QString end( "..." ); diff --git a/src/Style/SalomeStyle.h b/src/Style/SalomeStyle.h index e6cdd5807..e87ebf16d 100644 --- a/src/Style/SalomeStyle.h +++ b/src/Style/SalomeStyle.h @@ -92,7 +92,7 @@ protected: void drawGradient( QPainter*, const QRect&, const QColor&, const QColor&, const Direction, gradient_func ) const; - QString titleText( const QString&, const int, const QFontMetrics& ) const; + QString titleText( const QString&, const int, const int, QFont& f ) const; private: QWidget* myTitleParent; diff --git a/src/TOOLSGUI/Makefile.in b/src/TOOLSGUI/Makefile.am similarity index 52% rename from src/TOOLSGUI/Makefile.in rename to src/TOOLSGUI/Makefile.am index bec8e5a2b..e3081448e 100755 --- a/src/TOOLSGUI/Makefile.in +++ b/src/TOOLSGUI/Makefile.am @@ -26,41 +26,40 @@ # Module : SALOME # $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:@srcdir@/resources +include $(top_srcdir)/adm_local/unix/make_common_starter.am +lib_LTLIBRARIES = libToolsGUI.la -@COMMENCE@ +salomeinclude_HEADERS= \ + ToolsGUI.h \ + ToolsGUI_RegWidget.h \ + ToolsGUI_CatalogGeneratorDlg.h -# header files -EXPORT_HEADERS = ToolsGUI.h \ - ToolsGUI_RegWidget.h \ - ToolsGUI_CatalogGeneratorDlg.h +dist_libToolsGUI_la_SOURCES= \ + ToolsGUI_CatalogGeneratorDlg.cxx \ + ToolsGUI_HelpWindow.cxx \ + ToolsGUI_RegWidget.cxx \ + ToolsGUI_IntervalWindow.cxx \ + ToolsGUI.cxx -# .po files to transform in .qm -PO_FILES = ToolsGUI_icons.po \ - ToolsGUI_msg_en.po - -# Libraries targets -LIB = libToolsGUI.la - -LIB_SRC = ToolsGUI_CatalogGeneratorDlg.cxx \ - ToolsGUI_HelpWindow.cxx \ - ToolsGUI_RegWidget.cxx \ - ToolsGUI_IntervalWindow.cxx \ - ToolsGUI.cxx +EXTRA_DIST+= -LIB_MOC = ToolsGUI_CatalogGeneratorDlg.h \ - ToolsGUI_RegWidget.h +MOC_FILES= \ + ToolsGUI_CatalogGeneratorDlg_moc.cxx \ + ToolsGUI_RegWidget_moc.cxx \ + ToolsGUI_HelpWindow_moc.cxx \ + ToolsGUI_IntervalWindow_moc.cxx -LIB_CLIENT_IDL = SALOME_Registry.idl SALOME_Exception.idl +nodist_libToolsGUI_la_SOURCES= $(MOC_FILES) -CPPFLAGS += $(QT_INCLUDES) $(OCC_INCLUDES) $(BOOST_CPPFLAGS) $(KERNEL_CXXFLAGS) -CXXFLAGS += $(OCC_CXXFLAGS) $(BOOST_CPPFLAGS) $(KERNEL_CXXFLAGS) - -LDFLAGS += $(QT_MT_LIBS) -lsuit $(CAS_KERNEL) $(KERNEL_LDFLAGS) -lSalomeNS -lOpUtil - -@CONCLUDE@ +# .po files to transform in .qm +nodist_salomeres_DATA= \ + ToolsGUI_icons.qm \ + ToolsGUI_msg_en.qm +libToolsGUI_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) $(BOOST_CPPFLAGS) \ + @KERNEL_CXXFLAGS@ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ \ + -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT +libToolsGUI_la_LDFLAGS = $(QT_MT_LIBS) ../SUIT/libsuit.la $(CAS_KERNEL) $(KERNEL_LDFLAGS) \ + -lSalomeNS -lOpUtil $(top_builddir)/idl/libSalomeIDLGUI.so diff --git a/src/TOOLSGUI/ToolsGUI_HelpWindow.h b/src/TOOLSGUI/ToolsGUI_HelpWindow.h index 9888f3da9..b4849baf0 100755 --- a/src/TOOLSGUI/ToolsGUI_HelpWindow.h +++ b/src/TOOLSGUI/ToolsGUI_HelpWindow.h @@ -36,6 +36,8 @@ class QTextView; class ToolsGUI_HelpWindow : public QMainWindow { + Q_OBJECT + public: ToolsGUI_HelpWindow( QWidget* parent = 0, const char* name = 0); ~ToolsGUI_HelpWindow(); diff --git a/src/TOOLSGUI/ToolsGUI_IntervalWindow.h b/src/TOOLSGUI/ToolsGUI_IntervalWindow.h index 5fec1a340..242373657 100755 --- a/src/TOOLSGUI/ToolsGUI_IntervalWindow.h +++ b/src/TOOLSGUI/ToolsGUI_IntervalWindow.h @@ -34,6 +34,8 @@ using namespace std; class ToolsGUI_IntervalWindow : public QDialog { + Q_OBJECT + public: ToolsGUI_IntervalWindow( QWidget* parent = 0 ); ~ToolsGUI_IntervalWindow(); diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.cxx b/src/TOOLSGUI/ToolsGUI_RegWidget.cxx index 9b872f9c2..d9c62a9bf 100755 --- a/src/TOOLSGUI/ToolsGUI_RegWidget.cxx +++ b/src/TOOLSGUI/ToolsGUI_RegWidget.cxx @@ -150,23 +150,23 @@ Registry::Components_var MakeRegistry( CORBA::ORB_var &orb ) // Recuperation de la reference de l'objet CORBA::Object_var object = 0 ; try - { - SCRUTE(registryName) ; - object = naming.Resolve( registryName ) ; - if(CORBA::is_nil(object)) throw CommException( "unable to find the RegistryService" ) ; - } - catch( const ServiceUnreachable &ex ) - { - MESSAGE( ex.what() ) - exit( EXIT_FAILURE ) ; - } - catch( const CORBA::Exception &exx ) - { - exit( EXIT_FAILURE ) ; - } - + { + SCRUTE(registryName) ; + object = naming.Resolve( registryName ) ; + if(CORBA::is_nil(object)) throw CommException( "unable to find the RegistryService" ) ; + } + catch( const ServiceUnreachable& ex ) + { + MESSAGE( ex.what() ) + exit( EXIT_FAILURE ) ; + } + catch( const CORBA::Exception& ) + { + exit( EXIT_FAILURE ) ; + } + // Specialisation de l'objet generique - + return Registry::Components::_narrow( object ) ; } @@ -342,6 +342,8 @@ QString ToolsGUI_RegWidget::setlongText( const Registry::Infos &c_info) 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( " " ) ); @@ -400,6 +402,8 @@ QString ToolsGUI_RegWidget::setlongText( const Registry::Infos &c_info) a.append( BOLD( QString::number( int( c_info.difftime ) ) ) ); a.append( QString( " " ) + tr( "seconds" ) + QString( ")
" ) ); } + a.append( "
" ); // ASV: 28.07.06 : added tags to make the text font be + // fixed width (looks much better on Windows) END_OF("setlongText"); return a; @@ -768,6 +772,8 @@ QString findFile( QString filename ) dir = addSlash(dir) ; dir = dir + "resources" ; dir = addSlash(dir) ; + dir = dir + "kernel" ; + dir = addSlash(dir) ; QFileInfo fileInfo( dir + filename ); if ( fileInfo.isFile() && fileInfo.exists() ) return fileInfo.filePath(); @@ -795,29 +801,22 @@ QString findFile( QString filename ) // Try CSF_SaloameResources env.var directory ( or directory list ) cenv = getenv( "CSF_SalomeResources" ); if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - QStringList dirList = QStringList::split( SEPARATOR, dir, false ); // skip empty entries - for ( int i = 0; i < dirList.count(); i++ ) { - QFileInfo fileInfo( addSlash( dirList[ i ] ) + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); + dir.sprintf( "%s", cenv ); + if ( !dir.isEmpty() ) + { + QStringList dirList = QStringList::split( SEPARATOR, dir, false ); // skip empty entries + for ( int i = 0; i < (int)dirList.count(); i++ ) + { + QFileInfo fileInfo( addSlash( dirList[ i ] ) + filename ); + if ( fileInfo.isFile() && fileInfo.exists() ) + return fileInfo.filePath(); } } } return filename; } + QString addSlash( const QString& path ) { return Qtx::addSlash( path ); -// if (!path.isNull()) { -//#ifdef WNT -// QChar slash ('\\'); -//#else -// QChar slash ('/'); -//#endif -// if ( path.at(path.length()-1) != slash ) -// return path + slash; -// } -// return path; } diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.h b/src/TOOLSGUI/ToolsGUI_RegWidget.h index a5a3d1b96..be40bc8a2 100755 --- a/src/TOOLSGUI/ToolsGUI_RegWidget.h +++ b/src/TOOLSGUI/ToolsGUI_RegWidget.h @@ -26,10 +26,10 @@ // Module : SALOME // $Header$ -# ifndef __REGWIDGET_H__ -# define __REGWIDGET_H__ -# include -# include +#ifndef __REGWIDGET_H__ +#define __REGWIDGET_H__ +#include +#include #include #include CORBA_CLIENT_HEADER(SALOME_Registry) @@ -50,7 +50,10 @@ class QPushButton; class ToolsGUI_HelpWindow; class ToolsGUI_IntervalWindow; -class Standard_EXPORT ToolsGUI_InfoWindow : public QMainWindow { +class Standard_EXPORT ToolsGUI_InfoWindow : public QMainWindow +{ + Q_OBJECT + public: ToolsGUI_InfoWindow( QWidget* parent = 0, const char* name = 0); @@ -64,9 +67,8 @@ private: QTextView* myTextView; }; -class Standard_EXPORT ToolsGUI_RegWidget : public QMainWindow +class Standard_EXPORT ToolsGUI_RegWidget : public QMainWindow { - Q_OBJECT public: @@ -114,13 +116,4 @@ private: static ToolsGUI_RegWidget* myRegWidgetPtr; }; -# endif /* # ifndef __REGWIDGET_H__ */ - - - - - - - - - +#endif diff --git a/src/VTKViewer/Makefile.am b/src/VTKViewer/Makefile.am new file mode 100755 index 000000000..5b3da9f55 --- /dev/null +++ b/src/VTKViewer/Makefile.am @@ -0,0 +1,117 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : Makefile.in +# Author : Vladimir Klyachin (OCN) +# Module : VTKViewer +# $Header$ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +lib_LTLIBRARIES = libVTKViewer.la + +salomeinclude_HEADERS= \ + VTKViewer.h \ + VTKViewer_CellLocationsArray.h \ + VTKViewer_Actor.h \ + VTKViewer_ExtractUnstructuredGrid.h \ + VTKViewer_ConvexTool.h \ + VTKViewer_Filter.h \ + VTKViewer_GeometryFilter.h \ + VTKViewer_AppendFilter.h \ + VTKViewer_Algorithm.h \ + VTKViewer_InteractorStyle.h \ + VTKViewer_RenderWindow.h \ + VTKViewer_RenderWindowInteractor.h \ + VTKViewer_ShrinkFilter.h \ + VTKViewer_TransformFilter.h \ + VTKViewer_Transform.h \ + VTKViewer_Trihedron.h \ + VTKViewer_Utilities.h \ + VTKViewer_ViewManager.h \ + VTKViewer_ViewModel.h \ + VTKViewer_ViewWindow.h \ + VTKViewer_Functor.h + +dist_libVTKViewer_la_SOURCES= \ + VTKViewer_CellLocationsArray.cxx \ + VTKViewer_Actor.cxx \ + VTKViewer_ExtractUnstructuredGrid.cxx \ + VTKViewer_Filter.cxx \ + VTKViewer_GeometryFilter.cxx \ + VTKViewer_AppendFilter.cxx \ + VTKViewer_InteractorStyle.cxx \ + VTKViewer_RenderWindow.cxx \ + VTKViewer_RenderWindowInteractor.cxx \ + VTKViewer_ShrinkFilter.cxx \ + VTKViewer_Transform.cxx \ + VTKViewer_TransformFilter.cxx \ + VTKViewer_Trihedron.cxx \ + VTKViewer_Utilities.cxx \ + VTKViewer_ViewManager.cxx \ + VTKViewer_ViewModel.cxx \ + VTKViewer_ConvexTool.cxx \ + VTKViewer_ViewWindow.cxx + +MOC_FILES= \ + VTKViewer_RenderWindow_moc.cxx \ + VTKViewer_RenderWindowInteractor_moc.cxx \ + VTKViewer_ViewManager_moc.cxx \ + VTKViewer_ViewModel_moc.cxx \ + VTKViewer_ViewWindow_moc.cxx +nodist_libVTKViewer_la_SOURCES= $(MOC_FILES) + +dist_salomeres_DATA=\ + resources/view_back.png \ + resources/view_bottom.png \ + resources/view_camera_dump.png \ + resources/view_fitall.png \ + resources/view_fitarea.png \ + resources/view_front.png \ + resources/view_glpan.png \ + resources/view_graduated_axes.png \ + resources/view_left.png \ + resources/view_pan.png \ + resources/view_reset.png \ + resources/view_right.png \ + resources/view_rotate.png \ + resources/view_scaling.png \ + resources/view_top.png \ + resources/view_triedre.png \ + resources/view_update_rate.png \ + resources/view_zoom.png \ + resources/view_rotation_point.png + +nodist_salomeres_DATA= \ + VTKViewer_images.qm \ + VTKViewer_msg_en.qm + +libVTKViewer_la_CPPFLAGS=$(QT_INCLUDES) $(VTK_INCLUDES) $(CAS_CPPFLAGS) \ + -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT +libVTKViewer_la_LDFLAGS=$(VTK_LIBS) $(QT_MT_LIBS) $(CAS_KERNEL) \ + ../Qtx/libqtx.la ../SUIT/libsuit.la + +# Executable + +bin_PROGRAMS = VTKViewer + +dist_VTKViewer_SOURCES=VTKViewer.cxx + +VTKViewer_CPPFLAGS=$(libVTKViewer_la_CPPFLAGS) +VTKViewer_LDADD=libVTKViewer.la $(libVTKViewer_la_LDFLAGS) + diff --git a/src/VTKViewer/Makefile.in b/src/VTKViewer/Makefile.in deleted file mode 100755 index 9fee23fb8..000000000 --- a/src/VTKViewer/Makefile.in +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : VTKViewer -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= \ - VTKViewer.h \ - VTKViewer_CellLocationsArray.h \ - VTKViewer_Actor.h \ - VTKViewer_ExtractUnstructuredGrid.h \ - VTKViewer_ConvexTool.h \ - VTKViewer_Filter.h \ - VTKViewer_GeometryFilter.h \ - VTKViewer_AppendFilter.h \ - VTKViewer_Algorithm.h \ - VTKViewer_InteractorStyle.h \ - VTKViewer_PassThroughFilter.h \ - VTKViewer_RenderWindow.h \ - VTKViewer_RenderWindowInteractor.h \ - VTKViewer_ShrinkFilter.h \ - VTKViewer_TransformFilter.h \ - VTKViewer_Transform.h \ - VTKViewer_Trihedron.h \ - VTKViewer_Utilities.h \ - VTKViewer_VectorText.h \ - VTKViewer_ViewManager.h \ - VTKViewer_ViewModel.h \ - VTKViewer_ViewWindow.h \ - VTKViewer_Functor.h - -PO_FILES = \ - VTKViewer_images.po \ - VTKViewer_msg_en.po - -# Libraries targets -LIB = libVTKViewer.la - -LIB_SRC= \ - VTKViewer_CellLocationsArray.cxx \ - VTKViewer_Actor.cxx \ - VTKViewer_ExtractUnstructuredGrid.cxx \ - VTKViewer_Filter.cxx \ - VTKViewer_GeometryFilter.cxx \ - VTKViewer_AppendFilter.cxx \ - VTKViewer_InteractorStyle.cxx \ - VTKViewer_PassThroughFilter.cxx \ - VTKViewer_RenderWindow.cxx \ - VTKViewer_RenderWindowInteractor.cxx \ - VTKViewer_ShrinkFilter.cxx \ - VTKViewer_Transform.cxx \ - VTKViewer_TransformFilter.cxx \ - VTKViewer_Trihedron.cxx \ - VTKViewer_Utilities.cxx \ - VTKViewer_VectorText.cxx \ - VTKViewer_ViewManager.cxx \ - VTKViewer_ViewModel.cxx \ - VTKViewer_ConvexTool.cxx \ - VTKViewer_ViewWindow.cxx - -LIB_MOC = \ - VTKViewer_RenderWindow.h \ - VTKViewer_RenderWindowInteractor.h \ - VTKViewer_ViewManager.h \ - VTKViewer_ViewModel.h \ - VTKViewer_ViewWindow.h - -BIN = VTKViewer - -CPPFLAGS+=$(QT_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES) - -LDFLAGS+=$(VTK_LIBS) $(QT_MT_LIBS) $(CAS_KERNEL) -lqtx -lsuit - -LDFLAGSFORBIN=$(LDFLAGS) - -@CONCLUDE@ \ No newline at end of file diff --git a/src/VTKViewer/VTKViewer.cxx b/src/VTKViewer/VTKViewer.cxx index 6a548f1df..a65c5c204 100644 --- a/src/VTKViewer/VTKViewer.cxx +++ b/src/VTKViewer/VTKViewer.cxx @@ -27,7 +27,6 @@ // $Header$ #include "VTKViewer_Actor.h" -#include "VTKViewer_CellRectPicker.h" #include "VTKViewer_ExtractUnstructuredGrid.h" #include "VTKViewer_ConvexTool.h" #include "VTKViewer_Filter.h" @@ -35,8 +34,6 @@ #include "VTKViewer_AppendFilter.h" #include "VTKViewer_Algorithm.h" #include "VTKViewer_InteractorStyle.h" -#include "VTKViewer_PassThroughFilter.h" -#include "VTKViewer_RectPicker.h" #include "VTKViewer_RenderWindow.h" #include "VTKViewer_RenderWindowInteractor.h" #include "VTKViewer_ShrinkFilter.h" @@ -44,7 +41,6 @@ #include "VTKViewer_Transform.h" #include "VTKViewer_Trihedron.h" #include "VTKViewer_Utilities.h" -#include "VTKViewer_VectorText.h" #include "VTKViewer_ViewManager.h" #include "VTKViewer_ViewModel.h" #include "VTKViewer_ViewWindow.h" diff --git a/src/VTKViewer/VTKViewer_Actor.cxx b/src/VTKViewer/VTKViewer_Actor.cxx index 5f0e621e7..5c65df651 100755 --- a/src/VTKViewer/VTKViewer_Actor.cxx +++ b/src/VTKViewer/VTKViewer_Actor.cxx @@ -36,7 +36,6 @@ #include "VTKViewer_Transform.h" #include "VTKViewer_TransformFilter.h" -#include "VTKViewer_PassThroughFilter.h" #include "VTKViewer_GeometryFilter.h" // VTK Includes @@ -47,6 +46,7 @@ #include #include #include +#include using namespace std; @@ -83,7 +83,7 @@ VTKViewer_Actor myPolygonOffsetUnits); for(int i = 0; i < 6; i++) - myPassFilter.push_back(VTKViewer_PassThroughFilter::New()); + myPassFilter.push_back(vtkPassThroughFilter::New()); } /*! @@ -347,7 +347,7 @@ VTKViewer_Actor unsigned long mTime = this->Superclass::GetMTime(); unsigned long time = myTransformFilter->GetMTime(); mTime = ( time > mTime ? time : mTime ); - if(vtkDataSet *aDataSet = myPassFilter[0]->GetInput()){ + if(vtkDataSet *aDataSet = dynamic_cast(myPassFilter[0]->GetInput())){ // bad usage of GetInput time = aDataSet->GetMTime(); mTime = ( time > mTime ? time : mTime ); } diff --git a/src/VTKViewer/VTKViewer_Actor.h b/src/VTKViewer/VTKViewer_Actor.h index a0d9c4ba0..72035b6ae 100755 --- a/src/VTKViewer/VTKViewer_Actor.h +++ b/src/VTKViewer/VTKViewer_Actor.h @@ -43,15 +43,19 @@ class vtkDataSet; class vtkCamera; class vtkProperty; class vtkRenderer; +class vtkPassThroughFilter; class VTKViewer_Transform; class VTKViewer_GeometryFilter; class VTKViewer_TransformFilter; -class VTKViewer_PassThroughFilter; extern int VTKViewer_POINT_SIZE; extern int VTKViewer_LINE_WIDTH; +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \class vtkLODActor * \brief For more information see VTK documentation */ @@ -313,7 +317,7 @@ class VTKVIEWER_EXPORT VTKViewer_Actor : public vtkLODActor bool myStoreMapping; VTKViewer_GeometryFilter *myGeomFilter; VTKViewer_TransformFilter *myTransformFilter; - std::vector myPassFilter; + std::vector myPassFilter; int myRepresentation; vtkProperty *myProperty; @@ -330,4 +334,8 @@ class VTKVIEWER_EXPORT VTKViewer_Actor : public vtkLODActor bool myIsHighlighted; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif // VTKVIEVER_ACTOR_H diff --git a/src/VTKViewer/VTKViewer_AppendFilter.cxx b/src/VTKViewer/VTKViewer_AppendFilter.cxx index 4218c4f20..266103369 100644 --- a/src/VTKViewer/VTKViewer_AppendFilter.cxx +++ b/src/VTKViewer/VTKViewer_AppendFilter.cxx @@ -35,6 +35,8 @@ #include #include #include +#include +#include #include @@ -78,34 +80,40 @@ VTKViewer_AppendFilter void VTKViewer_AppendFilter -::SetPoints(vtkPoints* thePoints) +::SetSharedPointsDataSet(vtkPointSet* thePointsDataSet) { - if(GetPoints() == thePoints) + if(GetSharedPointsDataSet() == thePointsDataSet) return; - myPoints = thePoints; + mySharedPointsDataSet = thePointsDataSet; - this->Modified(); + Modified(); } -vtkPoints* +vtkPointSet* VTKViewer_AppendFilter -::GetPoints() +::GetSharedPointsDataSet() { - return myPoints.GetPointer(); + return mySharedPointsDataSet.GetPointer(); } -void +int VTKViewer_AppendFilter -::Execute() +::RequestData( + vtkInformation *request, + vtkInformationVector **inputVector, + vtkInformationVector *outputVector) { - if(myPoints.GetPointer()) - MakeOutput(); + int aRet = 0; + if(GetSharedPointsDataSet()) + aRet = MakeOutput(request,inputVector,outputVector); else - Superclass::Execute(); + aRet = Superclass::RequestData(request,inputVector,outputVector); if(myDoMappingFlag) DoMapping(); + + return aRet; } @@ -119,10 +127,10 @@ VTKViewer_AppendFilter vtkIdType aPntStartId = 0; vtkIdType aCellStartId = 0; - for(vtkIdType aDataSetId = 0; aDataSetId < this->NumberOfInputs; ++aDataSetId){ - vtkDataSet* aDataSet = (vtkDataSet *)(this->Inputs[aDataSetId]); + for(vtkIdType aDataSetId = 0; aDataSetId < this->GetNumberOfInputPorts(); ++aDataSetId){ + vtkDataSet* aDataSet = (vtkDataSet *)(this->GetInput(aDataSetId)); // Do mapping of the nodes - if(!myPoints.GetPointer()){ + if(!GetSharedPointsDataSet()){ vtkIdType aNbPnts = aDataSet->GetNumberOfPoints(); myNodeRanges.push_back(aPntStartId + aNbPnts); aPntStartId += aNbPnts; @@ -158,7 +166,7 @@ VTKViewer_AppendFilter ::GetPointOutputID(vtkIdType theInputID, vtkIdType theInputDataSetID) { - if(myPoints.GetPointer()) + if(GetSharedPointsDataSet()) return theInputID; return GetOutputID(theInputID,theInputDataSetID,myNodeRanges); @@ -170,7 +178,7 @@ VTKViewer_AppendFilter ::GetCellOutputID(vtkIdType theInputID, vtkIdType theInputDataSetID) { - if(myPoints.GetPointer()) + if(GetSharedPointsDataSet()) return theInputID; return GetOutputID(theInputID,theInputDataSetID,myCellRanges); @@ -217,7 +225,7 @@ VTKViewer_AppendFilter vtkIdType& theStartID, vtkIdType& theInputDataSetID) { - if(myPoints.GetPointer()) { + if(GetSharedPointsDataSet()) { theStartID = theInputDataSetID = 0; theInputID = theOutputID; return; @@ -246,25 +254,41 @@ VTKViewer_AppendFilter } -void +int VTKViewer_AppendFilter -::MakeOutput() +::MakeOutput( + vtkInformation *vtkNotUsed(request), + vtkInformationVector **inputVector, + vtkInformationVector *outputVector) { int idx; vtkIdType numPts, numCells, newCellId, cellId; vtkCellData *cd; vtkIdList *ptIds; vtkDataSet *ds; - vtkUnstructuredGrid *output = this->GetOutput(); + int numInputs = this->GetNumberOfInputConnections(0); + + // get the output info object + vtkInformation *outInfo = outputVector->GetInformationObject(0); + + // get the ouptut + vtkUnstructuredGrid *output = vtkUnstructuredGrid::SafeDownCast( + outInfo->Get(vtkDataObject::DATA_OBJECT())); // - numPts = myPoints->GetNumberOfPoints(); + numPts = mySharedPointsDataSet->GetNumberOfPoints(); if (numPts < 1) { - return; + return 0; } // numCells = 0; - for (idx = 0; idx < this->NumberOfInputs; ++idx) { - ds = (vtkDataSet *)(this->Inputs[idx]); + vtkInformation *inInfo = 0; + for (idx = 0; idx < numInputs;++idx) { + inInfo = inputVector[0]->GetInformationObject(idx); + ds = 0; + if (inInfo) + { + ds = vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT())); + } if (ds != NULL) { if ( ds->GetNumberOfPoints() <= 0 && ds->GetNumberOfCells() <= 0 ) { continue; //no input, just skip @@ -273,7 +297,7 @@ VTKViewer_AppendFilter }//if non-empty dataset }//for all inputs if (numCells < 1) { - return; + return 0; } // // Now can allocate memory @@ -284,11 +308,18 @@ VTKViewer_AppendFilter // Append each input dataset together // // 1.points - output->SetPoints(myPoints.GetPointer()); + output->SetPoints(GetSharedPointsDataSet()->GetPoints()); + output->GetPointData()->PassData(GetSharedPointsDataSet()->GetPointData()); // 2.cells - for (idx = 0; idx < this->NumberOfInputs; ++idx) { - ds = (vtkDataSet *)(this->Inputs[idx]); + for (idx = 0; idx < numInputs; ++idx) { + inInfo = inputVector[0]->GetInformationObject(idx); + ds = 0; + if (inInfo) + { + ds = vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT())); + } if (ds != NULL) { + numCells = ds->GetNumberOfCells(); cd = ds->GetCellData(); // copy cell and cell data @@ -300,5 +331,12 @@ VTKViewer_AppendFilter } // ptIds->Delete(); + return 1; } +int VTKViewer_AppendFilter::FillInputPortInformation(int, vtkInformation *info) +{ + info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataSet"); + info->Set(vtkAlgorithm::INPUT_IS_REPEATABLE(), 1); + return 1; +} diff --git a/src/VTKViewer/VTKViewer_AppendFilter.h b/src/VTKViewer/VTKViewer_AppendFilter.h index c9a756381..ef2e7f11d 100644 --- a/src/VTKViewer/VTKViewer_AppendFilter.h +++ b/src/VTKViewer/VTKViewer_AppendFilter.h @@ -27,7 +27,11 @@ #include #include -class vtkPoints; +class vtkPointSet; + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif /*! \brief This class used same as vtkAppendFilter. See documentation on VTK for more information. */ @@ -48,10 +52,10 @@ public: bool DoMappingFlag() const; void - SetPoints(vtkPoints* thePoints); + SetSharedPointsDataSet(vtkPointSet* thePointsDataSet); - vtkPoints* - GetPoints(); + vtkPointSet* + GetSharedPointsDataSet(); vtkIdType GetPointOutputID(vtkIdType theInputID, @@ -84,21 +88,26 @@ protected: * \brief Destructor. */ ~VTKViewer_AppendFilter(); - /*! \fn void Execute(); - * \brief Filter culculation method. - */ - virtual void Execute(); - // + + // Usual data generation method + virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); + + virtual int FillInputPortInformation(int port, vtkInformation *info); + void DoMapping(); void Reset(); - void MakeOutput(); + int MakeOutput(vtkInformation *, vtkInformationVector **, vtkInformationVector *); bool myDoMappingFlag; TVectorIds myNodeRanges; TVectorIds myCellRanges; - vtkSmartPointer myPoints; + vtkSmartPointer mySharedPointsDataSet; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/VTKViewer/VTKViewer_CellLocationsArray.h b/src/VTKViewer/VTKViewer_CellLocationsArray.h index 8cbd4d89b..4d965a8e1 100644 --- a/src/VTKViewer/VTKViewer_CellLocationsArray.h +++ b/src/VTKViewer/VTKViewer_CellLocationsArray.h @@ -22,7 +22,7 @@ #include "VTKViewer.h" -#if (VTK_MAJOR_VERSION >= 4) && (VTK_MINOR_VERSION >= 4) +#if ((VTK_MAJOR_VERSION == 4) && (VTK_MINOR_VERSION >= 4)) || (VTK_MAJOR_VERSION > 4) # include # define TCellLocationsArray vtkIdTypeArray #else diff --git a/src/VTKViewer/VTKViewer_CellRectPicker.cxx b/src/VTKViewer/VTKViewer_CellRectPicker.cxx deleted file mode 100755 index 016da1f75..000000000 --- a/src/VTKViewer/VTKViewer_CellRectPicker.cxx +++ /dev/null @@ -1,443 +0,0 @@ -// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -#include - -#include "vtkGenericCell.h" -#include "vtkAssemblyNode.h" -#include "vtkAssemblyPath.h" -#include "vtkObjectFactory.h" -#include "vtkImageData.h" -#include "vtkMapper.h" -#include "vtkVolumeMapper.h" -#include "vtkMath.h" -#include "vtkLine.h" -#include "vtkQuad.h" -#include "vtkPoints.h" -#include "vtkPlane.h" -#include "vtkActor.h" - -vtkStandardNewMacro(VTKViewer_CellRectPicker); - -/*!Constructor.\n - * \li create instance of generic cell - * \li create two instances of Quad. - */ -VTKViewer_CellRectPicker::VTKViewer_CellRectPicker() -{ - this->Cell = vtkGenericCell::New(); - this->Quad1 = vtkQuad::New(); - this->Quad2 = vtkQuad::New(); -} - -/*!Destructor. - * \li Delete generic cell - * \li Delete two quads. - */ -VTKViewer_CellRectPicker::~VTKViewer_CellRectPicker() -{ - this->Cell->Delete(); - this->Quad1->Delete(); - this->Quad2->Delete(); -} - -/*!Clear \a ActorData and call VTKViewer_RectPicker::Initialize() method*/ -void VTKViewer_CellRectPicker::Initialize() -{ - ActorData.clear(); - this->VTKViewer_RectPicker::Initialize(); -} - -/*!*/ -float VTKViewer_CellRectPicker::IntersectWithHex(float p1[4][4], float p2[4][4], float tol, - vtkAssemblyPath *path, vtkProp3D *prop3D, - vtkAbstractMapper3D *m) -{ - vtkDataSet *input; - vtkMapper *mapper; - vtkVolumeMapper *volumeMapper; - - // Get the underlying dataset - if ( (mapper=vtkMapper::SafeDownCast(m)) != NULL ) { - input = mapper->GetInput(); - } - else if ( (volumeMapper=vtkVolumeMapper::SafeDownCast(m)) != NULL ) { - input = volumeMapper->GetInput(); - } - else { - return VTK_LARGE_FLOAT; - } - - vtkIdType numCells; - if ( (numCells = input->GetNumberOfCells()) < 1 ) { - return 2.0; - } - - int i, k, subId; - float bounds[6], center[3], cp1[3], cp2[3]; - float pcoord[3], weight[4], dist; - float t1[2], t2[2], x[3], t; - - for (k = 0; k < 4; k++) { - this->Quad1->PointIds->SetId(k, k); - this->Quad1->Points->SetPoint(k, p1[k]); - this->Quad2->PointIds->SetId(k, k); - this->Quad2->Points->SetPoint(k, p2[k]); - } - - /* - cout << "---> Selection area:" << endl; - for (k = 0; k < 4; k++) - cout << "\t(" << p1[k][0] << ", " << p1[k][1] << ", " << p1[k][2] << ")"; - cout << endl; - for (k = 0; k < 4; k++) - cout << "\t(" << p2[k][0] << ", " << p2[k][1] << ", " << p2[k][2] << ")"; - cout << endl; - */ - - vtkIdType cellId; - VTKViewer_CellData cellData; - VTKViewer_CellDataSet dataList; - - char inside; int n; float *point; - float tMin = VTK_LARGE_FLOAT, xMin[3]; - for (cellId = 0; cellId < numCells; cellId++) { - input->GetCell(cellId, this->Cell); - - this->Cell->GetBounds(bounds); - for (i = 0; i < 3; i++) - center[i] = (bounds[2*i]+bounds[2*i+1])/2; - - /* - if (!VTKViewer_RectPicker::PointInside(center, p1, p2, 0.01)) - continue; - */ - - inside = 1; - n = this->Cell->Points->GetNumberOfPoints(); - //cout << "---> Info cell " << cellId << " (" << n << "): " << endl; - for (k = 0; k < n; k++) { - point = this->Cell->Points->GetPoint(k); - //cout << " P (" << point[0] << ", " << point[1] << ", " << point[2] << ")"; - if (!VTKViewer_RectPicker::PointInside(point, p1, p2)) { - inside = 0; break; - } - } - //cout << endl; - if (!inside) continue; - - //cout << "---> Inside cell " << cellId << endl; - - this->Quad1->EvaluatePosition(center, 0, subId, pcoord, dist, weight); - t1[0] = pcoord[0]; t1[1] = pcoord[1]; - this->Quad2->EvaluatePosition(center, 0, subId, pcoord, dist, weight); - t2[0] = pcoord[0]; t2[1] = pcoord[1]; - - pcoord[0] = (t1[0]+t2[0])/2; pcoord[1] = (t1[1]+t2[1])/2; pcoord[2] = 0; - - this->Quad1->EvaluateLocation(subId, pcoord, cp1, weight); - this->Quad2->EvaluateLocation(subId, pcoord, cp2, weight); - - if (this->Cell->IntersectWithLine(cp1, cp2, tol, t, x, pcoord, subId)) { - cellData.cellId = cellId; - cellData.subId = subId; - cellData.depth = t; - for (i = 0; i < 3; i++) { - cellData.p1[i] = cp1[i]; - cellData.p2[i] = cp2[i]; - } - /* - cout << "---> Include cell " << cellId << ", depth = " << t << endl; - cout << " P1 = (" << cp1[0] << ", " << cp1[1] << ", " << cp1[2] << ")" << endl; - cout << " P2 = (" << cp2[0] << ", " << cp2[1] << ", " << cp2[2] << ")" << endl; - */ - IncludeCell(input, cellData, dataList); - if (t < tMin) { - tMin = t; - for (i = 0; i < 3; i++) - xMin[i] = x[i]; - } - } - } - - if (!dataList.empty()) { - // compare against other actors - IncludeActor(prop3D, input, dataList); - if (tMin < this->GlobalTMin) { - this->MarkPicked(path, prop3D, m, tMin, xMin); - } - } - - return tMin; -} - -/*!*/ -void VTKViewer_CellRectPicker::IncludeCell(vtkDataSet* input, - VTKViewer_CellData cellData, - VTKViewer_CellDataSet& dataList) -{ - vtkGenericCell* cell1 = vtkGenericCell::New(); - vtkGenericCell* cell2 = vtkGenericCell::New(); - vtkCell* sub1 = 0; - vtkCell* sub2 = 0; - - input->GetCell(cellData.cellId, cell1); - if (cell1->GetNumberOfFaces() > 0) - sub1 = cell1->GetFace(cellData.subId); - - int i, result; - float p1[3], p2[3], dir[3]; - char add = 1; - - VTKViewer_CellData curData; - VTKViewer_CellDataSet::iterator it; - for (it = dataList.begin(); it != dataList.end();) { - curData = *it; - for (i = 0; i < 3; i++) { - p1[i] = (cellData.p1[i]+curData.p1[i])/2; - p2[i] = (cellData.p2[i]+curData.p2[i])/2; - dir[i] = p2[i] - p1[i]; - } - - input->GetCell(curData.cellId, cell2); - sub2 = 0; - if (cell2->GetNumberOfFaces() > 0) - sub2 = cell2->GetFace(curData.subId); - - if (sub1) { - if (sub2) - result = IntersectCells(sub1, cellData.depth, - sub2, curData.depth, dir); - else - result = IntersectCells(sub1, cellData.depth, - cell2, curData.depth, dir); - } - else { - if (sub2) - result = IntersectCells(cell1, cellData.depth, - sub2, curData.depth, dir); - else - result = IntersectCells(cell1, cellData.depth, - cell2, curData.depth, dir); - } - /* - cout << " Direction = (" << dir[0] << ", " << dir[1] << ", " << dir[2] << ")"; - cout << " depth = " << cellData.depth << ", " << curData.depth << ", " << result << endl; - */ - if (result > 0) { - if (result == 1) { - it = dataList.erase(it); - continue; - } - else { - add = 0; - break; - } - } - ++it; - } - if (add) { - //cout << " add " << endl; - dataList.push_back(cellData); - } - - cell1->Delete(); - cell2->Delete(); -} - -/*!*/ -void VTKViewer_CellRectPicker::IncludeActor(vtkProp3D* prop, - vtkDataSet* input, - VTKViewer_CellDataSet& dataList) -{ - vtkGenericCell* cell1 = vtkGenericCell::New(); - vtkGenericCell* cell2 = vtkGenericCell::New(); - - int i, result; - float p1[3], p2[3], dir[3]; - char removed; - - VTKViewer_CellDataSet actorData; - VTKViewer_CellData curData, cellData; - VTKViewer_CellDataSet::iterator it1, it2; - VTKViewer_ActorDataMap::iterator it; - - for (it1 = dataList.begin(); it1 != dataList.end();) { - cellData = *it1; - input->GetCell(cellData.cellId, cell1); - removed = 0; - - for (it = ActorData.begin(); it != ActorData.end(); ++it) { - //vtkActor* actor = (*it).first; - actorData = (*it).second; - - for (it2 = actorData.begin(); it2 != actorData.end();) { - curData = *it2; - for (i = 0; i < 3; i++) { - p1[i] = (cellData.p1[i]+curData.p1[i])/2; - p2[i] = (cellData.p2[i]+curData.p2[i])/2; - dir[i] = p2[i] - p1[i]; - } - - input->GetCell(curData.cellId, cell2); - result = IntersectCells(cell1, cellData.depth, - cell2, curData.depth, dir); - if (result > 0) { - if (result == 1) { - it2 = actorData.erase(it2); - continue; - } - else { - removed = 1; - it1 = dataList.erase(it1); - break; - } - break; - } - ++it2; - } - if (removed) break; - } // by actors - if (!removed) ++it1; - } - - if (!dataList.empty()) { - vtkActor* actor; - if ((actor = vtkActor::SafeDownCast(prop)) != NULL) - ActorData[actor] = dataList; - } - - cell1->Delete(); - cell2->Delete(); -} - -/*! The method returns a non-zero value, if the cells intersect each other - * in the direction dir[3]. - * \param c1 - first vtkCell pointer - * \param d1 - - * \param c2 - second vtkCell pointer - * \param d2 - - * \param dir[3] - direction - * \retval integer - Returned value is 1 if the first cell is top of - * the second one according to direction and 2 if the second cell is top. - */ -int VTKViewer_CellRectPicker::IntersectCells(vtkCell* c1, float d1, vtkCell* c2, float d2, float dir[3]) -{ - int i, k; - float *orig, cp[3], bounds[6]; - vtkCell* cell = 0; - vtkCell* tcell = 0; - - // define the central point and cell for projection - if (fabs(d1-d2) < 1.e-7) return 0; - - if (d1 < d2) { - orig = c1->Points->GetPoint(0); - cell = c1; - tcell = c2; - c2->GetBounds(bounds); - for (i = 0; i < 3; i++) - cp[i] = (bounds[2*i] + bounds[2*i+1])/2; - } - else if (d1 > d2) { - orig = c2->Points->GetPoint(0); - cell = c2; - tcell = c1; - c1->GetBounds(bounds); - for (i = 0; i < 3; i++) - cp[i] = (bounds[2*i] + bounds[2*i+1])/2; - } - - float proj[3]; - vtkPlane::GeneralizedProjectPoint(cp, orig, dir, proj); - - float *p, pp[3]; - vtkPoints* aPoints = vtkPoints::New(); - for (k = 0; k < cell->Points->GetNumberOfPoints(); k++) { - p = cell->Points->GetPoint(k); - vtkPlane::GeneralizedProjectPoint(p, orig, dir, pp); - aPoints->InsertNextPoint(pp[0], pp[1], pp[2]); - } - - int result = 0; - if (PointInside(proj, aPoints)) { - result = (d1Points->GetNumberOfPoints(); k++) { - p = tcell->Points->GetPoint(k); - vtkPlane::GeneralizedProjectPoint(p, orig, dir, pp); - if (PointInside(pp, aPoints)) { - result = 1; break; - } - } - if (result && d2Delete(); - return result; -} - -/*! Check point position. - * \param point[3] - point - * \param list - point data set - * \retval 0 or 1 - The method returns a non-zero value, if the point is inlide point data set - */ -char VTKViewer_CellRectPicker::PointInside(float point[3], vtkPoints* list) -{ - int i, k, l, n; - float x[3], *a1, *a2, v[3], p[3], q[3]; - - n = list->GetNumberOfPoints(); - if (n < 3) return 0; - - for (k = 0; k < n; k++) { - l = k+1; if (l == n) l = 0; - a1 = list->GetPoint(k); - a2 = list->GetPoint(l); - - // compute vectors - for (i = 0; i < 3; i++) { - x[i] = point[i] - a1[i]; - v[i] = a2[i]-a1[i]; - } - - // check if point coincides with vertex - if (x[0]*x[0] + x[1]*x[1] + x[2]*x[2] < 1.e-7) return 0; - - // compute normal - vtkMath::Cross(x, v, p); - - // check if point lays on edge - if (p[0]*p[0] + p[1]*p[1] + p[2]*p[2] < 1.e-7) return 0; - - // check if normals are in the same direction - if (k > 0) { - if (vtkMath::Dot(p, q) < 0.0) return 0; - } - - // remember normal direction - for (i = 0; i < 3; i++) { - q[i] = p[i]; - } - } - - return 1; -} diff --git a/src/VTKViewer/VTKViewer_CellRectPicker.h b/src/VTKViewer/VTKViewer_CellRectPicker.h deleted file mode 100755 index f50636ab2..000000000 --- a/src/VTKViewer/VTKViewer_CellRectPicker.h +++ /dev/null @@ -1,98 +0,0 @@ -// SALOME VTKViewer : build VTK viewer into Salome desktop -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File : VTKViewer_CellRectPicker.h -// Author : Natalia KOPNOVA -// Module : SALOME - - -#ifndef __VTKViewer_CellRectPicker_h -#define __VTKViewer_CellRectPicker_h - -#include "VTKViewer_RectPicker.h" -#include -#include - -/*! \brief Cell data structure*/ -typedef struct { - vtkIdType cellId; - int subId; - float depth; - float p1[3]; - float p2[3]; -} VTKViewer_CellData; - -typedef std::vector VTKViewer_CellDataSet; -typedef std::map VTKViewer_ActorDataMap; - -class vtkCell; -class vtkGenericCell; -class vtkQuad; -/*!Rectangular cell picker class.*/ -class VTK_EXPORT VTKViewer_CellRectPicker : public VTKViewer_RectPicker -{ -public: - /*!Create new instance of CellRectPicker class.*/ - static VTKViewer_CellRectPicker *New(); - - /*! \fn vtkTypeMacro(VTKViewer_CellRectPicker,VTKViewer_RectPicker); - * \brief VTK type macros. - */ - vtkTypeMacro(VTKViewer_CellRectPicker,VTKViewer_RectPicker); - - /*! \fn VTKViewer_CellDataSet GetCellData(vtkActor* actor) - * \brief Get the id of the picked cells. - * \brief (Notes: use GetActors() to get picked actors list) - * \param actor - vtkActor pointer - */ - VTKViewer_CellDataSet GetCellData(vtkActor* actor) - { return this->ActorData[actor]; } - - static int IntersectCells(vtkCell* c1, float d1, vtkCell* c2, float d2, float dir[3]); - - static char PointInside(float point[3], vtkPoints* list); - -protected: - - VTKViewer_CellRectPicker(); - ~VTKViewer_CellRectPicker(); - - VTKViewer_ActorDataMap ActorData; - - virtual float IntersectWithHex(float p1[4][4], float p2[4][4], float tol, - vtkAssemblyPath *path, vtkProp3D *p, - vtkAbstractMapper3D *m); - - void Initialize(); - - - void IncludeCell(vtkDataSet* input, VTKViewer_CellData cellData, VTKViewer_CellDataSet& dalaList); - void IncludeActor(vtkProp3D* prop, vtkDataSet* input, VTKViewer_CellDataSet& dataList); - -private: - vtkGenericCell *Cell; - vtkQuad* Quad1; - vtkQuad* Quad2; -}; - -#endif - - diff --git a/src/VTKViewer/VTKViewer_ConvexTool.cxx b/src/VTKViewer/VTKViewer_ConvexTool.cxx index b8064df2b..46e6377f6 100644 --- a/src/VTKViewer/VTKViewer_ConvexTool.cxx +++ b/src/VTKViewer/VTKViewer_ConvexTool.cxx @@ -32,6 +32,10 @@ #include #include +#ifdef WNT +#include +#endif + #include #include #include @@ -43,6 +47,15 @@ #include #include #include +#include +#include +#include + +#ifdef _DEBUG_ +static int DEBUG_TRIA_EXECUTE = 0; +#else +static int DEBUG_TRIA_EXECUTE = 0; +#endif namespace { @@ -71,31 +84,117 @@ namespace typedef std::vector TPolygons; } -/*! - Constructor -*/ + +//---------------------------------------------------------------------------- VTKViewer_Triangulator ::VTKViewer_Triangulator(): - myInput(NULL), - myCellId(-1), - myShowInside(-1), - myAllVisible(-1), - myCellsVisibility(NULL), - myCellIds(vtkIdList::New()) + myCellIds(vtkIdList::New()), + myFaceIds(vtkIdList::New()), + myPoints(vtkPoints::New()), + myPointIds(NULL) {} -/*! - Destructor -*/ +//---------------------------------------------------------------------------- VTKViewer_Triangulator ::~VTKViewer_Triangulator() { myCellIds->Delete(); + myFaceIds->Delete(); + myPoints->Delete(); +} + + +//---------------------------------------------------------------------------- +vtkPoints* +VTKViewer_Triangulator +::InitPoints(vtkUnstructuredGrid *theInput, + vtkIdType theCellId) +{ + myPoints->Reset(); + myPoints->Modified(); // the VTK bug + + vtkIdType aNumPts; + theInput->GetCellPoints(theCellId, aNumPts, myPointIds); + if ( aNumPts > 0 ) { + vtkFloatingPointType anAbsoluteCoord[3]; + myPoints->SetNumberOfPoints(aNumPts); + vtkPoints *anInputPoints = theInput->GetPoints(); + for (int aPntId = 0; aPntId < aNumPts; aPntId++) { + anInputPoints->GetPoint(myPointIds[aPntId], anAbsoluteCoord); + myPoints->SetPoint(aPntId, anAbsoluteCoord); + } + } + + return myPoints; +} + + +//---------------------------------------------------------------------------- +vtkIdType +VTKViewer_Triangulator +::GetNbOfPoints() +{ + return myPoints->GetNumberOfPoints(); +} + + +//---------------------------------------------------------------------------- +vtkIdType +VTKViewer_Triangulator +::GetPointId(vtkIdType thePointId) +{ + return thePointId; +} + + +//---------------------------------------------------------------------------- +vtkFloatingPointType +VTKViewer_Triangulator +::GetCellLength() +{ + vtkFloatingPointType aBounds[6]; + myPoints->GetBounds(aBounds); + + vtkFloatingPointType aCoordDiff[3]; + aCoordDiff[0] = (aBounds[1] - aBounds[0]); + aCoordDiff[1] = (aBounds[3] - aBounds[2]); + aCoordDiff[2] = (aBounds[5] - aBounds[4]); + + return sqrt(aCoordDiff[0]*aCoordDiff[0] + + aCoordDiff[1]*aCoordDiff[1] + + aCoordDiff[2]*aCoordDiff[2]); +} + + +//---------------------------------------------------------------------------- +void +VTKViewer_Triangulator +::GetCellNeighbors(vtkUnstructuredGrid *theInput, + vtkIdType theCellId, + vtkCell* theFace, + vtkIdList* theCellIds) +{ + myFaceIds->Reset(); + vtkIdList *anIdList = theFace->PointIds; + myFaceIds->InsertNextId(myPointIds[anIdList->GetId(0)]); + myFaceIds->InsertNextId(myPointIds[anIdList->GetId(1)]); + myFaceIds->InsertNextId(myPointIds[anIdList->GetId(2)]); + + theInput->GetCellNeighbors(theCellId, myFaceIds, theCellIds); } +//---------------------------------------------------------------------------- +vtkIdType +VTKViewer_Triangulator +::GetConnectivity(vtkIdType thePntId) +{ + return myPointIds[thePntId]; +} + +//---------------------------------------------------------------------------- bool VTKViewer_Triangulator ::Execute(vtkUnstructuredGrid *theInput, @@ -110,15 +209,9 @@ VTKViewer_Triangulator std::vector& theVTK2ObjIds, bool theIsCheckConvex) { - myInput = theInput; - myCellId = theCellId; - myShowInside = theShowInside; - myAllVisible = theAllVisible; - myCellsVisibility = theCellsVisibility; - - vtkPoints *aPoints = InitPoints(); + vtkPoints *aPoints = InitPoints(theInput, theCellId); vtkIdType aNumPts = GetNbOfPoints(); - //cout<<"Triangulator - aNumPts = "<GetPoint(GetPointId(aPntId),aPntCoord); - //cout<<"\taPntId = "< TPointIds; @@ -162,9 +255,9 @@ VTKViewer_Triangulator for (int aFaceId = 0; aFaceId < aNumFaces; aFaceId++) { vtkCell* aFace = GetFace(aFaceId); - GetCellNeighbors(theCellId, aFace, myCellIds); - if((!myAllVisible && !myCellsVisibility[myCellIds->GetId(0)]) || - myCellIds->GetNumberOfIds() <= 0 || myShowInside) + GetCellNeighbors(theInput, theCellId, aFace, myCellIds); + if((!theAllVisible && !theCellsVisibility[myCellIds->GetId(0)]) || + myCellIds->GetNumberOfIds() <= 0 || theShowInside) { TPointIds aPointIds; vtkIdList *anIdList = aFace->PointIds; @@ -197,8 +290,10 @@ VTKViewer_Triangulator // To get know, if the points of the trinagle were already observed bool anIsObserved = aFace2PointIds.find(aPointIds) == aFace2PointIds.end(); - //cout<<"\taFaceId = "<GetPoint(aNewPts[1],aCoord[1]); aPoints->GetPoint(aNewPts[2],aCoord[2]); - // To calculate plane normal + /* To calculate plane normal for face (aFace) + + + ^ aNormal + | + | ^ aVector01 + | / + /_________> aVector02 + + + */ vtkFloatingPointType aVector01[3] = { aCoord[1][0] - aCoord[0][0], aCoord[1][1] - aCoord[0][1], aCoord[1][2] - aCoord[0][2] }; @@ -216,6 +321,9 @@ VTKViewer_Triangulator aCoord[2][1] - aCoord[0][1], aCoord[2][2] - aCoord[0][2] }; + vtkMath::Normalize(aVector01); + vtkMath::Normalize(aVector02); + // To calculate the normal for the triangle vtkFloatingPointType aNormal[3]; vtkMath::Cross(aVector02,aVector01,aNormal); @@ -232,13 +340,72 @@ VTKViewer_Triangulator vtkFloatingPointType aPntCoord[3]; vtkIdType aPntId = *anIter; aPoints->GetPoint(aPntId,aPntCoord); + + vtkFloatingPointType aVector0Pnt[3] = { aPntCoord[0] - aCoord[0][0], + aPntCoord[1] - aCoord[0][1], + aPntCoord[2] - aCoord[0][2] }; + + + vtkMath::Normalize(aVector0Pnt); + + vtkFloatingPointType aNormalPnt[3]; + // calculate aNormalPnt + { + vtkFloatingPointType aCosPnt01 = vtkMath::Dot(aVector0Pnt,aVector01); + vtkFloatingPointType aCosPnt02 = vtkMath::Dot(aVector0Pnt,aVector02); + if(aCosPnt01<-1) + aCosPnt01 = -1; + if(aCosPnt01>1) + aCosPnt01 = 1; + if(aCosPnt02<-1) + aCosPnt02 = -1; + if(aCosPnt02>1) + aCosPnt02 = 1; + + vtkFloatingPointType aDist01,aDist02;// deflection from Pi/3 angle (equilateral triangle) + vtkFloatingPointType aAngPnt01 = fabs(acos(aCosPnt01)); + vtkFloatingPointType aAngPnt02 = fabs(acos(aCosPnt02)); + + /* check that triangle similar to equilateral triangle + AOC or COB ? + aVector0Pnt = (OC) + aVector01 = (OB) + aVector02 = (OA) + + B + ^ aVector01 C + | ^ aVector0Pnt + | _____/ + | ___/ + |/________> aVector02 + O A + */ + aDist01 = fabs(aAngPnt01-(vtkMath::Pi())/3.0); + aDist02 = fabs(aAngPnt02-(vtkMath::Pi())/3.0); + + // caculate a normal for best triangle + if(aDist01 <= aDist02) + vtkMath::Cross(aVector0Pnt,aVector01,aNormalPnt); + else + vtkMath::Cross(aVector0Pnt,aVector02,aNormalPnt); + + } + + vtkMath::Normalize(aNormalPnt); + + if(DEBUG_TRIA_EXECUTE) + cout<<"\t\taPntId = "< 0){ aNormal[0] = -aNormal[0]; aNormal[1] = -aNormal[1]; @@ -269,8 +438,10 @@ VTKViewer_Triangulator aCoord[0][2] - aCenter[2] }; vtkMath::Normalize(aVector0); - //cout<<"\t\taCenter = {"< 1.0) + vtkFloatingPointType anAngle = 0.0; + if(aCosinus >= 1.0){ aCosinus = 1.0; - if(aCosinus < -1.0) + } else if (aCosinus <= -1.0){ aCosinus = -1.0; - static vtkFloatingPointType a2Pi = 2.0 * vtkMath::Pi(); - vtkFloatingPointType anAngle = acos(aCosinus); - //cout<<"\t\t\taPntId = "<second; aConnectivities[anId] = GetConnectivity(aPntId); + if(DEBUG_TRIA_EXECUTE) cout << aPntId << ","; } + if(DEBUG_TRIA_EXECUTE) cout << endl; aPolygons.push_back(::TPolygon(aConnectivities,aCenter,aNormal)); } } } } - if(aPolygons.empty()) return true; @@ -360,15 +552,17 @@ VTKViewer_Triangulator ::TPolygon& aPolygon = aPolygons[aPolygonId]; vtkFloatingPointType* aNormal = aPolygon.myNormal; vtkFloatingPointType* anOrigin = aPolygon.myOrigin; - //cout<<"\taPolygonId = "<GetPoint(anId,aPntCoord); vtkFloatingPointType aDist = vtkPlane::Evaluate(aNormal,anOrigin,aPntCoord); - //cout<<"\t\taPntId = "<InsertNextCell(VTK_POLYGON,aNbPoints,&aConnectivities[0]); if(theStoreMapping) @@ -390,167 +590,149 @@ VTKViewer_Triangulator } } - //cout<<"\tTriangulator - Ok\n"; + if(DEBUG_TRIA_EXECUTE) cout<<"\tTriangulator - Ok\n"; + return true; } -/*! - Constructor -*/ + +//---------------------------------------------------------------------------- VTKViewer_OrderedTriangulator ::VTKViewer_OrderedTriangulator(): - myCell(vtkGenericCell::New()) -{} + myTriangulator(vtkOrderedTriangulator::New()), + myBoundaryTris(vtkCellArray::New()), + myTriangle(vtkTriangle::New()) +{ + myBoundaryTris->Allocate(VTK_CELL_SIZE); + myTriangulator->PreSortedOff(); +} + -/*! - Destructor -*/ +//---------------------------------------------------------------------------- VTKViewer_OrderedTriangulator ::~VTKViewer_OrderedTriangulator() { - myCell->Delete(); + myTriangle->Delete(); + myBoundaryTris->Delete(); + myTriangulator->Delete(); } + +//---------------------------------------------------------------------------- vtkPoints* VTKViewer_OrderedTriangulator -::InitPoints() +::InitPoints(vtkUnstructuredGrid *theInput, + vtkIdType theCellId) { - myInput->GetCell(myCellId,myCell); - return myInput->GetPoints(); -} + myBoundaryTris->Reset(); -vtkIdType -VTKViewer_OrderedTriangulator -::GetNbOfPoints() -{ - return myCell->GetNumberOfPoints(); -} + vtkPoints* aPoints = VTKViewer_Triangulator::InitPoints(theInput, theCellId); + vtkIdType aNumPts = myPoints->GetNumberOfPoints(); + if ( aNumPts > 0 ) { + myTriangulator->InitTriangulation(0.0, 1.0, 0.0, 1.0, 0.0, 1.0, aNumPts); -vtkIdType -VTKViewer_OrderedTriangulator -::GetPointId(vtkIdType thePointId) -{ - return myCell->GetPointId(thePointId); -} + vtkFloatingPointType aBounds[6]; + myPoints->GetBounds(aBounds); -vtkFloatingPointType -VTKViewer_OrderedTriangulator -::GetCellLength() -{ - return sqrt(myCell->GetLength2()); + vtkFloatingPointType anAbsoluteCoord[3]; + vtkFloatingPointType aParamentrucCoord[3]; + for (int aPntId = 0; aPntId < aNumPts; aPntId++) { + myPoints->GetPoint(aPntId, anAbsoluteCoord); + aParamentrucCoord[0] = (anAbsoluteCoord[0] - aBounds[0]) / (aBounds[1] - aBounds[0]); + aParamentrucCoord[1] = (anAbsoluteCoord[1] - aBounds[2]) / (aBounds[3] - aBounds[2]); + aParamentrucCoord[2] = (anAbsoluteCoord[2] - aBounds[4]) / (aBounds[5] - aBounds[4]); + myTriangulator->InsertPoint(aPntId, anAbsoluteCoord, aParamentrucCoord, 0); + } + + myTriangulator->Triangulate(); + myTriangulator->AddTriangles(myBoundaryTris); + } + + return aPoints; } + +//---------------------------------------------------------------------------- vtkIdType VTKViewer_OrderedTriangulator ::GetNumFaces() { - return myCell->GetNumberOfFaces(); + return myBoundaryTris->GetNumberOfCells(); } + +//---------------------------------------------------------------------------- vtkCell* VTKViewer_OrderedTriangulator ::GetFace(vtkIdType theFaceId) { - return myCell->GetFace(theFaceId); -} + vtkIdType aNumCells = myBoundaryTris->GetNumberOfCells(); + if ( theFaceId < 0 || theFaceId >= aNumCells ) + return NULL; -void -VTKViewer_OrderedTriangulator -::GetCellNeighbors(vtkIdType theCellId, - vtkCell* theFace, - vtkIdList* theCellIds) -{ - vtkIdList *anIdList = theFace->PointIds; - myInput->GetCellNeighbors(theCellId, anIdList, theCellIds); -} + vtkIdType *aCells = myBoundaryTris->GetPointer(); -vtkIdType -VTKViewer_OrderedTriangulator -::GetConnectivity(vtkIdType thePntId) -{ - return thePntId; + // Each triangle has three points plus number of points + vtkIdType *aCellPtr = aCells + 4*theFaceId; + + myTriangle->PointIds->SetId(0, aCellPtr[1]); + myTriangle->Points->SetPoint(0, myPoints->GetPoint(aCellPtr[1])); + + myTriangle->PointIds->SetId(1, aCellPtr[2]); + myTriangle->Points->SetPoint(1, myPoints->GetPoint(aCellPtr[2])); + + myTriangle->PointIds->SetId(2, aCellPtr[3]); + myTriangle->Points->SetPoint(2, myPoints->GetPoint(aCellPtr[3])); + + return myTriangle; } -/*! - Constructor -*/ + +//---------------------------------------------------------------------------- VTKViewer_DelaunayTriangulator ::VTKViewer_DelaunayTriangulator(): myUnstructuredGrid(vtkUnstructuredGrid::New()), myGeometryFilter(vtkGeometryFilter::New()), myDelaunay3D(vtkDelaunay3D::New()), - myFaceIds(vtkIdList::New()), - myPoints(vtkPoints::New()), - myPolyData(NULL), - myPointIds(NULL) + myPolyData(NULL) { + myUnstructuredGrid->Initialize(); + myUnstructuredGrid->Allocate(); + myUnstructuredGrid->SetPoints(myPoints); + myDelaunay3D->SetInput(myUnstructuredGrid); myGeometryFilter->SetInput(myDelaunay3D->GetOutput()); + myPolyData = myGeometryFilter->GetOutput(); } - -/*! - Destructor -*/ +//---------------------------------------------------------------------------- VTKViewer_DelaunayTriangulator ::~VTKViewer_DelaunayTriangulator() { myUnstructuredGrid->Delete(); myGeometryFilter->Delete(); myDelaunay3D->Delete(); - myFaceIds->Delete(); - myPoints->Delete(); } +//---------------------------------------------------------------------------- vtkPoints* VTKViewer_DelaunayTriangulator -::InitPoints() +::InitPoints(vtkUnstructuredGrid *theInput, + vtkIdType theCellId) { - myUnstructuredGrid->Initialize(); - myUnstructuredGrid->Allocate(); - myUnstructuredGrid->SetPoints(myPoints); - - vtkIdType aNumPts; - myInput->GetCellPoints(myCellId,aNumPts,myPointIds); - { - vtkFloatingPointType aPntCoord[3]; - myPoints->SetNumberOfPoints(aNumPts); - vtkPoints *anInputPoints = myInput->GetPoints(); - for (int aPntId = 0; aPntId < aNumPts; aPntId++) { - anInputPoints->GetPoint(myPointIds[aPntId],aPntCoord); - myPoints->SetPoint(aPntId,aPntCoord); - } - } + vtkPoints* aPoints = VTKViewer_Triangulator::InitPoints(theInput, theCellId); + myPoints->Modified(); + myUnstructuredGrid->Modified(); myGeometryFilter->Update(); - myPolyData = myGeometryFilter->GetOutput(); - - return myPoints; + + return aPoints; } -vtkIdType -VTKViewer_DelaunayTriangulator -::GetNbOfPoints() -{ - return myPoints->GetNumberOfPoints(); -} - -vtkIdType -VTKViewer_DelaunayTriangulator -::GetPointId(vtkIdType thePointId) -{ - return thePointId; -} - -vtkFloatingPointType -VTKViewer_DelaunayTriangulator -::GetCellLength() -{ - return myPolyData->GetLength(); -} +//---------------------------------------------------------------------------- vtkIdType VTKViewer_DelaunayTriangulator ::GetNumFaces() @@ -558,32 +740,11 @@ VTKViewer_DelaunayTriangulator return myPolyData->GetNumberOfCells(); } + +//---------------------------------------------------------------------------- vtkCell* VTKViewer_DelaunayTriangulator ::GetFace(vtkIdType theFaceId) { return myPolyData->GetCell(theFaceId); } - -void -VTKViewer_DelaunayTriangulator -::GetCellNeighbors(vtkIdType theCellId, - vtkCell* theFace, - vtkIdList* theCellIds) -{ - myFaceIds->Reset(); - vtkIdList *anIdList = theFace->PointIds; - myFaceIds->InsertNextId(myPointIds[anIdList->GetId(0)]); - myFaceIds->InsertNextId(myPointIds[anIdList->GetId(1)]); - myFaceIds->InsertNextId(myPointIds[anIdList->GetId(2)]); - - myInput->GetCellNeighbors(theCellId, myFaceIds, theCellIds); -} - - -vtkIdType -VTKViewer_DelaunayTriangulator -::GetConnectivity(vtkIdType thePntId) -{ - return myPointIds[thePntId]; -} diff --git a/src/VTKViewer/VTKViewer_ConvexTool.h b/src/VTKViewer/VTKViewer_ConvexTool.h index 2bf024d5e..5e391d976 100644 --- a/src/VTKViewer/VTKViewer_ConvexTool.h +++ b/src/VTKViewer/VTKViewer_ConvexTool.h @@ -36,7 +36,12 @@ class vtkCellData; class vtkPoints; class vtkIdList; class vtkCell; +class vtkCellArray; +class vtkTriangle; +class vtkOrderedTriangulator; + +//---------------------------------------------------------------------------- class VTKVIEWER_EXPORT VTKViewer_Triangulator { public: @@ -57,51 +62,48 @@ class VTKVIEWER_EXPORT VTKViewer_Triangulator std::vector& theVTK2ObjIds, bool theIsCheckConvex); - protected: + private: vtkIdList* myCellIds; - vtkUnstructuredGrid *myInput; - vtkIdType myCellId; - int myShowInside; - int myAllVisible; - const char* myCellsVisibility; + protected: + vtkIdType *myPointIds; + vtkIdList* myFaceIds; + vtkPoints* myPoints; virtual vtkPoints* - InitPoints() = 0; + InitPoints(vtkUnstructuredGrid *theInput, + vtkIdType theCellId); virtual vtkIdType - GetNbOfPoints() = 0; + GetNumFaces() = 0; virtual - vtkIdType - GetPointId(vtkIdType thePointId) = 0; + vtkCell* + GetFace(vtkIdType theFaceId) = 0; - virtual - vtkFloatingPointType - GetCellLength() = 0; + vtkIdType + GetNbOfPoints(); - virtual vtkIdType - GetNumFaces() = 0; + GetPointId(vtkIdType thePointId); - virtual - vtkCell* - GetFace(vtkIdType theFaceId) = 0; + vtkFloatingPointType + GetCellLength(); - virtual void - GetCellNeighbors(vtkIdType theCellId, + GetCellNeighbors(vtkUnstructuredGrid *theInput, + vtkIdType theCellId, vtkCell* theFace, - vtkIdList* theCellIds) = 0; + vtkIdList* theCellIds); - virtual vtkIdType - GetConnectivity(vtkIdType thePntId) = 0; + GetConnectivity(vtkIdType thePntId); }; +//---------------------------------------------------------------------------- class VTKVIEWER_EXPORT VTKViewer_OrderedTriangulator : public VTKViewer_Triangulator { public: @@ -111,22 +113,14 @@ class VTKVIEWER_EXPORT VTKViewer_OrderedTriangulator : public VTKViewer_Triangul ~VTKViewer_OrderedTriangulator(); protected: - vtkGenericCell *myCell; + vtkOrderedTriangulator *myTriangulator; + vtkCellArray *myBoundaryTris; + vtkTriangle *myTriangle; virtual vtkPoints* - InitPoints(); - - virtual - vtkIdType - GetNbOfPoints(); - - vtkIdType - GetPointId(vtkIdType thePointId); - - virtual - vtkFloatingPointType - GetCellLength(); + InitPoints(vtkUnstructuredGrid *theInput, + vtkIdType theCellId); virtual vtkIdType @@ -135,19 +129,10 @@ class VTKVIEWER_EXPORT VTKViewer_OrderedTriangulator : public VTKViewer_Triangul virtual vtkCell* GetFace(vtkIdType theFaceId); - - virtual - void - GetCellNeighbors(vtkIdType theCellId, - vtkCell* theFace, - vtkIdList* theCellIds); - - virtual - vtkIdType - GetConnectivity(vtkIdType thePntId); }; +//---------------------------------------------------------------------------- class VTKVIEWER_EXPORT VTKViewer_DelaunayTriangulator : public VTKViewer_Triangulator { public: @@ -161,24 +146,11 @@ class VTKVIEWER_EXPORT VTKViewer_DelaunayTriangulator : public VTKViewer_Triangu vtkGeometryFilter* myGeometryFilter; vtkDelaunay3D* myDelaunay3D; vtkPolyData* myPolyData; - vtkIdType *myPointIds; - vtkIdList* myFaceIds; - vtkPoints* myPoints; virtual vtkPoints* - InitPoints(); - - virtual - vtkIdType - GetNbOfPoints(); - - vtkIdType - GetPointId(vtkIdType thePointId); - - virtual - vtkFloatingPointType - GetCellLength(); + InitPoints(vtkUnstructuredGrid *theInput, + vtkIdType theCellId); virtual vtkIdType @@ -187,16 +159,6 @@ class VTKVIEWER_EXPORT VTKViewer_DelaunayTriangulator : public VTKViewer_Triangu virtual vtkCell* GetFace(vtkIdType theFaceId); - - virtual - void - GetCellNeighbors(vtkIdType theCellId, - vtkCell* theFace, - vtkIdList* theCellIds); - - virtual - vtkIdType - GetConnectivity(vtkIdType thePntId); }; diff --git a/src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx b/src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx index 673767408..ea3abb5ff 100755 --- a/src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx +++ b/src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx @@ -34,6 +34,8 @@ #include #include #include +#include +#include using namespace std; @@ -79,9 +81,13 @@ void VTKViewer_ExtractUnstructuredGrid::SetStoreMapping(int theStoreMapping){ this->Modified(); } -vtkIdType VTKViewer_ExtractUnstructuredGrid::GetInputId(int theOutId) const{ - if(myCellIds.empty() && myCellTypes.empty()) return theOutId; - if(myOut2InId.empty() || theOutId > myOut2InId.size()) return -1; +vtkIdType VTKViewer_ExtractUnstructuredGrid::GetInputId(int theOutId) const +{ + if ( myCellIds.empty() && myCellTypes.empty() ) + return theOutId; + + if ( myOut2InId.empty() || theOutId > (int)myOut2InId.size() ) + return -1; #if defined __GNUC_2__ return myOut2InId[theOutId]; #else @@ -142,9 +148,29 @@ inline void InsertPointCell(vtkCellArray *theConnectivity, } } -void VTKViewer_ExtractUnstructuredGrid::Execute(){ + +// int VTKViewer_ExtractUnstructuredGrid::RequestData( +// vtkInformation *vtkNotUsed(request), +// vtkInformationVector **inputVector, +// vtkInformationVector *outputVector) +void VTKViewer_ExtractUnstructuredGrid::Execute() +{ + /* + not ported yet to the new executive-based pipeline architecture. + + // get the info objects + vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); + vtkInformation *outInfo = outputVector->GetInformationObject(0); + + // get the input and ouptut + vtkUnstructuredGrid *anInput = vtkUnstructuredGrid::SafeDownCast( + inInfo->Get(vtkDataObject::DATA_OBJECT())); + vtkUnstructuredGrid *anOutput = vtkUnstructuredGrid::SafeDownCast( + outInfo->Get(vtkDataObject::DATA_OBJECT())); + */ vtkUnstructuredGrid *anInput = this->GetInput(); vtkUnstructuredGrid *anOutput = this->GetOutput(); + myOut2InId.clear(); myIn2OutId.clear(); /* if(MYDEBUG){ @@ -344,4 +370,5 @@ void VTKViewer_ExtractUnstructuredGrid::Execute(){ MESSAGE("Execute - myIn2OutId.size() = "< #include #include + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \class vtkUnstructuredGridToUnstructuredGridFilter * \brief For more information see VTK documentation */ @@ -99,7 +104,10 @@ protected: ~VTKViewer_ExtractUnstructuredGrid(); //! Main method, which calculate output - void Execute(); + // not ported yet to the new executive-based pipeline architecture. + // see http://www.vtk.org/cgi-bin/viewcvs.cgi/Filtering/vtkUnstructuredGridToUnstructuredGridFilter.h?rev=1.19&view=log + // virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); + virtual void Execute(); EExtraction myExtractionMode; @@ -119,4 +127,8 @@ private: void operator=(const VTKViewer_ExtractUnstructuredGrid&); }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/VTKViewer/VTKViewer_GeometryFilter.cxx b/src/VTKViewer/VTKViewer_GeometryFilter.cxx index 389299bda..5d2590de6 100755 --- a/src/VTKViewer/VTKViewer_GeometryFilter.cxx +++ b/src/VTKViewer/VTKViewer_GeometryFilter.cxx @@ -45,6 +45,8 @@ #include #include #include +#include +#include #include #include @@ -76,37 +78,54 @@ VTKViewer_GeometryFilter {} -void +int VTKViewer_GeometryFilter -::Execute() +::RequestData( + vtkInformation *request, + vtkInformationVector **inputVector, + vtkInformationVector *outputVector) { - vtkDataSet *input= this->GetInput(); + // 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 numCells=input->GetNumberOfCells(); if (numCells == 0) { - return; + return 0; } if (input->GetDataObjectType() == VTK_UNSTRUCTURED_GRID){ - this->UnstructuredGridExecute(); - return; + return this->UnstructuredGridExecute(input, output, outInfo); }else - vtkGeometryFilter::Execute(); + return Superclass::RequestData(request,inputVector,outputVector); + + return 1; } -void +int VTKViewer_GeometryFilter -::UnstructuredGridExecute() +::UnstructuredGridExecute( + vtkDataSet *dataSetInput, + vtkPolyData *output, + vtkInformation *outInfo) { - vtkUnstructuredGrid *input= (vtkUnstructuredGrid *)this->GetInput(); + + vtkUnstructuredGrid *input= (vtkUnstructuredGrid *)dataSetInput; vtkCellArray *Connectivity = input->GetCells(); // Check input if ( Connectivity == NULL ) { vtkDebugMacro(<<"Nothing to extract"); - return; + return 0; } vtkIdType cellId; @@ -118,7 +137,6 @@ VTKViewer_GeometryFilter vtkIdType numCells=input->GetNumberOfCells(); vtkPointData *pd = input->GetPointData(); vtkCellData *cd = input->GetCellData(); - vtkPolyData *output = this->GetOutput(); vtkPointData *outputPD = output->GetPointData(); VTKViewer_OrderedTriangulator anOrderedTriangulator; @@ -753,6 +771,8 @@ VTKViewer_GeometryFilter { delete [] cellVis; } + + return 0; } @@ -813,8 +833,10 @@ VTKViewer_GeometryFilter } -vtkIdType VTKViewer_GeometryFilter::GetElemObjId(int theVtkID){ - if(myVTK2ObjIds.empty() || theVtkID > myVTK2ObjIds.size()) return -1; +vtkIdType VTKViewer_GeometryFilter::GetElemObjId( int theVtkID ) +{ + if( myVTK2ObjIds.empty() || theVtkID > (int)myVTK2ObjIds.size() ) + return -1; #if defined __GNUC_2__ return myVTK2ObjIds[theVtkID]; #else diff --git a/src/VTKViewer/VTKViewer_GeometryFilter.h b/src/VTKViewer/VTKViewer_GeometryFilter.h index a74b70733..300c5a948 100755 --- a/src/VTKViewer/VTKViewer_GeometryFilter.h +++ b/src/VTKViewer/VTKViewer_GeometryFilter.h @@ -24,6 +24,11 @@ #include #include + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! \brief This class used same as vtkGeometryFilter. See documentation on VTK for more information. */ class VTKVIEWER_EXPORT VTKViewer_GeometryFilter : public vtkGeometryFilter @@ -87,14 +92,15 @@ protected: * \brief Destructor. */ ~VTKViewer_GeometryFilter(); - /*! \fn void Execute(); - * \brief Filter culculation method. - */ - void Execute(); + + virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); + + //special cases for performance + /*! \fn void UnstructuredGridExecute(); * \brief Filter culculation method for data object type is VTK_UNSTRUCTURED_GRID. */ - void UnstructuredGridExecute(); + int UnstructuredGridExecute (vtkDataSet *, vtkPolyData *, vtkInformation *); private: typedef std::vector TVectorId; @@ -106,4 +112,8 @@ private: int myIsWireframeMode; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/VTKViewer/VTKViewer_InteractorStyle.h b/src/VTKViewer/VTKViewer_InteractorStyle.h index d9eb4833f..b867f64b3 100644 --- a/src/VTKViewer/VTKViewer_InteractorStyle.h +++ b/src/VTKViewer/VTKViewer_InteractorStyle.h @@ -56,6 +56,10 @@ class VTKViewer_RenderWindowInteractor; #define VTK_INTERACTOR_STYLE_CAMERA_SELECT 6 #define VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN 7 +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*! Description:\n * This class must be supplied with a vtkRenderWindowInteractor wrapper or\n * parent. This class should not normally be instantiated by application\n @@ -185,4 +189,8 @@ class VTKVIEWER_EXPORT VTKViewer_InteractorStyle : public QObject, public vtkInt //@} }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/VTKViewer/VTKViewer_PassThroughFilter.cxx b/src/VTKViewer/VTKViewer_PassThroughFilter.cxx index 172976d7e..f052b072c 100755 --- a/src/VTKViewer/VTKViewer_PassThroughFilter.cxx +++ b/src/VTKViewer/VTKViewer_PassThroughFilter.cxx @@ -32,6 +32,8 @@ #include #include #include +#include +#include vtkCxxRevisionMacro(VTKViewer_PassThroughFilter, "$Revision$"); vtkStandardNewMacro(VTKViewer_PassThroughFilter); @@ -43,10 +45,20 @@ vtkStandardNewMacro(VTKViewer_PassThroughFilter); */ /*!Execute method.Output calculation.*/ -void VTKViewer_PassThroughFilter::Execute() +int VTKViewer_PassThroughFilter::RequestData( + vtkInformation *, + vtkInformationVector **inputVector, + vtkInformationVector *outputVector) { - vtkDataSet *input = static_cast(this->GetInput()); - vtkDataSet *output = static_cast(this->GetOutput()); + // 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())); + vtkDataSet *output = vtkDataSet::SafeDownCast( + outInfo->Get(vtkDataObject::DATA_OBJECT())); // This has to be here because it initialized all field datas. output->CopyStructure( input ); @@ -56,6 +68,7 @@ void VTKViewer_PassThroughFilter::Execute() output->GetPointData()->PassData( input->GetPointData() ); output->GetCellData()->PassData( input->GetCellData() ); + return 1; } /*!Methods invoked by print to print information about the object including superclasses.\n diff --git a/src/VTKViewer/VTKViewer_PassThroughFilter.h b/src/VTKViewer/VTKViewer_PassThroughFilter.h index 3e683348f..99b81ef52 100755 --- a/src/VTKViewer/VTKViewer_PassThroughFilter.h +++ b/src/VTKViewer/VTKViewer_PassThroughFilter.h @@ -36,7 +36,8 @@ protected: VTKViewer_PassThroughFilter() {};//!< Null body. virtual ~VTKViewer_PassThroughFilter() {};//!< Null body. - void Execute(); + virtual int RequestData(vtkInformation *, vtkInformationVector **, + vtkInformationVector *); //generate output data private: VTKViewer_PassThroughFilter( const VTKViewer_PassThroughFilter& ); //!< Not implemented. diff --git a/src/VTKViewer/VTKViewer_RectPicker.cxx b/src/VTKViewer/VTKViewer_RectPicker.cxx deleted file mode 100755 index 70dcad675..000000000 --- a/src/VTKViewer/VTKViewer_RectPicker.cxx +++ /dev/null @@ -1,894 +0,0 @@ -// SALOME VTKViewer : build VTK viewer into Salome desktop -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : VTKViewer_RectPicker.cxx -// Author : Natalia KOPNOVA -// Module : SALOME - -#include - -#include "vtkActor.h" -#include "vtkAssemblyNode.h" -#include "vtkAssemblyPath.h" -#include "vtkCamera.h" -#include "vtkCommand.h" -#include "vtkImageData.h" -#include "vtkLODProp3D.h" -#include "vtkMapper.h" -#include "vtkMath.h" -#include "vtkObjectFactory.h" -#include "vtkPoints.h" -#include "vtkProp3DCollection.h" -#include "vtkProperty.h" -#include "vtkRenderWindow.h" -#include "vtkRenderer.h" -#include "vtkTransform.h" -#include "vtkVertex.h" -#include "vtkVolume.h" -#include "vtkVolumeMapper.h" - -using namespace std; - - -vtkStandardNewMacro(VTKViewer_RectPicker); - - -/*!Constructor. Do nothing*/ -VTKViewer_RectPicker::VTKViewer_RectPicker() -{ -} - - -/*!Perform pick operation with selection rectangle provided. Normally the - * first two values for the selection top-left and right-bottom points are - * x-y pixel coordinate, and the third value is =0. - * \retval Return non-zero if something was successfully picked. - */ -int VTKViewer_RectPicker::Pick(float selectionX1, float selectionY1, float selectionZ1, - float selectionX2, float selectionY2, float selectionZ2, - vtkRenderer *renderer) -{ - int k, i; - vtkProp *prop; - vtkCamera *camera; - vtkAbstractMapper3D *mapper = NULL; - float p1World[4][4], p2World[4][4], p1Mapper[4][4], p2Mapper[4][4]; - float c1[3], c2[3]; - int picked=0; - int *winSize; - float x, y, t, p; - float *viewport; - float cameraPos[4], cameraFP[4]; - float *displayCoords, *worldCoords; - float pickPosition[4][3]; - double *clipRange; - float ray[4][3], rayLength[4]; - int pickable; - int LODId; - float windowLowerLeft[4], windowUpperRight[4]; - float bounds[6], tol; - float tF, tB; - float hitPosition[3]; - float cameraDOP[3]; - - // Initialize picking process - this->Initialize(); - this->Renderer = renderer; - - /* Selection point is not defined for the rectangle - this->SelectionPoint[0] = - this->SelectionPoint[1] = - this->SelectionPoint[2] = - */ - - // Invoke start pick method if defined - this->InvokeEvent(vtkCommand::StartPickEvent,NULL); - - if ( renderer == NULL ) - { - vtkErrorMacro(<<"Must specify renderer!"); - return 0; - } - - // Get camera focal point and position. Convert to display (screen) - // coordinates. We need a depth value for z-buffer. - // - camera = renderer->GetActiveCamera(); - camera->GetPosition((float *)cameraPos); cameraPos[3] = 1.0; - camera->GetFocalPoint((float *)cameraFP); cameraFP[3] = 1.0; - - renderer->SetWorldPoint(cameraFP); - renderer->WorldToDisplay(); - displayCoords = renderer->GetDisplayPoint(); - selectionZ1 = selectionZ2 = displayCoords[2]; - - // Convert the selection rectangle into world coordinates. - // - renderer->SetDisplayPoint(selectionX1, selectionY1, selectionZ1); - renderer->DisplayToWorld(); - worldCoords = renderer->GetWorldPoint(); - if ( worldCoords[3] == 0.0 ) - { - vtkErrorMacro(<<"Bad homogeneous coordinates"); - return 0; - } - for (i=0; i < 3; i++) - { - pickPosition[0][i] = worldCoords[i] / worldCoords[3]; - } - - renderer->SetDisplayPoint(selectionX1, selectionY2, (selectionZ1+selectionZ2)/2); - renderer->DisplayToWorld(); - worldCoords = renderer->GetWorldPoint(); - if ( worldCoords[3] == 0.0 ) - { - vtkErrorMacro(<<"Bad homogeneous coordinates"); - return 0; - } - for (i=0; i < 3; i++) - { - pickPosition[1][i] = worldCoords[i] / worldCoords[3]; - } - - renderer->SetDisplayPoint(selectionX2, selectionY2, selectionZ2); - renderer->DisplayToWorld(); - worldCoords = renderer->GetWorldPoint(); - if ( worldCoords[3] == 0.0 ) - { - vtkErrorMacro(<<"Bad homogeneous coordinates"); - return 0; - } - for (i=0; i < 3; i++) - { - pickPosition[2][i] = worldCoords[i] / worldCoords[3]; - } - - renderer->SetDisplayPoint(selectionX2, selectionY1, (selectionZ1+selectionZ2)/2); - renderer->DisplayToWorld(); - worldCoords = renderer->GetWorldPoint(); - if ( worldCoords[3] == 0.0 ) - { - vtkErrorMacro(<<"Bad homogeneous coordinates"); - return 0; - } - for (i=0; i < 3; i++) - { - pickPosition[3][i] = worldCoords[i] / worldCoords[3]; - } - - // Compute the ray endpoints. The ray is along the line running from - // the camera position to the selection point, starting where this line - // intersects the front clipping plane, and terminating where this - // line intersects the back clipping plane. - for (k=0; k < 4; k++) { - for (i=0; i<3; i++) - { - ray[k][i] = pickPosition[k][i] - cameraPos[i]; - } - } - for (i=0; i<3; i++) - { - cameraDOP[i] = cameraFP[i] - cameraPos[i]; - } - - vtkMath::Normalize(cameraDOP); - - for (k=0; k < 4; k++) { - if (( rayLength[k] = vtkMath::Dot(cameraDOP,ray[k])) == 0.0 ) - { - vtkWarningMacro("Cannot process points"); - return 0; - } - } - - clipRange = camera->GetClippingRange(); - - if ( camera->GetParallelProjection() ) - { - for (k=0; k < 4; k++) { - tF = clipRange[0] - rayLength[k]; - tB = clipRange[1] - rayLength[k]; - for (i=0; i<3; i++) - { - p1World[k][i] = pickPosition[k][i] + tF*cameraDOP[i]; - p2World[k][i] = pickPosition[k][i] + tB*cameraDOP[i]; - } - p1World[k][3] = p2World[k][3] = 1.0; - } - } - else - { - for (k=0; k < 4; k++) { - tF = clipRange[0] / rayLength[k]; - tB = clipRange[1] / rayLength[k]; - for (i=0; i<3; i++) - { - p1World[k][i] = cameraPos[i] + tF*ray[k][i]; - p2World[k][i] = cameraPos[i] + tB*ray[k][i]; - } - p1World[k][3] = p2World[k][3] = 1.0; - } - } - - // Compute the center points of ray rectangle - for (i=0; i<3; i++) { - c1[i] = c2[i] = 0; - for (k=0; k<4; k++) { - c1[i] += p1World[k][i]; - c2[i] += p2World[k][i]; - } - c1[i] = c1[i]/4; - c2[i] = c2[i]/4; - } - - // Compute the tolerance in world coordinates. Do this by - // determining the world coordinates of the diagonal points of the - // window, computing the width of the window in world coordinates, and - // multiplying by the tolerance. - // - viewport = renderer->GetViewport(); - winSize = renderer->GetRenderWindow()->GetSize(); - x = winSize[0] * viewport[0]; - y = winSize[1] * viewport[1]; - renderer->SetDisplayPoint(x, y, selectionZ1); - renderer->DisplayToWorld(); - renderer->GetWorldPoint(windowLowerLeft); - - x = winSize[0] * viewport[2]; - y = winSize[1] * viewport[3]; - renderer->SetDisplayPoint(x, y, selectionZ2); - renderer->DisplayToWorld(); - renderer->GetWorldPoint(windowUpperRight); - - for (tol=0.0,i=0; i<3; i++) - { - tol += (windowUpperRight[i] - windowLowerLeft[i]) * - (windowUpperRight[i] - windowLowerLeft[i]); - } - - tol = sqrt (tol) * this->Tolerance; - - // Loop over all props. Transform ray (defined from position of - // camera to selection point) into coordinates of mapper (not - // transformed to actors coordinates! Reduces overall computation!!!). - // Note that only vtkProp3D's can be picked by vtkPicker. - // - vtkPropCollection *props; - vtkProp *propCandidate; - if ( this->PickFromList ) - { - props = this->GetPickList(); - } - else - { - props = renderer->GetProps(); - } - - vtkActor *actor; - vtkLODProp3D *prop3D; - vtkVolume *volume; - vtkAssemblyPath *path; - vtkProperty *tempProperty; - this->Transform->PostMultiply(); - for ( props->InitTraversal(); (prop=props->GetNextProp()); ) - { - for ( prop->InitPathTraversal(); (path=prop->GetNextPath()); ) - { - pickable = 0; - actor = NULL; - propCandidate = path->GetLastNode()->GetProp(); - if ( propCandidate->GetPickable() && propCandidate->GetVisibility() ) - { - pickable = 1; - if ( (actor=vtkActor::SafeDownCast(propCandidate)) != NULL ) - { - mapper = actor->GetMapper(); - if ( actor->GetProperty()->GetOpacity() <= 0.0 ) - { - pickable = 0; - } - } - else if ( (prop3D=vtkLODProp3D::SafeDownCast(propCandidate)) != NULL ) - { - LODId = prop3D->GetPickLODID(); - mapper = prop3D->GetLODMapper(LODId); - - // if the mapper is a vtkMapper (as opposed to a vtkVolumeMapper), - // then check the transparency to see if the object is pickable - if ( vtkMapper::SafeDownCast(mapper) != NULL) - { - prop3D->GetLODProperty(LODId, &tempProperty); - if ( tempProperty->GetOpacity() <= 0.0 ) - { - pickable = 0; - } - } - } - else if ( (volume=vtkVolume::SafeDownCast(propCandidate)) != NULL ) - { - mapper = volume->GetMapper(); - } - else - { - pickable = 0; //only vtkProp3D's (actors and volumes) can be picked - } - } - // If actor can be picked, get its composite matrix, invert it, and - // use the inverted matrix to transform the ray points into mapper - // coordinates. - if ( pickable && mapper != NULL ) - { - vtkMatrix4x4 *LastMatrix = path->GetLastNode()->GetMatrix(); - if (LastMatrix == NULL) - { - vtkErrorMacro (<< "Pick: Null matrix."); - return 0; - } - this->Transform->SetMatrix(LastMatrix); - this->Transform->Push(); - this->Transform->Inverse(); - - for (k=0; k < 4; k++) { - this->Transform->TransformPoint(p1World[k],p1Mapper[k]); - this->Transform->TransformPoint(p2World[k],p2Mapper[k]); - - for (i=0; i<3; i++) - { - ray[k][i] = p2Mapper[k][i] - p1Mapper[k][i]; - } - } - - this->Transform->Pop(); - - // Have the ray endpoints in mapper space, now need to compare this - // with the mapper bounds to see whether intersection is possible. - // - // Get the bounding box of the modeller. Note that the tolerance is - // added to the bounding box to make sure things on the edge of the - // bounding box are picked correctly. - mapper->GetBounds(bounds); - bounds[0] -= tol; bounds[1] += tol; - bounds[2] -= tol; bounds[3] += tol; - bounds[4] -= tol; bounds[5] += tol; - if ( HitBBox(bounds, p1Mapper, ray) ) { - t = this->IntersectWithHex(p1Mapper, p2Mapper, tol, path, - (vtkProp3D *)propCandidate, mapper); - if ( t >= 0.0 && t <= 1.0 /*t < VTK_LARGE_FLOAT*/ ) { - picked = 1; - this->Prop3Ds->AddItem((vtkProp3D *)prop); - this->PickedPositions->InsertNextPoint - ((1.0 - t)*c1[0] + t*c2[0], - (1.0 - t)*c1[1] + t*c2[1], - (1.0 - t)*c1[2] + t*c2[2]); - - // backwards compatibility: also add to this->Actors - if (actor) { - this->Actors->AddItem(actor); - } - } - } - - }//if visible and pickable not transparent and has mapper - }//for all parts - }//for all actors - - // Invoke end pick method if defined - this->InvokeEvent(vtkCommand::EndPickEvent,NULL); - - return picked; -} - -#define SIDE_LEFT 0 -#define SIDE_RIGHT 1 -#define SIDE_MIDDLE 2 - -float GetParameterValue(float start, float end, float point) -{ - if (start == end) return -VTK_LARGE_FLOAT; - return (point-start)/(end-start); -} - -void GetPointCoord(const float start[3], const float end[3], float t, float point[3]) -{ - int i; - for (i = 0; i < 3; i++) { - point[i] = start[i] + t*(end[i]-start[i]); - } -} - -char GetIntersectionPoint(const float start[3], const float end[3], - const int& index, const float p, float point[3]) -{ - float t = GetParameterValue(start[index], end[index], p); - char result = 0; - if (t >= 0.0 && t <= 1.0) { - result = 1; - GetPointCoord(start, end, t, point); - } - return result; -} - - -/*! Bounding box intersection with hexahedron. Origin[4][4] starts the ray from corner points, - * dir[4][3] is the vector components of the ray in the x-y-z directions. - * (Notes: the intersection ray dir[4][3] is NOT normalized.) - * \retval The method returns a non-zero value, if the bounding box is hit. - */ -char VTKViewer_RectPicker::HitBBox (float bounds[6], float origin[4][4], float dir[4][3]) -{ - int i, j, k, n; - float endray[4][3]; - - for (k = 0; k < 4; k++) { - for (i = 0; i < 3; i++) { - endray[k][i] = origin[k][i] + dir[k][i]; - } - } - - // Compute hex bounding box, center point and center direction - float hbounds[6], center[3], ray[3]; - for (i = 0; i < 3; i++) { - hbounds[2*i] = hbounds[2*i+1] = origin[0][i]; - center[i] = ray[i] = 0; - for (k = 0; k < 4; k++) { - center[i] += origin[k][i]; - ray[i] += endray[k][i]; - if (origin[k][i] < hbounds[2*i]) { - hbounds[2*i] = origin[k][i]; - } - else if (origin[k][i] > hbounds[2*i+1]) - hbounds[2*i+1] = origin[k][i]; - if (endray[k][i] < hbounds[2*i]) - hbounds[2*i] = endray[k][i]; - else if (endray[k][i] > hbounds[2*i+1]) - hbounds[2*i+1] = endray[k][i]; - } - center[i] = center[i]/4; - ray[i] = ray[i]/4; - ray[i] = ray[i] - center[i]; - } - - // Check for intersection between bouning boxes - for (i = 0; i < 3; i++) { - if (bounds[2*i+1] < hbounds[2*i] || bounds[2*i] > hbounds[2*i+1]) - return 0; - } - - // Check if one of the origin point lays inside bbox - char inside; - for (k = 0; k < 4; k++) { - inside = 1; - for (i = 0; i < 3; i++) { - if (origin[k][i] < bounds[2*i] || origin[k][i] > bounds[2*i+1]) { - inside = 0; - break; - } - } - if (inside) return 1; - } - - // Find the closest coord plane for the center point - char side[3]; - float coordPlane[3]; - inside = 1; - for (i = 0; i < 3; i++) { - if (center[i] < bounds[2*i]) { - inside = 0; - coordPlane[i] = bounds[2*i]; - side[i] = SIDE_LEFT; - } - else if (center[i] > bounds[2*i+1]) { - inside = 0; - coordPlane[i] = bounds[2*i+1]; - side[i] = SIDE_RIGHT; - } - else { - coordPlane[i] = (ray[i]<0.0) ? bounds[2*i] : bounds[2*i+1]; - side[i] = SIDE_MIDDLE; - } - } - if (inside) return 1; - - // Calculate parametric distances to the planes and find the max - float maxT[3]; - int whichPlane = 0; - char defined = 0; - for (i = 0; i < 3; i++) { - if (side[i] != SIDE_MIDDLE && ray[i] != 0.0) { - maxT[i] = (coordPlane[i]-center[i])/ray[i]; - defined = 1; - } - else - maxT[i] = -1.0; - } - for (i = 0; i < 3; i++) { - if (maxT[whichPlane] < maxT[i]) - whichPlane = i; - } - - // Check for intersection along the center ray - float coord; - if (maxT[whichPlane] <= 1.0 && maxT[whichPlane] >= 0.0) { - inside = 1; - for (i = 0; i < 3; i++) { - if (i != whichPlane) { - coord = center[i] + maxT[whichPlane]*ray[i]; - if (coord < bounds[2*i] || coord > bounds[2*i+1]) - inside = 0; - } - } - if (inside) return 1; - } - - // Define the intersection plane - if (!defined) { - for (i = 0; i < 3; i++) { - if (ray[i] != 0.0) { - maxT[i] = (coordPlane[i]-center[i])/ray[i]; - } - else - maxT[i] = VTK_LARGE_FLOAT; - } - for (i = 0; i < 3; i++) { - if (maxT[whichPlane] > maxT[i]) - whichPlane = i; - } - } - - // Compute the intersection between hex and coord plane - float t[4]; - for (k = 0; k < 4; k++) { - if (dir[k][whichPlane] != 0.0) { - t[k] = (coordPlane[whichPlane]-origin[k][whichPlane])/dir[k][whichPlane]; - } - else { - t[k] = VTK_LARGE_FLOAT; - } - } - - vtkPoints* aPoints = vtkPoints::New(); - float p[3], q[3], t1; - for (k = 0; k < 4; k++) { - n = (k+1)%4; // next point - if (t[k] > 1.0) { - if (t[n] < 1.0) { - // find intersection point - t1 = GetParameterValue(endray[k][whichPlane], endray[n][whichPlane], coordPlane[whichPlane]); - if (t1 > 0.0 && t1 < 1.0) { - GetPointCoord(endray[k], endray[n], t1, p); - aPoints->InsertNextPoint(p[0], p[1], p[2]); - } - } - if (t[n] < 0.0) { - // find second intersection point - t1 = GetParameterValue(origin[k][whichPlane], origin[n][whichPlane], coordPlane[whichPlane]); - if (t1 > 0.0 && t1 < 1.0) { - GetPointCoord(origin[k], origin[n], t1, p); - aPoints->InsertNextPoint(p[0], p[1], p[2]); - } - } - } - else if (t[k] < 0.0) { - if (t[n] > 0.0) { - // find intersection point - t1 = GetParameterValue(origin[k][whichPlane], origin[n][whichPlane], coordPlane[whichPlane]); - if (t1 > 0.0 && t1 < 1.0) { - GetPointCoord(origin[k], origin[n], t1, p); - aPoints->InsertNextPoint(p[0], p[1], p[2]); - } - } - } - else { - // find intersection point - GetPointCoord(origin[k], endray[k], t[k], p); - aPoints->InsertNextPoint(p[0], p[1], p[2]); - - if (t[n] < 0.0) { - // find second intersection point - t1 = GetParameterValue(origin[k][whichPlane], origin[n][whichPlane], coordPlane[whichPlane]); - if (t1 > 0.0 && t1 < 1.0) { - GetPointCoord(origin[k], origin[n], t1, p); - aPoints->InsertNextPoint(p[0], p[1], p[2]); - } - } - else if (t[n] > 1.0) { - // find second intersection point - t1 = GetParameterValue(endray[k][whichPlane], endray[n][whichPlane], coordPlane[whichPlane]); - if (t1 > 0.0 && t1 < 1.0) { - GetPointCoord(endray[k], endray[n], t1, p); - aPoints->InsertNextPoint(p[0], p[1], p[2]); - } - } - } - } - n = aPoints->GetNumberOfPoints(); - if (n == 0) { - aPoints->Delete(); - return 0; - } - - if (n == 1) { - aPoints->GetPoint(0, p); - inside = 1; - for (i = 0; i < 3; i++) { - if (i != whichPlane) { - if (p[i] < bounds[2*i] || p[i] > bounds[2*i+1]) { - inside = 0; break; - } - } - } - aPoints->Delete(); - return inside; - } - - // Analize intersection - int nearPlane, boundPlane = -1; - float boundCoord, boundMin, boundMax; - char intersect = 0; - for (k = 0; k < n; k++) { - aPoints->GetPoint(k, p); - j = k+1; if (j == n) j = 0; - aPoints->GetPoint(j, q); - inside = 1; - nearPlane = 0; - // if the point is inside bbox - for (i = 0; i < 3; i++) { - if (i != whichPlane) { - if (p[i] < bounds[2*i]) { - side[i] = SIDE_LEFT; - maxT[i] = GetParameterValue(p[i], q[i], bounds[2*i]); - inside = 0; - } - else if (p[i] > bounds[2*i+1]) { - side[i] = SIDE_RIGHT; - maxT[i] = GetParameterValue(p[i], q[i], bounds[2*i+1]); - inside = 0; - } - else { - side[i] = SIDE_MIDDLE; - maxT[i] = -1.0; - } - } - else maxT[i] = -1.0; - if (maxT[i] > maxT[nearPlane]) nearPlane = i; - } - if (inside) break; - // if segment intersects bbox - if (maxT[nearPlane] >= 0.0 && maxT[nearPlane] <= 1.0) { - for (i = 0; i < 3; i++) { - if (i != whichPlane && i != nearPlane) { - coord = p[i] + maxT[nearPlane]*(q[i]-p[i]); - if (coord >= bounds[2*i] && coord <= bounds[2*i+1]) { - intersect = 1; break; - } - } - } - // intersect with boundPlane - if (boundPlane == -1) { - boundCoord = p[nearPlane] + maxT[nearPlane]*(q[nearPlane]-p[nearPlane]); - boundPlane = nearPlane; - for (i = 0; i < 3; i++) { - if (i != whichPlane && i != boundPlane) { - coord = p[i] + maxT[nearPlane]*(q[i]-p[i]); - boundMin = boundMax = coord; - } - } - } - else { - t1 = GetParameterValue(p[boundPlane], q[boundPlane], boundCoord); - if (t1 >= 0.0 && t1 <= 1.0) { - for (i = 0; i < 3; i++) { - if (i != whichPlane && i != boundPlane) { - coord = p[i] + t1*(q[i]-p[i]); - if (coord < boundMin) boundMin = coord; - if (coord > boundMax) boundMax = coord; - } - } - } - } - } - if (intersect) break; - } - aPoints->Delete(); - if (inside || intersect) { - return 1; - } - - inside = 1; - for (i = 0; i < 3; i++) { - if (i != whichPlane && i != boundPlane) { - if (boundMin > bounds[2*i+1] || boundMax < bounds[2*i]) - inside = 0; - } - } - - return inside; -} - -/*! Position of point relative to hexahedron. p1[4][4] is the corner points of top face, - * p2[4][4] is the corner points of bottom face. - * \retval The method returns a non-zero value, if the point is inside. - */ -char VTKViewer_RectPicker::PointInside (float p[3], float p1[4][4], float p2[4][4], float tol) -{ - int i, j, k; - float t, coord[3]; - - // Fix one coordinate (x, for example) and - // compute intersection with coordinate plane - vtkPoints* aPoints = vtkPoints::New(); - int mode = 0; - for (k = 0; k < 4; k++) { - j = k+1; if (j == 4) j = 0; - switch (mode) { - case 0: - if (GetIntersectionPoint(p1[k], p1[j], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 0; - } - if (GetIntersectionPoint(p1[k], p2[k], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 1; - } - if (GetIntersectionPoint(p2[k], p2[j], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 2; - } - /* - if ((p1[k][0]-p[0])*(p2[k][0]-p[0]) <= 0) { - t = GetParameterValue(p1[k][0], p2[k][0], p[0]); - if (t >= 0.0 && t <= 1.0) { - GetPointCoord(p1[k], p2[k], t, coord); - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - } - } - */ - break; - case 1: - if (GetIntersectionPoint(p1[k], p2[k], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 1; - } - if (GetIntersectionPoint(p2[k], p2[j], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 2; - } - if (GetIntersectionPoint(p1[k], p1[j], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 0; - } - /* - if ((p1[k][0]-p[0])*(p1[j][0]-p[0]) <= 0) { - t = GetParameterValue(p1[k][0], p1[j][0], p[0]); - if (t > 0.0 && t < 1.0) { - GetPointCoord(p1[k], p1[j], t, coord); - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - } - } - */ - break; - case 2: - if (GetIntersectionPoint(p2[k], p2[j], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 2; - } - if (GetIntersectionPoint(p1[k], p2[k], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 1; - } - if (GetIntersectionPoint(p1[k], p1[j], 0, p[0], coord)) { - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - mode = 0; - } - /* - if ((p2[k][0]-p[0])*(p2[j][0]-p[0]) <= 0) { - t = GetParameterValue(p2[k][0], p2[j][0], p[0]); - if (t > 0.0 && t < 1.0) { - GetPointCoord(p2[k], p2[j], t, coord); - aPoints->InsertNextPoint(coord[0], coord[1], coord[2]); - } - } - */ - break; - } - } - int n = aPoints->GetNumberOfPoints(); - //cout << "---> Points in X projection " << n << endl; - if (n == 0) { - aPoints->Delete(); - return 0; - } - - // Fix the second coord and define bounds - float zMin = VTK_LARGE_FLOAT, zMax = -VTK_LARGE_FLOAT, z, ncoord[3]; - char inside = 0; - for (k = 0; k < n; k++) { - aPoints->GetPoint(k, coord); - //cout << " P" << k << " (" << coord[0] << ", " << coord[1] << ", " << coord[2] << ")"; - j = k+1; if (j == n) j = 0; - if (j == k) { - if (p[1] == coord[1] && p[2] == coord[2]) { - inside = 1; - } - break; - } - aPoints->GetPoint(j, ncoord); - t = GetParameterValue(coord[1], ncoord[1], p[1]); - if (t >= 0.0 && t <= 1) { - z = coord[2] + t*(ncoord[2]-coord[2]); - if (z < zMin) zMin = z; - if (z > zMax) zMax = z; - } - } - //cout << endl << " Zmin = " << zMin << ", Zmax = " << zMax << endl; - if (!inside) { - if (p[2] <= (zMax+tol) && p[2] >= (zMin-tol)) - inside = 1; - } - - aPoints->Delete(); - return inside; -} - -float VTKViewer_RectPicker::IntersectWithHex(float p1[4][4], float p2[4][4], float tol, - vtkAssemblyPath *path, vtkProp3D *prop3D, - vtkAbstractMapper3D *mapper) -{ - int i, k; - float *center, p0[3], ray[3], rayFactor, t; - - // Get the data from the modeler - // - center = mapper->GetCenter(); - - if (!PointInside(center, p1, p2)) { - return 2.0; - } - - // Determine appropriate info - // - for (i = 0; i < 3; i++) { - p0[i] = ray[i] = 0; - for (k = 0; k < 4; k++) { - p0[i] += p1[k][i]; - ray[i] += p2[k][i]; - } - p0[i] = p0[i]/4; - ray[i] = ray[i]/4; - ray[i] = ray[i] - p0[i]; - } - if (( rayFactor = vtkMath::Dot(ray,ray)) == 0.0 ) { - vtkErrorMacro("Cannot process points"); - return 2.0; - } - - // Project the center point onto the ray and determine its parametric value - // - t = (ray[0]*(center[0]-p0[0]) + ray[1]*(center[1]-p0[1]) - + ray[2]*(center[2]-p0[2])) / rayFactor; - - if ( t >= 0.0 && t <= 1.0 && t < this->GlobalTMin ) { - this->MarkPicked(path, prop3D, mapper, t, center); - } - return t; -} diff --git a/src/VTKViewer/VTKViewer_RectPicker.h b/src/VTKViewer/VTKViewer_RectPicker.h deleted file mode 100755 index e20201630..000000000 --- a/src/VTKViewer/VTKViewer_RectPicker.h +++ /dev/null @@ -1,78 +0,0 @@ -// SALOME VTKViewer : build VTK viewer into Salome desktop -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : VTKViewer_RectPicker.h -// Author : Natalia KOPNOVA -// Module : SALOME - -#ifndef __VTKViewer_RectPicker_h -#define __VTKViewer_RectPicker_h - -#include - -/*! \class vtkPicker - * \brief For more information see VTK documentation - */ -/*! \class VTKViewer_RectPicker - * \brief Rectangular picker class. - */ -class VTK_EXPORT VTKViewer_RectPicker : public vtkPicker -{ -public: - /*!Create new instance of VTKViewer_RectPicker.*/ - static VTKViewer_RectPicker *New(); - vtkTypeMacro(VTKViewer_RectPicker,vtkPicker); - - virtual int Pick(float selectionX1, float selectionY1, float selectionZ1, - float selectionX2, float selectionY2, float selectionZ2, - vtkRenderer *renderer); - - /*! - * Perform pick operation with selection rectangle provided. Normally the first - * two values for the selection top-left and right-bottom points are x-y pixel - * coordinate, and the third value is =0. - * \retval Return non-zero if something was successfully picked. - */ - int Pick(float selectionPt1[3], float selectionPt2[3], vtkRenderer *ren) - {return this->Pick(selectionPt1[0], selectionPt1[1], selectionPt1[2], - selectionPt2[0], selectionPt2[1], selectionPt2[2], - ren);}; - - static char HitBBox(float bounds[6], float origin[4][4], float dir[4][3]); - - static char PointInside(float point[3], float p1[4][4], float p2[4][4], float tol=0); - -protected: - VTKViewer_RectPicker(); - ~VTKViewer_RectPicker() {}; - - virtual float IntersectWithHex(float p1[4][4], float p2[4][4], float tol, - vtkAssemblyPath *path, vtkProp3D *p, - vtkAbstractMapper3D *m); - -private: -}; - -#endif - - diff --git a/src/VTKViewer/VTKViewer_ShrinkFilter.cxx b/src/VTKViewer/VTKViewer_ShrinkFilter.cxx index 38c64cfc4..3391c08c7 100755 --- a/src/VTKViewer/VTKViewer_ShrinkFilter.cxx +++ b/src/VTKViewer/VTKViewer_ShrinkFilter.cxx @@ -34,6 +34,8 @@ #include #include #include +#include +#include vtkCxxRevisionMacro(VTKViewer_ShrinkFilter, "$Revision$"); vtkStandardNewMacro(VTKViewer_ShrinkFilter); @@ -49,8 +51,21 @@ VTKViewer_ShrinkFilter::~VTKViewer_ShrinkFilter() /*!Execute method. Calculate output.*/ -void VTKViewer_ShrinkFilter::Execute() +int VTKViewer_ShrinkFilter::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())); + vtkUnstructuredGrid *output = vtkUnstructuredGrid::SafeDownCast( + outInfo->Get(vtkDataObject::DATA_OBJECT())); + vtkPoints *newPts; int i, j, numIds, abort=0; vtkIdType cellId, numCells, numPts; @@ -58,8 +73,6 @@ void VTKViewer_ShrinkFilter::Execute() vtkFloatingPointType center[3], *p, pt[3]; vtkPointData *pd, *outPD;; vtkIdList *ptIds, *newPtIds; - vtkDataSet *input= this->GetInput(); - vtkUnstructuredGrid *output = this->GetOutput(); vtkIdType tenth; vtkFloatingPointType decimal; @@ -70,7 +83,7 @@ void VTKViewer_ShrinkFilter::Execute() if (numCells < 1 || numPts < 1) { vtkErrorMacro(<<"No data to shrink!"); - return; + return 0; } ptIds = vtkIdList::New(); @@ -154,6 +167,8 @@ void VTKViewer_ShrinkFilter::Execute() ptIds->Delete(); newPtIds->Delete(); newPts->Delete(); + + return 1; } /*!Sets store mapping.*/ @@ -166,7 +181,9 @@ void VTKViewer_ShrinkFilter::SetStoreMapping(int theStoreMapping){ /*!Return node object id by vtk node id. *\retval -1 - if no object, else return id. */ -vtkIdType VTKViewer_ShrinkFilter::GetNodeObjId(int theVtkID){ - if(myVTK2ObjIds.empty() || theVtkID > myVTK2ObjIds.size()) return -1; +vtkIdType VTKViewer_ShrinkFilter::GetNodeObjId(int theVtkID) +{ + if ( myVTK2ObjIds.empty() || theVtkID > (int)myVTK2ObjIds.size() ) + return -1; return myVTK2ObjIds.at(theVtkID); } diff --git a/src/VTKViewer/VTKViewer_ShrinkFilter.h b/src/VTKViewer/VTKViewer_ShrinkFilter.h index 4d2a416bb..ab46c2514 100755 --- a/src/VTKViewer/VTKViewer_ShrinkFilter.h +++ b/src/VTKViewer/VTKViewer_ShrinkFilter.h @@ -25,6 +25,10 @@ #include +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + /*!Shrink cells composing an arbitrary data set. *\warning It is possible to turn cells inside out or cause self intersection in special cases. */ @@ -47,7 +51,7 @@ protected: VTKViewer_ShrinkFilter(); ~VTKViewer_ShrinkFilter(); - void Execute(); + virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); /*!Not implemented.*/ void UnstructuredGridExecute(); @@ -57,4 +61,8 @@ private: TVectorId myVTK2ObjIds; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif diff --git a/src/VTKViewer/VTKViewer_TransformFilter.cxx b/src/VTKViewer/VTKViewer_TransformFilter.cxx index cdfc14a1f..1c1121044 100755 --- a/src/VTKViewer/VTKViewer_TransformFilter.cxx +++ b/src/VTKViewer/VTKViewer_TransformFilter.cxx @@ -34,17 +34,30 @@ #include #include #include - +#include +#include vtkStandardNewMacro(VTKViewer_TransformFilter); /*!Execution method. Calculate output.*/ -void VTKViewer_TransformFilter::Execute(){ +int VTKViewer_TransformFilter::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 + vtkPointSet *input = vtkPointSet::SafeDownCast( + inInfo->Get(vtkDataObject::DATA_OBJECT())); + vtkPointSet *output = vtkPointSet::SafeDownCast( + outInfo->Get(vtkDataObject::DATA_OBJECT())); + vtkPoints *inPts; vtkPoints *newPts; int numPts, numCells; - vtkPointSet *input = this->GetInput(); - vtkPointSet *output = this->GetOutput(); vtkPointData *pd=input->GetPointData(), *outPD=output->GetPointData(); vtkCellData *cd=input->GetCellData(), *outCD=output->GetCellData(); output->CopyStructure( input ); @@ -67,4 +80,6 @@ void VTKViewer_TransformFilter::Execute(){ } outPD->PassData(pd); outCD->PassData(cd); + + return 1; } diff --git a/src/VTKViewer/VTKViewer_TransformFilter.h b/src/VTKViewer/VTKViewer_TransformFilter.h index 3087a03e9..69a286b06 100755 --- a/src/VTKViewer/VTKViewer_TransformFilter.h +++ b/src/VTKViewer/VTKViewer_TransformFilter.h @@ -42,7 +42,8 @@ protected: VTKViewer_TransformFilter(const VTKViewer_TransformFilter&) {/*!Do nothing*/} /*!Operator = */ void operator=(const VTKViewer_TransformFilter&) {/*!Do nothing*/} - void Execute(); + + int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); }; #endif diff --git a/src/VTKViewer/VTKViewer_Trihedron.cxx b/src/VTKViewer/VTKViewer_Trihedron.cxx index c426e0280..f50d67b30 100755 --- a/src/VTKViewer/VTKViewer_Trihedron.cxx +++ b/src/VTKViewer/VTKViewer_Trihedron.cxx @@ -32,8 +32,7 @@ #include #include #include - -#include "VTKViewer_VectorText.h" +#include vtkStandardNewMacro(VTKViewer_UnScaledActor); @@ -141,7 +140,7 @@ VTKViewer_Axis::VTKViewer_Axis() myLineActor->SetArrowActor(myArrowActor); /*! \li Initialize the Label pipe-line representation */ - myVectorText = VTKViewer_VectorText::New(); + myVectorText = vtkVectorText::New(); myMapper[2] = vtkPolyDataMapper::New(); myMapper[2]->SetInput(myVectorText->GetOutput()); @@ -259,6 +258,17 @@ void VTKViewer_Axis::SetSize(vtkFloatingPointType theSize) myLabelActor->AddPosition(aPosition); } +/*! Check if actor belongs to the axis object + * \param theActor - vtkActor pointer + * \retval Return true if the actor belongs to the axis object + */ +bool VTKViewer_Axis::OwnActor(const vtkActor* theActor) +{ + return theActor == myLineActor || + theActor == myArrowActor || + theActor == myLabelActor; +} + /*! \class VTKViewer_XAxis * \brief X Axis actor */ @@ -425,11 +435,31 @@ int VTKViewer_Trihedron::GetVisibleActorCount(vtkRenderer* theRenderer) int aCount = 0; while(vtkActor* prop = aCollection->GetNextActor()) { if( prop->GetVisibility()) - if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(prop)) + if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(prop)) { if(!anActor->IsInfinitive()) - aCount++; + aCount++; + } + else if ( !OwnActor( anActor ) ) { + aCount++; + } //int aCount = theRenderer->VisibleActorCount(); //SetVisibility(aVis); } return aCount; } + +/*! Check if actor belongs to the axis object + * \param theActor - vtkActor pointer + * \retval Return true if the actor belongs to the axis object + */ +bool VTKViewer_Trihedron::OwnActor(const vtkActor* theActor) +{ + myPresent->InitTraversal(); + while(vtkActor* anActor = myPresent->GetNextActor()) { + if ( anActor == theActor ) return true; + } + for(int i = 0; i < 3; i++) { + if ( myAxis[i]->OwnActor(theActor) ) return true; + } + return false; +} diff --git a/src/VTKViewer/VTKViewer_Trihedron.h b/src/VTKViewer/VTKViewer_Trihedron.h index 69b7074a3..0d3b34561 100755 --- a/src/VTKViewer/VTKViewer_Trihedron.h +++ b/src/VTKViewer/VTKViewer_Trihedron.h @@ -31,9 +31,9 @@ class vtkProperty; class vtkPolyDataMapper; class vtkLineSource; class vtkConeSource; +class vtkVectorText; class VTKViewer_Axis; -class VTKViewer_VectorText; /*! \class vtkFollower * See vtk documentation @@ -112,7 +112,7 @@ protected: }; /*!This class provide support trihedron object in vtk viewer.*/ -class VTKVIEWER_EXPORT VTKVIEWER_EXPORT VTKViewer_Trihedron : public vtkObject +class VTKVIEWER_EXPORT VTKViewer_Trihedron : public vtkObject { protected: /*!Initialize fields by default values.*/ @@ -170,6 +170,12 @@ public: */ virtual int GetVisibleActorCount(vtkRenderer* theRenderer); + /*! Check if actor belongs to the trihedron object + * \param theActor - vtkActor pointer + * \retval Return true if the actor belongs to the trihedron object + */ + virtual bool OwnActor(const vtkActor* theActor); + protected: /*! Actor collection*/ vtkActorCollection* myPresent; @@ -234,6 +240,12 @@ public: * \retval Return myArrowActor */ virtual VTKViewer_UnScaledActor* GetArrow() { return myArrowActor; } + + /*! Check if actor belongs to the axis object + * \param theActor - vtkActor pointer + * \retval Return true if the actor belongs to the axis object + */ + virtual bool OwnActor(const vtkActor* theActor); protected: /*! Visibility flag. @@ -276,7 +288,7 @@ protected: /*! VTKViewer_VectorText pointer (Label) */ - VTKViewer_VectorText* myVectorText; + vtkVectorText* myVectorText; }; #endif diff --git a/src/VTKViewer/VTKViewer_Utilities.cxx b/src/VTKViewer/VTKViewer_Utilities.cxx index 5f061a64b..09b764236 100755 --- a/src/VTKViewer/VTKViewer_Utilities.cxx +++ b/src/VTKViewer/VTKViewer_Utilities.cxx @@ -214,3 +214,138 @@ ComputeTrihedronSize( vtkRenderer* theRenderer, return fabs( theNewSize - theSize) > theSize * EPS_SIZE || fabs( theNewSize-theSize ) > theNewSize * EPS_SIZE; } + +bool IsBBEmpty(vtkRenderer* theRenderer) +{ + if(!theRenderer) + return false; + + vtkFloatingPointType aNewBndBox[6]; + aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_LARGE_FLOAT; + aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_LARGE_FLOAT; + + // iterate through displayed objects and set size if necessary + vtkActorCollection* anActors = theRenderer->GetActors(); + anActors->InitTraversal(); + bool isAny = false; + while(vtkActor* anAct = anActors->GetNextActor()) + //if(SALOME_Actor* anActor = dynamic_cast(anAct)) + if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(anAct)) + if(anActor->GetVisibility() && !anActor->IsInfinitive()) + { + vtkFloatingPointType *aBounds = anActor->GetBounds(); + if(aBounds[0] > -VTK_LARGE_FLOAT && aBounds[1] < VTK_LARGE_FLOAT && + aBounds[2] > -VTK_LARGE_FLOAT && aBounds[3] < VTK_LARGE_FLOAT && + aBounds[4] > -VTK_LARGE_FLOAT && aBounds[5] < VTK_LARGE_FLOAT) + isAny = true; + } + + return !isAny; +} + +bool ComputeBBCenter(vtkRenderer* theRenderer, vtkFloatingPointType theCenter[3]) +{ + theCenter[0] = theCenter[1] = theCenter[2] = 0.0; + + if(!theRenderer) + return false; + + vtkFloatingPointType aNewBndBox[6]; + aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_LARGE_FLOAT; + aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_LARGE_FLOAT; + + // iterate through displayed objects and set size if necessary + vtkActorCollection* anActors = theRenderer->GetActors(); + anActors->InitTraversal(); + bool isAny = false; + while(vtkActor* anAct = anActors->GetNextActor()) + { + //if(SALOME_Actor* anActor = dynamic_cast(anAct)) + if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(anAct)) + { + if(anActor->GetVisibility() && !anActor->IsInfinitive()) + { + vtkFloatingPointType *aBounds = anActor->GetBounds(); + if(aBounds[0] > -VTK_LARGE_FLOAT && aBounds[1] < VTK_LARGE_FLOAT && + aBounds[2] > -VTK_LARGE_FLOAT && aBounds[3] < VTK_LARGE_FLOAT && + aBounds[4] > -VTK_LARGE_FLOAT && aBounds[5] < VTK_LARGE_FLOAT) + { + for(int i = 0; i < 5; i = i + 2){ + if(aBounds[i] < aNewBndBox[i]) + aNewBndBox[i] = aBounds[i]; + if(aBounds[i+1] > aNewBndBox[i+1]) + aNewBndBox[i+1] = aBounds[i+1]; + } + isAny = true; + } + } + } + } + + if ( !isAny ) + { + // null bounding box => the center is (0,0,0) + return true; + } + + if(aNewBndBox[0] > -VTK_LARGE_FLOAT && aNewBndBox[1] < VTK_LARGE_FLOAT && + aNewBndBox[2] > -VTK_LARGE_FLOAT && aNewBndBox[3] < VTK_LARGE_FLOAT && + aNewBndBox[4] > -VTK_LARGE_FLOAT && aNewBndBox[5] < VTK_LARGE_FLOAT) + { + static vtkFloatingPointType MIN_DISTANCE = 1.0 / VTK_LARGE_FLOAT; + + vtkFloatingPointType aLength = aNewBndBox[1]-aNewBndBox[0]; + aLength = max((aNewBndBox[3]-aNewBndBox[2]),aLength); + aLength = max((aNewBndBox[5]-aNewBndBox[4]),aLength); + + if(aLength < MIN_DISTANCE) + return false; + + vtkFloatingPointType aWidth = + sqrt((aNewBndBox[1]-aNewBndBox[0])*(aNewBndBox[1]-aNewBndBox[0]) + + (aNewBndBox[3]-aNewBndBox[2])*(aNewBndBox[3]-aNewBndBox[2]) + + (aNewBndBox[5]-aNewBndBox[4])*(aNewBndBox[5]-aNewBndBox[4])); + + if(aWidth < MIN_DISTANCE) + return false; + + theCenter[0] = (aNewBndBox[0] + aNewBndBox[1])/2.0; + theCenter[1] = (aNewBndBox[2] + aNewBndBox[3])/2.0; + theCenter[2] = (aNewBndBox[4] + aNewBndBox[5])/2.0; + return true; + } + + return false; + + /* + vtkFloatingPointType aBounds[6]; + int aCount = ComputeVisiblePropBounds(theRenderer,aBounds); + printf("aNewBndBox[0] = %f, aNewBndBox[1] = %f,\naNewBndBox[2] = %f, aNewBndBox[3] = %f,\naNewBndBox[4] = %f, aNewBndBox[5] = %f\n", + aBounds[0],aBounds[1],aBounds[2],aBounds[3],aBounds[4],aBounds[5]); + printf("aCount = %d\n",aCount); + + if(aCount){ + static vtkFloatingPointType MIN_DISTANCE = 1.0 / VTK_LARGE_FLOAT; + + vtkFloatingPointType aLength = aBounds[1]-aBounds[0]; + aLength = max((aBounds[3]-aBounds[2]),aLength); + aLength = max((aBounds[5]-aBounds[4]),aLength); + + if(aLength < MIN_DISTANCE) + return false; + + vtkFloatingPointType aWidth = + sqrt((aBounds[1]-aBounds[0])*(aBounds[1]-aBounds[0]) + + (aBounds[3]-aBounds[2])*(aBounds[3]-aBounds[2]) + + (aBounds[5]-aBounds[4])*(aBounds[5]-aBounds[4])); + + if(aWidth < MIN_DISTANCE) + return false; + + theCenter[0] = (aBounds[0] + aBounds[1])/2.0; + theCenter[1] = (aBounds[2] + aBounds[3])/2.0; + theCenter[2] = (aBounds[4] + aBounds[5])/2.0; + return true; + } + return false;*/ +} diff --git a/src/VTKViewer/VTKViewer_Utilities.h b/src/VTKViewer/VTKViewer_Utilities.h index 7ef9cc550..f9bd70e0f 100755 --- a/src/VTKViewer/VTKViewer_Utilities.h +++ b/src/VTKViewer/VTKViewer_Utilities.h @@ -47,4 +47,11 @@ ComputeTrihedronSize(vtkRenderer* theRenderer, const vtkFloatingPointType theSize, const vtkFloatingPointType theSizeInPercents); +VTKVIEWER_EXPORT +extern +bool IsBBEmpty(vtkRenderer* theRenderer); +VTKVIEWER_EXPORT +extern +bool ComputeBBCenter(vtkRenderer* theRenderer, + vtkFloatingPointType theCenter[3]); #endif diff --git a/src/VTKViewer/VTKViewer_VectorText.cxx b/src/VTKViewer/VTKViewer_VectorText.cxx index 5ec7a8c58..88f4d95fb 100755 --- a/src/VTKViewer/VTKViewer_VectorText.cxx +++ b/src/VTKViewer/VTKViewer_VectorText.cxx @@ -30,9 +30,8 @@ This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. + PURPOSE. See the above copyright notice for more information.*/ -=========================================================================*/ // VTKViewer_VectorText.cxx is a copy of vtkVectorText.cxx file. // Purpose of copying: to remove linking to libHybrid.so VTK library diff --git a/src/VTKViewer/VTKViewer_VectorText.h b/src/VTKViewer/VTKViewer_VectorText.h index 5838f6a1d..347757082 100755 --- a/src/VTKViewer/VTKViewer_VectorText.h +++ b/src/VTKViewer/VTKViewer_VectorText.h @@ -30,9 +30,8 @@ This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. + PURPOSE. See the above copyright notice for more information.*/ -=========================================================================*/ // .NAME vtkVectorText - create polygonal text // .SECTION Description @@ -76,7 +75,9 @@ protected: VTKViewer_VectorText(); ~VTKViewer_VectorText(); - void Execute(); + //! Main method, which calculate output + virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); + char *Text; char *Letters[127]; diff --git a/src/VTKViewer/VTKViewer_ViewManager.cxx b/src/VTKViewer/VTKViewer_ViewManager.cxx index d67c92d1e..a206be6ee 100755 --- a/src/VTKViewer/VTKViewer_ViewManager.cxx +++ b/src/VTKViewer/VTKViewer_ViewManager.cxx @@ -19,16 +19,13 @@ #include "VTKViewer_ViewManager.h" #include "VTKViewer_ViewModel.h" -int VTKViewer_ViewManager::_VTKViewMgr_Id = 0; - /*!Constructor.Initialize SIUT_ViewManager by \a study and \a theDesktop. * Create new instance of VTKViewer_Viewer and set view model by it. */ VTKViewer_ViewManager::VTKViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop ) -: SUIT_ViewManager( study, theDesktop ) +: SUIT_ViewManager( study, theDesktop, new VTKViewer_Viewer() ) { - myId = ++_VTKViewMgr_Id; - setViewModel( new VTKViewer_Viewer() ); + setTitle( tr( "VTK_VIEW_TITLE" ) ); } /*!Destructor.*/ @@ -36,10 +33,3 @@ VTKViewer_ViewManager::~VTKViewer_ViewManager() { /*!Do nothing.*/ } - -/*!Sets view window name*/ -void VTKViewer_ViewManager::setViewName(SUIT_ViewWindow* theView) -{ - int aPos = myViews.find(theView); - theView->setCaption( tr( "VTK_VIEW_TITLE" ).arg( myId ).arg( aPos + 1 ) ); -} diff --git a/src/VTKViewer/VTKViewer_ViewManager.h b/src/VTKViewer/VTKViewer_ViewManager.h index 49d9a26c8..38518fe06 100755 --- a/src/VTKViewer/VTKViewer_ViewManager.h +++ b/src/VTKViewer/VTKViewer_ViewManager.h @@ -33,13 +33,6 @@ class VTKVIEWER_EXPORT VTKViewer_ViewManager : public SUIT_ViewManager public: VTKViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* ); virtual ~VTKViewer_ViewManager(); - -protected: - void setViewName( SUIT_ViewWindow* theView ); - -private: - int myId; - static int _VTKViewMgr_Id; }; #endif diff --git a/src/VTKViewer/VTKViewer_ViewModel.cxx b/src/VTKViewer/VTKViewer_ViewModel.cxx index 9653aeacf..f611972ae 100755 --- a/src/VTKViewer/VTKViewer_ViewModel.cxx +++ b/src/VTKViewer/VTKViewer_ViewModel.cxx @@ -31,6 +31,17 @@ #include #include +bool _InitializeVtkWarningsCall() +{ + char* isOn = getenv( "VTK_WARNINGS_IS_ON" ); + if ( !isOn || strcmp( isOn, "1" ) ) + vtkObject::GlobalWarningDisplayOff(); + + delete isOn; + return vtkObject::GetGlobalWarningDisplay(); +} +static bool _InitializeVtkWarnings = _InitializeVtkWarningsCall(); + /*!Constructor.Sets background color to black.*/ VTKViewer_Viewer::VTKViewer_Viewer() : SUIT_ViewModel(), diff --git a/src/VTKViewer/VTKViewer_ViewWindow.cxx b/src/VTKViewer/VTKViewer_ViewWindow.cxx index aba392028..e885ed8cc 100755 --- a/src/VTKViewer/VTKViewer_ViewWindow.cxx +++ b/src/VTKViewer/VTKViewer_ViewWindow.cxx @@ -131,7 +131,7 @@ VTKViewer_ViewWindow::~VTKViewer_ViewWindow() myRWInteractor->Delete(); //m_RW->Delete() ; - myRenderer->RemoveAllProps(); + myRenderer->RemoveAllViewProps(); //m_Renderer->Delete() ; myTrihedron->Delete(); } @@ -455,8 +455,8 @@ void VTKViewer_ViewWindow::onAdjustTrihedron(){ (bnd[5]-bnd[4])*(bnd[5]-bnd[4])); }else{ aLength = bnd[1]-bnd[0]; - aLength = max((bnd[3]-bnd[2]),aLength); - aLength = max((bnd[5]-bnd[4]),aLength); + aLength = std::max((bnd[3]-bnd[2]),aLength); + aLength = std::max((bnd[5]-bnd[4]),aLength); } static vtkFloatingPointType aSizeInPercents = 105; diff --git a/src/VTKViewer/resources/VTKViewer_images.po b/src/VTKViewer/resources/VTKViewer_images.po index 0f618ddc5..895766a66 100755 --- a/src/VTKViewer/resources/VTKViewer_images.po +++ b/src/VTKViewer/resources/VTKViewer_images.po @@ -62,6 +62,9 @@ msgstr "view_reset.png" msgid "ICON_VTKVIEWER_VIEW_RIGHT" msgstr "view_right.png" +msgid "ICON_VTKVIEWER_VIEW_ROTATION_POINT" +msgstr "view_rotation_point.png" + msgid "ICON_VTKVIEWER_VIEW_ROTATE" msgstr "view_rotate.png" diff --git a/src/VTKViewer/resources/VTKViewer_msg_en.po b/src/VTKViewer/resources/VTKViewer_msg_en.po index e98a1dc3c..ea26f2678 100755 --- a/src/VTKViewer/resources/VTKViewer_msg_en.po +++ b/src/VTKViewer/resources/VTKViewer_msg_en.po @@ -141,7 +141,7 @@ msgid "VTKViewer_Viewer::MEN_CHANGE_BACKGROUD" msgstr "Change background..." msgid "VTKViewer_ViewManager::VTK_VIEW_TITLE" -msgstr "VTK scene:%1 - viewer:%2" +msgstr "VTK scene:%M - viewer:%V" msgid "MNU_SHOW_TRIHEDRON" msgstr "Show/Hide trihedron" diff --git a/src/VTKViewer/resources/view_rotation_point.png b/src/VTKViewer/resources/view_rotation_point.png new file mode 100755 index 0000000000000000000000000000000000000000..59f59311bc5105d7ba1246598d169259af3bf8c7 GIT binary patch literal 988 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 KXsxh8;Qs=cx3J#; literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/image100.gif b/doc/salome/gui/GUI/images/image100.gif new file mode 100644 index 0000000000000000000000000000000000000000..c44d68ffc6b0d3f5616c278d151d300e5e732579 GIT binary patch literal 1040 zcmZ?wbh9u|lwgox_|5ILrGiT1yrAybYUAuMb*1dc89y@mI`Sa)R-@pI<{rms_ z4F7?66pV(za0~$*kf%U-fq~;IgCvK{iUkV}vTz71MVu&5aBOB3)=JrNVWC5ZpsLz} zh>J>YtlTC=E(sGEkFjd-N;p_-QgLBm7ZaGUbJNn}O$CL9cE5o)NQ+k5}Yh^>p>d`OT6N z8V`zB+}g*=v4L0j*UNyTjiJqA(jw~DS9+#ju3MpC^mv`AX zcI225GA*LWI>sV*v?@zEmr2Jn-|fHHANKV;uixL#>v`UeI0uWfA+A6XAOd~>hr{LN zE!U<}w(Jii!$0o6Y5N z`Fy@WAb9cO#qjX(Y-ou|+8Rht0%w&9F)xSPK zKzcRCZj&Zk4x9&H16bVIhNH)wYuuH&K{o?x$wB2yG^kYKhLi-Iw&B~8DV9*qZ9O^5 zkJ;Cim>buif=d-w7_ll{StBePCyBL^=4l#`Tiv>bGFuU*9`-%erkV(Wz+{!WG-9Jc zFbxghO4rP8WMh$vVy+qp3P?i@sni9_n^_b5kydlr*3-VzoRr_iN%=&p{hhqL9EXJ` zyzT8ljNN_LE~~xaRU3;vsgU)Qop&Mh*_b^^vo3I7t)nXRP`^FMzs0zCBB=qT+zk!I z9C?uLX8(SPxbEMlNmRmaPWXNo>b%YN_co$Ijb6aDGgTLQwS1Jl(B1h~>lTv)gN4sZ z1ibO#O1kBt{h~sw?6hYg#$0lu$jJf8cEykNF5mTh1!cQ9lK&)lQM_T*r8tVlT}nva zu6o(Y+Fid(a@XZc{)gx}$|(zP4v)wVS;Yl}1ZQMU-CvYky%Uz(5zdKdVkV7-!(_Uq ztJHe-W*%naNk?r#os6J}{=+9!Ifc*KXJES+G&M$+D%My8!4v2+(6U1O6^U}?$=bRY z7r++MIW1)iQlT2rU;vg1gf+TM%=2#Dkm`YfsqQqej1irf1Q?>J2W~bcm$p+~Z@agG z5`Z3w+C%hT0&DHN(Cw+I@K9f5-EAiOxhfqEf!M`jV)zZ0(apbfvtOqj9Q#~dRr4uj zil}n=igsVo>eKsC5#&z7Exqlmh<+`^a#gMgJ}Ueb_}x@kflZ90Db|a$zdht%#xwoR z8j`U+1c4n~9<|$Hw2WXCqj^I(gP{l};d=%7f=)6guF~q_*$)B11MEBTU4ia5U+n&Gsrn1gpjoNuIg4$^)m2W8NivES@hi{#x+B5i~xiP?n^36Eh<+(F?@;h;8>y_ciXN_^YL93PmWi>(ExLd$T z+`bSZ;En#Fmv`f<>*LeUw!;TUQonh6MxX2RE1A>X^e`xUeGaP9B;2^ZU*tpnkDf^{ zz4~XmW$@zLJw73B9m@buVNN9?B~kgYb>O?30Q98v-cUNnQm$T>gIIubK&N>>{ao<} z^^M`;S-X7=DQ(}TR(K@2-C zMUN-6sDoQpTZABaYmVac-r-AO<>S9vXrG5@uArl#+LCeLs&l&;m|u%nl`~bxq&3~n zcbBtXc7RPj<3{YpEt#60nSzh)hN)UR3nEghjlICFAg$v#WbFg{1m;eWsc>5F&=k(& z)HZ3a{*vyFEnlXF;P%~8C^nKD1W{_JEz-fx3T-94tq>)9fHk|#Ly0qS2mXj<{ zAxn|>)^o02@>A$@#>B^3$}FKxVyTcLT^T@dm$Y&6(94tVOb8M!fu_^I^eyJI)t?kS z;SK$rio^niYLtse?DSW^qYgs8SZ#oL8eAp3Sb7VPkXdvQaNnbsm**AKsg5NuazP(r zZmZSD8B^Ir=h^-K7v4wUaiXr!Fl8Bu(j8!Wj6EuL)^Yar$5(S1j0e1{SmC3AoG~-b z$JyFaN}W?JznNsp)$#pSLgVi9iph}Kdt)_DK6~pG9SN*+);GP|tlvkjwX;+WU^LXQ zkf~_0wAj;O|2aX!%Zgd;Z~4f_=FgWUGrho0g=xJ+Fb8Cz77?~OQ`Ru1>nA``R~y6b zkw}iW0{3P3U;Lj&p(1WWxS<{m*NzA`J}9*Y$-|0I>W&ga0%K literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/image103.gif b/doc/salome/gui/GUI/images/image103.gif new file mode 100644 index 0000000000000000000000000000000000000000..be534c39ed6e4fcb2c89d35d36d61fe594218977 GIT binary patch literal 1046 zcmZ?wbh9u|lwy!z_|5d-onYcI@80d(WRg zfB*jd_wV2T|7Z9Q#G_y|1cp%v=z#nJ$_oq}zZv8?WNs{2;K;@ytQT=2;NXFFHhwji z6B`~LZe(O)Us&o|{w7Phx74yWlxxxhEs1kVb0M#ut}YFmTCOJa9-1Zgk5PyKw5OdeeNqRhxLM z%3d=vaLPz%Bs^H&$jqH-XJIhyO(UCaVOFVu*?Z^h(aKCKtP>orF|lw-?E9gRbZ`wH zn+Su#^mk9Xr!nTc{SJPe-Z9NwN}*vU10(Zt&Zx8klh+L=HnO&*9hhF4e0D>4(7oP- ky!f>oMd9<#G8|-l%r;5;zHP|cf@dMRas3@d=?)Cm0A1#YBme*a literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/image105.gif b/doc/salome/gui/GUI/images/image105.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f6173f828f6a0cc9c921e2241ad06185d1d8f45 GIT binary patch literal 1038 zcmZ?wbh9u|lwy!%_|5OSa6V)Ls%=~gu%fB?QHyNE+;lT zbZ!!q^jQ)S*m$^`Pb%fkjs=U|C-4TzdE9JRaY<8Ry z84e8x&h;6vGVRcGU}#vx+@s}E^)Zu~k%i&HmdY(jLG1opH>s>DUUhwyH+zJv!2*Zy z?u=Tyvs&Br76my!9W5G3^O~x literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/image106.gif b/doc/salome/gui/GUI/images/image106.gif new file mode 100644 index 0000000000000000000000000000000000000000..2bbcb4d94f3cc0890a91aac9e669445ba6907579 GIT binary patch literal 984 zcmZ?wbh9u|lx2`&_|5utp~0;~#C&ZJ=OiCHcI@7<;^*(5zZVdA ze@@{2dmwuM9SHt^|Ns9#Sl=iy8UjN;1av??0ObV+j^7N*95Nmo794Em5Y~!0v0>ri zb^&2A1&50YN4v#UJYUOkF`ntlePj2op6-$PO3#=@wfRWX);r6ku=eCG9tM#UvrE+DcRALINz4g<>9)^aR9`J- zhtAVId`8v*U4qJ|&as$uU*nm6z^jj8Ls^Pt)RxCrrOlVwIW(B%GOzVK?zdsLdH%JX q#`11uUE?E>Tf$3& z=Xwbnv_?(I3R)W6|IDOnYxemyu{)U>v=}sQY_#C!i8x)x(6G%h-^@3?QRc@nKf*@NOqh;i3$yZT^P`+Pv+^?%aWUVT-yOwuBWC&~n z|F;d`0YCx+E3BYk3Mf2`1cOD$U=kSu216haW-ytV0*P)WW24N>PzpFQiky#8z|(LF z5p-N)7aoVhE6^n*h0+x=nH-_OmD5ltT0{hmMoUDY5;2&>#KbfVCM_+EPN(PR=a=Ge zrKP1T7K@F?v&m#Oo6Y5NTU%SZ*tD*$uED`U5gsoRi6nTuL?W5N<7Z|hGcz+%5=kmb zlS-v4c<>5~wW1(fk-=ax5=kb3$z+O=Z7ayPT@7F%OjKC($kKgBvT}2W~jQu+6CMs+w z&5;wG+($PY^g&D%yu`oI`QG7QGM^M&zU&?c*>p{dE=3S@rIz5DcuMY(FP8aKLhaM~ zuT7Wro^jNtoA>sYd||{ge_Xs5a7ErF}^v&vVA+hQ-xZo$j%c$2H;SZ|7WSm=p%bM^Lcm;8w;r$^HHy&$B~bQ+jYA?z}Wq zzAp;1Sb*rBQZ6*k=vAd*g|VabjkyJCk-xisttQ4PbhOwQ1Y%I_TZ#~+aJQx0 zA|Mj1R=Sejby%B_RbWwgD*g1GI9s8^Xt{3KtR8*l{wx)44=m>D9-RjSYWmrpBkCZ= z0v>Miys$di)B_B_iN?W7tR&Ghiy~#zy_GwAKfGQ-|S z1!}W{uFYJXi`6R^A(yLArG9uwbTaxw`@v3^*Bw|UJpsz0MjX4~j*Mw;$kRBqs_8o5 z8`^6B2_k5E^5-v!P)8^3``)arCzR!6H`8(-}Z-3vm^kO})VYS$;V;Hm-Q1Vu5 zKfBF&zeU^J{x5g^_bA1foOs@hqNOtIW2#m4h=PtCWtQul)5#Xw7r!YexM_q zw}8_b;(h#F`!c%GcM|BmTlRo~Uoy%Duv)?MZwK)_KgW|Ru_JEt+%Vydhu=L5{eeslNz8CRf6osxd%)2WvHQQO;_TdHb9 zD5~0awArh#2*X`D?MaqKrs`u$dIoP2|3gnThR6?3<=PysQQ6?VQe7MCn-?slz1%Sc zuBPxf@0%D6NA%v+ST%v_0WhkOp=y1hGs0lGFjd#6QDRZWKjBL@Tc5}>CR7>%NRUVH z3m|xmUp%}PXZlUVg|MkX=+0_k5bR1UE5wIIZSnSa`}|RK3C(b&-n+)YE6%QWxDZNJ zZmSLXNGrtz!X^d z1^oz4u~MGXn@aMDcbgIh1$x;qJhqQ3zT#S1U`J_0tKl&lI1`f#5^!Don0RvKS#qVh z(QzlR^C{;F%v7TEOP$$nj|98QS9MiLcglEJ(neSfD!$GmMz;?d<85^Njb}sOhoq~tu3P@#r@EkuPn!yr>a4&iuSWjh8&}#yIo!b_>U#&NlMz=8#czy7OJ!)1-=$`%(9t zx-YsnIlab4_DQC#rcT&X41#jBev1Ob!Aj~TDFAS$M#WZeCdM0woCl)(`^;b`l^h~| zzO}^~fH_bKS+_4f6*@|f*OLgO$bAVnEI)u&>4 z%nO>ZJB@u|=;SEyx~As-+b+6t>ZVpkJ!a{xujvm@x40c0Ty{8g-(S2h_t*0mA@OlV zab=HBet?~K$P0atrH1{K9C^+`lIqeRh`wa4@X+oe>}s#jI^YlHo>O4NV^>je%^zj--PcI% hzH#4x_3x{9-`Hpe_KCwK>(~2tm+Y?MJptg*e*p-eHLCys literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/image54.jpg b/doc/salome/gui/GUI/images/image54.jpg similarity index 100% rename from doc/salome/gui/GUI/image54.jpg rename to doc/salome/gui/GUI/images/image54.jpg diff --git a/doc/salome/gui/GUI/image65.gif b/doc/salome/gui/GUI/images/image65.gif similarity index 100% rename from doc/salome/gui/GUI/image65.gif rename to doc/salome/gui/GUI/images/image65.gif diff --git a/doc/salome/gui/GUI/image67.gif b/doc/salome/gui/GUI/images/image67.gif similarity index 100% rename from doc/salome/gui/GUI/image67.gif rename to doc/salome/gui/GUI/images/image67.gif diff --git a/doc/salome/gui/GUI/image69.gif b/doc/salome/gui/GUI/images/image69.gif similarity index 100% rename from doc/salome/gui/GUI/image69.gif rename to doc/salome/gui/GUI/images/image69.gif diff --git a/doc/salome/gui/GUI/image70.gif b/doc/salome/gui/GUI/images/image70.gif similarity index 100% rename from doc/salome/gui/GUI/image70.gif rename to doc/salome/gui/GUI/images/image70.gif diff --git a/doc/salome/gui/GUI/image72.gif b/doc/salome/gui/GUI/images/image72.gif similarity index 100% rename from doc/salome/gui/GUI/image72.gif rename to doc/salome/gui/GUI/images/image72.gif diff --git a/doc/salome/gui/GUI/image73.gif b/doc/salome/gui/GUI/images/image73.gif similarity index 100% rename from doc/salome/gui/GUI/image73.gif rename to doc/salome/gui/GUI/images/image73.gif diff --git a/doc/salome/gui/GUI/image75.gif b/doc/salome/gui/GUI/images/image75.gif similarity index 100% rename from doc/salome/gui/GUI/image75.gif rename to doc/salome/gui/GUI/images/image75.gif diff --git a/doc/salome/gui/GUI/images/image77.gif b/doc/salome/gui/GUI/images/image77.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef7a62f32ecc9c77d60f6cc09e7188eb81c4dd2b GIT binary patch literal 1022 zcmZ?wbh9u|lwy!%_|5{{8#!K=A+j|NjjCfp`>*hQJUE0UeN=L3x3J<1vFi zhm6OD1qYisgtcN$Y*=`>T|n6@CSu{DqurvyDhEz%WNPhKaFkk5u)wjAnVqX8=H#S9 zO-yV&bEae}ENx`hjg;GPp!i@TyN&LQlm`sy=lYpA1SA*^9%5L^!om~a@a2U&0~41< ztLB32Fcxm9h@}l*Ra%&t_tf!PZ+pW$C2+48gZ8zon=>&-kkn#8!pM*}pgoaH`tP3PfDhg(PWM=1;$OyZ;p!DLUrT*p> hyt}u(y}d))`^MSb+uz^cr_3Smw`a%4M~sXN)&K>ViW2|; literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/image86.gif b/doc/salome/gui/GUI/images/image86.gif new file mode 100644 index 0000000000000000000000000000000000000000..339733193ef3faf4e1ff413ba156f244f33f5502 GIT binary patch literal 1017 zcmZ?wbh9u|lwpu%_|5$6Dudv zACr|^)Pv`9&SPTjn)r%gwe#GxyI$L#g)d4J_cP_b_QGuv7xRj(H@7Ws*v&M@iTA+t z^@pZ~@p8!7EZA_PwdnsXnKcO;k`E?rot66MhT++EUCr>e9+SsO2Yb!Ak9qIILrGiT1yrAybYUAuMb*1dc89y@mIIS{;m{{H>@??CYX z`~Uw8|ABZEjE2DQ3IQFEcR+c8f#WQLEQgH8h6M+kIfS)hPHb3sxLrWltfON?qboC; zOvIdy36015YpwZklc&&M@O^xUw0u+|{&u8E;;ZSHu zzrg6q`6ouJ_&~s9wx($+7ba^4EN5IGW>9&lA#{NgtAIj5LQ3PR_+&QL4IAH{+LF~Q zwpa7YGtV6c>96K?URf4CpNolGY)@!IA_Jq4v+S828yhFZd-qfBsR6N$$N;* zP+)B87T{%C5%JN%t%<=btmQ!A!sf~9&a2kEP;m6_)=0L>aG1Qzi-9-9%wxmm1B@&} z*<5QY7dV`lV_Eo)$7)Mv;8G8BubKb`$IA;j7AT#K3~V^R+IgW}$1DX01}3%xT&xF7 zULIqJ<6n_$5So2r6C+y)>+NqVZf`1_Z6x7SVZgLl`|K;%fE^njFJg9@)%$vfQ6h^! zJBL8Sw2e=X@pCY1crEyxenCiIS|j1W=a+{T>dXK5xog{7)*Z#K@13pQ-gN&!Gq=3n KpT&n77_0&5X@{Et literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/image91.gif b/doc/salome/gui/GUI/images/image91.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e93c1c720f198df9a35fa5f0cc90246341a5d08 GIT binary patch literal 1010 zcmZ?wbh9u|lwy!#_|5d-onYcI-J2ynp`w z{rm4g@c;Y&{|x_ucod9=z;Fox9gs&rd4YlBI)fsIjK_ur2b(#BwPH?eSm@lwFQ-=H zAjo*MLr9UqjWIKpPcU2 zWLuHL@Hure6O)DA1ItghH_Ho7i90*%VAJ&t$*1S(MmN5_y`%W`xw(dk4h+@+U?hNy literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/image94.gif b/doc/salome/gui/GUI/images/image94.gif similarity index 100% rename from doc/salome/gui/GUI/image94.gif rename to doc/salome/gui/GUI/images/image94.gif diff --git a/doc/salome/gui/GUI/images/image95.gif b/doc/salome/gui/GUI/images/image95.gif new file mode 100644 index 0000000000000000000000000000000000000000..fb293e23475a5b23151773b875982f47d76a505c GIT binary patch literal 2711 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 QD!+evlt1r{gaCsz0F~i_6#xJL literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/import.png b/doc/salome/gui/GUI/images/import.png new file mode 100755 index 0000000000000000000000000000000000000000..093c667f2c6424e7cfbaefddd663d00ccacc0047 GIT binary patch literal 34672 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 KMNUMnLSTY#DxSLl literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/loadstudy2.png b/doc/salome/gui/GUI/images/loadstudy2.png new file mode 100755 index 0000000000000000000000000000000000000000..595ea0528410f67c2228806613f7daffff88e4ff GIT binary patch literal 8181 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GUI/images/lockedstudy.png b/doc/salome/gui/GUI/images/lockedstudy.png new file mode 100755 index 0000000000000000000000000000000000000000..9ec7e744ba90f96b3cf92f1acd5c382b861a23af GIT binary patch literal 6140 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